Commit c322164d authored by Fabian Greffrath's avatar Fabian Greffrath

New upstream version 5.5.1

parent 9b972342
This diff is collapsed.
......@@ -61,20 +61,21 @@ Many additional less user-visible features have been implemented, e.g. fixed eng
* Move Backward (alt.) "S"
* Strafe Left (alt.) "A"
* Strafe Right (alt.) "D"
* Jump (bindable to mouse buttons as well) "/" (like in Chocolate Hexen and Strife)
* Quick Reverse (bindable to keys or mouse buttons as well)
* Mouse Look (bindable to keys or mouse buttons or permanent)
* Look up "PgDn" (bindable to joystick axes)
* Look down "DELETE" (bindable to joystick axes)
* Center view "END"
* Jump (bindable to joystick and mouse buttons as well) "/" (as in Hexen and Strife)
* Quick Reverse (bindable to mouse buttons as well)
* Mouse Look (bindable to mouse buttons or permanent)
* Look up (bindable to joystick axes as well) "PgDn" (as in Heretic)
* Look down (bindable to joystick axes as well) "DELETE" (as in Heretic)
* Center view "END" (as in Heretic)
* Toggle always run "CAPSLOCK"
* Toggle vertical mouse movement (new in 5.4)
* Delete savegame "DELETE"
* Go to next level
* Reload current level
* Save a clean screenshot
* (with automap open) Toggle overlay mode "O"
* (with automap open) Toggle rotate mode "R"
* Toggle Automap overlay mode "O"
* Toggle Automap rotate mode "R"
* Resurrect from savegame (single player mode only) "Run" + "Use"
### New command line parameters
......@@ -107,7 +108,7 @@ Many additional less user-visible features have been implemented, e.g. fixed eng
## Download
Binaries for Windows XP / Vista / 7 / 8.1 / 10 (both x86 and x64 editions) are available here:
https://github.com/fabiangreffrath/crispy-doom/releases/download/crispy-doom-5.5/crispy-doom-5.5-win32.zip
https://github.com/fabiangreffrath/crispy-doom/releases/download/crispy-doom-5.5.1/crispy-doom-5.5.1-win32.zip
Daily builds of Crispy Doom can be found here:
http://latest.chocolate-doom.org/
......@@ -145,6 +146,18 @@ After successful compilation the resulting binaries can be found in the `src/` d
## News
### Crispy Doom 5.5.1
Crispy Doom 5.5.1 has been released on March 7, 2019. This is a hotfix release to fix a minor bug introduced in the previous version.
**Bug Fixes**
* Revealed secret sectors are now highlighted in green (instead of gold) on the Automap only if the "Show Revealed Secrets" feature is enabled (the "Extended Automap Colors" feature alone isn't sufficient anymore).
Crispy Doom 5.5.1 is based on Chocolate Doom 3.0.0 and has merged all changes to the Chocolate Doom master branch up to commit [`ecab8d3a`](https://github.com/chocolate-doom/chocolate-doom/commit/ecab8d3ac0ca34fbb6cb04b608926a57b6dbdcc5).
### Crispy Doom 5.5
Crispy Doom 5.5 has been released on February 27, 2019. This is another release which mostly addresses community suggestions.
Forceful setting of the `SDL_AUDIODRIVER` variable on Windows has been dropped. Windows "releases" from 5.5 onward will be based on the daily builds and use their SDL libraries with the default audio backend.
......@@ -158,6 +171,7 @@ Forceful setting of the `SDL_AUDIODRIVER` variable on Windows has been dropped.
* Revealed secret sectors are now highlighted in gold on the Automap if both the "Extended Automap Colors" and "Show Revealed Secrets" features are enabled. Zodomaniac suggested this feature.
* The `IDBEHOLDA` cheat can now disable the full automap again, pointed out by Zodomaniac.
* Autocompletion of savegame slot name with [PWAD name in case it contains the map + map number] is introduced for all kinds of controllers, not only for the joystick as in Choco.
* The demo timer widget is now also drawn on intermission screens (if enabled), thanks to Looper for the suggestion.
* The `MF_DROPPED` flag is now checked for all ammo and weapon things. This has been contributed by NeuralStunner.
* A "Crispy" color scheme has been introduced for Crispy Setup based on the suggestions by JNechaevsky and Zodomaniac.
......
......@@ -76,6 +76,7 @@ set(GAME_SOURCE_FILES
net_io.c net_io.h
net_loop.c net_loop.h
net_packet.c net_packet.h
net_petname.c net_petname.h
net_query.c net_query.h
net_sdl.c net_sdl.h
net_server.c net_server.h
......@@ -97,9 +98,14 @@ set(GAME_SOURCE_FILES
w_merge.c w_merge.h
z_zone.c z_zone.h)
set(GAME_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/../")
if(MSVC)
list(APPEND GAME_SOURCE_FILES
"../win32/win_opendir.c" "../win32/win_opendir.h")
list(APPEND GAME_INCLUDE_DIRS
"${PROJECT_SOURCE_DIR}/win32/")
endif()
set(DEHACKED_SOURCE_FILES
......@@ -128,8 +134,7 @@ else()
add_executable("${PROGRAM_PREFIX}doom" ${SOURCE_FILES_WITH_DEH})
endif()
target_include_directories("${PROGRAM_PREFIX}doom"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_include_directories("${PROGRAM_PREFIX}doom" PRIVATE ${GAME_INCLUDE_DIRS})
target_link_libraries("${PROGRAM_PREFIX}doom" doom ${EXTRA_LIBS})
if(MSVC)
......@@ -143,8 +148,7 @@ else()
add_executable("${PROGRAM_PREFIX}heretic" ${SOURCE_FILES_WITH_DEH})
endif()
target_include_directories("${PROGRAM_PREFIX}heretic"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_include_directories("${PROGRAM_PREFIX}heretic" PRIVATE ${GAME_INCLUDE_DIRS})
target_link_libraries("${PROGRAM_PREFIX}heretic" heretic ${EXTRA_LIBS})
if(MSVC)
......@@ -158,8 +162,7 @@ else()
add_executable("${PROGRAM_PREFIX}hexen" ${SOURCE_FILES})
endif()
target_include_directories("${PROGRAM_PREFIX}hexen"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_include_directories("${PROGRAM_PREFIX}hexen" PRIVATE ${GAME_INCLUDE_DIRS})
target_link_libraries("${PROGRAM_PREFIX}hexen" hexen ${EXTRA_LIBS})
if(MSVC)
......@@ -173,8 +176,7 @@ else()
add_executable("${PROGRAM_PREFIX}strife" ${SOURCE_FILES_WITH_DEH})
endif()
target_include_directories("${PROGRAM_PREFIX}strife"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_include_directories("${PROGRAM_PREFIX}strife" PRIVATE ${GAME_INCLUDE_DIRS})
target_link_libraries("${PROGRAM_PREFIX}strife" strife ${EXTRA_LIBS})
if(MSVC)
......@@ -193,6 +195,7 @@ set(SETUP_FILES
m_controls.c m_controls.h
net_io.c net_io.h
net_packet.c net_packet.h
net_petname.c net_petname.h
net_sdl.c net_sdl.h
net_query.c net_query.h
net_structrw.c net_structrw.h
......
......@@ -95,6 +95,7 @@ net_gui.c net_gui.h \
net_io.c net_io.h \
net_loop.c net_loop.h \
net_packet.c net_packet.h \
net_petname.c net_petname.h \
net_query.c net_query.h \
net_sdl.c net_sdl.h \
net_server.c net_server.h \
......@@ -197,6 +198,7 @@ m_config.c m_config.h \
m_controls.c m_controls.h \
net_io.c net_io.h \
net_packet.c net_packet.h \
net_petname.c net_petname.h \
net_sdl.c net_sdl.h \
net_query.c net_query.h \
net_structrw.c net_structrw.h \
......
......@@ -80,7 +80,7 @@
#define THINGRANGE GREENRANGE
#define SECRETWALLCOLORS 252 // [crispy] purple
#define CRISPY_HIGHLIGHT_REVEALED_SECRETS
#define REVEALEDSECRETWALLCOLORS 162 // [crispy] gold
#define REVEALEDSECRETWALLCOLORS 112 // [crispy] green
#define SECRETWALLRANGE WALLRANGE
#define GRIDCOLORS (GRAYS + GRAYSRANGE/2)
#define GRIDRANGE 0
......@@ -1357,7 +1357,7 @@ void AM_drawWalls(void)
cheating && (lines[i].frontsector->special == 9))
AM_drawMline(&l, SECRETWALLCOLORS);
#if defined CRISPY_HIGHLIGHT_REVEALED_SECRETS
// [crispy] draw revealed secrets in gold
// [crispy] draw revealed secret sector boundaries in green
else
if (crispy->extautomap &&
crispy->secretmessage && (lines[i].frontsector->oldspecial == 9))
......@@ -1384,8 +1384,8 @@ void AM_drawWalls(void)
else AM_drawMline(&l, WALLCOLORS+lightlev);
}
#if defined CRISPY_HIGHLIGHT_REVEALED_SECRETS
// [crispy] draw revealed secret sector boundaries in gold
else if (crispy->extautomap &&
// [crispy] draw revealed secret sector boundaries in green
else if (crispy->extautomap && crispy->secretmessage &&
(lines[i].backsector->oldspecial == 9 ||
lines[i].frontsector->oldspecial == 9))
{
......
......@@ -25,6 +25,7 @@
#include <stdlib.h>
#include "doomdef.h"
#include "i_system.h" // [crispy] I_Realloc()
#include "r_local.h"
// OPTIMIZE: closed two sided lines as single sided
......
......@@ -27,6 +27,8 @@
#if defined(_MSC_VER)
// For Visual C++, we need to include the win_opendir module.
#include <win_opendir.h>
#include <sys/stat.h>
#define S_ISDIR(m) (((m)& S_IFMT) == S_IFDIR)
#elif defined(HAVE_DIRENT_H)
#include <dirent.h>
#include <sys/stat.h>
......
......@@ -707,36 +707,32 @@ static char *GetFullPath(const char *musicdir, const char *path)
return result;
}
// If filename ends with .{ext}, check if a .ogg or .flac file exists with that
// name, returning it if found. If neither file exists, NULL exists. If the
// If filename ends with .{ext}, check if a .ogg, .flac or .mp3 exists with
// that name, returning it if found. If none exist, NULL is returned. If the
// filename doesn't end with .{ext} then it just acts as a wrapper around
// GetFullPath().
static char *ExpandFileExtension(const char *musicdir, const char *filename)
{
static const char *extns[] = {".flac", ".ogg", ".mp3"};
char *replaced, *result;
int i;
if (!M_StringEndsWith(filename, ".{ext}"))
{
return GetFullPath(musicdir, filename);
}
replaced = M_StringReplace(filename, ".{ext}", ".flac");
result = GetFullPath(musicdir, replaced);
if (M_FileExists(result))
{
return result;
}
free(result);
free(replaced);
replaced = M_StringReplace(filename, ".{ext}", ".ogg");
result = GetFullPath(musicdir, replaced);
if (M_FileExists(result))
for (i = 0; i < arrlen(extns); ++i)
{
return result;
replaced = M_StringReplace(filename, ".{ext}", extns[i]);
result = GetFullPath(musicdir, replaced);
free(replaced);
if (M_FileExists(result))
{
return result;
}
free(result);
}
free(result);
free(replaced);
return NULL;
}
......
......@@ -38,6 +38,7 @@
#include "net_query.h"
#include "net_server.h"
#include "net_structrw.h"
#include "net_petname.h"
#include "w_checksum.h"
#include "w_wad.h"
......@@ -1211,23 +1212,10 @@ void NET_CL_Init(void)
// Try to set from the USER and USERNAME environment variables
// Otherwise, fallback to "Player"
if (net_player_name == NULL)
net_player_name = getenv("USER");
if (net_player_name == NULL)
net_player_name = getenv("USERNAME");
// On Windows, environment variables are in OEM codepage
// encoding, so convert to UTF8:
#ifdef _WIN32
if (net_player_name != NULL)
{
net_player_name = M_OEMToUTF8(net_player_name);
net_player_name = NET_GetRandomPetName();
}
#endif
if (net_player_name == NULL)
net_player_name = "Player";
}
void NET_Init(void)
......
//
// Copyright(C) 2019 Jonathan Dowland
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// DESCRIPTION:
// Generate a randomized, private, memorable name for a Player
//
#include <stdlib.h>
#include <time.h>
#include "doomtype.h"
#include "m_misc.h"
static const char * const adjectives [] = {
"Grumpy",
"Ecstatic",
"Surly",
"Prepared",
"Crafty",
"Alert",
"Sluggish",
"Testy",
"Reluctant",
"Languid",
"Passive",
"Pacifist",
"Aggressive",
"Hostile",
"Bubbly",
"Giggly",
"Laughing",
"Crying",
"Frowning",
"Torpid",
"Lethargic",
"Manic",
"Patient",
"Protective",
"Philosophical",
"Enquiring",
"Debating",
"Furious",
"Laid-Back",
"Easy-Going",
"Cromulent",
"Excitable",
"Tired",
"Exhausted",
"Ruminating",
"Redundant",
"Sporty",
"Ginger",
"Scary",
"Posh",
"Baby",
};
static const char * const nouns[] = {
"Frad",
// Doom
"Cacodemon",
"Arch-Vile",
"Cyberdemon",
"Imp",
"Demon",
"Mancubus",
"Arachnotron",
"Baron",
"Knight",
"Revenant",
// Hexen
"Ettin",
"Maulotaur",
"Centaur",
"Afrit",
"Serpent",
// Heretic
"Disciple",
"Gargoyle",
"Golem",
"Lich",
// Strife
"Sentinel",
"Acolyte",
"Templar",
"Reaver",
"Spectre",
};
/*
* ideally we would export this and the caller would invoke it during
* their setup routine. But, the two callers only invoke getRandomPetName
* once, so the initialization might as well occur then.
*/
static void InitPetName()
{
srand((unsigned int)time(NULL));
}
char *NET_GetRandomPetName()
{
const char *a, *n;
InitPetName();
a = adjectives[rand() % arrlen(adjectives)];
n = nouns[rand() % arrlen(nouns)];
return M_StringJoin(a, " ", n, NULL);
}
//
// Copyright(C) 2019 Jonathan Dowland
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// DESCRIPTION:
// Generate a randomized, private, memorable name for a Player
//
char *NET_GetRandomPetName();
......@@ -33,6 +33,8 @@
#include "net_io.h"
#include "net_query.h"
#include "net_petname.h"
#define MULTI_START_HELP_URL "https://www.chocolate-doom.org/setup-multi-start"
#define MULTI_JOIN_HELP_URL "https://www.chocolate-doom.org/setup-multi-join"
#define MULTI_CONFIG_HELP_URL "https://www.chocolate-doom.org/setup-multi-config"
......@@ -1100,29 +1102,8 @@ void SetPlayerNameDefault(void)
{
if (net_player_name == NULL)
{
net_player_name = getenv("USER");
}
if (net_player_name == NULL)
{
net_player_name = getenv("USERNAME");
net_player_name = NET_GetRandomPetName();
}
if (net_player_name == NULL)
{
net_player_name = "player";
}
// Now strdup() the string so that it's in a mutable form
// that can be freed when the value changes.
#ifdef _WIN32
// On Windows, environment variables are in OEM codepage
// encoding, so convert to UTF8:
net_player_name = M_OEMToUTF8(net_player_name);
#else
net_player_name = M_StringDuplicate(net_player_name);
#endif
}
void MultiplayerConfig(TXT_UNCAST_ARG(widget), void *user_data)
......
......@@ -169,6 +169,9 @@ static const inline byte drawpatchpx10 (const byte dest, const byte source)
// (4) color-translated, translucent patch
static const inline byte drawpatchpx11 (const byte dest, const byte source)
{return tranmap[(dest<<8)+dp_translation[source]];}
// [crispy] array of function pointers holding the different rendering functions
typedef const byte drawpatchpx_t (const byte dest, const byte source);
static drawpatchpx_t *const drawpatchpx_a[2][2] = {{drawpatchpx11, drawpatchpx10}, {drawpatchpx01, drawpatchpx00}};
static fixed_t dx, dxi, dy, dyi;
......@@ -184,10 +187,7 @@ static void V_DrawPatchCrispy(int x, int y, patch_t *patch, int r)
int w;
// [crispy] four different rendering functions
const byte (* drawpatchpx) (const byte dest, const byte source) =
(!dp_translucent ?
(!dp_translation ? drawpatchpx00 : drawpatchpx01) :
(!dp_translation ? drawpatchpx10 : drawpatchpx11));
drawpatchpx_t *const drawpatchpx = drawpatchpx_a[!dp_translucent][!dp_translation];
y -= SHORT(patch->topoffset);
x -= SHORT(patch->leftoffset);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment