Compare commits

..
13 changed files with 526 additions and 765 deletions

No files matched your search

+1 -1
View File
@@ -1,4 +1,3 @@
string.c
am_map.c
b_bot.c
command.c
@@ -43,6 +42,7 @@ s_sound.c
screen.c
sounds.c
st_stuff.c
string.c
tables.c
v_video.c
w_wad.c
-27
View File
@@ -144,7 +144,6 @@ static void Command_Addfile(void);
static void Command_Addskins(void);
static void Command_GLocalSkin(void);
static void Command_ListWADS_f(void);
static void Command_LocateLump_f(void);
static void Command_ListDoomednums_f(void);
static void Command_ListUnusedSprites_f(void);
static void Command_RunSOC(void);
@@ -639,7 +638,6 @@ void D_RegisterServerCommands(void)
COM_AddCommand("addfile", Command_Addfile);
COM_AddCommand("addskins", Command_Addskins);
COM_AddCommand("listwad", Command_ListWADS_f);
COM_AddCommand("locatelump", Command_LocateLump_f);
COM_AddCommand("listmapthings", Command_ListDoomednums_f);
COM_AddCommand("listunusedsprites", Command_ListUnusedSprites_f);
@@ -4724,31 +4722,6 @@ static void Command_ListWADS_f(void)
}
}
static void Command_LocateLump_f(void)
{
if (COM_Argc() == 1)
{
CONS_Printf("Usage: locatelump <lump1>[ <lump2>[ ...]]\n");
return;
}
for (size_t i = 1; i < COM_Argc(); ++i)
{
const char *name = COM_Argv(i);
lumpnum_t num = W_CheckNumForName(name);
const char *wadname = "(not found)";
if (num != LUMPERROR)
{
wadname = wadfiles[WADFILENUM(num)]->filename;
}
CONS_Printf("%s - %s\n", name, wadname);
}
}
#define MAXDOOMEDNUM 4095
static void Command_ListDoomednums_f(void)
+1 -1
View File
@@ -110,7 +110,7 @@ extern char logfilename[1024];
#define VERSIONSTRING "Saturn v9.2"
#define VERSIONSTRINGW L"Saturn v9.2"
//#define SATURN_TESTING // comment out for saturn release builds!
#define SATURN_TESTING // comment out for saturn release builds!
// Hey! If you change this, add 1 to the MODVERSION below! Otherwise we can't force updates!
// And change CMakeLists.txt (not src/, but in root), for CMake users!
+1 -1
View File
@@ -542,7 +542,7 @@ extern mapthing_t *redctfstarts[MAXPLAYERS]; // CTF
#else
#define DEBUGFILE
#ifdef DEBUGFILE
#define DEBFILE(msg) { if (UNLIKELY(debugfile)) { fputs(msg, debugfile); fflush(debugfile); } }
#define DEBFILE(msg) { if (debugfile) { fputs(msg, debugfile); fflush(debugfile); } }
#else
#define DEBFILE(msg) {}
#endif
+83 -342
View File
@@ -144,10 +144,6 @@ typedef struct
UINT8 clicks;
} dclick_t;
static dclick_t mousedclicks[MOUSEBUTTONS];
static dclick_t joydclicks[JOYBUTTONS + JOYHATS*4];
static dclick_t joy2dclicks[JOYBUTTONS + JOYHATS*4];
static dclick_t joy3dclicks[JOYBUTTONS + JOYHATS*4];
static dclick_t joy4dclicks[JOYBUTTONS + JOYHATS*4];
// protos
static UINT8 G_CheckDoubleClick(UINT8 state, dclick_t *dt);
@@ -238,30 +234,6 @@ void G_MapEventsToControls(event_t *ev)
flag = G_CheckDoubleClick(gamekeydown[KEY_MOUSE1+i], &mousedclicks[i]);
gamekeydown[KEY_DBLMOUSE1+i] = flag;
}
for (i = 0; i < JOYBUTTONS + JOYHATS*4; i++)
{
flag = G_CheckDoubleClick(gamekeydown[KEY_JOY1+i], &joydclicks[i]);
gamekeydown[KEY_DBLJOY1+i] = flag;
}
for (i = 0; i < JOYBUTTONS + JOYHATS*4; i++)
{
flag = G_CheckDoubleClick(gamekeydown[KEY_2JOY1+i], &joy2dclicks[i]);
gamekeydown[KEY_DBL2JOY1+i] = flag;
}
for (i = 0; i < JOYBUTTONS + JOYHATS*4; i++)
{
flag = G_CheckDoubleClick(gamekeydown[KEY_3JOY1+i], &joy3dclicks[i]);
gamekeydown[KEY_DBL3JOY1+i] = flag;
}
for (i = 0; i < JOYBUTTONS + JOYHATS*4; i++)
{
flag = G_CheckDoubleClick(gamekeydown[KEY_4JOY1+i], &joy4dclicks[i]);
gamekeydown[KEY_DBL4JOY1+i] = flag;
}
}
void G_ResetControls(void)
@@ -337,19 +309,19 @@ static keyname_t keynames[] =
// keypad keys
{KEY_KPADSLASH, "KEYPAD /"},
{KEY_KEYPAD7, "KEYPAD 7"},
{KEY_KEYPAD8, "KEYPAD 8"},
{KEY_KEYPAD9, "KEYPAD 9"},
{KEY_MINUSPAD, "KEYPAD -"},
{KEY_KEYPAD4, "KEYPAD 4"},
{KEY_KEYPAD5, "KEYPAD 5"},
{KEY_KEYPAD6, "KEYPAD 6"},
{KEY_PLUSPAD, "KEYPAD +"},
{KEY_KEYPAD1, "KEYPAD 1"},
{KEY_KEYPAD2, "KEYPAD 2"},
{KEY_KEYPAD3, "KEYPAD 3"},
{KEY_KEYPAD0, "KEYPAD 0"},
{KEY_KPADDEL, "KEYPAD ."},
{KEY_KEYPAD7, "KEYPAD 7"},
{KEY_KEYPAD8, "KEYPAD 8"},
{KEY_KEYPAD9, "KEYPAD 9"},
{KEY_MINUSPAD, "KEYPAD -"},
{KEY_KEYPAD4, "KEYPAD 4"},
{KEY_KEYPAD5, "KEYPAD 5"},
{KEY_KEYPAD6, "KEYPAD 6"},
{KEY_PLUSPAD, "KEYPAD +"},
{KEY_KEYPAD1, "KEYPAD 1"},
{KEY_KEYPAD2, "KEYPAD 2"},
{KEY_KEYPAD3, "KEYPAD 3"},
{KEY_KEYPAD0, "KEYPAD 0"},
{KEY_KPADDEL, "KEYPAD ."},
// extended keys (not keypad)
{KEY_HOME, "HOME"},
@@ -364,15 +336,15 @@ static keyname_t keynames[] =
{KEY_DEL, "DEL"},
// other keys
{KEY_F1, "F1"},
{KEY_F2, "F2"},
{KEY_F3, "F3"},
{KEY_F4, "F4"},
{KEY_F5, "F5"},
{KEY_F6, "F6"},
{KEY_F7, "F7"},
{KEY_F8, "F8"},
{KEY_F9, "F9"},
{KEY_F1, "F1"},
{KEY_F2, "F2"},
{KEY_F3, "F3"},
{KEY_F4, "F4"},
{KEY_F5, "F5"},
{KEY_F6, "F6"},
{KEY_F7, "F7"},
{KEY_F8, "F8"},
{KEY_F9, "F9"},
{KEY_F10, "F10"},
{KEY_F11, "F11"},
{KEY_F12, "F12"},
@@ -393,6 +365,16 @@ static keyname_t keynames[] =
{KEY_MOUSEWHEELUP, "Wheel 1 UP"},
{KEY_MOUSEWHEELDOWN, "Wheel 1 Down"},
// mouse double clicks count as a seperate input yes
{KEY_DBLMOUSE1+0, "DBLMOUSE1"},
{KEY_DBLMOUSE1+1, "DBLMOUSE2"},
{KEY_DBLMOUSE1+2, "DBLMOUSE3"},
{KEY_DBLMOUSE1+3, "DBLMOUSE4"},
{KEY_DBLMOUSE1+4, "DBLMOUSE5"},
{KEY_DBLMOUSE1+5, "DBLMOUSE6"},
{KEY_DBLMOUSE1+6, "DBLMOUSE7"},
{KEY_DBLMOUSE1+7, "DBLMOUSE8"},
{KEY_JOY1+0, "JOY1"},
{KEY_JOY1+1, "JOY2"},
{KEY_JOY1+2, "JOY3"},
@@ -402,10 +384,9 @@ static keyname_t keynames[] =
{KEY_JOY1+6, "JOY7"},
{KEY_JOY1+7, "JOY8"},
{KEY_JOY1+8, "JOY9"},
#if !defined (NOMOREJOYBTN_1S)
// we use up to 32 buttons in DirectInput
{KEY_JOY1+9, "JOY10"},
{KEY_JOY1+9, "JOY10"},
{KEY_JOY1+10, "JOY11"},
{KEY_JOY1+11, "JOY12"},
{KEY_JOY1+12, "JOY13"},
@@ -430,16 +411,16 @@ static keyname_t keynames[] =
{KEY_JOY1+31, "JOY32"},
#endif
// the DOS version uses Allegro's joystick support
{KEY_HAT1+0, "HATUP"},
{KEY_HAT1+1, "HATDOWN"},
{KEY_HAT1+2, "HATLEFT"},
{KEY_HAT1+3, "HATRIGHT"},
{KEY_HAT1+4, "HATUP2"},
{KEY_HAT1+5, "HATDOWN2"},
{KEY_HAT1+6, "HATLEFT2"},
{KEY_HAT1+7, "HATRIGHT2"},
{KEY_HAT1+8, "HATUP3"},
{KEY_HAT1+9, "HATDOWN3"},
{KEY_HAT1+0, "HATUP"},
{KEY_HAT1+1, "HATDOWN"},
{KEY_HAT1+2, "HATLEFT"},
{KEY_HAT1+3, "HATRIGHT"},
{KEY_HAT1+4, "HATUP2"},
{KEY_HAT1+5, "HATDOWN2"},
{KEY_HAT1+6, "HATLEFT2"},
{KEY_HAT1+7, "HATRIGHT2"},
{KEY_HAT1+8, "HATUP3"},
{KEY_HAT1+9, "HATDOWN3"},
{KEY_HAT1+10, "HATLEFT3"},
{KEY_HAT1+11, "HATRIGHT3"},
{KEY_HAT1+12, "HATUP4"},
@@ -447,79 +428,6 @@ static keyname_t keynames[] =
{KEY_HAT1+14, "HATLEFT4"},
{KEY_HAT1+15, "HATRIGHT4"},
{KEY_DBLMOUSE1+0, "DBLMOUSE1"},
{KEY_DBLMOUSE1+1, "DBLMOUSE2"},
{KEY_DBLMOUSE1+2, "DBLMOUSE3"},
{KEY_DBLMOUSE1+3, "DBLMOUSE4"},
{KEY_DBLMOUSE1+4, "DBLMOUSE5"},
{KEY_DBLMOUSE1+5, "DBLMOUSE6"},
{KEY_DBLMOUSE1+6, "DBLMOUSE7"},
{KEY_DBLMOUSE1+7, "DBLMOUSE8"},
{KEY_DBLJOY1+0, "DBLJOY1"},
{KEY_DBLJOY1+1, "DBLJOY2"},
{KEY_DBLJOY1+2, "DBLJOY3"},
{KEY_DBLJOY1+3, "DBLJOY4"},
{KEY_DBLJOY1+4, "DBLJOY5"},
{KEY_DBLJOY1+5, "DBLJOY6"},
{KEY_DBLJOY1+6, "DBLJOY7"},
{KEY_DBLJOY1+7, "DBLJOY8"},
#if !defined (NOMOREJOYBTN_1DBL)
{KEY_DBLJOY1+8, "DBLJOY9"},
{KEY_DBLJOY1+9, "DBLJOY10"},
{KEY_DBLJOY1+10, "DBLJOY11"},
{KEY_DBLJOY1+11, "DBLJOY12"},
{KEY_DBLJOY1+12, "DBLJOY13"},
{KEY_DBLJOY1+13, "DBLJOY14"},
{KEY_DBLJOY1+14, "DBLJOY15"},
{KEY_DBLJOY1+15, "DBLJOY16"},
{KEY_DBLJOY1+16, "DBLJOY17"},
{KEY_DBLJOY1+17, "DBLJOY18"},
{KEY_DBLJOY1+18, "DBLJOY19"},
{KEY_DBLJOY1+19, "DBLJOY20"},
{KEY_DBLJOY1+20, "DBLJOY21"},
{KEY_DBLJOY1+21, "DBLJOY22"},
{KEY_DBLJOY1+22, "DBLJOY23"},
{KEY_DBLJOY1+23, "DBLJOY24"},
{KEY_DBLJOY1+24, "DBLJOY25"},
{KEY_DBLJOY1+25, "DBLJOY26"},
{KEY_DBLJOY1+26, "DBLJOY27"},
{KEY_DBLJOY1+27, "DBLJOY28"},
{KEY_DBLJOY1+28, "DBLJOY29"},
{KEY_DBLJOY1+29, "DBLJOY30"},
{KEY_DBLJOY1+30, "DBLJOY31"},
{KEY_DBLJOY1+31, "DBLJOY32"},
#endif
{KEY_DBLHAT1+0, "DBLHATUP"},
{KEY_DBLHAT1+1, "DBLHATDOWN"},
{KEY_DBLHAT1+2, "DBLHATLEFT"},
{KEY_DBLHAT1+3, "DBLHATRIGHT"},
{KEY_DBLHAT1+4, "DBLHATUP2"},
{KEY_DBLHAT1+5, "DBLHATDOWN2"},
{KEY_DBLHAT1+6, "DBLHATLEFT2"},
{KEY_DBLHAT1+7, "DBLHATRIGHT2"},
{KEY_DBLHAT1+8, "DBLHATUP3"},
{KEY_DBLHAT1+9, "DBLHATDOWN3"},
{KEY_DBLHAT1+10, "DBLHATLEFT3"},
{KEY_DBLHAT1+11, "DBLHATRIGHT3"},
{KEY_DBLHAT1+12, "DBLHATUP4"},
{KEY_DBLHAT1+13, "DBLHATDOWN4"},
{KEY_DBLHAT1+14, "DBLHATLEFT4"},
{KEY_DBLHAT1+15, "DBLHATRIGHT4"},
#ifdef _PSP
{KEY_2JOY1+0, "SEC_TRIANGLE"},
{KEY_2JOY1+1, "SEC_CIRCLE" },
{KEY_2JOY1+2, "SEC_CROSS" },
{KEY_2JOY1+3, "SEC_SQUARE" },
{KEY_2JOY1+4, "SEC_LTRIGGER"},
{KEY_2JOY1+5, "SEC_RTRIGGER"},
{KEY_2JOY1+6, "SEC_SELECT" },
{KEY_2JOY1+7, "SEC_START" },
{KEY_2JOY1+8, "SEC_HOME" },
{KEY_2JOY1+9, "SEC_HOLD" },
#define NOMOREJOYBTN_2S
#else
{KEY_2JOY1+0, "SEC_JOY1"},
{KEY_2JOY1+1, "SEC_JOY2"},
{KEY_2JOY1+2, "SEC_JOY3"},
@@ -528,11 +436,10 @@ static keyname_t keynames[] =
{KEY_2JOY1+5, "SEC_JOY6"},
{KEY_2JOY1+6, "SEC_JOY7"},
{KEY_2JOY1+7, "SEC_JOY8"},
#endif
#if !defined (NOMOREJOYBTN_2S)
// we use up to 32 buttons in DirectInput
{KEY_2JOY1+8, "SEC_JOY9"},
{KEY_2JOY1+9, "SEC_JOY10"},
{KEY_2JOY1+8, "SEC_JOY9"},
{KEY_2JOY1+9, "SEC_JOY10"},
{KEY_2JOY1+10, "SEC_JOY11"},
{KEY_2JOY1+11, "SEC_JOY12"},
{KEY_2JOY1+12, "SEC_JOY13"},
@@ -561,12 +468,12 @@ static keyname_t keynames[] =
{KEY_2HAT1+1, "SEC_HATDOWN"},
{KEY_2HAT1+2, "SEC_HATLEFT"},
{KEY_2HAT1+3, "SEC_HATRIGHT"},
{KEY_2HAT1+4, "SEC_HATUP2"},
{KEY_2HAT1+5, "SEC_HATDOWN2"},
{KEY_2HAT1+6, "SEC_HATLEFT2"},
{KEY_2HAT1+7, "SEC_HATRIGHT2"},
{KEY_2HAT1+8, "SEC_HATUP3"},
{KEY_2HAT1+9, "SEC_HATDOWN3"},
{KEY_2HAT1+4, "SEC_HATUP2"},
{KEY_2HAT1+5, "SEC_HATDOWN2"},
{KEY_2HAT1+6, "SEC_HATLEFT2"},
{KEY_2HAT1+7, "SEC_HATRIGHT2"},
{KEY_2HAT1+8, "SEC_HATUP3"},
{KEY_2HAT1+9, "SEC_HATDOWN3"},
{KEY_2HAT1+10, "SEC_HATLEFT3"},
{KEY_2HAT1+11, "SEC_HATRIGHT3"},
{KEY_2HAT1+12, "SEC_HATUP4"},
@@ -574,82 +481,16 @@ static keyname_t keynames[] =
{KEY_2HAT1+14, "SEC_HATLEFT4"},
{KEY_2HAT1+15, "SEC_HATRIGHT4"},
#ifdef _PSP
{KEY_DBL2JOY1+0, "DBLSEC_TRIANGLE"},
{KEY_DBL2JOY1+1, "DBLSEC_CIRCLE" },
{KEY_DBL2JOY1+2, "DBLSEC_CROSS" },
{KEY_DBL2JOY1+3, "DBLSEC_SQUARE" },
{KEY_DBL2JOY1+4, "DBLSEC_LTRIGGER"},
{KEY_DBL2JOY1+5, "DBLSEC_RTRIGGER"},
{KEY_DBL2JOY1+6, "DBLSEC_SELECT" },
{KEY_DBL2JOY1+7, "DBLSEC_START" },
{KEY_DBL2JOY1+8, "DBLSEC_HOME" },
{KEY_DBL2JOY1+9, "DBLSEC_HOLD" },
#define NOMOREJOYBTN_2DBL
#else
{KEY_DBL2JOY1+0, "DBLSEC_JOY1"},
{KEY_DBL2JOY1+1, "DBLSEC_JOY2"},
{KEY_DBL2JOY1+2, "DBLSEC_JOY3"},
{KEY_DBL2JOY1+3, "DBLSEC_JOY4"},
{KEY_DBL2JOY1+4, "DBLSEC_JOY5"},
{KEY_DBL2JOY1+5, "DBLSEC_JOY6"},
{KEY_DBL2JOY1+6, "DBLSEC_JOY7"},
{KEY_DBL2JOY1+7, "DBLSEC_JOY8"},
#endif
#if !defined (NOMOREJOYBTN_2DBL)
{KEY_DBL2JOY1+8, "DBLSEC_JOY9"},
{KEY_DBL2JOY1+9, "DBLSEC_JOY10"},
{KEY_DBL2JOY1+10, "DBLSEC_JOY11"},
{KEY_DBL2JOY1+11, "DBLSEC_JOY12"},
{KEY_DBL2JOY1+12, "DBLSEC_JOY13"},
{KEY_DBL2JOY1+13, "DBLSEC_JOY14"},
{KEY_DBL2JOY1+14, "DBLSEC_JOY15"},
{KEY_DBL2JOY1+15, "DBLSEC_JOY16"},
{KEY_DBL2JOY1+16, "DBLSEC_JOY17"},
{KEY_DBL2JOY1+17, "DBLSEC_JOY18"},
{KEY_DBL2JOY1+18, "DBLSEC_JOY19"},
{KEY_DBL2JOY1+19, "DBLSEC_JOY20"},
{KEY_DBL2JOY1+20, "DBLSEC_JOY21"},
{KEY_DBL2JOY1+21, "DBLSEC_JOY22"},
{KEY_DBL2JOY1+22, "DBLSEC_JOY23"},
{KEY_DBL2JOY1+23, "DBLSEC_JOY24"},
{KEY_DBL2JOY1+24, "DBLSEC_JOY25"},
{KEY_DBL2JOY1+25, "DBLSEC_JOY26"},
{KEY_DBL2JOY1+26, "DBLSEC_JOY27"},
{KEY_DBL2JOY1+27, "DBLSEC_JOY28"},
{KEY_DBL2JOY1+28, "DBLSEC_JOY29"},
{KEY_DBL2JOY1+29, "DBLSEC_JOY30"},
{KEY_DBL2JOY1+30, "DBLSEC_JOY31"},
{KEY_DBL2JOY1+31, "DBLSEC_JOY32"},
#endif
{KEY_DBL2HAT1+0, "DBLSEC_HATUP"},
{KEY_DBL2HAT1+1, "DBLSEC_HATDOWN"},
{KEY_DBL2HAT1+2, "DBLSEC_HATLEFT"},
{KEY_DBL2HAT1+3, "DBLSEC_HATRIGHT"},
{KEY_DBL2HAT1+4, "DBLSEC_HATUP2"},
{KEY_DBL2HAT1+5, "DBLSEC_HATDOWN2"},
{KEY_DBL2HAT1+6, "DBLSEC_HATLEFT2"},
{KEY_DBL2HAT1+7, "DBLSEC_HATRIGHT2"},
{KEY_DBL2HAT1+8, "DBLSEC_HATUP3"},
{KEY_DBL2HAT1+9, "DBLSEC_HATDOWN3"},
{KEY_DBL2HAT1+10, "DBLSEC_HATLEFT3"},
{KEY_DBL2HAT1+11, "DBLSEC_HATRIGHT3"},
{KEY_DBL2HAT1+12, "DBLSEC_HATUP4"},
{KEY_DBL2HAT1+13, "DBLSEC_HATDOWN4"},
{KEY_DBL2HAT1+14, "DBLSEC_HATLEFT4"},
{KEY_DBL2HAT1+15, "DBLSEC_HATRIGHT4"},
{KEY_3JOY1+0, "TRD_JOY1"},
{KEY_3JOY1+1, "TRD_JOY2"},
{KEY_3JOY1+2, "TRD_JOY3"},
{KEY_3JOY1+3, "TRD_JOY4"},
{KEY_3JOY1+4, "TRD_JOY5"},
{KEY_3JOY1+5, "TRD_JOY6"},
{KEY_3JOY1+6, "TRD_JOY7"},
{KEY_3JOY1+7, "TRD_JOY8"},
{KEY_3JOY1+8, "TRD_JOY9"},
{KEY_3JOY1+9, "TRD_JOY10"},
{KEY_3JOY1+0, "TRD_JOY1"},
{KEY_3JOY1+1, "TRD_JOY2"},
{KEY_3JOY1+2, "TRD_JOY3"},
{KEY_3JOY1+3, "TRD_JOY4"},
{KEY_3JOY1+4, "TRD_JOY5"},
{KEY_3JOY1+5, "TRD_JOY6"},
{KEY_3JOY1+6, "TRD_JOY7"},
{KEY_3JOY1+7, "TRD_JOY8"},
{KEY_3JOY1+8, "TRD_JOY9"},
{KEY_3JOY1+9, "TRD_JOY10"},
{KEY_3JOY1+10, "TRD_JOY11"},
{KEY_3JOY1+11, "TRD_JOY12"},
{KEY_3JOY1+12, "TRD_JOY13"},
@@ -673,49 +514,16 @@ static keyname_t keynames[] =
{KEY_3JOY1+30, "TRD_JOY31"},
{KEY_3JOY1+31, "TRD_JOY32"},
{KEY_DBL3JOY1+0, "DBLTRD_JOY1"},
{KEY_DBL3JOY1+1, "DBLTRD_JOY2"},
{KEY_DBL3JOY1+2, "DBLTRD_JOY3"},
{KEY_DBL3JOY1+3, "DBLTRD_JOY4"},
{KEY_DBL3JOY1+4, "DBLTRD_JOY5"},
{KEY_DBL3JOY1+5, "DBLTRD_JOY6"},
{KEY_DBL3JOY1+6, "DBLTRD_JOY7"},
{KEY_DBL3JOY1+7, "DBLTRD_JOY8"},
{KEY_DBL3JOY1+8, "DBLTRD_JOY9"},
{KEY_DBL3JOY1+9, "DBLTRD_JOY10"},
{KEY_DBL3JOY1+10, "DBLTRD_JOY11"},
{KEY_DBL3JOY1+11, "DBLTRD_JOY12"},
{KEY_DBL3JOY1+12, "DBLTRD_JOY13"},
{KEY_DBL3JOY1+13, "DBLTRD_JOY14"},
{KEY_DBL3JOY1+14, "DBLTRD_JOY15"},
{KEY_DBL3JOY1+15, "DBLTRD_JOY16"},
{KEY_DBL3JOY1+16, "DBLTRD_JOY17"},
{KEY_DBL3JOY1+17, "DBLTRD_JOY18"},
{KEY_DBL3JOY1+18, "DBLTRD_JOY19"},
{KEY_DBL3JOY1+19, "DBLTRD_JOY20"},
{KEY_DBL3JOY1+20, "DBLTRD_JOY21"},
{KEY_DBL3JOY1+21, "DBLTRD_JOY22"},
{KEY_DBL3JOY1+22, "DBLTRD_JOY23"},
{KEY_DBL3JOY1+23, "DBLTRD_JOY24"},
{KEY_DBL3JOY1+24, "DBLTRD_JOY25"},
{KEY_DBL3JOY1+25, "DBLTRD_JOY26"},
{KEY_DBL3JOY1+26, "DBLTRD_JOY27"},
{KEY_DBL3JOY1+27, "DBLTRD_JOY28"},
{KEY_DBL3JOY1+28, "DBLTRD_JOY29"},
{KEY_DBL3JOY1+29, "DBLTRD_JOY30"},
{KEY_DBL3JOY1+30, "DBLTRD_JOY31"},
{KEY_DBL3JOY1+31, "DBLTRD_JOY32"},
{KEY_3HAT1+0, "TRD_HATUP"},
{KEY_3HAT1+1, "TRD_HATDOWN"},
{KEY_3HAT1+2, "TRD_HATLEFT"},
{KEY_3HAT1+3, "TRD_HATRIGHT"},
{KEY_3HAT1+4, "TRD_HATUP2"},
{KEY_3HAT1+5, "TRD_HATDOWN2"},
{KEY_3HAT1+6, "TRD_HATLEFT2"},
{KEY_3HAT1+7, "TRD_HATRIGHT2"},
{KEY_3HAT1+8, "TRD_HATUP3"},
{KEY_3HAT1+9, "TRD_HATDOWN3"},
{KEY_3HAT1+4, "TRD_HATUP2"},
{KEY_3HAT1+5, "TRD_HATDOWN2"},
{KEY_3HAT1+6, "TRD_HATLEFT2"},
{KEY_3HAT1+7, "TRD_HATRIGHT2"},
{KEY_3HAT1+8, "TRD_HATUP3"},
{KEY_3HAT1+9, "TRD_HATDOWN3"},
{KEY_3HAT1+10, "TRD_HATLEFT3"},
{KEY_3HAT1+11, "TRD_HATRIGHT3"},
{KEY_3HAT1+12, "TRD_HATUP4"},
@@ -723,33 +531,16 @@ static keyname_t keynames[] =
{KEY_3HAT1+14, "TRD_HATLEFT4"},
{KEY_3HAT1+15, "TRD_HATRIGHT4"},
{KEY_DBL3HAT1+0, "DBLTRD_HATUP"},
{KEY_DBL3HAT1+1, "DBLTRD_HATDOWN"},
{KEY_DBL3HAT1+2, "DBLTRD_HATLEFT"},
{KEY_DBL3HAT1+3, "DBLTRD_HATRIGHT"},
{KEY_DBL3HAT1+4, "DBLTRD_HATUP2"},
{KEY_DBL3HAT1+5, "DBLTRD_HATDOWN2"},
{KEY_DBL3HAT1+6, "DBLTRD_HATLEFT2"},
{KEY_DBL3HAT1+7, "DBLTRD_HATRIGHT2"},
{KEY_DBL3HAT1+8, "DBLTRD_HATUP3"},
{KEY_DBL3HAT1+9, "DBLTRD_HATDOWN3"},
{KEY_DBL3HAT1+10, "DBLTRD_HATLEFT3"},
{KEY_DBL3HAT1+11, "DBLTRD_HATRIGHT3"},
{KEY_DBL3HAT1+12, "DBLTRD_HATUP4"},
{KEY_DBL3HAT1+13, "DBLTRD_HATDOWN4"},
{KEY_DBL3HAT1+14, "DBLTRD_HATLEFT4"},
{KEY_DBL3HAT1+15, "DBLTRD_HATRIGHT4"},
{KEY_4JOY1+0, "FOR_JOY1"},
{KEY_4JOY1+1, "FOR_JOY2"},
{KEY_4JOY1+2, "FOR_JOY3"},
{KEY_4JOY1+3, "FOR_JOY4"},
{KEY_4JOY1+4, "FOR_JOY5"},
{KEY_4JOY1+5, "FOR_JOY6"},
{KEY_4JOY1+6, "FOR_JOY7"},
{KEY_4JOY1+7, "FOR_JOY8"},
{KEY_4JOY1+8, "FOR_JOY9"},
{KEY_4JOY1+9, "FOR_JOY10"},
{KEY_4JOY1+0, "FOR_JOY1"},
{KEY_4JOY1+1, "FOR_JOY2"},
{KEY_4JOY1+2, "FOR_JOY3"},
{KEY_4JOY1+3, "FOR_JOY4"},
{KEY_4JOY1+4, "FOR_JOY5"},
{KEY_4JOY1+5, "FOR_JOY6"},
{KEY_4JOY1+6, "FOR_JOY7"},
{KEY_4JOY1+7, "FOR_JOY8"},
{KEY_4JOY1+8, "FOR_JOY9"},
{KEY_4JOY1+9, "FOR_JOY10"},
{KEY_4JOY1+10, "FOR_JOY11"},
{KEY_4JOY1+11, "FOR_JOY12"},
{KEY_4JOY1+12, "FOR_JOY13"},
@@ -773,72 +564,22 @@ static keyname_t keynames[] =
{KEY_4JOY1+30, "FOR_JOY31"},
{KEY_4JOY1+31, "FOR_JOY32"},
{KEY_DBL4JOY1+0, "DBLFOR_JOY1"},
{KEY_DBL4JOY1+1, "DBLFOR_JOY2"},
{KEY_DBL4JOY1+2, "DBLFOR_JOY3"},
{KEY_DBL4JOY1+3, "DBLFOR_JOY4"},
{KEY_DBL4JOY1+4, "DBLFOR_JOY5"},
{KEY_DBL4JOY1+5, "DBLFOR_JOY6"},
{KEY_DBL4JOY1+6, "DBLFOR_JOY7"},
{KEY_DBL4JOY1+7, "DBLFOR_JOY8"},
{KEY_DBL4JOY1+8, "DBLFOR_JOY9"},
{KEY_DBL4JOY1+9, "DBLFOR_JOY10"},
{KEY_DBL4JOY1+10, "DBLFOR_JOY11"},
{KEY_DBL4JOY1+11, "DBLFOR_JOY12"},
{KEY_DBL4JOY1+12, "DBLFOR_JOY13"},
{KEY_DBL4JOY1+13, "DBLFOR_JOY14"},
{KEY_DBL4JOY1+14, "DBLFOR_JOY15"},
{KEY_DBL4JOY1+15, "DBLFOR_JOY16"},
{KEY_DBL4JOY1+16, "DBLFOR_JOY17"},
{KEY_DBL4JOY1+17, "DBLFOR_JOY18"},
{KEY_DBL4JOY1+18, "DBLFOR_JOY19"},
{KEY_DBL4JOY1+19, "DBLFOR_JOY20"},
{KEY_DBL4JOY1+20, "DBLFOR_JOY21"},
{KEY_DBL4JOY1+21, "DBLFOR_JOY22"},
{KEY_DBL4JOY1+22, "DBLFOR_JOY23"},
{KEY_DBL4JOY1+23, "DBLFOR_JOY24"},
{KEY_DBL4JOY1+24, "DBLFOR_JOY25"},
{KEY_DBL4JOY1+25, "DBLFOR_JOY26"},
{KEY_DBL4JOY1+26, "DBLFOR_JOY27"},
{KEY_DBL4JOY1+27, "DBLFOR_JOY28"},
{KEY_DBL4JOY1+28, "DBLFOR_JOY29"},
{KEY_DBL4JOY1+29, "DBLFOR_JOY30"},
{KEY_DBL4JOY1+30, "DBLFOR_JOY31"},
{KEY_DBL4JOY1+31, "DBLFOR_JOY32"},
{KEY_4HAT1+0, "FOR_HATUP"},
{KEY_4HAT1+1, "FOR_HATDOWN"},
{KEY_4HAT1+2, "FOR_HATLEFT"},
{KEY_4HAT1+3, "FOR_HATRIGHT"},
{KEY_4HAT1+4, "FOR_HATUP2"},
{KEY_4HAT1+5, "FOR_HATDOWN2"},
{KEY_4HAT1+6, "FOR_HATLEFT2"},
{KEY_4HAT1+7, "FOR_HATRIGHT2"},
{KEY_4HAT1+8, "FOR_HATUP3"},
{KEY_4HAT1+9, "FOR_HATDOWN3"},
{KEY_4HAT1+4, "FOR_HATUP2"},
{KEY_4HAT1+5, "FOR_HATDOWN2"},
{KEY_4HAT1+6, "FOR_HATLEFT2"},
{KEY_4HAT1+7, "FOR_HATRIGHT2"},
{KEY_4HAT1+8, "FOR_HATUP3"},
{KEY_4HAT1+9, "FOR_HATDOWN3"},
{KEY_4HAT1+10, "FOR_HATLEFT3"},
{KEY_4HAT1+11, "FOR_HATRIGHT3"},
{KEY_4HAT1+12, "FOR_HATUP4"},
{KEY_4HAT1+13, "FOR_HATDOWN4"},
{KEY_4HAT1+14, "FOR_HATLEFT4"},
{KEY_4HAT1+15, "FOR_HATRIGHT4"},
{KEY_DBL4HAT1+0, "DBLFOR_HATUP"},
{KEY_DBL4HAT1+1, "DBLFOR_HATDOWN"},
{KEY_DBL4HAT1+2, "DBLFOR_HATLEFT"},
{KEY_DBL4HAT1+3, "DBLFOR_HATRIGHT"},
{KEY_DBL4HAT1+4, "DBLFOR_HATUP2"},
{KEY_DBL4HAT1+5, "DBLFOR_HATDOWN2"},
{KEY_DBL4HAT1+6, "DBLFOR_HATLEFT2"},
{KEY_DBL4HAT1+7, "DBLFOR_HATRIGHT2"},
{KEY_DBL4HAT1+8, "DBLFOR_HATUP3"},
{KEY_DBL4HAT1+9, "DBLFOR_HATDOWN3"},
{KEY_DBL4HAT1+10, "DBLFOR_HATLEFT3"},
{KEY_DBL4HAT1+11, "DBLFOR_HATRIGHT3"},
{KEY_DBL4HAT1+12, "DBLFOR_HATUP4"},
{KEY_DBL4HAT1+13, "DBLFOR_HATDOWN4"},
{KEY_DBL4HAT1+14, "DBLFOR_HATLEFT4"},
{KEY_DBL4HAT1+15, "DBLFOR_HATRIGHT4"},
};
static const char *gamecontrolname[num_gamecontrols] =
+1 -1
View File
@@ -568,7 +568,7 @@ static patch_t *kp_racefinish[6];
static patch_t *kp_positionnum[NUMPOSNUMS][NUMPOSFRAMES];
static patch_t *kp_winnernum[NUMPOSFRAMES];
patch_t *kp_facenum[MAXPLAYERS+1];
static patch_t *kp_facenum[MAXPLAYERS+1];
static patch_t *kp_facehighlight[8];
static patch_t *kp_rankbumper;
-3
View File
@@ -41,9 +41,6 @@ extern consvar_t cv_battlespeedo;
extern consvar_t cv_multiitemicon;
extern consvar_t cv_huditemamount;
// for use in timeattack menu
extern patch_t *kp_facenum[MAXPLAYERS+1];
#define NUMSPEEDOSTUFF 8
extern CV_PossibleValue_t speedo_cons_t[NUMSPEEDOSTUFF];
#define NUMDGAUGESTUFF 6
+54 -50
View File
@@ -5179,24 +5179,6 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source)
return wtarg;
}
static INT32 K_GetEngineClass(const player_t *player)
{
INT32 speed, weight;
speed = (player->kartspeed - 1) / 3;
weight = (player->kartweight - 1) / 3;
#define LOCKSTAT(stat) \
if (stat < 0) { stat = 0; } \
if (stat > 2) { stat = 2; }
LOCKSTAT(speed);
LOCKSTAT(weight);
#undef LOCKSTAT
return (speed + (3*weight));
}
// Engine Sounds.
static void K_UpdateEngineSounds(player_t *player, ticcmd_t *cmd)
{
@@ -5207,7 +5189,7 @@ static void K_UpdateEngineSounds(player_t *player, ticcmd_t *cmd)
static const UINT8 dampenval = 48; // 255 * 48 = close enough to FRACUNIT/6
INT32 class; // engine class number
INT32 class, s, w; // engine class number
UINT8 volume = 255;
fixed_t volumedampen = FRACUNIT;
@@ -5243,7 +5225,7 @@ static void K_UpdateEngineSounds(player_t *player, ticcmd_t *cmd)
targetsnd = (((6 * cmd->forwardmove) / 25) + ((player->speed / mapobjectscale) / 5)) / 2;
}
if (targetsnd < 0) { targetsnd = 0; }
if (targetsnd < 0) { targetsnd = 0; }
if (targetsnd > 12) { targetsnd = 12; }
if (player->kartstuff[k_enginesnd] < targetsnd) { player->kartstuff[k_enginesnd]++; }
@@ -5320,7 +5302,17 @@ static void K_UpdateEngineSounds(player_t *player, ticcmd_t *cmd)
return;
}
class = K_GetEngineClass(player);
s = (player->kartspeed - 1) / 3;
w = (player->kartweight - 1) / 3;
#define LOCKSTAT(stat) \
if (stat < 0) { stat = 0; } \
if (stat > 2) { stat = 2; }
LOCKSTAT(s);
LOCKSTAT(w);
#undef LOCKSTAT
class = s + (3*w);
S_StartSoundAtVolume(player->mo, (sfx_krta00 + player->kartstuff[k_enginesnd]) + (class * numsnds), volume);
}
@@ -5739,7 +5731,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
K_UpdateInvincibilitySounds(player); // Also thanks, VAda!
// Plays the music during and after the starting countdown.
if ((leveltime <= MUSICSTARTTIME) && P_IsLocalPlayer(player))
if (P_IsLocalPlayer(player))
S_StartMapMusic();
}
@@ -5919,33 +5911,45 @@ static void K_KartDrift(player_t *player, boolean onground)
// Holding the Jump button will enable drifting.
// Drift Release (Moved here so you can't "chain" drifts)
if (onground && player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1))
&& player->kartstuff[k_driftcharge] < dsone
&& onground)
{
if (player->kartstuff[k_driftcharge] < dsone)
{
player->kartstuff[k_driftcharge] = 0;
}
else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
{
if (player->kartstuff[k_driftboost] < 20)
player->kartstuff[k_driftboost] = 20;
S_StartSound(player->mo, sfx_s23c);
player->kartstuff[k_driftcharge] = 0;
}
else if (player->kartstuff[k_driftcharge] < dsthree)
{
if (player->kartstuff[k_driftboost] < 50)
player->kartstuff[k_driftboost] = 50;
S_StartSound(player->mo, sfx_s23c);
player->kartstuff[k_driftcharge] = 0;
}
else if (player->kartstuff[k_driftcharge] >= dsthree)
{
if (player->kartstuff[k_driftboost] < 125)
player->kartstuff[k_driftboost] = 125;
S_StartSound(player->mo, sfx_s23c);
player->kartstuff[k_driftcharge] = 0;
}
player->kartstuff[k_driftcharge] = 0;
}
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1))
&& (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
&& onground)
{
if (player->kartstuff[k_driftboost] < 20)
player->kartstuff[k_driftboost] = 20;
S_StartSound(player->mo, sfx_s23c);
//K_SpawnDashDustRelease(player);
player->kartstuff[k_driftcharge] = 0;
}
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1))
&& player->kartstuff[k_driftcharge] < dsthree
&& onground)
{
if (player->kartstuff[k_driftboost] < 50)
player->kartstuff[k_driftboost] = 50;
S_StartSound(player->mo, sfx_s23c);
//K_SpawnDashDustRelease(player);
player->kartstuff[k_driftcharge] = 0;
}
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1))
&& player->kartstuff[k_driftcharge] >= dsthree
&& onground)
{
if (player->kartstuff[k_driftboost] < 125)
player->kartstuff[k_driftboost] = 125;
S_StartSound(player->mo, sfx_s23c);
//K_SpawnDashDustRelease(player);
player->kartstuff[k_driftcharge] = 0;
}
// Drifting: left or right?
@@ -6023,8 +6027,8 @@ static void K_KartDrift(player_t *player, boolean onground)
// Sound whenever you get a different tier of sparks
if (driftblue
|| driftred
|| driftrainbow)
|| driftred
|| driftrainbow)
{
//S_StartSound(player->mo, sfx_s3ka2);
if (P_IsLocalPlayer(player)) // UGHGHGH...
+168 -218
View File
@@ -256,7 +256,6 @@ static char *M_GetConditionString(condition_t cond);
// Misc. Main Menu
static void M_Options(INT32 choice);
static void M_Multiplayer(INT32 choice);
static void M_CameraMenu(INT32 choice);
static void M_LocalSkinMenu(INT32 choice);
static void M_LocalSkinChange(INT32 choice);
static void M_Manual(INT32 choice);
@@ -649,28 +648,22 @@ void Nextmap_OnChange(void)
SP_ReplayMenu[i].status = IT_DISABLED;
SP_GuestReplayMenu[i].status = IT_DISABLED;
}
SP_ReplayMenu[4].status = IT_DISABLED;
SP_GhostMenu[3].status = IT_DISABLED;
SP_GhostMenu[4].status = IT_DISABLED;
if (FIL_FileExists(va("%s-%s-time-best.lmp", gpath, cv_chooseskin.string)))
{
if (FIL_FileExists(va("%s-%s-time-best.lmp", gpath, cv_chooseskin.string))) {
SP_ReplayMenu[0].status = IT_WHITESTRING|IT_CALL;
SP_GuestReplayMenu[0].status = IT_WHITESTRING|IT_CALL;
active |= 3;
}
if (FIL_FileExists(va("%s-%s-lap-best.lmp", gpath, cv_chooseskin.string)))
{
if (FIL_FileExists(va("%s-%s-lap-best.lmp", gpath, cv_chooseskin.string))) {
SP_ReplayMenu[1].status = IT_WHITESTRING|IT_CALL;
SP_GuestReplayMenu[1].status = IT_WHITESTRING|IT_CALL;
active |= 3;
}
if (FIL_FileExists(va("%s-%s-last.lmp", gpath, cv_chooseskin.string)))
{
if (FIL_FileExists(va("%s-%s-last.lmp", gpath, cv_chooseskin.string))) {
SP_ReplayMenu[2].status = IT_WHITESTRING|IT_CALL;
SP_GuestReplayMenu[2].status = IT_WHITESTRING|IT_CALL;
active |= 3;
@@ -693,8 +686,7 @@ void Nextmap_OnChange(void)
active |= 1;
}
if (active)
{
if (active) {
if (active & 1)
SP_TimeAttackMenu[tareplay].status = IT_WHITESTRING|IT_SUBMENU;
if (active & 2)
@@ -1042,6 +1034,18 @@ boolean M_Responder(event_t *ev)
ch = KEY_RIGHTARROW;
break;
}
if (menuactive)
{
if (currentMenu == &MISC_ChangeLevelDef || currentMenu == &MP_OfflineServerDef || currentMenu == &MP_ServerDef)
{
if (ch == gamecontrol[0][gc_fire][0]
|| ch == gamecontrol[0][gc_fire][1])
{
COM_ImmedExecute("add kartencore 1");
}
}
}
}
else if (menuactive)
{
@@ -1233,19 +1237,6 @@ boolean M_Responder(event_t *ev)
if ((ch == gamecontrol[0][gc_brake][0] || ch == gamecontrol[0][gc_brake][1]) && ch >= KEY_MOUSE1) // do this here, otherwise brake opens the menu mid-game
ch = KEY_ESCAPE;
if (currentMenu == &MISC_ChangeLevelDef ||
currentMenu == &MP_OfflineServerDef ||
currentMenu == &MP_ServerDef)
{
if (ch == gamecontrol[0][gc_fire][0]
|| ch == gamecontrol[0][gc_fire][1])
{
if (M_SecretUnlocked(SECRET_ENCORE))
COM_ImmedExecute("add kartencore 1");
return true;
}
}
routine = currentMenu->menuitems[itemOn].itemaction;
// Handle menuitems which need a specific key handling
@@ -3401,6 +3392,8 @@ static void M_DrawTemperature(INT32 x, fixed_t t)
// bounds check
if (t > FRACUNIT)
t = FRACUNIT;
/*else if (t < 0) -- not needed
t = 0;*/
// scale
if (t > 1)
@@ -4248,7 +4241,6 @@ void M_ReplayHut(INT32 choice)
}
else if (!demo.inreplayhut)
dir_on[menudepthleft] = 0;
demo.inreplayhut = true;
replayScrollTitle = 0; replayScrollDelay = TICRATE; replayScrollDir = 1;
@@ -4441,140 +4433,136 @@ static void DrawReplayHutReplayInfo(void)
UINT8 *colormap;
INT32 x, y, w, h;
const menudemo_t *replaydemolist = &demolist[dir_on[menudepthleft]];
switch (replaydemolist->type)
switch (demolist[dir_on[menudepthleft]].type)
{
case MD_NOTLOADED:
V_DrawCenteredString(160, 40, V_SNAPTOTOP|MENUCAPS, "Loading replay information...");
case MD_NOTLOADED:
V_DrawCenteredString(160, 40, V_SNAPTOTOP|MENUCAPS, "Loading replay information...");
break;
case MD_INVALID:
V_DrawCenteredString(160, 40, V_SNAPTOTOP|warningflags|MENUCAPS, "This replay cannot be played.");
break;
case MD_SUBDIR:
break; // Can't think of anything to draw here right now
case MD_OUTDATED:
V_DrawThinString(17, 64, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT|highlightflags, va("Recorded on an outdated version. %s", demolist[dir_on[menudepthleft]].version));
/* FALLTHRU */
default:
// Draw level stuff
x = 15; y = 15;
// A 160x100 image of the level as entry MAPxxP
//CONS_Printf("%d %s\n", demolist[dir_on[menudepthleft]].map, G_BuildMapName(demolist[dir_on[menudepthleft]].map));
lumpnum = W_CheckNumForName(va("%sP", G_BuildMapName(demolist[dir_on[menudepthleft]].map)));
if (lumpnum != LUMPERROR)
patch = (patch_t *)W_CachePatchNum(lumpnum, PU_PATCH);
else
patch = (patch_t *)W_CachePatchName("M_NOLVL", PU_PATCH);
if (!(demolist[dir_on[menudepthleft]].kartspeed & DF_ENCORE))
V_DrawSmallScaledPatch(x, y, V_SNAPTOTOP, patch);
else
{
w = patch->width;
h = patch->height;
V_DrawSmallScaledPatch(x+(w>>1), y, V_SNAPTOTOP|V_FLIP, patch);
{
static angle_t rubyfloattime = 0;
const fixed_t rubyheight = FINESINE(rubyfloattime>>ANGLETOFINESHIFT);
V_DrawFixedPatch((x+(w>>2))<<FRACBITS, ((y+(h>>2))<<FRACBITS) - (rubyheight<<1), FRACUNIT, V_SNAPTOTOP, (patch_t *)W_CachePatchName("RUBYICON", PU_PATCH), NULL);
rubyfloattime += FixedMul(ANGLE_MAX/NEWTICRATE, renderdeltatics);
}
}
x += 85;
if (mapheaderinfo[demolist[dir_on[menudepthleft]].map-1])
{
char *title = G_BuildMapTitle(demolist[dir_on[menudepthleft]].map);
if (title)
{
V_DrawString(x, y, V_SNAPTOTOP|MENUCAPS, title);
Z_Free(title);
}
}
else
V_DrawString(x, y, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT, "Level is not loaded.");
INT32 datew = 0;
if (demolist[dir_on[menudepthleft]].date[0] != '\0')
{
datew = V_StringWidth(demolist[dir_on[menudepthleft]].date, 0);
V_DrawThinString(x, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("%s", demolist[dir_on[menudepthleft]].date));
}
if (demolist[dir_on[menudepthleft]].numlaps)
V_DrawThinString(x+datew, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("(%d laps)", demolist[dir_on[menudepthleft]].numlaps));
V_DrawString(x, y+20, V_SNAPTOTOP|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].gametype == GT_RACE ?
va("Race (%s speed)", kartspeed_cons_t[demolist[dir_on[menudepthleft]].kartspeed & ~DF_ENCORE].strvalue) :
"Battle Mode");
if (!demolist[dir_on[menudepthleft]].standings[0].ranking)
{
// No standings were loaded!
V_DrawString(x, y+39, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT, "No standings available.");
break;
}
case MD_INVALID:
V_DrawCenteredString(160, 40, V_SNAPTOTOP|warningflags|MENUCAPS, "This replay cannot be played.");
break;
V_DrawThinString(x, y+29, V_SNAPTOTOP|highlightflags|MENUCAPS, "Winner");
V_DrawString(x+38, y+30, V_SNAPTOTOP|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].standings[0].name);
case MD_SUBDIR:
break; // Can't think of anything to draw here right now
if (demolist[dir_on[menudepthleft]].gametype == GT_RACE)
{
V_DrawThinString(x, y+39, V_SNAPTOTOP|highlightflags|MENUCAPS, "Time");
}
else
{
V_DrawThinString(x, y+39, V_SNAPTOTOP|highlightflags|MENUCAPS, "Score");
}
case MD_OUTDATED:
V_DrawThinString(17, 64, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT|highlightflags, va("Recorded on an outdated version. %s", replaydemolist->version));
/* FALLTHRU */
default:
// Draw level stuff
x = 15; y = 15;
if (demolist[dir_on[menudepthleft]].standings[0].timeorscore == (UINT32_MAX-1))
{
V_DrawThinString(x+32, y+40-1, V_SNAPTOTOP|MENUCAPS, "No Contest");
}
else if (demolist[dir_on[menudepthleft]].gametype == GT_RACE)
{
V_DrawRightAlignedString(x+84, y+40, V_SNAPTOTOP, va("%d'%02d\"%02d",
G_TicsToMinutes(demolist[dir_on[menudepthleft]].standings[0].timeorscore, true),
G_TicsToSeconds(demolist[dir_on[menudepthleft]].standings[0].timeorscore),
G_TicsToCentiseconds(demolist[dir_on[menudepthleft]].standings[0].timeorscore)
));
}
else
{
V_DrawString(x+32, y+40, V_SNAPTOTOP, va("%d", demolist[dir_on[menudepthleft]].standings[0].timeorscore));
}
// A 160x100 image of the level as entry MAPxxP
//CONS_Printf("%d %s\n", replaydemolist->map, G_BuildMapName(replaydemolist->map));
lumpnum = W_CheckNumForName(va("%sP", G_BuildMapName(replaydemolist->map)));
if (lumpnum != LUMPERROR)
patch = (patch_t *)W_CachePatchNum(lumpnum, PU_PATCH);
else
patch = (patch_t *)W_CachePatchName("M_NOLVL", PU_PATCH);
// Character face!
if (demolist[dir_on[menudepthleft]].standings[0].skin < numskins && W_CheckNumForName(skins[demolist[dir_on[menudepthleft]].standings[0].skin].facewant) != LUMPERROR)
{
patch = facewantprefix[demolist[dir_on[menudepthleft]].standings[0].skin];
colormap = R_GetTranslationColormap(
demolist[dir_on[menudepthleft]].standings[0].skin,
demolist[dir_on[menudepthleft]].standings[0].color,
GTC_MENUCACHE);
}
else
{
patch = (patch_t *)W_CachePatchName("M_NOWANT", PU_PATCH);
colormap = R_GetTranslationColormap(
TC_RAINBOW,
demolist[dir_on[menudepthleft]].standings[0].color,
GTC_MENUCACHE);
}
if (!(replaydemolist->kartspeed & DF_ENCORE))
V_DrawSmallScaledPatch(x, y, V_SNAPTOTOP, patch);
else
{
w = patch->width;
h = patch->height;
V_DrawSmallScaledPatch(x+(w>>1), y, V_SNAPTOTOP|V_FLIP, patch);
V_DrawMappedPatch(BASEVIDWIDTH-15 - patch->width, y+20, V_SNAPTOTOP, patch, colormap);
{
static angle_t rubyfloattime = 0;
const fixed_t rubyheight = FINESINE(rubyfloattime>>ANGLETOFINESHIFT);
V_DrawFixedPatch((x+(w>>2))<<FRACBITS, ((y+(h>>2))<<FRACBITS) - (rubyheight<<1), FRACUNIT, V_SNAPTOTOP, (patch_t *)W_CachePatchName("RUBYICON", PU_PATCH), NULL);
rubyfloattime += FixedMul(ANGLE_MAX/NEWTICRATE, renderdeltatics);
}
}
x += 85;
if (mapheaderinfo[replaydemolist->map-1])
{
char *title = G_BuildMapTitle(replaydemolist->map);
if (title)
{
V_DrawString(x, y, V_SNAPTOTOP|MENUCAPS, title);
Z_Free(title);
}
}
else
V_DrawString(x, y, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT, "Level is not loaded.");
INT32 datew = 0;
if (replaydemolist->date[0] != '\0')
{
datew = V_StringWidth(replaydemolist->date, 0);
V_DrawThinString(x, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("%s", replaydemolist->date));
}
if (replaydemolist->numlaps)
V_DrawThinString(x+datew, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("(%d laps)", replaydemolist->numlaps));
V_DrawString(x, y+20, V_SNAPTOTOP|V_ALLOWLOWERCASE, replaydemolist->gametype == GT_RACE ?
va("Race (%s speed)", kartspeed_cons_t[replaydemolist->kartspeed & ~DF_ENCORE].strvalue) :
"Battle Mode");
if (!replaydemolist->standings[0].ranking)
{
// No standings were loaded!
V_DrawString(x, y+39, V_SNAPTOTOP|V_ALLOWLOWERCASE|V_TRANSLUCENT, "No standings available.");
break;
}
V_DrawThinString(x, y+29, V_SNAPTOTOP|highlightflags|MENUCAPS, "Winner");
V_DrawString(x+38, y+30, V_SNAPTOTOP|V_ALLOWLOWERCASE, replaydemolist->standings[0].name);
if (replaydemolist->gametype == GT_RACE)
{
V_DrawThinString(x, y+39, V_SNAPTOTOP|highlightflags|MENUCAPS, "Time");
}
else
{
V_DrawThinString(x, y+39, V_SNAPTOTOP|highlightflags|MENUCAPS, "Score");
}
const UINT32 timeorscore = replaydemolist->standings[0].timeorscore;
if (timeorscore == (UINT32_MAX-1))
{
V_DrawThinString(x+32, y+40-1, V_SNAPTOTOP|MENUCAPS, "No Contest");
}
else if (replaydemolist->gametype == GT_RACE)
{
V_DrawRightAlignedString(x+84, y+40, V_SNAPTOTOP, va("%d'%02d\"%02d",
G_TicsToMinutes(timeorscore, true),
G_TicsToSeconds(timeorscore),
G_TicsToCentiseconds(timeorscore)
));
}
else
{
V_DrawString(x+32, y+40, V_SNAPTOTOP, va("%d", timeorscore));
}
// Character face!
if (replaydemolist->standings[0].skin < numskins && W_CheckNumForName(skins[replaydemolist->standings[0].skin].facewant) != LUMPERROR)
{
patch = facewantprefix[replaydemolist->standings[0].skin];
colormap = R_GetTranslationColormap(
replaydemolist->standings[0].skin,
replaydemolist->standings[0].color,
GTC_MENUCACHE);
}
else
{
patch = (patch_t *)W_CachePatchName("M_NOWANT", PU_PATCH);
colormap = R_GetTranslationColormap(
TC_RAINBOW,
replaydemolist->standings[0].color,
GTC_MENUCACHE);
}
V_DrawMappedPatch(BASEVIDWIDTH-15 - patch->width, y+20, V_SNAPTOTOP, patch, colormap);
break;
break;
}
}
@@ -4640,7 +4628,7 @@ static void M_DrawReplayHut(void)
if (i == itemOn)
cursory = localy;
if ((currentMenu->menuitems[i].status & IT_DISPLAY) == IT_STRING)
if ((currentMenu->menuitems[i].status & IT_DISPLAY)==IT_STRING)
V_DrawString(x, localy, V_SNAPTOTOP|V_SNAPTOLEFT, currentMenu->menuitems[i].text);
else
V_DrawString(x, localy, V_SNAPTOTOP|V_SNAPTOLEFT|highlightflags, currentMenu->menuitems[i].text);
@@ -4720,7 +4708,8 @@ static void M_DrawReplayHut(void)
}
// Draw the cursor
V_DrawScaledPatch(currentMenu->x - 24, cursory, V_SNAPTOTOP|V_SNAPTOLEFT, (patch_t *)W_CachePatchName("M_CURSOR", PU_PATCH));
V_DrawScaledPatch(currentMenu->x - 24, cursory, V_SNAPTOTOP|V_SNAPTOLEFT,
(patch_t *)W_CachePatchName("M_CURSOR", PU_PATCH));
V_DrawString(currentMenu->x, cursory, V_SNAPTOTOP|V_SNAPTOLEFT|highlightflags, currentMenu->menuitems[itemOn].text);
// Now draw some replay info!
@@ -4752,38 +4741,34 @@ static void M_DrawReplayStartMenu(void)
M_DrawGenericBackgroundMenu();
const menudemo_t *replaydemolist = &demolist[dir_on[menudepthleft]];
#define STARTY 62-(replayScrollTitle>>1)
// Draw rankings beyond first
for (i = 1; i < MAXPLAYERS && replaydemolist->standings[i].ranking; i++)
for (i = 1; i < MAXPLAYERS && demolist[dir_on[menudepthleft]].standings[i].ranking; i++)
{
patch_t *patch;
UINT8 *colormap;
V_DrawRightAlignedString(BASEVIDWIDTH-100, STARTY + i*20, V_SNAPTOTOP|highlightflags, va("%2d", replaydemolist->standings[i].ranking));
V_DrawThinString(BASEVIDWIDTH-96, STARTY + i*20, V_SNAPTOTOP|V_ALLOWLOWERCASE, replaydemolist->standings[i].name);
V_DrawRightAlignedString(BASEVIDWIDTH-100, STARTY + i*20, V_SNAPTOTOP|highlightflags, va("%2d", demolist[dir_on[menudepthleft]].standings[i].ranking));
V_DrawThinString(BASEVIDWIDTH-96, STARTY + i*20, V_SNAPTOTOP|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].standings[i].name);
const UINT32 timeorscore = replaydemolist->standings[i].timeorscore;
if (timeorscore == UINT32_MAX-1)
if (demolist[dir_on[menudepthleft]].standings[i].timeorscore == UINT32_MAX-1)
V_DrawThinString(BASEVIDWIDTH-92, STARTY + i*20 + 9, V_SNAPTOTOP, "NO CONTEST");
else if (replaydemolist->gametype == GT_RACE)
else if (demolist[dir_on[menudepthleft]].gametype == GT_RACE)
V_DrawRightAlignedString(BASEVIDWIDTH-40, STARTY + i*20 + 9, V_SNAPTOTOP, va("%d'%02d\"%02d",
G_TicsToMinutes(timeorscore, true),
G_TicsToSeconds(timeorscore),
G_TicsToCentiseconds(timeorscore)
G_TicsToMinutes(demolist[dir_on[menudepthleft]].standings[i].timeorscore, true),
G_TicsToSeconds(demolist[dir_on[menudepthleft]].standings[i].timeorscore),
G_TicsToCentiseconds(demolist[dir_on[menudepthleft]].standings[i].timeorscore)
));
else
V_DrawString(BASEVIDWIDTH-92, STARTY + i*20 + 9, V_SNAPTOTOP, va("%d", timeorscore));
V_DrawString(BASEVIDWIDTH-92, STARTY + i*20 + 9, V_SNAPTOTOP, va("%d", demolist[dir_on[menudepthleft]].standings[i].timeorscore));
// Character face!
if (replaydemolist->standings[i].skin < numskins && W_CheckNumForName(skins[replaydemolist->standings[i].skin].facerank) != LUMPERROR)
if (demolist[dir_on[menudepthleft]].standings[i].skin < numskins && W_CheckNumForName(skins[demolist[dir_on[menudepthleft]].standings[i].skin].facerank) != LUMPERROR)
{
patch = facerankprefix[replaydemolist->standings[i].skin];
patch = facerankprefix[demolist[dir_on[menudepthleft]].standings[i].skin];
colormap = R_GetTranslationColormap(
replaydemolist->standings[i].skin,
replaydemolist->standings[i].color,
demolist[dir_on[menudepthleft]].standings[i].skin,
demolist[dir_on[menudepthleft]].standings[i].color,
GTC_MENUCACHE);
}
else
@@ -4791,7 +4776,7 @@ static void M_DrawReplayStartMenu(void)
patch = (patch_t *)W_CachePatchName("M_NORANK", PU_PATCH);
colormap = R_GetTranslationColormap(
TC_RAINBOW,
replaydemolist->standings[i].color,
demolist[dir_on[menudepthleft]].standings[i].color,
GTC_MENUCACHE);
}
@@ -4828,10 +4813,10 @@ static void M_DrawReplayStartMenu(void)
V_DrawFill(10, 10, 300, 60, V_SNAPTOTOP|239);
DrawReplayHutReplayInfo();
V_DrawString(10, 72, V_SNAPTOTOP|highlightflags|V_ALLOWLOWERCASE, replaydemolist->title);
V_DrawString(10, 72, V_SNAPTOTOP|highlightflags|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].title);
// Draw a warning prompt if needed
switch (replaydemolist->addonstatus)
switch (demolist[dir_on[menudepthleft]].addonstatus)
{
case DFILE_ERROR_CANNOTLOAD:
warning = "Some addons in this replay cannot be loaded.\nYou can watch anyway, but desyncs may occur.";
@@ -6258,27 +6243,11 @@ void M_DrawTimeAttackMenu(void)
SHOWMODDEDGAME
const INT32 skinnum = max(cv_chooseskin.value-1, 0); // dont think its needed but better safe than sorry!
const skin_t *skin = &skins[skinnum];
// Character face!
if (W_CheckNumForName(skin->facewant) != LUMPERROR)
if (W_CheckNumForName(skins[cv_chooseskin.value-1].facewant) != LUMPERROR)
{
const INT32 charx = (BASEVIDWIDTH-x - facewantprefix[skinnum]->width);
UINT8 *colormap = NULL;
colormap = R_GetTranslationColormap(skinnum, cv_playercolor.value, GTC_MENUCACHE);
V_DrawMappedPatch(charx, y, 0, facewantprefix[skinnum], colormap);
// draw stats
// speed
colormap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_BLUEBERRY, GTC_CACHE);
V_DrawFixedPatch((charx-6) << FRACBITS, (y-5) << FRACBITS, 3*FRACUNIT/2, 0, kp_facenum[min(9, max(1, skin->kartspeed))], colormap);
// weight
colormap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_BURGUNDY, GTC_CACHE);
V_DrawFixedPatch((charx+25) << FRACBITS, (y+25) << FRACBITS, 3*FRACUNIT/2, 0, kp_facenum[min(9, max(1, skin->kartweight))], colormap);
// idk if kp_facenum are the best numbers for this case? but works with some scaling lul
UINT8 *colormap = R_GetTranslationColormap(cv_chooseskin.value-1, cv_playercolor.value, GTC_MENUCACHE);
V_DrawMappedPatch(BASEVIDWIDTH-x - facewantprefix[cv_chooseskin.value-1]->width, y, 0, facewantprefix[cv_chooseskin.value-1], colormap);
}
for (i = 0; i < currentMenu->numitems; ++i)
@@ -6308,7 +6277,7 @@ void M_DrawTimeAttackMenu(void)
}
else
{
const char *str = ((cv == &cv_chooseskin) ? skin->realname : cv->string);
const char *str = ((cv == &cv_chooseskin) ? skins[cv_chooseskin.value-1].realname : cv->string);
INT32 soffset = 40, strw = V_StringWidth(str, 0);
// hack to keep the menu from overlapping the level icon
@@ -6353,12 +6322,10 @@ void M_DrawTimeAttackMenu(void)
{
tic_t lap = 0, time = 0;
const recorddata_t *currecord = mainrecords[cv_nextmap.value-1];
if (currecord)
if (mainrecords[cv_nextmap.value-1])
{
lap = currecord->lap;
time = currecord->time;
lap = mainrecords[cv_nextmap.value-1]->lap;
time = mainrecords[cv_nextmap.value-1]->time;
}
V_DrawFill((BASEVIDWIDTH - vid.scaledwidth)>>1, 78, vid.scaledwidth, 36, 239);
@@ -6380,7 +6347,6 @@ void M_DrawTimeAttackMenu(void)
y = currentMenu->y+SP_TimeAttackMenu[i].alphaKey;
V_DrawString(x, y, V_TRANSLUCENT|MENUCAPS, SP_TimeAttackMenu[i].text);
ncv = (consvar_t *)SP_TimeAttackMenu[i].itemaction;
if (SP_TimeAttackMenu[i].status & IT_CV_STRING)
{
M_DrawTextBox(x + 32, y - 8, MAXPLAYERNAME, 1);
@@ -6388,7 +6354,7 @@ void M_DrawTimeAttackMenu(void)
}
else
{
const char *str = ((ncv == &cv_chooseskin) ? skin->realname : ncv->string);
const char *str = ((ncv == &cv_chooseskin) ? skins[cv_chooseskin.value-1].realname : ncv->string);
INT32 soffset = 40, strw = V_StringWidth(str, 0);
// hack to keep the menu from overlapping the level icon
@@ -7416,8 +7382,7 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
patch_t *PictureOfLevel;
INT32 x, y, w, i, oldval, trans, dupadjust = (vid.scaledwidth - BASEVIDWIDTH)>>1;
// so it doesent show in record attack menu
if (levellistmode != LLM_RECORDATTACK && M_SecretUnlocked(SECRET_ENCORE)) // gotta have it unlocked first ofc
if (levellistmode != LLM_RECORDATTACK) // so it doesent show in record attack menu
{
char encoretoggle[32] = {0};
const char *item1 = gamecontrol[0][gc_fire][0] != 0 ? G_KeynumToString(gamecontrol[0][gc_fire][0]) : NULL;
@@ -9551,14 +9516,6 @@ static void M_ChangecontrolResponse(event_t *ev)
// replace mouse and joy clicks by double clicks
if (ch >= KEY_MOUSE1 && ch <= KEY_MOUSE1+MOUSEBUTTONS)
setupcontrols[control][found] = ch-KEY_MOUSE1+KEY_DBLMOUSE1;
else if (ch >= KEY_JOY1 && ch <= KEY_JOY1+JOYBUTTONS)
setupcontrols[control][found] = ch-KEY_JOY1+KEY_DBLJOY1;
else if (ch >= KEY_2JOY1 && ch <= KEY_2JOY1+JOYBUTTONS)
setupcontrols[control][found] = ch-KEY_2JOY1+KEY_DBL2JOY1;
else if (ch >= KEY_3JOY1 && ch <= KEY_3JOY1+JOYBUTTONS)
setupcontrols[control][found] = ch-KEY_3JOY1+KEY_DBL3JOY1;
else if (ch >= KEY_4JOY1 && ch <= KEY_4JOY1+JOYBUTTONS)
setupcontrols[control][found] = ch-KEY_4JOY1+KEY_DBL4JOY1;
}
else
{
@@ -9792,13 +9749,6 @@ static void M_DrawHUDOptions(void)
V_DrawRightAlignedString(x, y, highlightflags, "(");
}
static void M_CameraMenu(INT32 choice)
{
(void)choice;
OP_CamOptionsDef.prevMenu = currentMenu;
M_SetupNextMenu(&OP_CamOptionsDef);
}
static void M_LocalSkinMenu(INT32 choice)
{
(void)choice;
+3 -3
View File
@@ -600,7 +600,7 @@ static menuitem_t OP_MainMenu[] =
{IT_SUBMENU|IT_STRING, NULL, "Game Focus Options...", &OP_FocusOptionsDef, 33},
{IT_SUBMENU|IT_STRING, NULL, "HUD Options...", &OP_HUDOptionsDef, 46},
{IT_CALL|IT_STRING, NULL, "Camera Options...", M_CameraMenu, 56},
{IT_SUBMENU|IT_STRING, NULL, "Camera Options...", &OP_CamOptionsDef, 56},
{IT_SUBMENU|IT_STRING, NULL, "Gameplay Options...", &OP_GameOptionsDef, 66},
{IT_SUBMENU|IT_STRING, NULL, "Server Options...", &OP_ServerOptionsDef, 76},
@@ -610,7 +610,7 @@ static menuitem_t OP_MainMenu[] =
{IT_CALL|IT_STRING, NULL, "Tricks & Secrets (F1)", M_Manual, 109},
{IT_CALL|IT_STRING, NULL, "Play Credits", M_Credits, 119},
{IT_SUBMENU|IT_STRING, NULL, "Accessibility Options...", &OP_AccessibilityDef, 132},
{IT_SUBMENU|IT_STRING, NULL, "Accessibility Options...",&OP_AccessibilityDef, 132},
{IT_SUBMENU|IT_STRING, NULL, "Saturn Options...", &OP_SaturnDef, 142},
{IT_SUBMENU|IT_STRING, NULL, "Bird...", &OP_BirdDef, 152},
@@ -1646,7 +1646,7 @@ static menuitem_t OP_AccessibilityMenu[] =
{IT_STRING|IT_CVAR, NULL, "Quake Screenshakes", &cv_screenquake, 60},
{IT_CALL|IT_STRING, NULL, "Camera Options...", M_CameraMenu, 65},
{IT_SUBMENU|IT_STRING, NULL, "Camera Options...", &OP_CamOptionsDef, 65},
{IT_HEADER, NULL, "Audio", NULL, 75},
+4 -4
View File
@@ -680,11 +680,11 @@ INT32 P_AddLevelFlat(const char *flatname, levelflat_t *levelflat)
if (i == numlevelflats)
{
// store the name
strlcpy(levelflat->name, flatname, sizeof(levelflat->name));
strlcpy(levelflat->name, flatname, sizeof (levelflat->name));
strupr(levelflat->name);
// store the flat lump number
levelflat->lumpnum = R_GetFlatNumForName(levelflat->name);
levelflat->lumpnum = R_GetFlatNumForName(flatname);
levelflat->baselumpnum = LUMPERROR;
P_CheckCyanFlat(levelflat);
@@ -727,11 +727,11 @@ INT32 P_AddLevelFlatRuntime(const char *flatname)
levelflat = levelflats+i;
// store the name
strlcpy(levelflat->name, flatname, sizeof(levelflat->name));
strlcpy(levelflat->name, flatname, sizeof (levelflat->name));
strupr(levelflat->name);
// store the flat lump number
levelflat->lumpnum = R_GetFlatNumForName(levelflat->name);
levelflat->lumpnum = R_GetFlatNumForName(flatname);
levelflat->baselumpnum = LUMPERROR;
P_CheckCyanFlat(levelflat);
+111 -6
View File
@@ -53,7 +53,7 @@ mobj_t *skyboxmo[2] = {};
#define MAXFLATSIZE (2048<<FRACBITS)
/** Animated texture definition.
* Used for loading an ANIMATED lump from a wad.
* Used for ::harddefs and for loading an ANIMATED lump from a wad.
*
* Animations are defined by the first and last frame (i.e., flat or texture).
* The animation sequence uses all flats between the start and end entry, in
@@ -97,6 +97,104 @@ anim_t *lastanim = NULL;
anim_t *anims = NULL; /// \todo free leak
static size_t maxanims;
//
// P_InitPicAnims
//
/** Hardcoded animation sequences.
* Used if no ANIMATED lump is found in a loaded wad.
*/
static animdef_t harddefs[] =
{
// flat animations.
{false, "LITEY3", "LITEY1", 4},
{false, "FWATER16", "FWATER1", 4},
{false, "BWATER16", "BWATER01", 4},
{false, "LWATER16", "LWATER1", 4},
{false, "WATER7", "WATER0", 4},
{false, "LAVA4", "LAVA1", 8},
{false, "DLAVA4", "DLAVA1", 8},
{false, "RLAVA8", "RLAVA1", 8},
{false, "LITER3", "LITER1", 8},
{false, "SURF08", "SURF01", 4},
{false, "CHEMG16", "CHEMG01", 4}, // THZ Chemical gunk
{false, "GOOP16", "GOOP01", 4}, // Green chemical gunk
{false, "OIL16", "OIL01", 4}, // Oil
{false, "THZBOXF4", "THZBOXF1", 2}, // Moved up with the flats
{false, "ALTBOXF4", "ALTBOXF1", 2},
{false, "LITEB3", "LITEB1", 4},
{false, "LITEN3", "LITEN1", 4},
{false, "ACZRFL1H", "ACZRFL1A", 4},
{false, "ACZRFL2H", "ACZRFL2A", 4},
{false, "EGRIDF3", "EGRIDF1", 4},
{false, "ERZFAN4", "ERZFAN1", 1},
{false, "ERZFANR4", "ERZFANR1", 1},
{false, "DISCO4", "DISCO1", 15},
// animated textures
{true, "GFALL4", "GFALL1", 2}, // Short waterfall
{true, "CFALL4", "CFALL1", 2}, // Long waterfall
{true, "TFALL4", "TFALL1", 2}, // THZ Chemical fall
{true, "AFALL4", "AFALL1", 2}, // Green Chemical fall
{true, "QFALL4", "QFALL1", 2}, // Quicksand fall
{true, "Q2FALL4", "Q2FALL1", 2},
{true, "Q3FALL4", "Q3FALL1", 2},
{true, "Q4FALL4", "Q4FALL1", 2},
{true, "Q5FALL4", "Q5FALL1", 2},
{true, "Q6FALL4", "Q6FALL1", 2},
{true, "Q7FALL4", "Q7FALL1", 2},
{true, "LFALL4", "LFALL1", 2},
{true, "MFALL4", "MFALL1", 2},
{true, "OFALL4", "OFALL1", 2},
{true, "DLAVA4", "DLAVA1", 8},
{true, "ERZLASA2", "ERZLASA1", 1},
{true, "ERZLASB4", "ERZLASB1", 1},
{true, "ERZLASC4", "ERZLASC1", 1},
{true, "THZBOX04", "THZBOX01", 2},
{true, "ALTBOX04", "ALTBOX01", 2},
{true, "SFALL4", "SFALL1", 4}, // Lava fall
{true, "RVZFALL8", "RVZFALL1", 4},
{true, "BFALL4", "BFALL1", 2}, // HPZ waterfall
{true, "GREYW3", "GREYW1", 4},
{true, "BLUEW3", "BLUEW1", 4},
{true, "COMP6", "COMP4", 4},
{true, "RED3", "RED1", 4},
{true, "YEL3", "YEL1", 4},
{true, "ACWRFL1D", "ACWRFL1A", 1},
{true, "ACWRFL2D", "ACWRFL2A", 1},
{true, "ACWRFL3D", "ACWRFL3A", 1},
{true, "ACWRFL4D", "ACWRFL4A", 1},
{true, "ACWRP1D", "ACWRP1A", 1},
{true, "ACWRP2D", "ACWRP2A", 1},
{true, "ACZRP1D", "ACZRP1A", 1},
{true, "ACZRP2D", "ACZRP2A", 1},
{true, "OILFALL4", "OILFALL1", 2},
{true, "SOLFALL4", "SOLFALL1", 2},
{true, "DOWN1C", "DOWN1A", 4},
{true, "DOWN2C", "DOWN2A", 4},
{true, "DOWN3D", "DOWN3A", 4},
{true, "DOWN4C", "DOWN4A", 4},
{true, "DOWN5C", "DOWN5A", 4},
{true, "UP1C", "UP1A", 4},
{true, "UP2C", "UP2A", 4},
{true, "UP3D", "UP3A", 4},
{true, "UP4C", "UP4A", 4},
{true, "UP5C", "UP5A", 4},
{true, "EGRID3", "EGRID1", 4},
{true, "ERFANW4", "ERFANW1", 1},
{true, "ERFANX4", "ERFANX1", 1},
{true, "DISCOD4", "DISCOD1", 15},
{true, "DANCE4", "DANCE1", 8},
{true, "SKY135", "SKY132", 2},
{true, "APPLMS4", "APPLMS1", 2},
{true, "APBOXW3", "APBOXW1", 2},
{true, "ERZLAZC4", "ERZLAZC1", 4},
// End of line
{ -1, "", "", 0},
};
// Animating line specials
// Init animated textures
@@ -110,7 +208,7 @@ void P_ParseAnimationDefintion(SINT8 istexture);
/** Sets up texture and flat animations.
*
* Converts an ::animdef_t array loaded from a lump into
* Converts an ::animdef_t array loaded from ::harddefs or a lump into
* ::anim_t format.
*
* Issues an error if any animation cycles are invalid.
@@ -156,9 +254,7 @@ void P_InitPicAnims(void)
{
memcpy(&(animdefs[i].istexture), currentPos, 1); // istexture, 1 byte
memcpy(animdefs[i].endname, (currentPos + 1), 9); // endname, 9 bytes
animdefs[i].endname[8] = '\0';
memcpy(animdefs[i].startname, (currentPos + 10), 9); // startname, 9 bytes
animdefs[i].startname[8] = '\0';
memcpy(&(animdefs[i].speed), (currentPos + 19), 4); // speed, 4 bytes
}
@@ -179,6 +275,11 @@ void P_InitPicAnims(void)
strncpy(animdefs[maxanims].startname, "", 9);
animdefs[maxanims].speed = 0;
}
else
{
animdefs = harddefs;
for (maxanims = 0; animdefs[maxanims].istexture != -1; maxanims++);
}
if (anims)
free(anims);
@@ -217,7 +318,10 @@ void P_InitPicAnims(void)
animdefs[i].startname, animdefs[i].endname);
}
lastanim->speed = LONG(animdefs[i].speed);
if (animdefs == harddefs)
lastanim->speed = animdefs[i].speed;
else
lastanim->speed = LONG(animdefs[i].speed);
lastanim++;
}
@@ -226,7 +330,8 @@ void P_InitPicAnims(void)
// Clear animdefs now that we're done with it.
// We'll only be using anims from now on.
Z_Free(animdefs);
if (animdefs != harddefs)
Z_Free(animdefs);
animdefs = NULL;
}
+99 -108
View File
@@ -78,6 +78,7 @@ void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move)
mo->momy += FixedMul(move, FINESINE(angle));
}
//
// P_InstaThrust
// Moves the given origin along a given angle instantly.
@@ -238,11 +239,10 @@ void P_GiveEmerald(boolean spawnObj)
if (spawnObj)
{
for (i = 0; i < MAXPLAYERS; i++)
{
if (playeringame[i])
P_SetMobjState(P_SpawnMobj(players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->info->height, MT_GOTEMERALD),
mobjinfo[MT_GOTEMERALD].spawnstate + em);
}
}
}
@@ -352,9 +352,9 @@ void P_DoPlayerPain(player_t *player, mobj_t *source, mobj_t *inflictor)
player->mo->z++;
if (player->mo->eflags & MFE_UNDERWATER)
P_SetObjectMomZ(player->mo, FixedDiv(10511*FRACUNIT, 2600*FRACUNIT), false);
P_SetObjectMomZ(player->mo, FixedDiv(10511*FRACUNIT,2600*FRACUNIT), false);
else
P_SetObjectMomZ(player->mo, FixedDiv(69*FRACUNIT, 10*FRACUNIT), false);
P_SetObjectMomZ(player->mo, FixedDiv(69*FRACUNIT,10*FRACUNIT), false);
}
ang = R_PointToAngle2(inflictor->x, inflictor->y, player->mo->x, player->mo->y); // SRB2kart
@@ -619,11 +619,11 @@ boolean P_EndingMusic(player_t *player)
// Check for if this is valid or not
if (splitscreen)
{
for (UINT8 i = 0; i <= splitscreen; i++)
{
if (!(players[displayplayers[i]].exiting || (players[displayplayers[i]].pflags & PF_TIMEOVER)))
return false;
}
if (!((players[displayplayers[0]].exiting || (players[displayplayers[0]].pflags & PF_TIMEOVER))
|| (players[displayplayers[1]].exiting || (players[displayplayers[1]].pflags & PF_TIMEOVER))
|| ((splitscreen < 2) && (players[displayplayers[2]].exiting || (players[displayplayers[2]].pflags & PF_TIMEOVER)))
|| ((splitscreen < 3) && (players[displayplayers[3]].exiting || (players[displayplayers[3]].pflags & PF_TIMEOVER)))))
return false;
bestlocalplayer = &players[displayplayers[0]];
bestlocalpos = ((players[displayplayers[0]].pflags & PF_TIMEOVER) ? MAXPLAYERS+1 : getPlayerPos(&players[displayplayers[0]]));
@@ -703,74 +703,71 @@ void P_RestoreMusic(player_t *player)
// Event - Level Start
if (leveltime < MUSICSTARTTIME)
{
S_StartMapMusic();
return;
}
// see also where time overs are handled - search for "lives = 2" in this file
INT32 wantedmus = 0; // 0 is level music, 1 is invincibility, 2 is grow
if (splitscreen)
else // see also where time overs are handled - search for "lives = 2" in this file
{
INT32 bestlocaltimer = 1;
INT32 wantedmus = 0; // 0 is level music, 1 is invincibility, 2 is grow
if (splitscreen)
{
INT32 bestlocaltimer = 1;
#define setbests(p) \
if (players[p].playerstate == PST_LIVE) \
{ \
if (players[p].kartstuff[k_growshrinktimer] > bestlocaltimer) \
{ wantedmus = 2; bestlocaltimer = players[p].kartstuff[k_growshrinktimer]; } \
else if (players[p].kartstuff[k_invincibilitytimer] > bestlocaltimer) \
{ wantedmus = 1; bestlocaltimer = players[p].kartstuff[k_invincibilitytimer]; } \
}
setbests(displayplayers[0]);
setbests(displayplayers[1]);
if (splitscreen > 1)
setbests(displayplayers[2]);
if (splitscreen > 2)
setbests(displayplayers[3]);
if (players[p].playerstate == PST_LIVE) \
{ \
if (players[p].kartstuff[k_growshrinktimer] > bestlocaltimer) \
{ wantedmus = 2; bestlocaltimer = players[p].kartstuff[k_growshrinktimer]; } \
else if (players[p].kartstuff[k_invincibilitytimer] > bestlocaltimer) \
{ wantedmus = 1; bestlocaltimer = players[p].kartstuff[k_invincibilitytimer]; } \
}
setbests(displayplayers[0]);
setbests(displayplayers[1]);
if (splitscreen > 1)
setbests(displayplayers[2]);
if (splitscreen > 2)
setbests(displayplayers[3]);
#undef setbests
}
else
{
if (player->playerstate == PST_LIVE)
{
if (player->kartstuff[k_growshrinktimer] > 1)
wantedmus = 2;
else if (player->kartstuff[k_invincibilitytimer] > 1)
wantedmus = 1;
}
}
// Item - Grow
if (wantedmus == 2 && cv_growmusic.value == 1)
{
S_ChangeMusicInternal("kgrow", true);
S_SetRestoreMusicFadeInCvar(&cv_growmusicfade);
}
// Item - Invincibility
else if (wantedmus == 1 && cv_supermusic.value == 1)
{
S_ChangeMusicInternal("kinvnc", true);
S_SetRestoreMusicFadeInCvar(&cv_invincmusicfade);
}
else
{
#if 0
// Event - Final Lap
// Still works for GME, but disabled for consistency
if (G_RaceGametype() && player->laps >= (UINT8)(cv_numlaps.value - 1))
S_SpeedMusic(1.2f);
#endif
if (mapmusic.resume && cv_resume.value) // mapmusresume will be 0 anyways when birdmusic stuff is disabled
position = mapmusic.resume;
else
position = mapmusic.position;
{
if (player->playerstate == PST_LIVE)
{
if (player->kartstuff[k_growshrinktimer] > 1)
wantedmus = 2;
else if (player->kartstuff[k_invincibilitytimer] > 1)
wantedmus = 1;
}
}
S_ChangeMusicEx(mapmusic.name, mapmusic.flags, true, position, 0, S_GetRestoreMusicFadeIn());
S_ClearRestoreMusicFadeInCvar();
mapmusic.resume = 0;
// Item - Grow
if (wantedmus == 2 && cv_growmusic.value == 1)
{
S_ChangeMusicInternal("kgrow", true);
S_SetRestoreMusicFadeInCvar(&cv_growmusicfade);
}
// Item - Invincibility
else if (wantedmus == 1 && cv_supermusic.value == 1)
{
S_ChangeMusicInternal("kinvnc", true);
S_SetRestoreMusicFadeInCvar(&cv_invincmusicfade);
}
else
{
#if 0
// Event - Final Lap
// Still works for GME, but disabled for consistency
if (G_RaceGametype() && player->laps >= (UINT8)(cv_numlaps.value - 1))
S_SpeedMusic(1.2f);
#endif
if (mapmusic.resume && cv_resume.value) // mapmusresume will be 0 anyways when birdmusic stuff is disabled
position = mapmusic.resume;
else
position = mapmusic.position;
S_ChangeMusicEx(mapmusic.name, mapmusic.flags, true, position, 0, S_GetRestoreMusicFadeIn());
S_ClearRestoreMusicFadeInCvar();
mapmusic.resume = 0;
}
}
}
@@ -974,7 +971,7 @@ fixed_t P_GetPlayerHeight(player_t *player)
//
fixed_t P_GetPlayerSpinHeight(player_t *player)
{
return FixedMul(FixedMul(player->mo->info->height, player->mo->scale), 2*FRACUNIT/3);
return FixedMul(FixedMul(player->mo->info->height, player->mo->scale),2*FRACUNIT/3);
}
//
@@ -1025,9 +1022,7 @@ boolean P_IsLocalPlayer(const player_t *player)
for (i = 0; i <= splitscreen; i++)
{
if (player == P_GetLocalPlayerForNum(i))
{
return true;
}
}
return false;
@@ -1046,9 +1041,7 @@ boolean P_IsLocalPlayerNum(UINT8 pnum)
for (i = 0; i <= splitscreen; i++)
{
if (pnum == P_GetLocalPlayerNumForNum(i))
{
return true;
}
}
return false;
@@ -1076,9 +1069,7 @@ boolean P_IsDisplayPlayer(const player_t *player)
}
if (player == &players[displayplayers[i]])
{
return true;
}
}
return false;
@@ -1265,9 +1256,7 @@ void P_DoPlayerExit(player_t *player)
if (player->exiting || mapreset)
return;
const boolean islocalplayer = P_IsLocalPlayer(player);
if (islocalplayer && (!player->spectator && !demo.playback))
if (P_IsLocalPlayer(player) && (!player->spectator && !demo.playback))
legitimateexit = true;
if (player->griefstrikes > 0)
@@ -1282,7 +1271,7 @@ void P_DoPlayerExit(player_t *player)
{
const int soundid = K_IsPlayerLosing(player) ? sfx_klose: sfx_kwin; // fix godjjsa win sounds
if (islocalplayer)
if (P_IsLocalPlayer(player))
{
sfxenum_t sfx_id = K_GetMobjSkin(player->mo)->soundsid[S_sfx[soundid].skinsound];
S_StartSound(NULL, sfx_id);
@@ -1336,13 +1325,12 @@ boolean P_InSpaceSector(mobj_t *mo) // Returns true if you are in space
if (GETSECSPECIAL(rover->master->frontsector->special, 1) != SPACESPECIAL)
continue;
topheight = P_GetFFloorTopZAt(rover, mo->x, mo->y);
topheight = P_GetFFloorTopZAt(rover, mo->x, mo->y);
bottomheight = P_GetFFloorBottomZAt(rover, mo->x, mo->y);
if (mo->z + (mo->height/2) > topheight)
continue;
bottomheight = P_GetFFloorBottomZAt(rover, mo->x, mo->y);
if (mo->z + (mo->height/2) < bottomheight)
continue;
@@ -1373,13 +1361,12 @@ boolean P_InQuicksand(mobj_t *mo) // Returns true if you are in quicksand
if (!(rover->flags & FF_QUICKSAND))
continue;
topheight = P_GetFFloorTopZAt(rover, mo->x, mo->y);
topheight = P_GetFFloorTopZAt(rover, mo->x, mo->y);
bottomheight = P_GetFFloorBottomZAt(rover, mo->x, mo->y);
if (mo->z + flipoffset > topheight)
continue;
bottomheight = P_GetFFloorBottomZAt(rover, mo->x, mo->y);
if (mo->z + (mo->height/2) + flipoffset < bottomheight)
continue;
@@ -1561,12 +1548,13 @@ static void P_CheckBouncySectors(player_t *player)
if (top)
{
fixed_t newmom;
pslope_t *slope;
if (abs(oldz - topheight) < abs(oldz + player->mo->height - bottomheight)) // Hit top
pslope_t *slope;
if (abs(oldz - topheight) < abs(oldz + player->mo->height - bottomheight)) { // Hit top
slope = *rover->t_slope;
else // Hit bottom
} else { // Hit bottom
slope = *rover->b_slope;
}
momentum.x = player->mo->momx;
momentum.y = player->mo->momy;
@@ -1657,8 +1645,7 @@ static void P_CheckQuicksand(player_t *player)
for (rover = player->mo->subsector->sector->ffloors; rover; rover = rover->next)
{
if (!(rover->flags & FF_EXISTS))
continue;
if (!(rover->flags & FF_EXISTS)) continue;
if (!(rover->flags & FF_QUICKSAND))
continue;
@@ -1716,8 +1703,10 @@ static void P_CheckInvincibilityTimer(player_t *player)
{
if (!player->powers[pw_super])
{
player->mo->color = player->skincolor;
G_GhostAddColor((INT32)(player - players), GHC_NORMAL);
{
player->mo->color = player->skincolor;
G_GhostAddColor((INT32) (player - players), GHC_NORMAL);
}
// If you had a shield, restore its visual significance
P_SpawnShieldOrb(player);
@@ -1742,7 +1731,7 @@ static void P_DoBubbleBreath(player_t *player)
else
zh = player->mo->z + FixedDiv(player->mo->height,5*(FRACUNIT/4));
if (!(player->mo->eflags & MFE_UNDERWATER) || player->spectator || ((player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL && !(player->pflags & PF_NIGHTSMODE)))
if (!(player->mo->eflags & MFE_UNDERWATER) || ((player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL && !(player->pflags & PF_NIGHTSMODE)) || player->spectator)
return;
if (P_RandomChance(FRACUNIT/16))
@@ -1756,6 +1745,9 @@ static void P_DoBubbleBreath(player_t *player)
bubble->destscale = player->mo->scale;
P_SetScale(bubble, bubble->destscale);
}
//if (player->pflags & PF_NIGHTSMODE) // NiGHTS Super doesn't spawn flight bubbles
//return;
}
//
@@ -1868,10 +1860,10 @@ void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range)
if (!P_CheckSight(player->mo, mo2))
continue; // if your psychic powers can't "see" it don't bother
an = R_PointToAngle2(player->mo->x, player->mo->y, mo2->x, mo2->y);
if (mo2->health > 0)
{
an = R_PointToAngle2(player->mo->x, player->mo->y, mo2->x, mo2->y);
P_Thrust(mo2, an, thrust);
if (mo2->type == MT_GOLDBUZZ || mo2->type == MT_REDBUZZ)
@@ -2021,17 +2013,12 @@ static void P_3dMovement(player_t *player)
// The rest is unaffected.
angle_t thrustangle = R_PointToAngle2(0, 0, totalthrust.x, totalthrust.y)-player->mo->standingslope->xydirection;
if (player->mo->standingslope->zdelta < 0) // Direction goes down, so thrustangle needs to face toward
{
if (thrustangle < ANGLE_90 || thrustangle > ANGLE_270)
{
if (player->mo->standingslope->zdelta < 0) { // Direction goes down, so thrustangle needs to face toward
if (thrustangle < ANGLE_90 || thrustangle > ANGLE_270) {
P_QuantizeMomentumToSlope(&totalthrust, player->mo->standingslope);
}
}
else // Direction goes up, so thrustangle needs to face away
{
if (thrustangle > ANGLE_90 && thrustangle < ANGLE_270)
{
} else { // Direction goes up, so thrustangle needs to face away
if (thrustangle > ANGLE_90 && thrustangle < ANGLE_270) {
P_QuantizeMomentumToSlope(&totalthrust, player->mo->standingslope);
}
}
@@ -2114,6 +2101,10 @@ static void P_SpectatorMovement(player_t *player)
// Quake-style flying spectators :D
player->mo->momz += FixedMul(cmd->forwardmove*mapobjectscale, AIMINGTOSLOPE(player->aiming));
}
/*if (cmd->sidemove != 0) -- was disabled in practice anyways, since sidemove was suppressed
{
P_Thrust(player->mo, player->mo->angle-ANGLE_90, cmd->sidemove*mapobjectscale);
}*/
}
void P_BlackOw(player_t *player)
@@ -2742,9 +2733,6 @@ boolean P_LookForEnemies(player_t *player)
if (!(mo->flags & (MF_ENEMY|MF_BOSS|MF_MONITOR|MF_SPRING)))
continue; // not a valid enemy
if (mo->type == MT_PLAYER) // Don't chase after other players!
continue;
if (mo->health <= 0) // dead
continue;
@@ -2772,6 +2760,9 @@ boolean P_LookForEnemies(player_t *player)
&& abs(player->mo->y-mo->y) > player->mo->radius))
continue; // not in your 2d plane
if (mo->type == MT_PLAYER) // Don't chase after other players!
continue;
if (closestmo && P_AproxDistance(P_AproxDistance(player->mo->x-mo->x, player->mo->y-mo->y),
player->mo->z-mo->z) > P_AproxDistance(P_AproxDistance(player->mo->x-closestmo->x,
player->mo->y-closestmo->y), player->mo->z-closestmo->z))