mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-19 07:51:43 +00:00
Merge branch 'next' of git@git.magicalgirl.moe:STJr/SRB2.git into Tatsuru/SRB2-dye
# Conflicts: # src/d_player.h # src/dehacked.c
This commit is contained in:
commit
3022e38d15
27 changed files with 315 additions and 66 deletions
11
src/d_main.c
11
src/d_main.c
|
@ -1212,12 +1212,7 @@ void D_SRB2Main(void)
|
|||
|
||||
// load wad, including the main wad file
|
||||
CONS_Printf("W_InitMultipleFiles(): Adding IWAD and main PWADs.\n");
|
||||
if (!W_InitMultipleFiles(startupwadfiles, mainwads))
|
||||
#ifdef _DEBUG
|
||||
CONS_Error("A WAD file was not found or not valid.\nCheck the log to see which ones.\n");
|
||||
#else
|
||||
I_Error("A WAD file was not found or not valid.\nCheck the log to see which ones.\n");
|
||||
#endif
|
||||
W_InitMultipleFiles(startupwadfiles, mainwads);
|
||||
D_CleanFile();
|
||||
|
||||
#ifndef DEVELOP // md5s last updated 16/02/20 (ddmmyy)
|
||||
|
@ -1297,12 +1292,14 @@ void D_SRB2Main(void)
|
|||
// Lactozilla: Does the render mode need to change?
|
||||
if ((setrenderneeded != 0) && (setrenderneeded != rendermode))
|
||||
{
|
||||
CONS_Printf("Switching the renderer...\n");
|
||||
needpatchflush = true;
|
||||
needpatchrecache = true;
|
||||
VID_CheckRenderer();
|
||||
SCR_ChangeRendererCVars(setrenderneeded);
|
||||
D_CheckRendererState();
|
||||
setrenderneeded = 0;
|
||||
}
|
||||
D_CheckRendererState();
|
||||
|
||||
wipegamestate = gamestate;
|
||||
|
||||
|
|
|
@ -370,7 +370,7 @@ consvar_t cv_advancemap = {"advancemap", "Next", CV_NETVAR, advancemap_cons_t, N
|
|||
static CV_PossibleValue_t playersforexit_cons_t[] = {{0, "One"}, {1, "1/4"}, {2, "Half"}, {3, "3/4"}, {4, "All"}, {0, NULL}};
|
||||
consvar_t cv_playersforexit = {"playersforexit", "All", CV_NETVAR, playersforexit_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_exitmove = {"exitmove", "Off", CV_NETVAR|CV_CALL, CV_OnOff, ExitMove_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_exitmove = {"exitmove", "On", CV_NETVAR|CV_CALL, CV_OnOff, ExitMove_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_runscripts = {"runscripts", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
|
@ -3750,9 +3750,15 @@ static void ExitMove_OnChange(void)
|
|||
if (cv_exitmove.value)
|
||||
{
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
if (playeringame[i] && players[i].mo
|
||||
&& players[i].mo->target && players[i].mo->target->type == MT_SIGN)
|
||||
P_SetTarget(&players[i].mo->target, NULL);
|
||||
if (playeringame[i] && players[i].mo)
|
||||
{
|
||||
if (players[i].mo->target && players[i].mo->target->type == MT_SIGN)
|
||||
P_SetTarget(&players[i].mo->target, NULL);
|
||||
|
||||
if (players[i].pflags & PF_FINISHED)
|
||||
P_GiveFinishFlags(&players[i]);
|
||||
}
|
||||
|
||||
CONS_Printf(M_GetText("Players can now move after completing the level.\n"));
|
||||
}
|
||||
else
|
||||
|
|
|
@ -278,9 +278,11 @@ typedef enum
|
|||
pw_nights_linkfreeze,
|
||||
|
||||
pw_nocontrol, //for linedef exec 427
|
||||
|
||||
|
||||
pw_dye, // for dyes
|
||||
|
||||
pw_justlaunched, // Launched off a slope this tic (0=none, 1=standard launch, 2=half-pipe launch)
|
||||
|
||||
NUMPOWERS
|
||||
} powertype_t;
|
||||
|
||||
|
|
|
@ -1806,6 +1806,24 @@ static void readlevelheader(MYFILE *f, INT32 num)
|
|||
else
|
||||
mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARD;
|
||||
}
|
||||
else if (fastcmp(word, "SHOWTITLECARDFOR"))
|
||||
{
|
||||
mapheaderinfo[num-1]->levelflags |= LF_NOTITLECARD;
|
||||
tmp = strtok(word2,",");
|
||||
do {
|
||||
if (fastcmp(tmp, "FIRST"))
|
||||
mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARDFIRST;
|
||||
else if (fastcmp(tmp, "RESPAWN"))
|
||||
mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARDRESPAWN;
|
||||
else if (fastcmp(tmp, "RECORDATTACK"))
|
||||
mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARDRECORDATTACK;
|
||||
else if (fastcmp(tmp, "ALL"))
|
||||
mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARD;
|
||||
else if (!fastcmp(tmp, "NONE"))
|
||||
deh_warning("Level header %d: unknown titlecard show option %s\n", num, tmp);
|
||||
|
||||
} while((tmp = strtok(NULL,",")) != NULL);
|
||||
}
|
||||
|
||||
// Individual triggers for menu flags
|
||||
else if (fastcmp(word, "HIDDEN"))
|
||||
|
@ -7460,6 +7478,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
|
||||
// Got Flag Sign
|
||||
"S_GOTFLAG",
|
||||
|
||||
// Finish flag
|
||||
"S_FINISHFLAG",
|
||||
|
||||
"S_CORK",
|
||||
"S_LHRT",
|
||||
|
@ -8581,6 +8602,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_LOCKONINF", // In-level Target
|
||||
"MT_TAG", // Tag Sign
|
||||
"MT_GOTFLAG", // Got Flag sign
|
||||
"MT_FINISHFLAG", // Finish flag
|
||||
|
||||
// Ambient Sounds
|
||||
"MT_AWATERA", // Ambient Water Sound 1
|
||||
|
@ -8971,9 +8993,11 @@ static const char *COLOR_ENUMS[] = {
|
|||
// Desaturated
|
||||
"AETHER", // SKINCOLOR_AETHER,
|
||||
"SLATE", // SKINCOLOR_SLATE,
|
||||
"BLUEBELL", // SKINCOLOR_BLUEBELL,
|
||||
"PINK", // SKINCOLOR_PINK,
|
||||
"YOGURT", // SKINCOLOR_YOGURT,
|
||||
"BROWN", // SKINCOLOR_BROWN,
|
||||
"BRONZE", // SKINCOLOR_BRONZE,
|
||||
"TAN", // SKINCOLOR_TAN,
|
||||
"BEIGE", // SKINCOLOR_BEIGE,
|
||||
"MOSS", // SKINCOLOR_MOSS,
|
||||
|
@ -8986,9 +9010,11 @@ static const char *COLOR_ENUMS[] = {
|
|||
"RED", // SKINCOLOR_RED,
|
||||
"CRIMSON", // SKINCOLOR_CRIMSON,
|
||||
"FLAME", // SKINCOLOR_FLAME,
|
||||
"KETCHUP", // SKINCOLOR_KETCHUP,
|
||||
"PEACHY", // SKINCOLOR_PEACHY,
|
||||
"QUAIL", // SKINCOLOR_QUAIL,
|
||||
"SUNSET", // SKINCOLOR_SUNSET,
|
||||
"COPPER", // SKINCOLOR_COPPER,
|
||||
"APRICOT", // SKINCOLOR_APRICOT,
|
||||
"ORANGE", // SKINCOLOR_ORANGE,
|
||||
"RUST", // SKINCOLOR_RUST,
|
||||
|
@ -8998,6 +9024,7 @@ static const char *COLOR_ENUMS[] = {
|
|||
"OLIVE", // SKINCOLOR_OLIVE,
|
||||
"LIME", // SKINCOLOR_LIME,
|
||||
"PERIDOT", // SKINCOLOR_PERIDOT,
|
||||
"APPLE", // SKINCOLOR_APPLE,
|
||||
"GREEN", // SKINCOLOR_GREEN,
|
||||
"FOREST", // SKINCOLOR_FOREST,
|
||||
"EMERALD", // SKINCOLOR_EMERALD,
|
||||
|
@ -9024,6 +9051,7 @@ static const char *COLOR_ENUMS[] = {
|
|||
"VIOLET", // SKINCOLOR_VIOLET,
|
||||
"LILAC", // SKINCOLOR_LILAC,
|
||||
"PLUM", // SKINCOLOR_PLUM,
|
||||
"RASPBERRY", // SKINCOLOR_RASPBERRY,
|
||||
"ROSY", // SKINCOLOR_ROSY,
|
||||
|
||||
// Super special awesome Super flashing colors!
|
||||
|
@ -9118,9 +9146,11 @@ static const char *const POWERS_LIST[] = {
|
|||
|
||||
//for linedef exec 427
|
||||
"NOCONTROL",
|
||||
|
||||
|
||||
//for dyes
|
||||
"DYE"
|
||||
"DYE",
|
||||
|
||||
"JUSTLAUNCHED"
|
||||
};
|
||||
|
||||
static const char *const HUDITEMS_LIST[] = {
|
||||
|
@ -9357,6 +9387,9 @@ struct {
|
|||
{"LF_NOZONE",LF_NOZONE},
|
||||
{"LF_SAVEGAME",LF_SAVEGAME},
|
||||
{"LF_MIXNIGHTSCOUNTDOWN",LF_MIXNIGHTSCOUNTDOWN},
|
||||
{"LF_NOTITLECARDFIRST",LF_NOTITLECARDFIRST},
|
||||
{"LF_NOTITLECARDRESPAWN",LF_NOTITLECARDRESPAWN},
|
||||
{"LF_NOTITLECARDRECORDATTACK",LF_NOTITLECARDRECORDATTACK},
|
||||
{"LF_NOTITLECARD",LF_NOTITLECARD},
|
||||
{"LF_WARNINGTITLE",LF_WARNINGTITLE},
|
||||
// And map flags
|
||||
|
|
|
@ -253,9 +253,11 @@ typedef enum
|
|||
// Desaturated
|
||||
SKINCOLOR_AETHER,
|
||||
SKINCOLOR_SLATE,
|
||||
SKINCOLOR_BLUEBELL,
|
||||
SKINCOLOR_PINK,
|
||||
SKINCOLOR_YOGURT,
|
||||
SKINCOLOR_BROWN,
|
||||
SKINCOLOR_BRONZE,
|
||||
SKINCOLOR_TAN,
|
||||
SKINCOLOR_BEIGE,
|
||||
SKINCOLOR_MOSS,
|
||||
|
@ -268,9 +270,11 @@ typedef enum
|
|||
SKINCOLOR_RED,
|
||||
SKINCOLOR_CRIMSON,
|
||||
SKINCOLOR_FLAME,
|
||||
SKINCOLOR_KETCHUP,
|
||||
SKINCOLOR_PEACHY,
|
||||
SKINCOLOR_QUAIL,
|
||||
SKINCOLOR_SUNSET,
|
||||
SKINCOLOR_COPPER,
|
||||
SKINCOLOR_APRICOT,
|
||||
SKINCOLOR_ORANGE,
|
||||
SKINCOLOR_RUST,
|
||||
|
@ -280,6 +284,7 @@ typedef enum
|
|||
SKINCOLOR_OLIVE,
|
||||
SKINCOLOR_LIME,
|
||||
SKINCOLOR_PERIDOT,
|
||||
SKINCOLOR_APPLE,
|
||||
SKINCOLOR_GREEN,
|
||||
SKINCOLOR_FOREST,
|
||||
SKINCOLOR_EMERALD,
|
||||
|
@ -306,6 +311,7 @@ typedef enum
|
|||
SKINCOLOR_VIOLET,
|
||||
SKINCOLOR_LILAC,
|
||||
SKINCOLOR_PLUM,
|
||||
SKINCOLOR_RASPBERRY,
|
||||
SKINCOLOR_ROSY,
|
||||
|
||||
// SKINCOLOR_? - one left before we bump up against 0x39, which isn't a HARD limit anymore but would be excessive
|
||||
|
|
|
@ -351,15 +351,19 @@ typedef struct
|
|||
} mapheader_t;
|
||||
|
||||
// level flags
|
||||
#define LF_SCRIPTISFILE 1 ///< True if the script is a file, not a lump.
|
||||
#define LF_SPEEDMUSIC 2 ///< Speed up act music for super sneakers
|
||||
#define LF_NOSSMUSIC 4 ///< Disable Super Sonic music
|
||||
#define LF_NORELOAD 8 ///< Don't reload level on death
|
||||
#define LF_NOZONE 16 ///< Don't include "ZONE" on level title
|
||||
#define LF_SAVEGAME 32 ///< Save the game upon loading this level
|
||||
#define LF_MIXNIGHTSCOUNTDOWN 64 ///< Play sfx_timeup instead of music change for NiGHTS countdown
|
||||
#define LF_WARNINGTITLE 128 ///< WARNING! WARNING! WARNING! WARNING!
|
||||
#define LF_NOTITLECARD 256 ///< Don't start the title card
|
||||
#define LF_SCRIPTISFILE (1<<0) ///< True if the script is a file, not a lump.
|
||||
#define LF_SPEEDMUSIC (1<<1) ///< Speed up act music for super sneakers
|
||||
#define LF_NOSSMUSIC (1<<2) ///< Disable Super Sonic music
|
||||
#define LF_NORELOAD (1<<3) ///< Don't reload level on death
|
||||
#define LF_NOZONE (1<<4) ///< Don't include "ZONE" on level title
|
||||
#define LF_SAVEGAME (1<<5) ///< Save the game upon loading this level
|
||||
#define LF_MIXNIGHTSCOUNTDOWN (1<<6) ///< Play sfx_timeup instead of music change for NiGHTS countdown
|
||||
#define LF_WARNINGTITLE (1<<7) ///< WARNING! WARNING! WARNING! WARNING!
|
||||
|
||||
#define LF_NOTITLECARDFIRST (1<<8)
|
||||
#define LF_NOTITLECARDRESPAWN (1<<9)
|
||||
#define LF_NOTITLECARDRECORDATTACK (1<<10)
|
||||
#define LF_NOTITLECARD (LF_NOTITLECARDFIRST|LF_NOTITLECARDRESPAWN|LF_NOTITLECARDRECORDATTACK) ///< Don't start the title card at all
|
||||
|
||||
#define LF2_HIDEINMENU 1 ///< Hide in the multiplayer menu
|
||||
#define LF2_HIDEINSTATS 2 ///< Hide in the statistics screen
|
||||
|
|
|
@ -192,8 +192,7 @@ void F_WipeStageTitle(void)
|
|||
// draw level title
|
||||
if ((WipeStageTitle && st_overlay)
|
||||
&& (wipestyle == WIPESTYLE_COLORMAP)
|
||||
&& !(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
|
||||
&& *mapheaderinfo[gamemap-1]->lvlttl != '\0')
|
||||
&& G_IsTitleCardAvailable())
|
||||
{
|
||||
ST_runTitleCard();
|
||||
ST_drawWipeTitleCard();
|
||||
|
|
13
src/g_game.c
13
src/g_game.c
|
@ -1928,13 +1928,22 @@ void G_PreLevelTitleCard(void)
|
|||
wipestyleflags = WSF_CROSSFADE;
|
||||
}
|
||||
|
||||
static boolean titlecardforreload = false;
|
||||
|
||||
//
|
||||
// Returns true if the current level has a title card.
|
||||
//
|
||||
boolean G_IsTitleCardAvailable(void)
|
||||
{
|
||||
// The current level header explicitly disabled the title card.
|
||||
if (mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
|
||||
UINT16 titleflag = LF_NOTITLECARDFIRST;
|
||||
|
||||
if (modeattacking != ATTACKING_NONE)
|
||||
titleflag = LF_NOTITLECARDRECORDATTACK;
|
||||
else if (titlecardforreload)
|
||||
titleflag = LF_NOTITLECARDRESPAWN;
|
||||
|
||||
if (mapheaderinfo[gamemap-1]->levelflags & titleflag)
|
||||
return false;
|
||||
|
||||
// The current gametype doesn't have a title card.
|
||||
|
@ -3024,7 +3033,9 @@ void G_DoReborn(INT32 playernum)
|
|||
#ifdef HAVE_BLUA
|
||||
LUAh_MapChange(gamemap);
|
||||
#endif
|
||||
titlecardforreload = true;
|
||||
G_DoLoadLevel(true);
|
||||
titlecardforreload = false;
|
||||
if (metalrecording)
|
||||
G_BeginMetal();
|
||||
return;
|
||||
|
|
|
@ -509,6 +509,7 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_LCKN
|
||||
&lspr[NOLIGHT], // SPR_TTAG
|
||||
&lspr[NOLIGHT], // SPR_GFLG
|
||||
&lspr[NOLIGHT], // SPR_FNSF
|
||||
|
||||
&lspr[NOLIGHT], // SPR_CORK
|
||||
&lspr[NOLIGHT], // SPR_LHRT
|
||||
|
|
33
src/info.c
33
src/info.c
|
@ -407,6 +407,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"LCKN", // Target
|
||||
"TTAG", // Tag Sign
|
||||
"GFLG", // Got Flag sign
|
||||
"FNSF", // Finish flag
|
||||
|
||||
"CORK",
|
||||
"LHRT",
|
||||
|
@ -3349,7 +3350,10 @@ state_t states[NUMSTATES] =
|
|||
{SPR_TTAG, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_TTAG
|
||||
|
||||
// CTF Sign
|
||||
{SPR_GFLG, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_GOTFLAG
|
||||
{SPR_GFLG, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_GOTFLAG
|
||||
|
||||
// Finish flag
|
||||
{SPR_FNSF, FF_TRANS30, -1, {NULL}, 0, 0, S_NULL}, // S_FINISHFLAG
|
||||
|
||||
{SPR_CORK, 0, -1, {NULL}, 0, 0, S_NULL}, // S_CORK
|
||||
{SPR_LHRT, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_LHRT
|
||||
|
@ -17995,6 +17999,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FINISHFLAG
|
||||
-1, // doomednum
|
||||
S_FINISHFLAG, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
4*FRACUNIT, // speed
|
||||
8*FRACUNIT, // radius
|
||||
8*FRACUNIT, // height
|
||||
1, // display offset
|
||||
16, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
// ambient water 1a (large)
|
||||
{ // MT_AWATERA
|
||||
|
|
|
@ -671,6 +671,7 @@ typedef enum sprite
|
|||
SPR_LCKN, // Target
|
||||
SPR_TTAG, // Tag Sign
|
||||
SPR_GFLG, // Got Flag sign
|
||||
SPR_FNSF, // Finish flag
|
||||
|
||||
SPR_CORK,
|
||||
SPR_LHRT,
|
||||
|
@ -3486,6 +3487,9 @@ typedef enum state
|
|||
|
||||
// Got Flag Sign
|
||||
S_GOTFLAG,
|
||||
|
||||
// Finish flag
|
||||
S_FINISHFLAG,
|
||||
|
||||
S_CORK,
|
||||
S_LHRT,
|
||||
|
@ -4627,6 +4631,7 @@ typedef enum mobj_type
|
|||
MT_LOCKONINF, // In-level Target
|
||||
MT_TAG, // Tag Sign
|
||||
MT_GOTFLAG, // Got Flag sign
|
||||
MT_FINISHFLAG, // Finish flag
|
||||
|
||||
// Ambient Sounds
|
||||
MT_AWATERA, // Ambient Water Sound 1
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#endif
|
||||
#include "z_zone.h"
|
||||
#include "r_main.h"
|
||||
#include "r_draw.h"
|
||||
#include "r_things.h"
|
||||
#include "m_random.h"
|
||||
#include "s_sound.h"
|
||||
|
@ -2313,9 +2314,29 @@ static int lib_rTextureNumForName(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// R_DRAW
|
||||
////////////
|
||||
static int lib_rGetColorByName(lua_State *L)
|
||||
{
|
||||
const char* colorname = luaL_checkstring(L, 1);
|
||||
//HUDSAFE
|
||||
lua_pushinteger(L, R_GetColorByName(colorname));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Lua exclusive function, returns the name of a color from the SKINCOLOR_ constant.
|
||||
// SKINCOLOR_GREEN > "Green" for example
|
||||
static int lib_rGetNameByColor(lua_State *L)
|
||||
{
|
||||
UINT8 colornum = (UINT8)luaL_checkinteger(L, 1);
|
||||
if (!colornum || colornum >= MAXSKINCOLORS)
|
||||
return luaL_error(L, "skincolor %d out of range (1 - %d).", colornum, MAXSKINCOLORS-1);
|
||||
lua_pushstring(L, Color_Names[colornum]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// S_SOUND
|
||||
////////////
|
||||
|
||||
static int lib_sStartSound(lua_State *L)
|
||||
{
|
||||
const void *origin = NULL;
|
||||
|
@ -3153,6 +3174,10 @@ static luaL_Reg lib[] = {
|
|||
{"R_CheckTextureNumForName",lib_rCheckTextureNumForName},
|
||||
{"R_TextureNumForName",lib_rTextureNumForName},
|
||||
|
||||
// r_draw
|
||||
{"R_GetColorByName", lib_rGetColorByName},
|
||||
{"R_GetNameByColor", lib_rGetNameByColor},
|
||||
|
||||
// s_sound
|
||||
{"S_StartSound",lib_sStartSound},
|
||||
{"S_StartSoundAtVolume",lib_sStartSoundAtVolume},
|
||||
|
|
|
@ -1594,7 +1594,7 @@ boolean LUAh_SeenPlayer(player_t *player, player_t *seenfriend)
|
|||
hook_p hookp;
|
||||
boolean hasSeenPlayer = true;
|
||||
if (!gL || !(hooksAvailable[hook_SeenPlayer/8] & (1<<(hook_SeenPlayer%8))))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
lua_settop(gL, 0);
|
||||
hud_running = true; // local hook
|
||||
|
|
12
src/m_menu.c
12
src/m_menu.c
|
@ -8147,8 +8147,16 @@ static void M_DrawLoadGameData(void)
|
|||
col = 134;
|
||||
else
|
||||
{
|
||||
col = charskin->prefcolor - 1;
|
||||
col = Color_Index[Color_Opposite[col][0]-1][Color_Opposite[col][1]];
|
||||
if (charskin->prefoppositecolor)
|
||||
{
|
||||
col = charskin->prefoppositecolor - 1;
|
||||
col = Color_Index[col][Color_Opposite[Color_Opposite[col][0] - 1][1]];
|
||||
}
|
||||
else
|
||||
{
|
||||
col = charskin->prefcolor - 1;
|
||||
col = Color_Index[Color_Opposite[col][0]-1][Color_Opposite[col][1]];
|
||||
}
|
||||
}
|
||||
|
||||
V_DrawFill(x+6, y+64, 72, 50, col);
|
||||
|
|
|
@ -2542,7 +2542,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
else if (!target->player->bot && !target->player->spectator && (target->player->lives != INFLIVES)
|
||||
&& G_GametypeUsesLives())
|
||||
{
|
||||
target->player->lives -= 1; // Lose a life Tails 03-11-2000
|
||||
if (!(target->player->pflags & PF_FINISHED))
|
||||
target->player->lives -= 1; // Lose a life Tails 03-11-2000
|
||||
|
||||
if (target->player->lives <= 0) // Tails 03-14-2000
|
||||
{
|
||||
|
|
|
@ -159,6 +159,7 @@ void P_GivePlayerLives(player_t *player, INT32 numlives);
|
|||
void P_GiveCoopLives(player_t *player, INT32 numlives, boolean sound);
|
||||
UINT8 P_GetNextEmerald(void);
|
||||
void P_GiveEmerald(boolean spawnObj);
|
||||
void P_GiveFinishFlags(player_t *player);
|
||||
#if 0
|
||||
void P_ResetScore(player_t *player);
|
||||
#else
|
||||
|
|
|
@ -592,9 +592,6 @@ static void P_DoTailsCarry(player_t *sonic, player_t *tails)
|
|||
if (!(tails->pflags & PF_CANCARRY))
|
||||
return;
|
||||
|
||||
if (sonic->pflags & PF_FINISHED)
|
||||
return;
|
||||
|
||||
if ((sonic->mo->eflags & MFE_VERTICALFLIP) != (tails->mo->eflags & MFE_VERTICALFLIP))
|
||||
return; // Both should be in same gravity
|
||||
|
||||
|
|
43
src/p_mobj.c
43
src/p_mobj.c
|
@ -1997,8 +1997,12 @@ void P_XYMovement(mobj_t *mo)
|
|||
{
|
||||
mo->momz = transfermomz;
|
||||
mo->standingslope = NULL;
|
||||
if (player && (player->pflags & PF_SPINNING))
|
||||
player->pflags |= PF_THOKKED;
|
||||
if (player)
|
||||
{
|
||||
player->powers[pw_justlaunched] = 2;
|
||||
if (player->pflags & PF_SPINNING)
|
||||
player->pflags |= PF_THOKKED;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -3922,6 +3926,7 @@ static void P_PlayerMobjThinker(mobj_t *mobj)
|
|||
// Needed for gravity boots
|
||||
P_CheckGravity(mobj, false);
|
||||
|
||||
mobj->player->powers[pw_justlaunched] = 0;
|
||||
if (mobj->momx || mobj->momy)
|
||||
{
|
||||
P_XYMovement(mobj);
|
||||
|
@ -8000,6 +8005,37 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
mobj->frame = (mobj->frame & ~FF_TRANSMASK) | ((10 - (mobj->fuse*2)) << (FF_TRANSSHIFT));
|
||||
}
|
||||
break;
|
||||
case MT_FINISHFLAG:
|
||||
{
|
||||
if (!mobj->target || mobj->target->player->playerstate == PST_DEAD || !cv_exitmove.value)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!camera.chase)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
|
||||
P_UnsetThingPosition(mobj);
|
||||
{
|
||||
fixed_t radius = FixedMul(10*mobj->info->speed, mobj->target->scale);
|
||||
angle_t fa;
|
||||
|
||||
mobj->angle += FixedAngle(mobj->info->speed);
|
||||
|
||||
fa = mobj->angle >> ANGLETOFINESHIFT;
|
||||
|
||||
mobj->x = mobj->target->x + FixedMul(FINECOSINE(fa),radius);
|
||||
mobj->y = mobj->target->y + FixedMul(FINESINE(fa),radius);
|
||||
mobj->z = mobj->target->z + mobj->target->height/2;
|
||||
}
|
||||
P_SetThingPosition(mobj);
|
||||
|
||||
P_SetScale(mobj, mobj->target->scale);
|
||||
}
|
||||
break;
|
||||
case MT_VWREF:
|
||||
case MT_VWREB:
|
||||
{
|
||||
|
@ -11558,6 +11594,9 @@ void P_AfterPlayerSpawn(INT32 playernum)
|
|||
|
||||
if (CheckForReverseGravity)
|
||||
P_CheckGravity(mobj, false);
|
||||
|
||||
if (p->pflags & PF_FINISHED)
|
||||
P_GiveFinishFlags(p);
|
||||
}
|
||||
|
||||
// spawn it at a playerspawn mapthing
|
||||
|
|
|
@ -3830,10 +3830,9 @@ boolean P_AddWadFile(const char *wadfilename)
|
|||
// UINT16 mapPos, mapNum = 0;
|
||||
|
||||
// Init file.
|
||||
if ((numlumps = W_InitFile(wadfilename, false)) == INT16_MAX)
|
||||
if ((numlumps = W_InitFile(wadfilename, false, false)) == INT16_MAX)
|
||||
{
|
||||
refreshdirmenu |= REFRESHDIR_NOTLOADED;
|
||||
CONS_Printf(M_GetText("Errors occurred while loading %s; not added.\n"), wadfilename);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -726,6 +726,9 @@ void P_SlopeLaunch(mobj_t *mo)
|
|||
|
||||
//CONS_Printf("Launched off of slope.\n");
|
||||
mo->standingslope = NULL;
|
||||
|
||||
if (mo->player)
|
||||
mo->player->powers[pw_justlaunched] = 1;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
28
src/p_user.c
28
src/p_user.c
|
@ -370,6 +370,33 @@ void P_GiveEmerald(boolean spawnObj)
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// P_GiveFinishFlags
|
||||
//
|
||||
// Give the player visual indicators
|
||||
// that they've finished the map.
|
||||
//
|
||||
void P_GiveFinishFlags(player_t *player)
|
||||
{
|
||||
angle_t angle = FixedAngle(player->mo->angle << FRACBITS);
|
||||
UINT8 i;
|
||||
|
||||
if (!player->mo)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
angle_t fa = (angle >> ANGLETOFINESHIFT) & FINEMASK;
|
||||
fixed_t xoffs = FINECOSINE(fa);
|
||||
fixed_t yoffs = FINESINE(fa);
|
||||
mobj_t* flag = P_SpawnMobjFromMobj(player->mo, xoffs, yoffs, 0, MT_FINISHFLAG);
|
||||
flag->angle = angle;
|
||||
angle += FixedAngle(120*FRACUNIT);
|
||||
|
||||
P_SetTarget(&flag->target, player->mo);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
//
|
||||
// P_ResetScore
|
||||
|
@ -2171,6 +2198,7 @@ void P_DoPlayerFinish(player_t *player)
|
|||
return;
|
||||
|
||||
player->pflags |= PF_FINISHED;
|
||||
P_GiveFinishFlags(player);
|
||||
|
||||
if (netgame)
|
||||
CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]);
|
||||
|
|
20
src/r_draw.c
20
src/r_draw.c
|
@ -153,9 +153,11 @@ const UINT8 Color_Index[MAXTRANSLATIONS-1][16] = {
|
|||
// Desaturated
|
||||
{0x00, 0x00, 0x01, 0x02, 0x02, 0x03, 0x91, 0x91, 0x91, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xaf}, // SKINCOLOR_AETHER
|
||||
{0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0xaa, 0xaa, 0xaa, 0xab, 0xac, 0xac, 0xad, 0xad, 0xae, 0xaf}, // SKINCOLOR_SLATE
|
||||
{0x90, 0x91, 0x92, 0x93, 0x94, 0x94, 0x95, 0xac, 0xac, 0xad, 0xad, 0xa8, 0xa8, 0xa9, 0xfd, 0xfe}, // SKINCOLOR_BLUEBELL
|
||||
{0xd0, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0x2b, 0x2c, 0x2e}, // SKINCOLOR_PINK
|
||||
{0xd0, 0x30, 0xd8, 0xd9, 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe3, 0xe6, 0xe8, 0xe9}, // SKINCOLOR_YOGURT
|
||||
{0xdf, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef}, // SKINCOLOR_BROWN
|
||||
{0xde, 0xe0, 0xe1, 0xe4, 0xe7, 0xe9, 0xeb, 0xec, 0xed, 0xed, 0xed, 0x19, 0x19, 0x1b, 0x1d, 0x1e}, // SKINCOLOR_BRONZE
|
||||
{0x51, 0x51, 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, 0xf5, 0xf5, 0xf9, 0xf9, 0xed, 0xed}, // SKINCOLOR_TAN
|
||||
{0x54, 0x55, 0x56, 0x56, 0xf2, 0xf3, 0xf3, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfb, 0xed, 0xed}, // SKINCOLOR_BEIGE
|
||||
{0x58, 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5d, 0x5d, 0x5e, 0x5e, 0x5f, 0x5f}, // SKINCOLOR_MOSS
|
||||
|
@ -168,9 +170,11 @@ const UINT8 Color_Index[MAXTRANSLATIONS-1][16] = {
|
|||
{0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x47, 0x2e, 0x2f}, // SKINCOLOR_RED
|
||||
{0x27, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2b, 0x2b, 0x2c, 0x2d, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x1f}, // SKINCOLOR_CRIMSON
|
||||
{0x31, 0x32, 0x33, 0x36, 0x22, 0x22, 0x25, 0x25, 0x25, 0xcd, 0xcf, 0xcf, 0xc5, 0xc5, 0xc7, 0xc7}, // SKINCOLOR_FLAME
|
||||
{0x48, 0x49, 0x40, 0x33, 0x34, 0x36, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x47, 0x2e, 0x2f}, // SKINCOLOR_KETCHUP
|
||||
{0xd0, 0x30, 0x31, 0x31, 0x32, 0x32, 0xdc, 0xdc, 0xdc, 0xd3, 0xd4, 0xd4, 0xcc, 0xcd, 0xce, 0xcf}, // SKINCOLOR_PEACHY
|
||||
{0xd8, 0xd9, 0xdb, 0xdc, 0xde, 0xdf, 0xd5, 0xd5, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x1d, 0x1f}, // SKINCOLOR_QUAIL
|
||||
{0x51, 0x52, 0x40, 0x40, 0x34, 0x36, 0xd5, 0xd5, 0xd6, 0xd7, 0xcf, 0xcf, 0xc6, 0xc6, 0xc7, 0xfe}, // SKINCOLOR_SUNSET
|
||||
{0x58, 0x54, 0x40, 0x34, 0x35, 0x38, 0x3a, 0x3c, 0x3d, 0x2a, 0x2b, 0x2c, 0x2c, 0xba, 0xba, 0xbb}, // SKINCOLOR_COPPER
|
||||
{0x00, 0xd8, 0xd9, 0xda, 0xdb, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e}, // SKINCOLOR_APRICOT
|
||||
{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x2c}, // SKINCOLOR_ORANGE
|
||||
{0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3f, 0x2c, 0x2d, 0x47, 0x2e, 0x2f, 0x2f}, // SKINCOLOR_RUST
|
||||
|
@ -180,6 +184,7 @@ const UINT8 Color_Index[MAXTRANSLATIONS-1][16] = {
|
|||
{0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4e, 0xe7, 0xe7, 0xe9, 0xc5, 0xc5, 0xc6, 0xc6, 0xc7, 0xc7, 0xfd}, // SKINCOLOR_OLIVE
|
||||
{0x50, 0x51, 0x52, 0x53, 0x48, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f}, // SKINCOLOR_LIME
|
||||
{0x58, 0x58, 0xbc, 0xbc, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf, 0x5e, 0x5e, 0x5f, 0x5f, 0x77, 0x77}, // SKINCOLOR_PERIDOT
|
||||
{0x49, 0x49, 0xbc, 0xbd, 0xbe, 0xbe, 0xbe, 0x67, 0x69, 0x6a, 0x6b, 0x6b, 0x6c, 0x6d, 0x6d, 0x6d}, // SKINCOLOR_APPLE
|
||||
{0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f}, // SKINCOLOR_GREEN
|
||||
{0x65, 0x66, 0x67, 0x68, 0x69, 0x69, 0x6a, 0x6b, 0x6b, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f}, // SKINCOLOR_FOREST
|
||||
{0x70, 0x70, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77}, // SKINCOLOR_EMERALD
|
||||
|
@ -206,6 +211,7 @@ const UINT8 Color_Index[MAXTRANSLATIONS-1][16] = {
|
|||
{0xd0, 0xd1, 0xd2, 0xca, 0xcc, 0xb8, 0xb9, 0xb9, 0xba, 0xa8, 0xa8, 0xa9, 0xa9, 0xfd, 0xfe, 0xfe}, // SKINCOLOR_VIOLET
|
||||
{0x00, 0xd0, 0xd1, 0xd2, 0xd3, 0xc1, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc5, 0xc6, 0xc6, 0xfe, 0x1f}, // SKINCOLOR_LILAC
|
||||
{0xc8, 0xd3, 0xd5, 0xd6, 0xd7, 0xce, 0xcf, 0xb9, 0xb9, 0xba, 0xba, 0xa9, 0xa9, 0xa9, 0xfd, 0xfe}, // SKINCOLOR_PLUM
|
||||
{0xc8, 0xc9, 0xca, 0xcb, 0xcb, 0xcc, 0xcd, 0xcd, 0xce, 0xb9, 0xb9, 0xba, 0xba, 0xbb, 0xfe, 0xfe}, // SKINCOLOR_RASPBERRY
|
||||
{0xfc, 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xca, 0xcb, 0xcb, 0xcc, 0xcc, 0xcd, 0xcd, 0xce, 0xce, 0xcf}, // SKINCOLOR_ROSY
|
||||
|
||||
// {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // SKINCOLOR_?
|
||||
|
@ -285,9 +291,11 @@ const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS] =
|
|||
// Desaturated
|
||||
"Aether", // SKINCOLOR_AETHER,
|
||||
"Slate", // SKINCOLOR_SLATE,
|
||||
"Bluebell", // SKINCOLOR_BLUEBELL,
|
||||
"Pink", // SKINCOLOR_PINK,
|
||||
"Yogurt", // SKINCOLOR_YOGURT,
|
||||
"Brown", // SKINCOLOR_BROWN,
|
||||
"Brown", // SKINCOLOR_BROWN,
|
||||
"Bronze", // SKINCOLOR_BRONZE,
|
||||
"Tan", // SKINCOLOR_TAN,
|
||||
"Beige", // SKINCOLOR_BEIGE,
|
||||
"Moss", // SKINCOLOR_MOSS,
|
||||
|
@ -300,9 +308,11 @@ const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS] =
|
|||
"Red", // SKINCOLOR_RED,
|
||||
"Crimson", // SKINCOLOR_CRIMSON,
|
||||
"Flame", // SKINCOLOR_FLAME,
|
||||
"Ketchup", // SKINCOLOR_KETCHUP,
|
||||
"Peachy", // SKINCOLOR_PEACHY,
|
||||
"Quail", // SKINCOLOR_QUAIL,
|
||||
"Sunset", // SKINCOLOR_SUNSET,
|
||||
"Copper", // SKINCOLOR_COPPER,
|
||||
"Apricot", // SKINCOLOR_APRICOT,
|
||||
"Orange", // SKINCOLOR_ORANGE,
|
||||
"Rust", // SKINCOLOR_RUST,
|
||||
|
@ -312,6 +322,7 @@ const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS] =
|
|||
"Olive", // SKINCOLOR_OLIVE,
|
||||
"Lime", // SKINCOLOR_LIME,
|
||||
"Peridot", // SKINCOLOR_PERIDOT,
|
||||
"Apple", // SKINCOLOR_APPLE,
|
||||
"Green", // SKINCOLOR_GREEN,
|
||||
"Forest", // SKINCOLOR_FOREST,
|
||||
"Emerald", // SKINCOLOR_EMERALD,
|
||||
|
@ -338,6 +349,7 @@ const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS] =
|
|||
"Violet", // SKINCOLOR_VIOLET,
|
||||
"Lilac", // SKINCOLOR_LILAC,
|
||||
"Plum", // SKINCOLOR_PLUM,
|
||||
"Raspberry", // SKINCOLOR_RASPBERRY,
|
||||
"Rosy", // SKINCOLOR_ROSY,
|
||||
|
||||
// Super behaves by different rules (one name per 5 colours), and will be accessed exclusively via R_GetSuperColorByName instead of R_GetColorByName.
|
||||
|
@ -375,9 +387,11 @@ const UINT8 Color_Opposite[MAXSKINCOLORS - 1][2] =
|
|||
// Desaturated
|
||||
{SKINCOLOR_GREY, 15}, // SKINCOLOR_AETHER,
|
||||
{SKINCOLOR_SILVER, 12}, // SKINCOLOR_SLATE,
|
||||
{SKINCOLOR_COPPER, 4}, // SKINCOLOR_BLUEBELL,
|
||||
{SKINCOLOR_AZURE, 9}, // SKINCOLOR_PINK,
|
||||
{SKINCOLOR_RUST, 7}, // SKINCOLOR_YOGURT,
|
||||
{SKINCOLOR_TAN, 2}, // SKINCOLOR_BROWN,
|
||||
{SKINCOLOR_KETCHUP, 0}, // SKINCOLOR_BRONZE,
|
||||
{SKINCOLOR_BROWN, 12}, // SKINCOLOR_TAN,
|
||||
{SKINCOLOR_MOSS, 5}, // SKINCOLOR_BEIGE,
|
||||
{SKINCOLOR_BEIGE, 13}, // SKINCOLOR_MOSS,
|
||||
|
@ -390,9 +404,11 @@ const UINT8 Color_Opposite[MAXSKINCOLORS - 1][2] =
|
|||
{SKINCOLOR_GREEN, 10}, // SKINCOLOR_RED,
|
||||
{SKINCOLOR_ICY, 10}, // SKINCOLOR_CRIMSON,
|
||||
{SKINCOLOR_PURPLE, 8}, // SKINCOLOR_FLAME,
|
||||
{SKINCOLOR_BRONZE, 8}, // SKINCOLOR_KETCHUP,
|
||||
{SKINCOLOR_TEAL, 7}, // SKINCOLOR_PEACHY,
|
||||
{SKINCOLOR_WAVE, 5}, // SKINCOLOR_QUAIL,
|
||||
{SKINCOLOR_SAPPHIRE, 5}, // SKINCOLOR_SUNSET,
|
||||
{SKINCOLOR_BLUEBELL, 5}, // SKINCOLOR_COPPER
|
||||
{SKINCOLOR_CYAN, 4}, // SKINCOLOR_APRICOT,
|
||||
{SKINCOLOR_BLUE, 4}, // SKINCOLOR_ORANGE,
|
||||
{SKINCOLOR_YOGURT, 8}, // SKINCOLOR_RUST,
|
||||
|
@ -402,6 +418,7 @@ const UINT8 Color_Opposite[MAXSKINCOLORS - 1][2] =
|
|||
{SKINCOLOR_DUSK, 3}, // SKINCOLOR_OLIVE,
|
||||
{SKINCOLOR_MAGENTA, 9}, // SKINCOLOR_LIME,
|
||||
{SKINCOLOR_COBALT, 2}, // SKINCOLOR_PERIDOT,
|
||||
{SKINCOLOR_RASPBERRY, 13}, // SKINCOLOR_APPLE,
|
||||
{SKINCOLOR_RED, 6}, // SKINCOLOR_GREEN,
|
||||
{SKINCOLOR_SALMON, 9}, // SKINCOLOR_FOREST,
|
||||
{SKINCOLOR_RUBY, 4}, // SKINCOLOR_EMERALD,
|
||||
|
@ -428,6 +445,7 @@ const UINT8 Color_Opposite[MAXSKINCOLORS - 1][2] =
|
|||
{SKINCOLOR_MINT, 6}, // SKINCOLOR_VIOLET,
|
||||
{SKINCOLOR_VAPOR, 4}, // SKINCOLOR_LILAC,
|
||||
{SKINCOLOR_MINT, 7}, // SKINCOLOR_PLUM,
|
||||
{SKINCOLOR_APPLE, 13}, // SKINCOLOR_RASPBERRY
|
||||
{SKINCOLOR_AQUA, 1} // SKINCOLOR_ROSY,
|
||||
};
|
||||
|
||||
|
|
|
@ -1212,14 +1212,23 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
|
|||
INT32 width, height, leftoffset;
|
||||
fixed_t ca, sa;
|
||||
lumpnum_t lump = sprframe->lumppat[rot];
|
||||
size_t lumplength;
|
||||
|
||||
if (lump == LUMPERROR)
|
||||
return;
|
||||
|
||||
patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC);
|
||||
lumplength = W_LumpLength(lump);
|
||||
|
||||
#ifndef NO_PNG_LUMPS
|
||||
if (R_IsLumpPNG((UINT8 *)patch, lumplength))
|
||||
patch = R_PNGToPatch((UINT8 *)patch, lumplength, NULL);
|
||||
else
|
||||
#endif
|
||||
// Because there's something wrong with SPR_DFLM, I guess
|
||||
if (!R_CheckIfPatch(lump))
|
||||
return;
|
||||
|
||||
patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC);
|
||||
width = patch->width;
|
||||
height = patch->height;
|
||||
leftoffset = patch->leftoffset;
|
||||
|
|
|
@ -1499,7 +1499,6 @@ void VID_CheckRenderer(void)
|
|||
{
|
||||
I_StartupHardwareGraphics();
|
||||
R_InitHardwareMode();
|
||||
HWR_Switch();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -128,6 +128,7 @@ static patch_t *minus5sec;
|
|||
static patch_t *minicaps;
|
||||
static patch_t *gotrflag;
|
||||
static patch_t *gotbflag;
|
||||
static patch_t *fnshico;
|
||||
|
||||
static boolean facefreed[MAXPLAYERS];
|
||||
|
||||
|
@ -310,6 +311,7 @@ void ST_LoadGraphics(void)
|
|||
bmatcico = W_CachePatchName("BMATCICO", PU_HUDGFX);
|
||||
gotrflag = W_CachePatchName("GOTRFLAG", PU_HUDGFX);
|
||||
gotbflag = W_CachePatchName("GOTBFLAG", PU_HUDGFX);
|
||||
fnshico = W_CachePatchName("FNSHICO", PU_HUDGFX);
|
||||
nonicon = W_CachePatchName("NONICON", PU_HUDGFX);
|
||||
nonicon2 = W_CachePatchName("NONICON2", PU_HUDGFX);
|
||||
|
||||
|
@ -944,7 +946,7 @@ static void ST_drawLivesArea(void)
|
|||
'\x16' | 0x80 | hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS, false);
|
||||
else
|
||||
{
|
||||
if (stplyr->playerstate == PST_DEAD && !(stplyr->spectator) && (livescount || stplyr->deadtimer < (TICRATE<<1)))
|
||||
if (stplyr->playerstate == PST_DEAD && !(stplyr->spectator) && (livescount || stplyr->deadtimer < (TICRATE<<1)) && !(stplyr->pflags & PF_FINISHED))
|
||||
livescount++;
|
||||
if (livescount > 99)
|
||||
livescount = 99;
|
||||
|
@ -1434,7 +1436,7 @@ static void ST_drawPowerupHUD(void)
|
|||
UINT16 invulntime = 0;
|
||||
INT32 offs = hudinfo[HUD_POWERUPS].x;
|
||||
const UINT8 q = ((splitscreen && stplyr == &players[secondarydisplayplayer]) ? 1 : 0);
|
||||
static INT32 flagoffs[2] = {0, 0}, shieldoffs[2] = {0, 0};
|
||||
static INT32 flagoffs[2] = {0, 0}, shieldoffs[2] = {0, 0}, finishoffs[2] = {0, 0};
|
||||
#define ICONSEP (16+4) // matches weapon rings HUD
|
||||
|
||||
if (F_GetPromptHideHud(hudinfo[HUD_POWERUPS].y))
|
||||
|
@ -1442,6 +1444,26 @@ static void ST_drawPowerupHUD(void)
|
|||
|
||||
if (stplyr->spectator || stplyr->playerstate != PST_LIVE)
|
||||
return;
|
||||
|
||||
// ---------
|
||||
// Finish icon
|
||||
// ---------
|
||||
|
||||
// Let's have a power-like icon to represent finishing the level!
|
||||
if (stplyr->pflags & PF_FINISHED && cv_exitmove.value)
|
||||
{
|
||||
finishoffs[q] = ICONSEP;
|
||||
V_DrawSmallScaledPatch(offs, hudinfo[HUD_POWERUPS].y, V_PERPLAYER|hudinfo[HUD_POWERUPS].f|V_HUDTRANS, fnshico);
|
||||
}
|
||||
else if (finishoffs[q])
|
||||
{
|
||||
if (finishoffs[q] > 1)
|
||||
finishoffs[q] = 2*finishoffs[q]/3;
|
||||
else
|
||||
finishoffs[q] = 0;
|
||||
}
|
||||
|
||||
offs -= finishoffs[q];
|
||||
|
||||
// -------
|
||||
// Shields
|
||||
|
@ -2625,7 +2647,7 @@ static void ST_overlayDrawer(void)
|
|||
// Check for a valid level title
|
||||
// If the HUD is enabled
|
||||
// And, if Lua is running, if the HUD library has the stage title enabled
|
||||
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD) && *mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer)))
|
||||
if (G_IsTitleCardAvailable() && *mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer)))
|
||||
{
|
||||
stagetitle = true;
|
||||
ST_preDrawTitleCard();
|
||||
|
|
40
src/w_wad.c
40
src/w_wad.c
|
@ -637,6 +637,21 @@ static lumpinfo_t* ResGetLumpsZip (FILE* handle, UINT16* nlmp)
|
|||
return lumpinfo;
|
||||
}
|
||||
|
||||
static UINT16 W_InitFileError (const char *filename, boolean exitworthy)
|
||||
{
|
||||
if (exitworthy)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
CONS_Error("A WAD file was not found or not valid.\nCheck the log to see which ones.\n");
|
||||
#else
|
||||
I_Error("A WAD file was not found or not valid.\nCheck the log to see which ones.\n");
|
||||
#endif
|
||||
}
|
||||
else
|
||||
CONS_Printf(M_GetText("Errors occurred while loading %s; not added.\n"), filename);
|
||||
return INT16_MAX;
|
||||
}
|
||||
|
||||
// Allocate a wadfile, setup the lumpinfo (directory) and
|
||||
// lumpcache, add the wadfile to the current active wadfiles
|
||||
//
|
||||
|
@ -648,7 +663,7 @@ static lumpinfo_t* ResGetLumpsZip (FILE* handle, UINT16* nlmp)
|
|||
//
|
||||
// Can now load dehacked files (.soc)
|
||||
//
|
||||
UINT16 W_InitFile(const char *filename, boolean mainfile)
|
||||
UINT16 W_InitFile(const char *filename, boolean mainfile, boolean startup)
|
||||
{
|
||||
FILE *handle;
|
||||
lumpinfo_t *lumpinfo = NULL;
|
||||
|
@ -681,12 +696,12 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
|||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("Maximum wad files reached\n"));
|
||||
refreshdirmenu |= REFRESHDIR_MAX;
|
||||
return INT16_MAX;
|
||||
return W_InitFileError(filename, startup);
|
||||
}
|
||||
|
||||
// open wad file
|
||||
if ((handle = W_OpenWadFile(&filename, true)) == NULL)
|
||||
return INT16_MAX;
|
||||
return W_InitFileError(filename, startup);
|
||||
|
||||
// Check if wad files will overflow fileneededbuffer. Only the filename part
|
||||
// is send in the packet; cf.
|
||||
|
@ -701,7 +716,7 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
|||
refreshdirmenu |= REFRESHDIR_MAX;
|
||||
if (handle)
|
||||
fclose(handle);
|
||||
return INT16_MAX;
|
||||
return W_InitFileError(filename, startup);
|
||||
}
|
||||
|
||||
packetsizetally = packetsize;
|
||||
|
@ -722,7 +737,7 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
|||
CONS_Alert(CONS_ERROR, M_GetText("%s is already loaded\n"), filename);
|
||||
if (handle)
|
||||
fclose(handle);
|
||||
return INT16_MAX;
|
||||
return W_InitFileError(filename, false);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -750,7 +765,7 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
|||
if (lumpinfo == NULL)
|
||||
{
|
||||
fclose(handle);
|
||||
return INT16_MAX;
|
||||
return W_InitFileError(filename, startup);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -822,10 +837,8 @@ UINT16 W_InitFile(const char *filename, boolean mainfile)
|
|||
* backwards, so a later file overrides all earlier ones.
|
||||
*
|
||||
* \param filenames A null-terminated list of files to use.
|
||||
* \return 1 if base files were loaded, 0 if at least one was missing or
|
||||
* invalid.
|
||||
*/
|
||||
INT32 W_InitMultipleFiles(char **filenames, UINT16 mainfiles)
|
||||
void W_InitMultipleFiles(char **filenames, UINT16 mainfiles)
|
||||
{
|
||||
// open all the files, load headers, and count lumps
|
||||
numwadfiles = 0;
|
||||
|
@ -834,15 +847,8 @@ INT32 W_InitMultipleFiles(char **filenames, UINT16 mainfiles)
|
|||
for (; *filenames; filenames++)
|
||||
{
|
||||
//CONS_Debug(DBG_SETUP, "Loading %s\n", *filenames);
|
||||
if (W_InitFile(*filenames, numwadfiles < mainfiles) == INT16_MAX)
|
||||
{
|
||||
CONS_Printf(M_GetText("Errors occurred while loading %s; not added.\n"), *filenames);
|
||||
if (numwadfiles < mainfiles)
|
||||
return 0;
|
||||
}
|
||||
W_InitFile(*filenames, numwadfiles < mainfiles, true);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Make sure a lump number is valid.
|
||||
|
|
|
@ -146,11 +146,10 @@ void W_Shutdown(void);
|
|||
// Opens a WAD file. Returns the FILE * handle for the file, or NULL if not found or could not be opened
|
||||
FILE *W_OpenWadFile(const char **filename, boolean useerrors);
|
||||
// Load and add a wadfile to the active wad files, returns numbers of lumps, INT16_MAX on error
|
||||
UINT16 W_InitFile(const char *filename, boolean mainfile);
|
||||
UINT16 W_InitFile(const char *filename, boolean mainfile, boolean startup);
|
||||
|
||||
// W_InitMultipleFiles returns 1 if all is okay, 0 otherwise,
|
||||
// so that it stops with a message if a file was not found, but not if all is okay.
|
||||
INT32 W_InitMultipleFiles(char **filenames, UINT16 mainfiles);
|
||||
// W_InitMultipleFiles exits if a file was not found, but not if all is okay.
|
||||
void W_InitMultipleFiles(char **filenames, UINT16 mainfiles);
|
||||
|
||||
const char *W_CheckNameForNumPwad(UINT16 wad, UINT16 lump);
|
||||
const char *W_CheckNameForNum(lumpnum_t lumpnum);
|
||||
|
|
Loading…
Reference in a new issue