mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-22 11:51:41 +00:00
Merge remote-tracking branch 'origin/master' into gametype-clownery
This commit is contained in:
commit
61b72203a8
20 changed files with 498 additions and 177 deletions
78
.travis.yml
78
.travis.yml
|
@ -459,11 +459,15 @@ matrix:
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.8
|
- gcc-4.8
|
||||||
compiler: gcc-4.8
|
compiler: gcc-4.8
|
||||||
|
@ -473,43 +477,24 @@ matrix:
|
||||||
AND env(DPL_TERMINATE_MAIN) != "1"
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
env:
|
env:
|
||||||
- _DPL_JOB_ENABLED=1
|
- _DPL_JOB_ENABLED=1
|
||||||
- _DPL_JOB_NAME=bionic
|
- _DPL_JOB_NAME=eoan
|
||||||
- _DPL_DPUT_TARGET=1
|
- _DPL_DPUT_TARGET=1
|
||||||
- _DPL_PACKAGE_SOURCE=1
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
- PACKAGE_DISTRO=bionic
|
- PACKAGE_DISTRO=eoan
|
||||||
- PACKAGE_SUBVERSION=~18.04bionic
|
- PACKAGE_SUBVERSION=~19.10eoan
|
||||||
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
|
||||||
- os: linux
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- libsdl2-mixer-dev
|
|
||||||
- libpng-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- libgme-dev
|
|
||||||
- p7zip-full
|
|
||||||
- gcc-4.8
|
|
||||||
compiler: gcc-4.8
|
|
||||||
dist: trusty
|
|
||||||
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
|
||||||
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
|
||||||
AND env(DPL_TERMINATE_MAIN) != "1"
|
|
||||||
env:
|
|
||||||
- _DPL_JOB_ENABLED=1
|
|
||||||
- _DPL_JOB_NAME=trusty
|
|
||||||
- _DPL_DPUT_TARGET=1
|
|
||||||
- _DPL_PACKAGE_SOURCE=1
|
|
||||||
- PACKAGE_DISTRO=trusty
|
|
||||||
- PACKAGE_SUBVERSION=~14.04trusty
|
|
||||||
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.8
|
- gcc-4.8
|
||||||
compiler: gcc-4.8
|
compiler: gcc-4.8
|
||||||
|
@ -528,11 +513,15 @@ matrix:
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.8
|
- gcc-4.8
|
||||||
compiler: gcc-4.8
|
compiler: gcc-4.8
|
||||||
|
@ -542,20 +531,24 @@ matrix:
|
||||||
AND env(DPL_TERMINATE_MAIN) != "1"
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
env:
|
env:
|
||||||
- _DPL_JOB_ENABLED=1
|
- _DPL_JOB_ENABLED=1
|
||||||
- _DPL_JOB_NAME=cosmic
|
- _DPL_JOB_NAME=bionic
|
||||||
- _DPL_DPUT_TARGET=1
|
- _DPL_DPUT_TARGET=1
|
||||||
- _DPL_PACKAGE_SOURCE=1
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
- PACKAGE_DISTRO=cosmic
|
- PACKAGE_DISTRO=bionic
|
||||||
- PACKAGE_SUBVERSION=~18.10cosmic
|
- PACKAGE_SUBVERSION=~18.04bionic
|
||||||
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.8
|
- gcc-4.8
|
||||||
compiler: gcc-4.8
|
compiler: gcc-4.8
|
||||||
|
@ -571,6 +564,33 @@ matrix:
|
||||||
- PACKAGE_DISTRO=xenial
|
- PACKAGE_DISTRO=xenial
|
||||||
- PACKAGE_SUBVERSION=~16.04xenial
|
- PACKAGE_SUBVERSION=~16.04xenial
|
||||||
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- gcc-4.8
|
||||||
|
compiler: gcc-4.8
|
||||||
|
dist: trusty
|
||||||
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=trusty
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- PACKAGE_DISTRO=trusty
|
||||||
|
- PACKAGE_SUBVERSION=~14.04trusty
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- compiler: clang-3.5
|
- compiler: clang-3.5
|
||||||
- compiler: clang-3.6
|
- compiler: clang-3.6
|
||||||
|
|
12
appveyor.yml
12
appveyor.yml
|
@ -29,15 +29,15 @@ environment:
|
||||||
##############################
|
##############################
|
||||||
DPL_ENABLED: 0
|
DPL_ENABLED: 0
|
||||||
DPL_TAG_ENABLED: 0
|
DPL_TAG_ENABLED: 0
|
||||||
DPL_INSTALLER_NAME: SRB2-v2123
|
DPL_INSTALLER_NAME: SRB2-v220
|
||||||
# Asset handling is barebones vs. Travis Deployer. We operate on 7z only.
|
# Asset handling is barebones vs. Travis Deployer. We operate on 7z only.
|
||||||
# Include the README files and the OpenGL batch in the main and patch archives.
|
# Include the README files and the OpenGL batch in the main and patch archives.
|
||||||
# The x86/x64 archives contain the DLL binaries.
|
# The x86/x64 archives contain the DLL binaries.
|
||||||
ASSET_ARCHIVE_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z
|
ASSET_ARCHIVE_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-assets.7z
|
||||||
ASSET_ARCHIVE_PATCH_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-patch-assets.7z
|
ASSET_ARCHIVE_PATCH_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-patch-assets.7z
|
||||||
ASSET_ARCHIVE_X86_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-x86-assets.7z
|
ASSET_ARCHIVE_X86_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-x86-assets.7z
|
||||||
ASSET_ARCHIVE_X64_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-x64-assets.7z
|
ASSET_ARCHIVE_X64_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-x64-assets.7z
|
||||||
ASSET_ARCHIVE_OPTIONAL_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-optional-assets.7z
|
ASSET_ARCHIVE_OPTIONAL_PATH: https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-optional-assets.7z
|
||||||
# This is overridden to 1 for release tag builds
|
# This is overridden to 1 for release tag builds
|
||||||
ASSET_FILES_OPTIONAL_GET: 0
|
ASSET_FILES_OPTIONAL_GET: 0
|
||||||
# For patches, also include the X86/X64 DLLs.
|
# For patches, also include the X86/X64 DLLs.
|
||||||
|
|
|
@ -12,6 +12,10 @@ ENDFUNCTION(PREPEND)
|
||||||
set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
|
set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
|
||||||
CACHE STRING "Path to directory that contains all asset files for the installer.")
|
CACHE STRING "Path to directory that contains all asset files for the installer.")
|
||||||
|
|
||||||
|
####################
|
||||||
|
# POST-V2.2 NOTE: Do not forget to add patch.pk3 to the end of this list!
|
||||||
|
####################
|
||||||
|
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSET_HASHED
|
||||||
"srb2.pk3;\
|
"srb2.pk3;\
|
||||||
player.dta;\
|
player.dta;\
|
||||||
|
@ -22,7 +26,8 @@ zones.pk3"
|
||||||
set(SRB2_ASSET_DOCS
|
set(SRB2_ASSET_DOCS
|
||||||
"README.txt;\
|
"README.txt;\
|
||||||
LICENSE.txt;\
|
LICENSE.txt;\
|
||||||
LICENSE-3RD-PARTY.txt"
|
LICENSE-3RD-PARTY.txt;\
|
||||||
|
README-SDL.txt"
|
||||||
CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!"
|
CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ Build-Depends: debhelper (>= 7.0.50~),
|
||||||
libpng-dev | libpng16-dev | libpng12-dev (>= 1.2.7),
|
libpng-dev | libpng16-dev | libpng12-dev (>= 1.2.7),
|
||||||
zlib1g-dev,
|
zlib1g-dev,
|
||||||
libgme-dev,
|
libgme-dev,
|
||||||
|
libopenmpt-dev,
|
||||||
libglu1-dev | libglu-dev,
|
libglu1-dev | libglu-dev,
|
||||||
libosmesa6-dev | libgl-dev,
|
libosmesa6-dev | libgl-dev,
|
||||||
nasm [i386]
|
nasm [i386]
|
||||||
|
@ -24,6 +25,7 @@ Depends: ${SHLIBS_DEPENDS}, ${MISC_DEPENDS},
|
||||||
libsdl2-mixer-2.0-0,
|
libsdl2-mixer-2.0-0,
|
||||||
zlib1g,
|
zlib1g,
|
||||||
libgme0,
|
libgme0,
|
||||||
|
libopenmpt | libopenmpt0,
|
||||||
libpng | libpng16-16 | libpng12-0
|
libpng | libpng16-16 | libpng12-0
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
||||||
|
|
|
@ -27,10 +27,10 @@
|
||||||
: ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only.
|
: ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only.
|
||||||
|
|
||||||
# Asset File Parameters
|
# Asset File Parameters
|
||||||
: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z}
|
: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-assets.7z}
|
||||||
: ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-optional-assets.7z}
|
: ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/SRB2-v220-optional-assets.7z}
|
||||||
: ${ASSET_FILES_HASHED:=srb2.srb zones.dta player.dta rings.dta patch.dta}
|
: ${ASSET_FILES_HASHED:=srb2.pk3 zones.pk3 player.dta} # POST v2.2 NOTE: Don't forget to add patch.pk3!
|
||||||
: ${ASSET_FILES_DOCS:=README.txt LICENSE.txt LICENSE-3RD-PARTY.txt}
|
: ${ASSET_FILES_DOCS:=README.txt LICENSE.txt LICENSE-3RD-PARTY.txt README-SDL.txt}
|
||||||
: ${ASSET_FILES_OPTIONAL_GET:=0}
|
: ${ASSET_FILES_OPTIONAL_GET:=0}
|
||||||
|
|
||||||
# FTP Parameters
|
# FTP Parameters
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
|
|
||||||
# Package Parameters
|
# Package Parameters
|
||||||
: ${PACKAGE_NAME:=srb2}
|
: ${PACKAGE_NAME:=srb2}
|
||||||
: ${PACKAGE_VERSION:=2.1.23}
|
: ${PACKAGE_VERSION:=2.2.0}
|
||||||
: ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic)
|
: ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic)
|
||||||
: ${PACKAGE_REVISION} # Defaults to UTC timestamp
|
: ${PACKAGE_REVISION} # Defaults to UTC timestamp
|
||||||
: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2}
|
: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2}
|
||||||
|
@ -62,12 +62,12 @@
|
||||||
: ${PACKAGE_GROUP_NAME_EMAIL:=Sonic Team Junior <stjr@srb2.org>}
|
: ${PACKAGE_GROUP_NAME_EMAIL:=Sonic Team Junior <stjr@srb2.org>}
|
||||||
: ${PACKAGE_WEBSITE:=<http://www.srb2.org>}
|
: ${PACKAGE_WEBSITE:=<http://www.srb2.org>}
|
||||||
|
|
||||||
: ${PACKAGE_ASSET_MINVERSION:=2.1.21} # Number this the version BEFORE the actual required version, because we do a > check
|
: ${PACKAGE_ASSET_MINVERSION:=2.1.26} # Number this the version BEFORE the actual required version, because we do a > check
|
||||||
: ${PACKAGE_ASSET_MAXVERSION:=2.1.24} # Number this the version AFTER the actual required version, because we do a < check
|
: ${PACKAGE_ASSET_MAXVERSION:=2.2.1} # Number this the version AFTER the actual required version, because we do a < check
|
||||||
|
|
||||||
: ${PROGRAM_NAME:=Sonic Robo Blast 2}
|
: ${PROGRAM_NAME:=Sonic Robo Blast 2}
|
||||||
: ${PROGRAM_VENDOR:=Sonic Team Junior}
|
: ${PROGRAM_VENDOR:=Sonic Team Junior}
|
||||||
: ${PROGRAM_VERSION:=2.1.23}
|
: ${PROGRAM_VERSION:=2.2.0}
|
||||||
: ${PROGRAM_DESCRIPTION:=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.}
|
: ${PROGRAM_DESCRIPTION:=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.}
|
||||||
: ${PROGRAM_FILENAME:=srb2}
|
: ${PROGRAM_FILENAME:=srb2}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
boolean server = true; // true or false but !server == client
|
boolean server = true; // true or false but !server == client
|
||||||
#define client (!server)
|
#define client (!server)
|
||||||
boolean nodownload = false;
|
boolean nodownload = false;
|
||||||
static boolean serverrunning = false;
|
boolean serverrunning = false;
|
||||||
INT32 serverplayer = 0;
|
INT32 serverplayer = 0;
|
||||||
char motd[254], server_context[8]; // Message of the Day, Unique Context (even without Mumble support)
|
char motd[254], server_context[8]; // Message of the Day, Unique Context (even without Mumble support)
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,8 @@ extern SINT8 nodetoplayer2[MAXNETNODES]; // Say the numplayer for this node if a
|
||||||
extern UINT8 playerpernode[MAXNETNODES]; // Used specially for splitscreen
|
extern UINT8 playerpernode[MAXNETNODES]; // Used specially for splitscreen
|
||||||
extern boolean nodeingame[MAXNETNODES]; // Set false as nodes leave game
|
extern boolean nodeingame[MAXNETNODES]; // Set false as nodes leave game
|
||||||
|
|
||||||
|
extern boolean serverrunning;
|
||||||
|
|
||||||
INT32 Net_GetFreeAcks(boolean urgent);
|
INT32 Net_GetFreeAcks(boolean urgent);
|
||||||
void Net_AckTicker(void);
|
void Net_AckTicker(void);
|
||||||
|
|
||||||
|
|
|
@ -830,6 +830,10 @@ void D_RegisterClientCommands(void)
|
||||||
CV_RegisterVar(&cv_autobrake);
|
CV_RegisterVar(&cv_autobrake);
|
||||||
CV_RegisterVar(&cv_autobrake2);
|
CV_RegisterVar(&cv_autobrake2);
|
||||||
|
|
||||||
|
// Ported from kart
|
||||||
|
CV_RegisterVar(&cv_deadzone);
|
||||||
|
CV_RegisterVar(&cv_deadzone2);
|
||||||
|
|
||||||
// s_sound.c
|
// s_sound.c
|
||||||
CV_RegisterVar(&cv_soundvolume);
|
CV_RegisterVar(&cv_soundvolume);
|
||||||
CV_RegisterVar(&cv_closedcaptioning);
|
CV_RegisterVar(&cv_closedcaptioning);
|
||||||
|
|
|
@ -628,8 +628,12 @@ extern const char *compdate, *comptime, *comprevision, *compbranch;
|
||||||
#define ROTANGLES 24 // Needs to be a divisor of 360 (45, 60, 90, 120...)
|
#define ROTANGLES 24 // Needs to be a divisor of 360 (45, 60, 90, 120...)
|
||||||
#define ROTANGDIFF (360 / ROTANGLES)
|
#define ROTANGDIFF (360 / ROTANGLES)
|
||||||
|
|
||||||
|
/// PNG support
|
||||||
#ifndef HAVE_PNG
|
#ifndef HAVE_PNG
|
||||||
#define NO_PNG_LUMPS
|
#define NO_PNG_LUMPS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// Render flats on walls
|
||||||
|
#define WALLFLATS
|
||||||
|
|
||||||
#endif // __DOOMDEF__
|
#endif // __DOOMDEF__
|
||||||
|
|
217
src/g_game.c
217
src/g_game.c
|
@ -275,6 +275,12 @@ static UINT8 *metalbuffer = NULL;
|
||||||
static UINT8 *metal_p;
|
static UINT8 *metal_p;
|
||||||
static UINT16 metalversion;
|
static UINT16 metalversion;
|
||||||
|
|
||||||
|
typedef struct joystickvector2_s
|
||||||
|
{
|
||||||
|
INT32 xaxis;
|
||||||
|
INT32 yaxis;
|
||||||
|
} joystickvector2_t;
|
||||||
|
|
||||||
// extra data stuff (events registered this frame while recording)
|
// extra data stuff (events registered this frame while recording)
|
||||||
static struct {
|
static struct {
|
||||||
UINT8 flags; // EZT flags
|
UINT8 flags; // EZT flags
|
||||||
|
@ -394,6 +400,11 @@ consvar_t cv_directionchar2 = {"directionchar2", "Movement", CV_SAVE|CV_CALL, di
|
||||||
consvar_t cv_autobrake = {"autobrake", "On", CV_SAVE|CV_CALL, CV_OnOff, AutoBrake_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_autobrake = {"autobrake", "On", CV_SAVE|CV_CALL, CV_OnOff, AutoBrake_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_autobrake2 = {"autobrake2", "On", CV_SAVE|CV_CALL, CV_OnOff, AutoBrake2_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_autobrake2 = {"autobrake2", "On", CV_SAVE|CV_CALL, CV_OnOff, AutoBrake2_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
static CV_PossibleValue_t deadzone_cons_t[] = {{0, "MIN"}, {FRACUNIT, "MAX"}, {0, NULL}};
|
||||||
|
consvar_t cv_deadzone = {"deadzone", "0.25", CV_FLOAT|CV_SAVE, deadzone_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
consvar_t cv_deadzone2 = {"deadzone2", "0.25", CV_FLOAT|CV_SAVE, deadzone_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
AXISNONE = 0,
|
AXISNONE = 0,
|
||||||
|
@ -401,7 +412,6 @@ typedef enum
|
||||||
AXISMOVE,
|
AXISMOVE,
|
||||||
AXISLOOK,
|
AXISLOOK,
|
||||||
AXISSTRAFE,
|
AXISSTRAFE,
|
||||||
AXISDEAD, //Axises that don't want deadzones
|
|
||||||
AXISJUMP,
|
AXISJUMP,
|
||||||
AXISSPIN,
|
AXISSPIN,
|
||||||
AXISFIRE,
|
AXISFIRE,
|
||||||
|
@ -882,12 +892,6 @@ static INT32 JoyAxis(axis_input_e axissel)
|
||||||
retaxis = -JOYAXISRANGE;
|
retaxis = -JOYAXISRANGE;
|
||||||
if (retaxis > (+JOYAXISRANGE))
|
if (retaxis > (+JOYAXISRANGE))
|
||||||
retaxis = +JOYAXISRANGE;
|
retaxis = +JOYAXISRANGE;
|
||||||
if (!Joystick.bGamepadStyle && axissel < AXISDEAD)
|
|
||||||
{
|
|
||||||
const INT32 jdeadzone = JOYAXISRANGE/4;
|
|
||||||
if (-jdeadzone < retaxis && retaxis < jdeadzone)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (flp) retaxis = -retaxis; //flip it around
|
if (flp) retaxis = -retaxis; //flip it around
|
||||||
return retaxis;
|
return retaxis;
|
||||||
}
|
}
|
||||||
|
@ -955,16 +959,75 @@ static INT32 Joy2Axis(axis_input_e axissel)
|
||||||
retaxis = -JOYAXISRANGE;
|
retaxis = -JOYAXISRANGE;
|
||||||
if (retaxis > (+JOYAXISRANGE))
|
if (retaxis > (+JOYAXISRANGE))
|
||||||
retaxis = +JOYAXISRANGE;
|
retaxis = +JOYAXISRANGE;
|
||||||
if (!Joystick2.bGamepadStyle && axissel < AXISDEAD)
|
|
||||||
{
|
|
||||||
const INT32 jdeadzone = JOYAXISRANGE/4;
|
|
||||||
if (-jdeadzone < retaxis && retaxis < jdeadzone)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (flp) retaxis = -retaxis; //flip it around
|
if (flp) retaxis = -retaxis; //flip it around
|
||||||
return retaxis;
|
return retaxis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Take a magnitude of two axes, and adjust it to take out the deadzone
|
||||||
|
// Will return a value between 0 and JOYAXISRANGE
|
||||||
|
static INT32 G_BasicDeadZoneCalculation(INT32 magnitude, fixed_t deadZone)
|
||||||
|
{
|
||||||
|
const INT32 jdeadzone = (JOYAXISRANGE * deadZone) / FRACUNIT;
|
||||||
|
INT32 deadzoneAppliedValue = 0;
|
||||||
|
|
||||||
|
if (jdeadzone > 0)
|
||||||
|
{
|
||||||
|
if (magnitude > jdeadzone)
|
||||||
|
{
|
||||||
|
INT32 adjustedMagnitude = abs(magnitude);
|
||||||
|
adjustedMagnitude = min(adjustedMagnitude, JOYAXISRANGE);
|
||||||
|
|
||||||
|
adjustedMagnitude -= jdeadzone;
|
||||||
|
|
||||||
|
deadzoneAppliedValue = (adjustedMagnitude * JOYAXISRANGE) / (JOYAXISRANGE - jdeadzone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return deadzoneAppliedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the actual sensible radial value for a joystick axis when accounting for a deadzone
|
||||||
|
static void G_HandleAxisDeadZone(UINT8 splitnum, joystickvector2_t *joystickvector)
|
||||||
|
{
|
||||||
|
INT32 gamepadStyle = Joystick.bGamepadStyle;
|
||||||
|
fixed_t deadZone = cv_deadzone.value;
|
||||||
|
|
||||||
|
if (splitnum == 1)
|
||||||
|
{
|
||||||
|
gamepadStyle = Joystick2.bGamepadStyle;
|
||||||
|
deadZone = cv_deadzone2.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// When gamepadstyle is "true" the values are just -1, 0, or 1. This is done in the interface code.
|
||||||
|
if (!gamepadStyle)
|
||||||
|
{
|
||||||
|
// Get the total magnitude of the 2 axes
|
||||||
|
INT32 magnitude = (joystickvector->xaxis * joystickvector->xaxis) + (joystickvector->yaxis * joystickvector->yaxis);
|
||||||
|
INT32 normalisedXAxis;
|
||||||
|
INT32 normalisedYAxis;
|
||||||
|
INT32 normalisedMagnitude;
|
||||||
|
double dMagnitude = sqrt((double)magnitude);
|
||||||
|
magnitude = (INT32)dMagnitude;
|
||||||
|
|
||||||
|
// Get the normalised xy values from the magnitude
|
||||||
|
normalisedXAxis = (joystickvector->xaxis * magnitude) / JOYAXISRANGE;
|
||||||
|
normalisedYAxis = (joystickvector->yaxis * magnitude) / JOYAXISRANGE;
|
||||||
|
|
||||||
|
// Apply the deadzone to the magnitude to give a correct value between 0 and JOYAXISRANGE
|
||||||
|
normalisedMagnitude = G_BasicDeadZoneCalculation(magnitude, deadZone);
|
||||||
|
|
||||||
|
// Apply the deadzone to the xy axes
|
||||||
|
joystickvector->xaxis = (normalisedXAxis * normalisedMagnitude) / JOYAXISRANGE;
|
||||||
|
joystickvector->yaxis = (normalisedYAxis * normalisedMagnitude) / JOYAXISRANGE;
|
||||||
|
|
||||||
|
// Cap the values so they don't go above the correct maximum
|
||||||
|
joystickvector->xaxis = min(joystickvector->xaxis, JOYAXISRANGE);
|
||||||
|
joystickvector->xaxis = max(joystickvector->xaxis, -JOYAXISRANGE);
|
||||||
|
joystickvector->yaxis = min(joystickvector->yaxis, JOYAXISRANGE);
|
||||||
|
joystickvector->yaxis = max(joystickvector->yaxis, -JOYAXISRANGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// G_BuildTiccmd
|
// G_BuildTiccmd
|
||||||
|
@ -985,12 +1048,13 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
{
|
{
|
||||||
boolean forcestrafe = false;
|
boolean forcestrafe = false;
|
||||||
boolean forcefullinput = false;
|
boolean forcefullinput = false;
|
||||||
INT32 tspeed, forward, side, axis, altaxis, i;
|
INT32 tspeed, forward, side, axis, strafeaxis, moveaxis, turnaxis, lookaxis, i;
|
||||||
const INT32 speed = 1;
|
const INT32 speed = 1;
|
||||||
// these ones used for multiple conditions
|
// these ones used for multiple conditions
|
||||||
boolean turnleft, turnright, strafelkey, straferkey, movefkey, movebkey, mouseaiming, analogjoystickmove, gamepadjoystickmove, thisjoyaiming;
|
boolean turnleft, turnright, strafelkey, straferkey, movefkey, movebkey, mouseaiming, analogjoystickmove, gamepadjoystickmove, thisjoyaiming;
|
||||||
player_t *player = &players[consoleplayer];
|
player_t *player = &players[consoleplayer];
|
||||||
camera_t *thiscam = &camera;
|
camera_t *thiscam = &camera;
|
||||||
|
joystickvector2_t movejoystickvector, lookjoystickvector;
|
||||||
|
|
||||||
static INT32 turnheld; // for accelerative turning
|
static INT32 turnheld; // for accelerative turning
|
||||||
static boolean keyboard_look; // true if lookup/down using keyboard
|
static boolean keyboard_look; // true if lookup/down using keyboard
|
||||||
|
@ -1030,11 +1094,16 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
localaiming = 0;
|
localaiming = 0;
|
||||||
joyaiming = thisjoyaiming;
|
joyaiming = thisjoyaiming;
|
||||||
|
|
||||||
axis = JoyAxis(AXISTURN);
|
turnaxis = JoyAxis(AXISTURN);
|
||||||
if (gamepadjoystickmove && axis != 0)
|
lookaxis = JoyAxis(AXISLOOK);
|
||||||
|
lookjoystickvector.xaxis = turnaxis;
|
||||||
|
lookjoystickvector.yaxis = lookaxis;
|
||||||
|
G_HandleAxisDeadZone(0, &lookjoystickvector);
|
||||||
|
|
||||||
|
if (gamepadjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
turnright = turnright || (axis > 0);
|
turnright = turnright || (lookjoystickvector.xaxis > 0);
|
||||||
turnleft = turnleft || (axis < 0);
|
turnleft = turnleft || (lookjoystickvector.xaxis < 0);
|
||||||
}
|
}
|
||||||
forward = side = 0;
|
forward = side = 0;
|
||||||
|
|
||||||
|
@ -1074,10 +1143,10 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
if (turnleft)
|
if (turnleft)
|
||||||
side -= sidemove[speed];
|
side -= sidemove[speed];
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
||||||
side += ((axis * sidemove[1]) >> 10);
|
side += ((lookjoystickvector.xaxis * sidemove[1]) >> 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cv_analog.value) // Analog
|
else if (cv_analog.value) // Analog
|
||||||
|
@ -1094,41 +1163,44 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
else if (turnleft)
|
else if (turnleft)
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn + angleturn[tspeed]);
|
cmd->angleturn = (INT16)(cmd->angleturn + angleturn[tspeed]);
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE should be 1023 (divide by 1024)
|
// JOYAXISRANGE should be 1023 (divide by 1024)
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - ((axis * angleturn[1]) >> 10)); // ANALOG!
|
cmd->angleturn = (INT16)(cmd->angleturn - ((lookjoystickvector.xaxis * angleturn[1]) >> 10)); // ANALOG!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = JoyAxis(AXISSTRAFE);
|
strafeaxis = JoyAxis(AXISSTRAFE);
|
||||||
if (gamepadjoystickmove && axis != 0)
|
moveaxis = JoyAxis(AXISMOVE);
|
||||||
|
movejoystickvector.xaxis = strafeaxis;
|
||||||
|
movejoystickvector.yaxis = moveaxis;
|
||||||
|
G_HandleAxisDeadZone(0, &movejoystickvector);
|
||||||
|
|
||||||
|
if (gamepadjoystickmove && movejoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
if (axis < 0)
|
if (movejoystickvector.xaxis > 0)
|
||||||
side += sidemove[speed];
|
side += sidemove[speed];
|
||||||
else if (axis > 0)
|
else if (movejoystickvector.xaxis < 0)
|
||||||
side -= sidemove[speed];
|
side -= sidemove[speed];
|
||||||
}
|
}
|
||||||
else if (analogjoystickmove && axis != 0)
|
else if (analogjoystickmove && movejoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
||||||
side += ((axis * sidemove[1]) >> 10);
|
side += ((movejoystickvector.xaxis * sidemove[1]) >> 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// forward with key or button
|
// forward with key or button
|
||||||
axis = JoyAxis(AXISMOVE);
|
if (movefkey || (gamepadjoystickmove && movejoystickvector.yaxis < 0)
|
||||||
altaxis = JoyAxis(AXISLOOK);
|
|
||||||
if (movefkey || (gamepadjoystickmove && axis < 0)
|
|
||||||
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
&& (PLAYER1INPUTDOWN(gc_lookup) || (gamepadjoystickmove && altaxis < 0))))
|
&& (PLAYER1INPUTDOWN(gc_lookup) || (gamepadjoystickmove && lookjoystickvector.yaxis > 0))))
|
||||||
forward = forwardmove[speed];
|
forward = forwardmove[speed];
|
||||||
if (movebkey || (gamepadjoystickmove && axis > 0)
|
if (movebkey || (gamepadjoystickmove && movejoystickvector.yaxis > 0)
|
||||||
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
&& (PLAYER1INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && altaxis > 0))))
|
&& (PLAYER1INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && lookjoystickvector.yaxis < 0))))
|
||||||
forward -= forwardmove[speed];
|
forward -= forwardmove[speed];
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && movejoystickvector.yaxis != 0)
|
||||||
forward -= ((axis * forwardmove[1]) >> 10); // ANALOG!
|
forward -= ((movejoystickvector.yaxis * forwardmove[1]) >> 10); // ANALOG!
|
||||||
|
|
||||||
// some people strafe left & right with mouse buttons
|
// some people strafe left & right with mouse buttons
|
||||||
// those people are weird
|
// those people are weird
|
||||||
|
@ -1211,9 +1283,8 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
localaiming += (mlooky<<19)*player_invert*screen_invert;
|
localaiming += (mlooky<<19)*player_invert*screen_invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = JoyAxis(AXISLOOK);
|
if (analogjoystickmove && joyaiming && lookjoystickvector.yaxis != 0 && cv_lookaxis.value != 0)
|
||||||
if (analogjoystickmove && joyaiming && axis != 0 && cv_lookaxis.value != 0)
|
localaiming += (lookjoystickvector.yaxis<<16) * screen_invert;
|
||||||
localaiming += (axis<<16) * screen_invert;
|
|
||||||
|
|
||||||
// spring back if not using keyboard neither mouselookin'
|
// spring back if not using keyboard neither mouselookin'
|
||||||
if (!keyboard_look && cv_lookaxis.value == 0 && !joyaiming && !mouseaiming)
|
if (!keyboard_look && cv_lookaxis.value == 0 && !joyaiming && !mouseaiming)
|
||||||
|
@ -1221,12 +1292,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
|
||||||
|
|
||||||
if (!(player->powers[pw_carry] == CR_NIGHTSMODE))
|
if (!(player->powers[pw_carry] == CR_NIGHTSMODE))
|
||||||
{
|
{
|
||||||
if (PLAYER1INPUTDOWN(gc_lookup) || (gamepadjoystickmove && axis < 0))
|
if (PLAYER1INPUTDOWN(gc_lookup) || (gamepadjoystickmove && lookjoystickvector.yaxis > 0))
|
||||||
{
|
{
|
||||||
localaiming += KB_LOOKSPEED * screen_invert;
|
localaiming += KB_LOOKSPEED * screen_invert;
|
||||||
keyboard_look = true;
|
keyboard_look = true;
|
||||||
}
|
}
|
||||||
else if (PLAYER1INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && axis > 0))
|
else if (PLAYER1INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && lookjoystickvector.yaxis < 0))
|
||||||
{
|
{
|
||||||
localaiming -= KB_LOOKSPEED * screen_invert;
|
localaiming -= KB_LOOKSPEED * screen_invert;
|
||||||
keyboard_look = true;
|
keyboard_look = true;
|
||||||
|
@ -1316,12 +1387,13 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
{
|
{
|
||||||
boolean forcestrafe = false;
|
boolean forcestrafe = false;
|
||||||
boolean forcefullinput = false;
|
boolean forcefullinput = false;
|
||||||
INT32 tspeed, forward, side, axis, altaxis, i;
|
INT32 tspeed, forward, side, axis, strafeaxis, moveaxis, turnaxis, lookaxis, i;
|
||||||
const INT32 speed = 1;
|
const INT32 speed = 1;
|
||||||
// these ones used for multiple conditions
|
// these ones used for multiple conditions
|
||||||
boolean turnleft, turnright, strafelkey, straferkey, movefkey, movebkey, mouseaiming, analogjoystickmove, gamepadjoystickmove, thisjoyaiming;
|
boolean turnleft, turnright, strafelkey, straferkey, movefkey, movebkey, mouseaiming, analogjoystickmove, gamepadjoystickmove, thisjoyaiming;
|
||||||
player_t *player = &players[secondarydisplayplayer];
|
player_t *player = &players[secondarydisplayplayer];
|
||||||
camera_t *thiscam = (player->bot == 2 ? &camera : &camera2);
|
camera_t *thiscam = (player->bot == 2 ? &camera : &camera2);
|
||||||
|
joystickvector2_t movejoystickvector, lookjoystickvector;
|
||||||
|
|
||||||
static INT32 turnheld; // for accelerative turning
|
static INT32 turnheld; // for accelerative turning
|
||||||
static boolean keyboard_look; // true if lookup/down using keyboard
|
static boolean keyboard_look; // true if lookup/down using keyboard
|
||||||
|
@ -1359,11 +1431,16 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
localaiming2 = 0;
|
localaiming2 = 0;
|
||||||
joyaiming = thisjoyaiming;
|
joyaiming = thisjoyaiming;
|
||||||
|
|
||||||
axis = Joy2Axis(AXISTURN);
|
turnaxis = Joy2Axis(AXISTURN);
|
||||||
if (gamepadjoystickmove && axis != 0)
|
lookaxis = Joy2Axis(AXISLOOK);
|
||||||
|
lookjoystickvector.xaxis = turnaxis;
|
||||||
|
lookjoystickvector.yaxis = lookaxis;
|
||||||
|
G_HandleAxisDeadZone(1, &lookjoystickvector);
|
||||||
|
|
||||||
|
if (gamepadjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
turnright = turnright || (axis > 0);
|
turnright = turnright || (lookjoystickvector.xaxis > 0);
|
||||||
turnleft = turnleft || (axis < 0);
|
turnleft = turnleft || (lookjoystickvector.xaxis < 0);
|
||||||
}
|
}
|
||||||
forward = side = 0;
|
forward = side = 0;
|
||||||
|
|
||||||
|
@ -1404,10 +1481,10 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
if (turnleft)
|
if (turnleft)
|
||||||
side -= sidemove[speed];
|
side -= sidemove[speed];
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
||||||
side += ((axis * sidemove[1]) >> 10);
|
side += ((lookjoystickvector.xaxis * sidemove[1]) >> 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cv_analog2.value) // Analog
|
else if (cv_analog2.value) // Analog
|
||||||
|
@ -1424,41 +1501,44 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
else if (turnleft)
|
else if (turnleft)
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn + angleturn[tspeed]);
|
cmd->angleturn = (INT16)(cmd->angleturn + angleturn[tspeed]);
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && lookjoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE should be 1023 (divide by 1024)
|
// JOYAXISRANGE should be 1023 (divide by 1024)
|
||||||
cmd->angleturn = (INT16)(cmd->angleturn - ((axis * angleturn[1]) >> 10)); // ANALOG!
|
cmd->angleturn = (INT16)(cmd->angleturn - ((lookjoystickvector.xaxis * angleturn[1]) >> 10)); // ANALOG!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = Joy2Axis(AXISSTRAFE);
|
strafeaxis = Joy2Axis(AXISSTRAFE);
|
||||||
if (gamepadjoystickmove && axis != 0)
|
moveaxis = Joy2Axis(AXISMOVE);
|
||||||
|
movejoystickvector.xaxis = strafeaxis;
|
||||||
|
movejoystickvector.yaxis = moveaxis;
|
||||||
|
G_HandleAxisDeadZone(1, &movejoystickvector);
|
||||||
|
|
||||||
|
if (gamepadjoystickmove && movejoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
if (axis < 0)
|
if (movejoystickvector.xaxis > 0)
|
||||||
side += sidemove[speed];
|
side += sidemove[speed];
|
||||||
else if (axis > 0)
|
else if (movejoystickvector.xaxis < 0)
|
||||||
side -= sidemove[speed];
|
side -= sidemove[speed];
|
||||||
}
|
}
|
||||||
else if (analogjoystickmove && axis != 0)
|
else if (analogjoystickmove && movejoystickvector.xaxis != 0)
|
||||||
{
|
{
|
||||||
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
|
||||||
side += ((axis * sidemove[1]) >> 10);
|
side += ((movejoystickvector.xaxis * sidemove[1]) >> 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// forward with key or button
|
// forward with key or button
|
||||||
axis = Joy2Axis(AXISMOVE);
|
if (movefkey || (gamepadjoystickmove && movejoystickvector.yaxis < 0)
|
||||||
altaxis = Joy2Axis(AXISLOOK);
|
|
||||||
if (movefkey || (gamepadjoystickmove && axis < 0)
|
|
||||||
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
&& (PLAYER2INPUTDOWN(gc_lookup) || (gamepadjoystickmove && altaxis < 0))))
|
&& (PLAYER2INPUTDOWN(gc_lookup) || (gamepadjoystickmove && lookjoystickvector.yaxis > 0))))
|
||||||
forward = forwardmove[speed];
|
forward = forwardmove[speed];
|
||||||
if (movebkey || (gamepadjoystickmove && axis > 0)
|
if (movebkey || (gamepadjoystickmove && movejoystickvector.yaxis > 0)
|
||||||
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
|| ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||||
&& (PLAYER2INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && altaxis > 0))))
|
&& (PLAYER2INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && lookjoystickvector.yaxis < 0))))
|
||||||
forward -= forwardmove[speed];
|
forward -= forwardmove[speed];
|
||||||
|
|
||||||
if (analogjoystickmove && axis != 0)
|
if (analogjoystickmove && movejoystickvector.yaxis != 0)
|
||||||
forward -= ((axis * forwardmove[1]) >> 10); // ANALOG!
|
forward -= ((movejoystickvector.yaxis * forwardmove[1]) >> 10); // ANALOG!
|
||||||
|
|
||||||
// some people strafe left & right with mouse buttons
|
// some people strafe left & right with mouse buttons
|
||||||
// those people are (still) weird
|
// those people are (still) weird
|
||||||
|
@ -1538,9 +1618,8 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
localaiming2 += (mlook2y<<19)*player_invert*screen_invert;
|
localaiming2 += (mlook2y<<19)*player_invert*screen_invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = Joy2Axis(AXISLOOK);
|
if (analogjoystickmove && joyaiming && lookjoystickvector.yaxis != 0 && cv_lookaxis2.value != 0)
|
||||||
if (analogjoystickmove && joyaiming && axis != 0 && cv_lookaxis2.value != 0)
|
localaiming2 += (lookjoystickvector.yaxis<<16) * screen_invert;
|
||||||
localaiming2 += (axis<<16) * screen_invert;
|
|
||||||
|
|
||||||
// spring back if not using keyboard neither mouselookin'
|
// spring back if not using keyboard neither mouselookin'
|
||||||
if (!keyboard_look && cv_lookaxis2.value == 0 && !joyaiming && !mouseaiming)
|
if (!keyboard_look && cv_lookaxis2.value == 0 && !joyaiming && !mouseaiming)
|
||||||
|
@ -1548,12 +1627,12 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
|
||||||
|
|
||||||
if (!(player->powers[pw_carry] == CR_NIGHTSMODE))
|
if (!(player->powers[pw_carry] == CR_NIGHTSMODE))
|
||||||
{
|
{
|
||||||
if (PLAYER2INPUTDOWN(gc_lookup) || (gamepadjoystickmove && axis < 0))
|
if (PLAYER2INPUTDOWN(gc_lookup) || (gamepadjoystickmove && lookjoystickvector.yaxis > 0))
|
||||||
{
|
{
|
||||||
localaiming2 += KB_LOOKSPEED * screen_invert;
|
localaiming2 += KB_LOOKSPEED * screen_invert;
|
||||||
keyboard_look = true;
|
keyboard_look = true;
|
||||||
}
|
}
|
||||||
else if (PLAYER2INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && axis > 0))
|
else if (PLAYER2INPUTDOWN(gc_lookdown) || (gamepadjoystickmove && lookjoystickvector.yaxis < 0))
|
||||||
{
|
{
|
||||||
localaiming2 -= KB_LOOKSPEED * screen_invert;
|
localaiming2 -= KB_LOOKSPEED * screen_invert;
|
||||||
keyboard_look = true;
|
keyboard_look = true;
|
||||||
|
|
|
@ -72,6 +72,7 @@ extern consvar_t cv_useranalog, cv_useranalog2;
|
||||||
extern consvar_t cv_analog, cv_analog2;
|
extern consvar_t cv_analog, cv_analog2;
|
||||||
extern consvar_t cv_directionchar, cv_directionchar2;
|
extern consvar_t cv_directionchar, cv_directionchar2;
|
||||||
extern consvar_t cv_autobrake, cv_autobrake2;
|
extern consvar_t cv_autobrake, cv_autobrake2;
|
||||||
|
extern consvar_t cv_deadzone, cv_deadzone2;
|
||||||
extern consvar_t cv_sideaxis,cv_turnaxis,cv_moveaxis,cv_lookaxis,cv_jumpaxis,cv_spinaxis,cv_fireaxis,cv_firenaxis;
|
extern consvar_t cv_sideaxis,cv_turnaxis,cv_moveaxis,cv_lookaxis,cv_jumpaxis,cv_spinaxis,cv_fireaxis,cv_firenaxis;
|
||||||
extern consvar_t cv_sideaxis2,cv_turnaxis2,cv_moveaxis2,cv_lookaxis2,cv_jumpaxis2,cv_spinaxis2,cv_fireaxis2,cv_firenaxis2;
|
extern consvar_t cv_sideaxis2,cv_turnaxis2,cv_moveaxis2,cv_lookaxis2,cv_jumpaxis2,cv_spinaxis2,cv_fireaxis2,cv_firenaxis2;
|
||||||
extern consvar_t cv_ghost_bestscore, cv_ghost_besttime, cv_ghost_bestrings, cv_ghost_last, cv_ghost_guest;
|
extern consvar_t cv_ghost_bestscore, cv_ghost_besttime, cv_ghost_bestrings, cv_ghost_last, cv_ghost_guest;
|
||||||
|
|
|
@ -33,10 +33,6 @@
|
||||||
#include "../r_patch.h"
|
#include "../r_patch.h"
|
||||||
#include "../p_setup.h"
|
#include "../p_setup.h"
|
||||||
|
|
||||||
//Hurdler: 25/04/2000: used for new colormap code in hardware mode
|
|
||||||
//static UINT8 *gr_colormap = NULL; // by default it must be NULL ! (because colormap tables are not initialized)
|
|
||||||
boolean firetranslucent = false;
|
|
||||||
|
|
||||||
// Values set after a call to HWR_ResizeBlock()
|
// Values set after a call to HWR_ResizeBlock()
|
||||||
static INT32 blocksize, blockwidth, blockheight;
|
static INT32 blocksize, blockwidth, blockheight;
|
||||||
|
|
||||||
|
@ -122,18 +118,16 @@ static void HWR_DrawColumnInCache(const column_t *patchcol, UINT8 *block, GLMipm
|
||||||
|
|
||||||
texel = source[yfrac>>FRACBITS];
|
texel = source[yfrac>>FRACBITS];
|
||||||
|
|
||||||
if (firetranslucent && (transtables[(texel<<8)+0x40000]!=texel))
|
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
||||||
alpha = 0x80;
|
if (mipmap->colormap)
|
||||||
|
texel = mipmap->colormap[texel];
|
||||||
|
|
||||||
|
// transparent pixel
|
||||||
|
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX)
|
||||||
|
alpha = 0x00;
|
||||||
else
|
else
|
||||||
alpha = 0xff;
|
alpha = 0xff;
|
||||||
|
|
||||||
//Hurdler: not perfect, but better than holes
|
|
||||||
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX && (mipmap->flags & TF_CHROMAKEYED))
|
|
||||||
texel = HWR_CHROMAKEY_EQUIVALENTCOLORINDEX;
|
|
||||||
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
|
||||||
else if (mipmap->colormap)
|
|
||||||
texel = mipmap->colormap[texel];
|
|
||||||
|
|
||||||
// hope compiler will get this switch out of the loops (dreams...)
|
// hope compiler will get this switch out of the loops (dreams...)
|
||||||
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
||||||
// Alam: SRB2 uses Mingw, HUGS
|
// Alam: SRB2 uses Mingw, HUGS
|
||||||
|
@ -236,18 +230,16 @@ static void HWR_DrawFlippedColumnInCache(const column_t *patchcol, UINT8 *block,
|
||||||
|
|
||||||
texel = source[yfrac>>FRACBITS];
|
texel = source[yfrac>>FRACBITS];
|
||||||
|
|
||||||
if (firetranslucent && (transtables[(texel<<8)+0x40000]!=texel))
|
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
||||||
alpha = 0x80;
|
if (mipmap->colormap)
|
||||||
|
texel = mipmap->colormap[texel];
|
||||||
|
|
||||||
|
// transparent pixel
|
||||||
|
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX)
|
||||||
|
alpha = 0x00;
|
||||||
else
|
else
|
||||||
alpha = 0xff;
|
alpha = 0xff;
|
||||||
|
|
||||||
//Hurdler: not perfect, but better than holes
|
|
||||||
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX && (mipmap->flags & TF_CHROMAKEYED))
|
|
||||||
texel = HWR_CHROMAKEY_EQUIVALENTCOLORINDEX;
|
|
||||||
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
|
||||||
else if (mipmap->colormap)
|
|
||||||
texel = mipmap->colormap[texel];
|
|
||||||
|
|
||||||
// hope compiler will get this switch out of the loops (dreams...)
|
// hope compiler will get this switch out of the loops (dreams...)
|
||||||
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
||||||
// Alam: SRB2 uses Mingw, HUGS
|
// Alam: SRB2 uses Mingw, HUGS
|
||||||
|
@ -576,7 +568,7 @@ static UINT8 *MakeBlock(GLMipmap_t *grMipmap)
|
||||||
{
|
{
|
||||||
UINT8 *block;
|
UINT8 *block;
|
||||||
INT32 bpp, i;
|
INT32 bpp, i;
|
||||||
UINT16 bu16 = ((0x00 <<8) | HWR_CHROMAKEY_EQUIVALENTCOLORINDEX);
|
UINT16 bu16 = ((0x00 <<8) | HWR_PATCHES_CHROMAKEY_COLORINDEX);
|
||||||
|
|
||||||
bpp = format2bpp[grMipmap->grInfo.format];
|
bpp = format2bpp[grMipmap->grInfo.format];
|
||||||
block = Z_Malloc(blocksize*bpp, PU_HWRCACHE, &(grMipmap->grInfo.data));
|
block = Z_Malloc(blocksize*bpp, PU_HWRCACHE, &(grMipmap->grInfo.data));
|
||||||
|
@ -606,6 +598,7 @@ static void HWR_GenerateTexture(INT32 texnum, GLTexture_t *grtex)
|
||||||
texture_t *texture;
|
texture_t *texture;
|
||||||
texpatch_t *patch;
|
texpatch_t *patch;
|
||||||
patch_t *realpatch;
|
patch_t *realpatch;
|
||||||
|
UINT8 *pdata;
|
||||||
|
|
||||||
INT32 i;
|
INT32 i;
|
||||||
boolean skyspecial = false; //poor hack for Legacy large skies..
|
boolean skyspecial = false; //poor hack for Legacy large skies..
|
||||||
|
@ -638,7 +631,7 @@ static void HWR_GenerateTexture(INT32 texnum, GLTexture_t *grtex)
|
||||||
INT32 j;
|
INT32 j;
|
||||||
RGBA_t col;
|
RGBA_t col;
|
||||||
|
|
||||||
col = V_GetColor(HWR_CHROMAKEY_EQUIVALENTCOLORINDEX);
|
col = V_GetColor(HWR_PATCHES_CHROMAKEY_COLORINDEX);
|
||||||
for (j = 0; j < blockheight; j++)
|
for (j = 0; j < blockheight; j++)
|
||||||
{
|
{
|
||||||
for (i = 0; i < blockwidth; i++)
|
for (i = 0; i < blockwidth; i++)
|
||||||
|
@ -654,18 +647,29 @@ static void HWR_GenerateTexture(INT32 texnum, GLTexture_t *grtex)
|
||||||
// Composite the columns together.
|
// Composite the columns together.
|
||||||
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
||||||
{
|
{
|
||||||
#ifndef NO_PNG_LUMPS
|
boolean dealloc = true;
|
||||||
size_t lumplength = W_LumpLengthPwad(patch->wad, patch->lump);
|
size_t lumplength = W_LumpLengthPwad(patch->wad, patch->lump);
|
||||||
#endif
|
pdata = W_CacheLumpNumPwad(patch->wad, patch->lump, PU_CACHE);
|
||||||
realpatch = W_CacheLumpNumPwad(patch->wad, patch->lump, PU_CACHE);
|
realpatch = (patch_t *)pdata;
|
||||||
|
|
||||||
#ifndef NO_PNG_LUMPS
|
#ifndef NO_PNG_LUMPS
|
||||||
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
||||||
realpatch = R_PNGToPatch((UINT8 *)realpatch, lumplength, NULL, false);
|
realpatch = R_PNGToPatch((UINT8 *)realpatch, lumplength, NULL, false);
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
HWR_DrawTexturePatchInCache(&grtex->mipmap,
|
#ifdef WALLFLATS
|
||||||
blockwidth, blockheight,
|
if (texture->type == TEXTURETYPE_FLAT)
|
||||||
texture, patch,
|
realpatch = R_FlatToPatch(pdata, texture->width, texture->height, 0, 0, NULL, false);
|
||||||
realpatch);
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
(void)lumplength;
|
||||||
|
dealloc = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWR_DrawTexturePatchInCache(&grtex->mipmap, blockwidth, blockheight, texture, patch, realpatch);
|
||||||
|
|
||||||
|
if (dealloc)
|
||||||
Z_Unlock(realpatch);
|
Z_Unlock(realpatch);
|
||||||
}
|
}
|
||||||
//Hurdler: not efficient at all but I don't remember exactly how HWR_DrawPatchInCache works :(
|
//Hurdler: not efficient at all but I don't remember exactly how HWR_DrawPatchInCache works :(
|
||||||
|
|
|
@ -42,7 +42,7 @@ typedef unsigned char FBOOLEAN;
|
||||||
|
|
||||||
// byte value for paletted graphics, which represent the transparent color
|
// byte value for paletted graphics, which represent the transparent color
|
||||||
#define HWR_PATCHES_CHROMAKEY_COLORINDEX 255
|
#define HWR_PATCHES_CHROMAKEY_COLORINDEX 255
|
||||||
#define HWR_CHROMAKEY_EQUIVALENTCOLORINDEX 130
|
//#define HWR_CHROMAKEY_EQUIVALENTCOLORINDEX 130
|
||||||
|
|
||||||
// the chroma key color shows on border sprites, set it to black
|
// the chroma key color shows on border sprites, set it to black
|
||||||
#define HWR_PATCHES_CHROMAKEY_COLORVALUE (0x00000000) //RGBA format as in grSstWinOpen()
|
#define HWR_PATCHES_CHROMAKEY_COLORVALUE (0x00000000) //RGBA format as in grSstWinOpen()
|
||||||
|
|
|
@ -128,6 +128,5 @@ extern consvar_t cv_grrounddown; // on/off
|
||||||
|
|
||||||
extern INT32 patchformat;
|
extern INT32 patchformat;
|
||||||
extern INT32 textureformat;
|
extern INT32 textureformat;
|
||||||
extern boolean firetranslucent;
|
|
||||||
|
|
||||||
#endif //_HW_GLOB_
|
#endif //_HW_GLOB_
|
||||||
|
|
35
src/i_tcp.c
35
src/i_tcp.c
|
@ -209,7 +209,8 @@ static size_t numbans = 0;
|
||||||
static boolean SOCK_bannednode[MAXNETNODES+1]; /// \note do we really need the +1?
|
static boolean SOCK_bannednode[MAXNETNODES+1]; /// \note do we really need the +1?
|
||||||
static boolean init_tcp_driver = false;
|
static boolean init_tcp_driver = false;
|
||||||
|
|
||||||
static char port_name[8] = DEFAULTPORT;
|
static const char *serverport_name = DEFAULTPORT;
|
||||||
|
static const char *clientport_name;/* any port */
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
|
||||||
|
@ -887,6 +888,7 @@ static boolean UDP_Socket(void)
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
const INT32 b_ipv6 = M_CheckParm("-ipv6");
|
const INT32 b_ipv6 = M_CheckParm("-ipv6");
|
||||||
#endif
|
#endif
|
||||||
|
const char *serv;
|
||||||
|
|
||||||
|
|
||||||
for (s = 0; s < mysocketses; s++)
|
for (s = 0; s < mysocketses; s++)
|
||||||
|
@ -902,11 +904,16 @@ static boolean UDP_Socket(void)
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
hints.ai_protocol = IPPROTO_UDP;
|
hints.ai_protocol = IPPROTO_UDP;
|
||||||
|
|
||||||
|
if (serverrunning)
|
||||||
|
serv = serverport_name;
|
||||||
|
else
|
||||||
|
serv = clientport_name;
|
||||||
|
|
||||||
if (M_CheckParm("-bindaddr"))
|
if (M_CheckParm("-bindaddr"))
|
||||||
{
|
{
|
||||||
while (M_IsNextParm())
|
while (M_IsNextParm())
|
||||||
{
|
{
|
||||||
gaie = I_getaddrinfo(M_GetNextParm(), port_name, &hints, &ai);
|
gaie = I_getaddrinfo(M_GetNextParm(), serv, &hints, &ai);
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
|
@ -927,7 +934,7 @@ static boolean UDP_Socket(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gaie = I_getaddrinfo("0.0.0.0", port_name, &hints, &ai);
|
gaie = I_getaddrinfo("0.0.0.0", serv, &hints, &ai);
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
|
@ -942,8 +949,8 @@ static boolean UDP_Socket(void)
|
||||||
#ifdef HAVE_MINIUPNPC
|
#ifdef HAVE_MINIUPNPC
|
||||||
if (UPNP_support)
|
if (UPNP_support)
|
||||||
{
|
{
|
||||||
I_UPnP_rem(port_name, "UDP");
|
I_UPnP_rem(serverport_name, "UDP");
|
||||||
I_UPnP_add(NULL, port_name, "UDP");
|
I_UPnP_add(NULL, serverport_name, "UDP");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -960,7 +967,7 @@ static boolean UDP_Socket(void)
|
||||||
{
|
{
|
||||||
while (M_IsNextParm())
|
while (M_IsNextParm())
|
||||||
{
|
{
|
||||||
gaie = I_getaddrinfo(M_GetNextParm(), port_name, &hints, &ai);
|
gaie = I_getaddrinfo(M_GetNextParm(), serv, &hints, &ai);
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
|
@ -981,7 +988,7 @@ static boolean UDP_Socket(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gaie = I_getaddrinfo("::", port_name, &hints, &ai);
|
gaie = I_getaddrinfo("::", serv, &hints, &ai);
|
||||||
if (gaie == 0)
|
if (gaie == 0)
|
||||||
{
|
{
|
||||||
runp = ai;
|
runp = ai;
|
||||||
|
@ -1421,15 +1428,19 @@ boolean I_InitTcpNetwork(void)
|
||||||
if (!I_InitTcpDriver())
|
if (!I_InitTcpDriver())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (M_CheckParm("-port"))
|
if (M_CheckParm("-port") || M_CheckParm("-serverport"))
|
||||||
// Combined -udpport and -clientport into -port
|
// Combined -udpport and -clientport into -port
|
||||||
// As it was really redundant having two seperate parms that does the same thing
|
// As it was really redundant having two seperate parms that does the same thing
|
||||||
|
/* Sorry Steel, I'm adding these back. But -udpport is a stupid name. */
|
||||||
{
|
{
|
||||||
if (M_IsNextParm())
|
/*
|
||||||
strcpy(port_name, M_GetNextParm());
|
If it's NULL, that's okay! Because then
|
||||||
else
|
we'll get a random port from getaddrinfo.
|
||||||
strcpy(port_name, "0");
|
*/
|
||||||
|
serverport_name = M_GetNextParm();
|
||||||
}
|
}
|
||||||
|
if (M_CheckParm("-clientport"))
|
||||||
|
clientport_name = M_GetNextParm();
|
||||||
|
|
||||||
// parse network game options,
|
// parse network game options,
|
||||||
if (M_CheckParm("-server") || dedicated)
|
if (M_CheckParm("-server") || dedicated)
|
||||||
|
|
|
@ -1118,6 +1118,8 @@ static menuitem_t OP_Joystick1Menu[] =
|
||||||
|
|
||||||
{IT_STRING | IT_CVAR, NULL, "First-Person Vert-Look", &cv_alwaysfreelook, 120},
|
{IT_STRING | IT_CVAR, NULL, "First-Person Vert-Look", &cv_alwaysfreelook, 120},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Third-Person Vert-Look", &cv_chasefreelook, 130},
|
{IT_STRING | IT_CVAR, NULL, "Third-Person Vert-Look", &cv_chasefreelook, 130},
|
||||||
|
{IT_STRING | IT_CVAR | IT_CV_FLOATSLIDER,
|
||||||
|
NULL, "Deadzone", &cv_deadzone, 140 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static menuitem_t OP_Joystick2Menu[] =
|
static menuitem_t OP_Joystick2Menu[] =
|
||||||
|
@ -1134,6 +1136,8 @@ static menuitem_t OP_Joystick2Menu[] =
|
||||||
|
|
||||||
{IT_STRING | IT_CVAR, NULL, "First-Person Vert-Look", &cv_alwaysfreelook2,120},
|
{IT_STRING | IT_CVAR, NULL, "First-Person Vert-Look", &cv_alwaysfreelook2,120},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Third-Person Vert-Look", &cv_chasefreelook2, 130},
|
{IT_STRING | IT_CVAR, NULL, "Third-Person Vert-Look", &cv_chasefreelook2, 130},
|
||||||
|
{IT_STRING | IT_CVAR | IT_CV_FLOATSLIDER,
|
||||||
|
NULL, "Deadzone", &cv_deadzone2, 140 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static menuitem_t OP_JoystickSetMenu[1+MAX_JOYSTICKS];
|
static menuitem_t OP_JoystickSetMenu[1+MAX_JOYSTICKS];
|
||||||
|
@ -3009,7 +3013,7 @@ boolean M_Responder(event_t *ev)
|
||||||
}
|
}
|
||||||
else if (ev->type == ev_joystick && ev->data1 == 0 && joywait < I_GetTime())
|
else if (ev->type == ev_joystick && ev->data1 == 0 && joywait < I_GetTime())
|
||||||
{
|
{
|
||||||
const INT32 jdeadzone = JOYAXISRANGE/4;
|
const INT32 jdeadzone = (JOYAXISRANGE * cv_deadzone.value) / FRACUNIT;
|
||||||
if (ev->data3 != INT32_MAX)
|
if (ev->data3 != INT32_MAX)
|
||||||
{
|
{
|
||||||
if (Joystick.bGamepadStyle || abs(ev->data3) > jdeadzone)
|
if (Joystick.bGamepadStyle || abs(ev->data3) > jdeadzone)
|
||||||
|
|
26
src/p_spec.c
26
src/p_spec.c
|
@ -138,6 +138,13 @@ static size_t maxanims;
|
||||||
|
|
||||||
static animdef_t *animdefs = NULL;
|
static animdef_t *animdefs = NULL;
|
||||||
|
|
||||||
|
// Increase the size of animdefs to make room for a new animation definition
|
||||||
|
static void GrowAnimDefs(void)
|
||||||
|
{
|
||||||
|
maxanims++;
|
||||||
|
animdefs = (animdef_t *)Z_Realloc(animdefs, sizeof(animdef_t)*(maxanims + 1), PU_STATIC, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
// A prototype; here instead of p_spec.h, so they're "private"
|
// A prototype; here instead of p_spec.h, so they're "private"
|
||||||
void P_ParseANIMDEFSLump(INT32 wadNum, UINT16 lumpnum);
|
void P_ParseANIMDEFSLump(INT32 wadNum, UINT16 lumpnum);
|
||||||
void P_ParseAnimationDefintion(SINT8 istexture);
|
void P_ParseAnimationDefintion(SINT8 istexture);
|
||||||
|
@ -347,8 +354,7 @@ void P_ParseAnimationDefintion(SINT8 istexture)
|
||||||
if (i == maxanims)
|
if (i == maxanims)
|
||||||
{
|
{
|
||||||
// Increase the size to make room for the new animation definition
|
// Increase the size to make room for the new animation definition
|
||||||
maxanims++;
|
GrowAnimDefs();
|
||||||
animdefs = (animdef_t *)Z_Realloc(animdefs, sizeof(animdef_t)*(maxanims + 1), PU_STATIC, NULL);
|
|
||||||
strncpy(animdefs[i].startname, animdefsToken, 9);
|
strncpy(animdefs[i].startname, animdefsToken, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,8 +440,17 @@ void P_ParseAnimationDefintion(SINT8 istexture)
|
||||||
}
|
}
|
||||||
animdefs[i].speed = animSpeed;
|
animdefs[i].speed = animSpeed;
|
||||||
Z_Free(animdefsToken);
|
Z_Free(animdefsToken);
|
||||||
}
|
|
||||||
|
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
// hehe... uhh.....
|
||||||
|
if (!istexture)
|
||||||
|
{
|
||||||
|
GrowAnimDefs();
|
||||||
|
M_Memcpy(&animdefs[maxanims-1], &animdefs[i], sizeof(animdef_t));
|
||||||
|
animdefs[maxanims-1].istexture = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/** Checks for flats in levelflats that are part of a flat animation sequence
|
/** Checks for flats in levelflats that are part of a flat animation sequence
|
||||||
* and sets them up for animation.
|
* and sets them up for animation.
|
||||||
|
@ -476,7 +491,8 @@ static inline void P_FindAnimatedFlat(INT32 animnum)
|
||||||
atoi(sizeu1(i)), foundflats->name, foundflats->animseq,
|
atoi(sizeu1(i)), foundflats->name, foundflats->animseq,
|
||||||
foundflats->numpics,foundflats->speed);
|
foundflats->numpics,foundflats->speed);
|
||||||
}
|
}
|
||||||
else if (foundflats->u.flat.lumpnum >= startflatnum && foundflats->u.flat.lumpnum <= endflatnum)
|
else if ((!anims[animnum].istexture) && (foundflats->type == LEVELFLAT_FLAT)
|
||||||
|
&& (foundflats->u.flat.lumpnum >= startflatnum && foundflats->u.flat.lumpnum <= endflatnum))
|
||||||
{
|
{
|
||||||
foundflats->u.flat.baselumpnum = startflatnum;
|
foundflats->u.flat.baselumpnum = startflatnum;
|
||||||
foundflats->animseq = foundflats->u.flat.lumpnum - startflatnum;
|
foundflats->animseq = foundflats->u.flat.lumpnum - startflatnum;
|
||||||
|
@ -5626,7 +5642,7 @@ void P_UpdateSpecials(void)
|
||||||
if (foundflats->speed) // it is an animated flat
|
if (foundflats->speed) // it is an animated flat
|
||||||
{
|
{
|
||||||
// update the levelflat texture number
|
// update the levelflat texture number
|
||||||
if (foundflats->type == LEVELFLAT_TEXTURE)
|
if ((foundflats->type == LEVELFLAT_TEXTURE) && (foundflats->u.texture.basenum != -1))
|
||||||
foundflats->u.texture.num = foundflats->u.texture.basenum + ((leveltime/foundflats->speed + foundflats->animseq) % foundflats->numpics);
|
foundflats->u.texture.num = foundflats->u.texture.basenum + ((leveltime/foundflats->speed + foundflats->animseq) % foundflats->numpics);
|
||||||
// update the levelflat lump number
|
// update the levelflat lump number
|
||||||
else if ((foundflats->type == LEVELFLAT_FLAT) && (foundflats->u.flat.baselumpnum != LUMPERROR))
|
else if ((foundflats->type == LEVELFLAT_FLAT) && (foundflats->u.flat.baselumpnum != LUMPERROR))
|
||||||
|
|
176
src/r_data.c
176
src/r_data.c
|
@ -441,7 +441,7 @@ static UINT8 *R_GenerateTexture(size_t texnum)
|
||||||
texture_t *texture;
|
texture_t *texture;
|
||||||
texpatch_t *patch;
|
texpatch_t *patch;
|
||||||
patch_t *realpatch;
|
patch_t *realpatch;
|
||||||
boolean dealloc = false;
|
UINT8 *pdata;
|
||||||
int x, x1, x2, i, width, height;
|
int x, x1, x2, i, width, height;
|
||||||
size_t blocksize;
|
size_t blocksize;
|
||||||
column_t *patchcol;
|
column_t *patchcol;
|
||||||
|
@ -469,12 +469,17 @@ static UINT8 *R_GenerateTexture(size_t texnum)
|
||||||
wadnum = patch->wad;
|
wadnum = patch->wad;
|
||||||
lumpnum = patch->lump;
|
lumpnum = patch->lump;
|
||||||
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
||||||
realpatch = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE); // can't use W_CachePatchNumPwad because OpenGL
|
pdata = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
|
||||||
|
realpatch = (patch_t *)pdata;
|
||||||
|
|
||||||
#ifndef NO_PNG_LUMPS
|
#ifndef NO_PNG_LUMPS
|
||||||
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
||||||
goto multipatch;
|
goto multipatch;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
if (texture->type == TEXTURETYPE_FLAT)
|
||||||
|
goto multipatch;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Check the patch for holes.
|
// Check the patch for holes.
|
||||||
if (texture->width > SHORT(realpatch->width) || texture->height > SHORT(realpatch->height))
|
if (texture->width > SHORT(realpatch->width) || texture->height > SHORT(realpatch->height))
|
||||||
|
@ -552,6 +557,7 @@ static UINT8 *R_GenerateTexture(size_t texnum)
|
||||||
// Composite the columns together.
|
// Composite the columns together.
|
||||||
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
||||||
{
|
{
|
||||||
|
boolean dealloc = true;
|
||||||
static void (*ColumnDrawerPointer)(column_t *, UINT8 *, texpatch_t *, INT32, INT32); // Column drawing function pointer.
|
static void (*ColumnDrawerPointer)(column_t *, UINT8 *, texpatch_t *, INT32, INT32); // Column drawing function pointer.
|
||||||
if (patch->style != AST_COPY)
|
if (patch->style != AST_COPY)
|
||||||
ColumnDrawerPointer = (patch->flip & 2) ? R_DrawBlendFlippedColumnInCache : R_DrawBlendColumnInCache;
|
ColumnDrawerPointer = (patch->flip & 2) ? R_DrawBlendFlippedColumnInCache : R_DrawBlendColumnInCache;
|
||||||
|
@ -560,17 +566,25 @@ static UINT8 *R_GenerateTexture(size_t texnum)
|
||||||
|
|
||||||
wadnum = patch->wad;
|
wadnum = patch->wad;
|
||||||
lumpnum = patch->lump;
|
lumpnum = patch->lump;
|
||||||
|
pdata = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
|
||||||
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
||||||
realpatch = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
|
realpatch = (patch_t *)pdata;
|
||||||
dealloc = false;
|
dealloc = true;
|
||||||
|
|
||||||
#ifndef NO_PNG_LUMPS
|
#ifndef NO_PNG_LUMPS
|
||||||
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
if (R_IsLumpPNG((UINT8 *)realpatch, lumplength))
|
||||||
{
|
|
||||||
realpatch = R_PNGToPatch((UINT8 *)realpatch, lumplength, NULL, false);
|
realpatch = R_PNGToPatch((UINT8 *)realpatch, lumplength, NULL, false);
|
||||||
dealloc = true;
|
else
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
if (texture->type == TEXTURETYPE_FLAT)
|
||||||
|
realpatch = R_FlatToPatch(pdata, texture->width, texture->height, 0, 0, NULL, false);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
(void)lumplength;
|
||||||
|
dealloc = false;
|
||||||
|
}
|
||||||
|
|
||||||
x1 = patch->originx;
|
x1 = patch->originx;
|
||||||
width = SHORT(realpatch->width);
|
width = SHORT(realpatch->width);
|
||||||
|
@ -725,7 +739,6 @@ void R_LoadTextures(void)
|
||||||
for (w = 0, numtextures = 0; w < numwadfiles; w++)
|
for (w = 0, numtextures = 0; w < numwadfiles; w++)
|
||||||
{
|
{
|
||||||
// Count the textures from TEXTURES lumps
|
// Count the textures from TEXTURES lumps
|
||||||
|
|
||||||
texturesLumpPos = W_CheckNumForNamePwad("TEXTURES", (UINT16)w, 0);
|
texturesLumpPos = W_CheckNumForNamePwad("TEXTURES", (UINT16)w, 0);
|
||||||
while (texturesLumpPos != INT16_MAX)
|
while (texturesLumpPos != INT16_MAX)
|
||||||
{
|
{
|
||||||
|
@ -734,7 +747,6 @@ void R_LoadTextures(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count single-patch textures
|
// Count single-patch textures
|
||||||
|
|
||||||
if (wadfiles[w]->type == RET_PK3)
|
if (wadfiles[w]->type == RET_PK3)
|
||||||
{
|
{
|
||||||
texstart = W_CheckNumForFolderStartPK3("textures/", (UINT16)w, 0);
|
texstart = W_CheckNumForFolderStartPK3("textures/", (UINT16)w, 0);
|
||||||
|
@ -747,7 +759,11 @@ void R_LoadTextures(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texstart == INT16_MAX || texend == INT16_MAX)
|
if (texstart == INT16_MAX || texend == INT16_MAX)
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
goto countflats;
|
||||||
|
#else
|
||||||
continue;
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
texstart++; // Do not count the first marker
|
texstart++; // Do not count the first marker
|
||||||
|
|
||||||
|
@ -764,6 +780,40 @@ void R_LoadTextures(void)
|
||||||
{
|
{
|
||||||
numtextures += (UINT32)(texend - texstart);
|
numtextures += (UINT32)(texend - texstart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
countflats:
|
||||||
|
// Count flats
|
||||||
|
if (wadfiles[w]->type == RET_PK3)
|
||||||
|
{
|
||||||
|
texstart = W_CheckNumForFolderStartPK3("flats/", (UINT16)w, 0);
|
||||||
|
texend = W_CheckNumForFolderEndPK3("flats/", (UINT16)w, texstart);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
texstart = W_CheckNumForNamePwad("F_START", (UINT16)w, 0);
|
||||||
|
texend = W_CheckNumForNamePwad("F_END", (UINT16)w, texstart);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texstart == INT16_MAX || texend == INT16_MAX)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
texstart++; // Do not count the first marker
|
||||||
|
|
||||||
|
// PK3s have subfolders, so we can't just make a simple sum
|
||||||
|
if (wadfiles[w]->type == RET_PK3)
|
||||||
|
{
|
||||||
|
for (j = texstart; j < texend; j++)
|
||||||
|
{
|
||||||
|
if (!W_IsLumpFolder((UINT16)w, j)) // Check if lump is a folder; if not, then count it
|
||||||
|
numtextures++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // Add all the textures between F_START and F_END
|
||||||
|
{
|
||||||
|
numtextures += (UINT32)(texend - texstart);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no textures found by this point, bomb out
|
// If no textures found by this point, bomb out
|
||||||
|
@ -813,7 +863,11 @@ void R_LoadTextures(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texstart == INT16_MAX || texend == INT16_MAX)
|
if (texstart == INT16_MAX || texend == INT16_MAX)
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
goto checkflats;
|
||||||
|
#else
|
||||||
continue;
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
texstart++; // Do not count the first marker
|
texstart++; // Do not count the first marker
|
||||||
|
|
||||||
|
@ -857,6 +911,8 @@ void R_LoadTextures(void)
|
||||||
texture->width = SHORT(patchlump->width);
|
texture->width = SHORT(patchlump->width);
|
||||||
texture->height = SHORT(patchlump->height);
|
texture->height = SHORT(patchlump->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
texture->type = TEXTURETYPE_SINGLEPATCH;
|
||||||
texture->patchcount = 1;
|
texture->patchcount = 1;
|
||||||
texture->holes = false;
|
texture->holes = false;
|
||||||
texture->flip = 0;
|
texture->flip = 0;
|
||||||
|
@ -875,6 +931,107 @@ void R_LoadTextures(void)
|
||||||
textureheight[i] = texture->height << FRACBITS;
|
textureheight[i] = texture->height << FRACBITS;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
checkflats:
|
||||||
|
// Yes
|
||||||
|
if (wadfiles[w]->type == RET_PK3)
|
||||||
|
{
|
||||||
|
texstart = W_CheckNumForFolderStartPK3("flats/", (UINT16)w, 0);
|
||||||
|
texend = W_CheckNumForFolderEndPK3("flats/", (UINT16)w, texstart);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
texstart = W_CheckNumForNamePwad("F_START", (UINT16)w, 0);
|
||||||
|
texend = W_CheckNumForNamePwad("F_END", (UINT16)w, texstart);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texstart == INT16_MAX || texend == INT16_MAX)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
texstart++; // Do not count the first marker
|
||||||
|
|
||||||
|
// Work through each lump between the markers in the WAD.
|
||||||
|
for (j = 0; j < (texend - texstart); j++)
|
||||||
|
{
|
||||||
|
UINT8 *flatlump;
|
||||||
|
UINT16 wadnum = (UINT16)w;
|
||||||
|
lumpnum_t lumpnum = texstart + j;
|
||||||
|
size_t lumplength;
|
||||||
|
size_t flatsize = 0;
|
||||||
|
|
||||||
|
if (wadfiles[w]->type == RET_PK3)
|
||||||
|
{
|
||||||
|
if (W_IsLumpFolder(wadnum, lumpnum)) // Check if lump is a folder
|
||||||
|
continue; // If it is then SKIP IT
|
||||||
|
}
|
||||||
|
|
||||||
|
flatlump = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
|
||||||
|
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
||||||
|
|
||||||
|
switch (lumplength)
|
||||||
|
{
|
||||||
|
case 4194304: // 2048x2048 lump
|
||||||
|
flatsize = 2048;
|
||||||
|
break;
|
||||||
|
case 1048576: // 1024x1024 lump
|
||||||
|
flatsize = 1024;
|
||||||
|
break;
|
||||||
|
case 262144:// 512x512 lump
|
||||||
|
flatsize = 512;
|
||||||
|
break;
|
||||||
|
case 65536: // 256x256 lump
|
||||||
|
flatsize = 256;
|
||||||
|
break;
|
||||||
|
case 16384: // 128x128 lump
|
||||||
|
flatsize = 128;
|
||||||
|
break;
|
||||||
|
case 1024: // 32x32 lump
|
||||||
|
flatsize = 32;
|
||||||
|
break;
|
||||||
|
default: // 64x64 lump
|
||||||
|
flatsize = 64;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//CONS_Printf("\n\"%s\" is a flat, dimensions %d x %d",W_CheckNameForNumPwad((UINT16)w,texstart+j),flatsize,flatsize);
|
||||||
|
texture = textures[i] = Z_Calloc(sizeof(texture_t) + sizeof(texpatch_t), PU_STATIC, NULL);
|
||||||
|
|
||||||
|
// Set texture properties.
|
||||||
|
M_Memcpy(texture->name, W_CheckNameForNumPwad(wadnum, lumpnum), sizeof(texture->name));
|
||||||
|
|
||||||
|
#ifndef NO_PNG_LUMPS
|
||||||
|
if (R_IsLumpPNG((UINT8 *)flatlump, lumplength))
|
||||||
|
{
|
||||||
|
INT16 width, height;
|
||||||
|
R_PNGDimensions((UINT8 *)flatlump, &width, &height, lumplength);
|
||||||
|
texture->width = width;
|
||||||
|
texture->height = height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
texture->width = texture->height = flatsize;
|
||||||
|
|
||||||
|
texture->type = TEXTURETYPE_FLAT;
|
||||||
|
texture->patchcount = 1;
|
||||||
|
texture->holes = false;
|
||||||
|
texture->flip = 0;
|
||||||
|
|
||||||
|
// Allocate information for the texture's patches.
|
||||||
|
patch = &texture->patches[0];
|
||||||
|
|
||||||
|
patch->originx = patch->originy = 0;
|
||||||
|
patch->wad = (UINT16)w;
|
||||||
|
patch->lump = texstart + j;
|
||||||
|
patch->flip = 0;
|
||||||
|
|
||||||
|
Z_Unlock(flatlump);
|
||||||
|
|
||||||
|
texturewidth[i] = texture->width;
|
||||||
|
textureheight[i] = texture->height << FRACBITS;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
|
@ -1191,6 +1348,7 @@ static texture_t *R_ParseTexture(boolean actuallyLoadTexture)
|
||||||
M_Memcpy(resultTexture->name, newTextureName, 8);
|
M_Memcpy(resultTexture->name, newTextureName, 8);
|
||||||
resultTexture->width = newTextureWidth;
|
resultTexture->width = newTextureWidth;
|
||||||
resultTexture->height = newTextureHeight;
|
resultTexture->height = newTextureHeight;
|
||||||
|
resultTexture->type = TEXTURETYPE_COMPOSITE;
|
||||||
}
|
}
|
||||||
Z_Free(texturesToken);
|
Z_Free(texturesToken);
|
||||||
texturesToken = M_GetToken(NULL);
|
texturesToken = M_GetToken(NULL);
|
||||||
|
|
12
src/r_data.h
12
src/r_data.h
|
@ -45,6 +45,17 @@ typedef struct
|
||||||
enum patchalphastyle style;
|
enum patchalphastyle style;
|
||||||
} texpatch_t;
|
} texpatch_t;
|
||||||
|
|
||||||
|
// texture type
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TEXTURETYPE_UNKNOWN,
|
||||||
|
TEXTURETYPE_SINGLEPATCH,
|
||||||
|
TEXTURETYPE_COMPOSITE,
|
||||||
|
#ifdef WALLFLATS
|
||||||
|
TEXTURETYPE_FLAT,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
// A maptexturedef_t describes a rectangular texture,
|
// A maptexturedef_t describes a rectangular texture,
|
||||||
// which is composed of one or more mappatch_t structures
|
// which is composed of one or more mappatch_t structures
|
||||||
// that arrange graphic patches.
|
// that arrange graphic patches.
|
||||||
|
@ -52,6 +63,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
// Keep name for switch changing, etc.
|
// Keep name for switch changing, etc.
|
||||||
char name[8];
|
char name[8];
|
||||||
|
UINT8 type; // TEXTURETYPE_
|
||||||
INT16 width, height;
|
INT16 width, height;
|
||||||
boolean holes;
|
boolean holes;
|
||||||
UINT8 flip; // 1 = flipx, 2 = flipy, 3 = both
|
UINT8 flip; // 1 = flipx, 2 = flipy, 3 = both
|
||||||
|
|
|
@ -1219,7 +1219,7 @@
|
||||||
C01FCF4B08A954540054247B /* Debug */ = {
|
C01FCF4B08A954540054247B /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CURRENT_PROJECT_VERSION = 2.1.25;
|
CURRENT_PROJECT_VERSION = 2.2.0;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
NORMALSRB2,
|
NORMALSRB2,
|
||||||
|
@ -1231,7 +1231,7 @@
|
||||||
C01FCF4C08A954540054247B /* Release */ = {
|
C01FCF4C08A954540054247B /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CURRENT_PROJECT_VERSION = 2.1.25;
|
CURRENT_PROJECT_VERSION = 2.2.0;
|
||||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
|
Loading…
Reference in a new issue