Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • STJr/SRB2
  • Sryder/SRB2
  • wolfy852/SRB2
  • Alpha2244/SRB2
  • Inuyasha/SRB2
  • yoshibot/SRB2
  • TehRealSalt/SRB2
  • PrisimaTF/SRB2
  • Hatninja/SRB2
  • SteelT/SRB2
  • james/SRB2
  • ShaderWraith/SRB2
  • SinnamonLat/SRB2
  • mazmazz_/SRB2
  • filpAM/SRB2
  • chaoloveicemdboy/SRB2
  • Whooa21/SRB2
  • Machturne/SRB2
  • Golden/SRB2
  • Tatsuru/SRB2
  • Snu/SRB2
  • Zwip-Zwap_Zapony/SRB2
  • fickleheart/SRB2
  • alphaRexJames/SRB2
  • JJK/SRB2
  • diskpoppy/SRB2
  • Hannu_Hanhi/SRB2
  • ZipperQR/SRB2
  • kays/SRB2
  • spherallic/SRB2
  • Zippy_Zolton/SRB2
  • namiishere/SRB2
  • Ors/SRB2
  • SMS_Alfredo/SRB2
  • sonic_edge/SRB2
  • lavla/SRB2
  • ashi/SRB2
  • X.organic/SRB2
  • Fafabis/SRB2
  • Meziu/SRB2
  • v-rob/SRB2
  • tertu/SRB2
  • bitten2up/SRB2
  • flarn2006/SRB2
  • Krabs/SRB2
  • clairebun/SRB2
  • Lactozilla/SRB2
  • thehackstack/SRB2
  • Spice/SRB2
  • win8linux/SRB2
  • JohnFrostFox/SRB2
  • talktoneon726/SRB2
  • Wane/SRB2
  • Lamibe/SRB2
  • spectrumuk2/srb-2
  • nerdyminer18/srb-2
  • 256nil/SRB2
  • ARJr/SRB2
  • Alam/SRB2
  • Zenya/srb-2-marathon-demos
  • Acelite/srb-2-archivedmodifications
  • MIDIMan/SRB2
  • Lach/SRB2
  • Frostiikin/bounce-tweaks
  • Jaden/SRB2
  • Tyron/SRB2
  • Astronight/SRB2
  • Mari0shi06/SRB2
  • aiire/SRB2
  • Galactice/SRB2
  • srb2-ports/srb2-dreamcast
  • sdasdas/SRB2
  • chreas/srb-2-vr
  • StarManiaKG/the-story-of-sinically-rocketing-and-botching-the-2nd
  • LoganAir/SRB2
  • NepDisk/srb-2
  • alufolie91/SRB2
  • Felicia.iso/SRB2
  • twi/SRB2
  • BarrelsOFun/SRB2
  • Speed2411/SRB2
  • Leather_Realms/SRB2
  • Ayemar/SRB2
  • Acelite/SRB2
  • VladDoc/SRB2
  • kaldrum/model-features
  • strawberryfox417/SRB2
  • Lugent/SRB2
  • Rem/SRB2
  • Refrag/SRB2
  • Henry_3230/srb-3230
  • TehPuertoRicanSpartan2/tprs-srb2
  • Leminn/srb-2-marathon-stuff
  • chromaticpipe2/SRB2
  • MiguelGustavo15/SRB2
  • Maru/srb-2-tests
  • SilicDev/SRB2
  • UnmatchedBracket/SRB2
  • HybridDog/SRB2
  • xordspar0/SRB2
  • jsjhbewfhh/SRB2
  • Fancy2209/SRB2
  • Lorsoen/SRB2
  • shindoukin/SRB2
  • GamerOfDays/SRB2
  • Craftyawesome/SRB2
  • tenshi-tensai-tennoji/SRB2
  • Scarfdudebalder/SRB2
  • luigi-budd/srb-2-fix-interplag-lockon
  • mskluesner/SRB2
  • johnpetersa19/SRB2
  • Pheazant/SRB2
  • chromaticpipe2/srb2classic
  • romoney5/SRB2
  • PAS/SRB2Classic
  • BlueStaggo/SRB2
  • Jisk/srb-2-beef-jerky
117 results
Select Git revision
Show changes
Commits on Source (340)
...@@ -459,11 +459,15 @@ matrix: ...@@ -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,51 @@ matrix: ...@@ -473,43 +477,51 @@ 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 #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
dist: trusty dist: xenial
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") 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 (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
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=trusty - _DPL_JOB_NAME=disco
- _DPL_DPUT_TARGET=1 - _DPL_DPUT_TARGET=1
- _DPL_PACKAGE_SOURCE=1 - _DPL_PACKAGE_SOURCE=1
- PACKAGE_DISTRO=trusty - PACKAGE_DISTRO=disco
- PACKAGE_SUBVERSION=~14.04trusty - PACKAGE_SUBVERSION=~19.04disco
#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
...@@ -519,20 +531,24 @@ matrix: ...@@ -519,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=disco - _DPL_JOB_NAME=bionic
- _DPL_DPUT_TARGET=1 - _DPL_DPUT_TARGET=1
- _DPL_PACKAGE_SOURCE=1 - _DPL_PACKAGE_SOURCE=1
- PACKAGE_DISTRO=disco - PACKAGE_DISTRO=bionic
- PACKAGE_SUBVERSION=~19.04disco - 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
...@@ -542,34 +558,38 @@ matrix: ...@@ -542,34 +558,38 @@ 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=xenial
- _DPL_DPUT_TARGET=1 - _DPL_DPUT_TARGET=1
- _DPL_PACKAGE_SOURCE=1 - _DPL_PACKAGE_SOURCE=1
- PACKAGE_DISTRO=cosmic - PACKAGE_DISTRO=xenial
- PACKAGE_SUBVERSION=~18.10cosmic - 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 - 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
dist: xenial dist: trusty
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1") 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 (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
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=xenial - _DPL_JOB_NAME=trusty
- _DPL_DPUT_TARGET=1 - _DPL_DPUT_TARGET=1
- _DPL_PACKAGE_SOURCE=1 - _DPL_PACKAGE_SOURCE=1
- PACKAGE_DISTRO=xenial - PACKAGE_DISTRO=trusty
- PACKAGE_SUBVERSION=~16.04xenial - 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
allow_failures: allow_failures:
- compiler: clang-3.5 - compiler: clang-3.5
......
...@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) ...@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0)
# DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string. # DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string.
# Version change is fine. # Version change is fine.
project(SRB2 project(SRB2
VERSION 2.1.25 VERSION 2.2.0
LANGUAGES C) LANGUAGES C)
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR}) if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
...@@ -95,7 +95,6 @@ set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") ...@@ -95,7 +95,6 @@ set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
# Set EXE names so the assets CMakeLists can refer to its target # Set EXE names so the assets CMakeLists can refer to its target
set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name") set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name")
set(SRB2_WIN_EXE_NAME srb2dd CACHE STRING "Executable binary output name for DirectDraw build")
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
......
version: 2.1.25.{branch}-{build} version: 2.2.0.{branch}-{build}
os: MinGW os: MinGW
environment: environment:
CC: ccache CC: ccache
CCACHE_CC: i686-w64-mingw32-gcc CCACHE_CC: i686-w64-mingw32-gcc
CCACHE_CC_64: x86_64-w64-mingw32-gcc CCACHE_CC_64: x86_64-w64-mingw32-gcc
WINDRES: windres WINDRES: windres
# c:\mingw-w64 i686 has gcc 6.3.0, so use c:\msys64 7.3.0 instead # c:\mingw-w64 i686 has gcc 6.3.0, so use c:\msys64 7.3.0 instead
MINGW_SDK: c:\msys64\mingw32 MINGW_SDK: c:\msys64\mingw32
# c:\msys64 x86_64 has gcc 8.2.0, so use c:\mingw-w64 7.3.0 instead # c:\msys64 x86_64 has gcc 8.2.0, so use c:\mingw-w64 7.3.0 instead
MINGW_SDK_64: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64 MINGW_SDK_64: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64
CFLAGS: -Wall -W -Werror -Wno-error=implicit-fallthrough -Wimplicit-fallthrough=3 -Wno-tautological-compare -Wno-error=suggest-attribute=noreturn CFLAGS: -Wall -W -Werror -Wno-error=implicit-fallthrough -Wimplicit-fallthrough=3 -Wno-tautological-compare -Wno-error=suggest-attribute=noreturn
NASM_ZIP: nasm-2.12.01 NASM_ZIP: nasm-2.12.01
NASM_URL: http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/win64/nasm-2.12.01-win64.zip NASM_URL: http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/win64/nasm-2.12.01-win64.zip
UPX_ZIP: upx391w UPX_ZIP: upx391w
UPX_URL: http://upx.sourceforge.net/download/upx391w.zip UPX_URL: http://upx.sourceforge.net/download/upx391w.zip
CCACHE_EXE: ccache.exe CCACHE_EXE: ccache.exe
CCACHE_URL: http://alam.srb2.org/ccache.exe CCACHE_URL: http://alam.srb2.org/ccache.exe
CCACHE_COMPRESS: true CCACHE_COMPRESS: true
CCACHE_DIR: C:\Users\appveyor\.ccache CCACHE_DIR: C:\Users\appveyor\.ccache
# Disable UPX by default. The user can override this in their Appveyor project settings # Disable UPX by default. The user can override this in their Appveyor project settings
NOUPX: 1 NOUPX: 1
############################## ##############################
# DEPLOYER VARIABLES # DEPLOYER VARIABLES
# DPL_ENABLED=1 builds installers for branch names starting with `deployer`. # DPL_ENABLED=1 builds installers for branch names starting with `deployer`.
# DPL_TAG_ENABLED=1 will also build installers for release tags. DPL_ENABLED=1 must also be set. # DPL_TAG_ENABLED=1 will also build installers for release tags. DPL_ENABLED=1 must also be set.
# Set these in the Appveyor project settings # Set these in the Appveyor project settings
############################## ##############################
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.
PACKAGE_PATCH_DLL_GET: 0 PACKAGE_PATCH_DLL_GET: 0
# Delete all asset downloads so they can be redownloaded # Delete all asset downloads so they can be redownloaded
ASSET_CLEAN: 0 ASSET_CLEAN: 0
cache: cache:
- nasm-2.12.01.zip - nasm-2.12.01.zip
- upx391w.zip - upx391w.zip
- ccache.exe - ccache.exe
- C:\Users\appveyor\.ccache - C:\Users\appveyor\.ccache
- C:\Users\appveyor\srb2_cache - C:\Users\appveyor\srb2_cache
install: install:
- if [%CONFIGURATION%] == [SDL64] ( set "X86_64=1" ) - if [%CONFIGURATION%] == [SDL64] ( set "X86_64=1" )
- if [%CONFIGURATION%] == [SDL64] ( set "CONFIGURATION=SDL" ) - if [%CONFIGURATION%] == [SDL64] ( set "CONFIGURATION=SDL" )
- if [%CONFIGURATION%] == [DD64] ( set "X86_64=1" ) - if [%X86_64%] == [1] ( set "MINGW_SDK=%MINGW_SDK_64%" )
- if [%CONFIGURATION%] == [DD64] ( set "CONFIGURATION=DD" ) - if [%X86_64%] == [1] ( set "CCACHE_CC=%CCACHE_CC_64%" )
- if [%X86_64%] == [1] ( set "MINGW_SDK=%MINGW_SDK_64%" )
- if [%X86_64%] == [1] ( set "CCACHE_CC=%CCACHE_CC_64%" ) - if not exist "%NASM_ZIP%.zip" appveyor DownloadFile "%NASM_URL%" -FileName "%NASM_ZIP%.zip"
- 7z x -y "%NASM_ZIP%.zip" -o%TMP% >null
- if not exist "%NASM_ZIP%.zip" appveyor DownloadFile "%NASM_URL%" -FileName "%NASM_ZIP%.zip" - robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%NASM_ZIP%" "%MINGW_SDK%\bin" nasm.exe || exit 0
- 7z x -y "%NASM_ZIP%.zip" -o%TMP% >null
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%NASM_ZIP%" "%MINGW_SDK%\bin" nasm.exe || exit 0 - if not exist "%UPX_ZIP%.zip" appveyor DownloadFile "%UPX_URL%" -FileName "%UPX_ZIP%.zip"
- 7z x -y "%UPX_ZIP%.zip" -o%TMP% >null
- if not exist "%UPX_ZIP%.zip" appveyor DownloadFile "%UPX_URL%" -FileName "%UPX_ZIP%.zip" - robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%UPX_ZIP%" "%MINGW_SDK%\bin" upx.exe || exit 0
- 7z x -y "%UPX_ZIP%.zip" -o%TMP% >null
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%UPX_ZIP%" "%MINGW_SDK%\bin" upx.exe || exit 0 - if not exist "%CCACHE_EXE%" appveyor DownloadFile "%CCACHE_URL%" -FileName "%CCACHE_EXE%"
- ccache -M 99M
- if not exist "%CCACHE_EXE%" appveyor DownloadFile "%CCACHE_URL%" -FileName "%CCACHE_EXE%" - xcopy /Y /V /I ccache.exe "%MINGW_SDK%\bin"
- ccache -M 99M
- xcopy /Y /V /I ccache.exe "%MINGW_SDK%\bin" configuration:
- SDL
configuration: - SDL64
- SDL
- SDL64 before_build:
- DD - set "Path=%MINGW_SDK%\bin;%Path%"
- DD64 - if [%X86_64%] == [1] ( x86_64-w64-mingw32-gcc --version ) else ( i686-w64-mingw32-gcc --version )
- mingw32-make --version
matrix: - if not [%X86_64%] == [1] ( nasm -v )
allow_failures: - if not [%NOUPX%] == [1] ( upx -V )
- configuration: DD - ccache -V
- configuration: DD64 - ccache -s
- if [%NOUPX%] == [1] ( set "NOUPX=NOUPX=1" ) else ( set "NOUPX=" )
before_build: - set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 NOOBJDUMP=1 %NOUPX%"
- set "Path=%MINGW_SDK%\bin;%Path%" - if [%X86_64%] == [1] ( set "MINGW_FLAGS=MINGW64=1 X86_64=1 GCC81=1" ) else ( set "MINGW_FLAGS=MINGW=1 GCC91=1" )
- if [%X86_64%] == [1] ( x86_64-w64-mingw32-gcc --version ) else ( i686-w64-mingw32-gcc --version ) - set "SRB2_MFLAGS=%SRB2_MFLAGS% %MINGW_FLAGS% %CONFIGURATION%=1"
- mingw32-make --version
- if not [%X86_64%] == [1] ( nasm -v ) build_script:
- if not [%NOUPX%] == [1] ( upx -V ) - cmd: mingw32-make.exe %SRB2_MFLAGS% clean
- ccache -V - cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k
- ccache -s
- if [%NOUPX%] == [1] ( set "NOUPX=NOUPX=1" ) else ( set "NOUPX=" ) after_build:
- set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 GCC73=1 NOOBJDUMP=1 %NOUPX%" - if [%X86_64%] == [1] (
- if [%X86_64%] == [1] ( set "MINGW_FLAGS=MINGW64=1 X86_64=1" ) else ( set "MINGW_FLAGS=MINGW=1 GCC91=1" ) set "BUILD_PATH=bin\Mingw64\Release"
- set "SRB2_MFLAGS=%SRB2_MFLAGS% %MINGW_FLAGS% %CONFIGURATION%=1" ) else (
set "BUILD_PATH=bin\Mingw\Release"
build_script: )
- cmd: mingw32-make.exe %SRB2_MFLAGS% clean - if [%X86_64%] == [1] ( set "CONFIGURATION=%CONFIGURATION%64" )
- cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k - ccache -s
- cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt
after_build: - cmd: set /P GITSHORT=<%TMP%/gitshort.txt
- if [%X86_64%] == [1] ( - set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%GITSHORT%-%CONFIGURATION%.7z
set "BUILD_PATH=bin\Mingw64\Release" - set BUILDSARCHIVE=%APPVEYOR_REPO_BRANCH%-%CONFIGURATION%.7z
) else ( - cmd: 7z a %BUILD_ARCHIVE% %BUILD_PATH% -xr!.gitignore
set "BUILD_PATH=bin\Mingw\Release" - appveyor PushArtifact %BUILD_ARCHIVE%
) - cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
- if [%X86_64%] == [1] ( set "CONFIGURATION=%CONFIGURATION%64" ) - appveyor PushArtifact %BUILDSARCHIVE%
- ccache -s ##############################
- cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt # DEPLOYER SCRIPT
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt ##############################
- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%GITSHORT%-%CONFIGURATION%.7z - if [%DPL_ENABLED%] == [1] ( call "deployer\appveyor\deployer.bat" )
- set BUILDSARCHIVE=%APPVEYOR_REPO_BRANCH%-%CONFIGURATION%.7z
- cmd: 7z a %BUILD_ARCHIVE% %BUILD_PATH% -xr!.gitignore test: off
- appveyor PushArtifact %BUILD_ARCHIVE%
- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE% #deploy:
- appveyor PushArtifact %BUILDSARCHIVE% # - provider: FTP
############################## # protocol: ftps
# DEPLOYER SCRIPT # host:
############################## # secure: NsLJEPIBvmwCOj8Tg8RoRQ==
- if [%DPL_ENABLED%] == [1] ( call "deployer\appveyor\deployer.bat" ) # username:
# secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA=
test: off # password:
# secure: Hbn6Uy3lT0YZ88yFJ3aW4w==
#deploy: # folder: appveyor
# - provider: FTP # application:
# protocol: ftps # active_mode: false
# host: # on:
# secure: NsLJEPIBvmwCOj8Tg8RoRQ== # branch: master
# username: # appveyor_repo_tag: true
# secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA=
# password:
# secure: Hbn6Uy3lT0YZ88yFJ3aW4w== on_finish:
# folder: appveyor #- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:<ip>:<port>
# application: #- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# active_mode: false
# on:
# branch: master
# appveyor_repo_tag: true
on_finish:
#- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:<ip>:<port>
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
...@@ -12,18 +12,22 @@ ENDFUNCTION(PREPEND) ...@@ -12,18 +12,22 @@ 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;\
zones.pk3;\ zones.pk3"
patch.pk3"
CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!" CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
) )
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~), ...@@ -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}, ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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}
......
...@@ -690,9 +690,9 @@ linedeftypes ...@@ -690,9 +690,9 @@ linedeftypes
title = "Chain Parameters"; title = "Chain Parameters";
prefix = "(9)"; prefix = "(9)";
flags32text = "[5] Swing instead of spin"; flags32text = "[5] Swing instead of spin";
flags128text = "[7] Make chain from end item";
flags64text = "[6] Player-turnable chain"; flags64text = "[6] Player-turnable chain";
flags128text = "[7] Make chain from maces"; flags256text = "[8] Spawn link at origin";
flags256text = "[8] Spawn mace at origin";
flags512text = "[9] Don't clip inside ground"; flags512text = "[9] Don't clip inside ground";
flags1024text = "[10] No distance check"; flags1024text = "[10] No distance check";
} }
...@@ -3389,14 +3389,14 @@ thingtypes ...@@ -3389,14 +3389,14 @@ thingtypes
} }
118 118
{ {
title = "CastleBot FaceStabber"; title = "Lance-a-Bot";
sprite = "CBFSA1"; sprite = "CBFSA1";
width = 32; width = 32;
height = 72; height = 72;
} }
1113 1113
{ {
title = "Suspicious FaceStabber Statue"; title = "Suspicious Lance-a-Bot Statue";
sprite = "CBBSA1"; sprite = "CBBSA1";
width = 32; width = 32;
height = 72; height = 72;
...@@ -5006,7 +5006,7 @@ thingtypes ...@@ -5006,7 +5006,7 @@ thingtypes
{ {
arrow = 1; arrow = 1;
blocking = 2; blocking = 2;
title = "FaceStabber Statue"; title = "Lance-a-Bot Statue";
sprite = "CBBSA1"; sprite = "CBBSA1";
width = 32; width = 32;
height = 72; height = 72;
......
...@@ -518,10 +518,6 @@ add_definitions(-DCMAKECONFIG) ...@@ -518,10 +518,6 @@ add_definitions(-DCMAKECONFIG)
add_subdirectory(sdl) add_subdirectory(sdl)
if(${CMAKE_SYSTEM} MATCHES Windows) if(NOT ${SRB2_SDL2_AVAILABLE})
add_subdirectory(win32)
endif()
if(NOT ${SRB2_SDL2_AVAILABLE} AND NOT ${SRB2_WIN32_AVAILABLE})
message(FATAL_ERROR "There are no targets available to build an SRB2 executable. :(") message(FATAL_ERROR "There are no targets available to build an SRB2 executable. :(")
endif() endif()
...@@ -245,6 +245,8 @@ void I_GetJoystick2Events(void){} ...@@ -245,6 +245,8 @@ void I_GetJoystick2Events(void){}
void I_GetMouseEvents(void){} void I_GetMouseEvents(void){}
void I_UpdateMouseGrab(void){}
char *I_GetEnv(const char *name) char *I_GetEnv(const char *name)
{ {
LOGW("I_GetEnv() called?!"); LOGW("I_GetEnv() called?!");
......
...@@ -19,6 +19,7 @@ boolean allow_fullscreen = false; ...@@ -19,6 +19,7 @@ boolean allow_fullscreen = false;
consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
void I_StartupGraphics(void){} void I_StartupGraphics(void){}
void I_StartupHardwareGraphics(void){}
void I_ShutdownGraphics(void){} void I_ShutdownGraphics(void){}
...@@ -51,6 +52,11 @@ INT32 VID_SetMode(INT32 modenum) ...@@ -51,6 +52,11 @@ INT32 VID_SetMode(INT32 modenum)
return 0; return 0;
} }
void VID_CheckRenderer(void)
{
// ..............
}
const char *VID_GetModeName(INT32 modenum) const char *VID_GetModeName(INT32 modenum)
{ {
return "A320x240"; return "A320x240";
......
...@@ -61,6 +61,8 @@ static consvar_t *consvar_vars; // list of registered console variables ...@@ -61,6 +61,8 @@ static consvar_t *consvar_vars; // list of registered console variables
static char com_token[1024]; static char com_token[1024];
static char *COM_Parse(char *data); static char *COM_Parse(char *data);
static char * COM_Purge (char *text, int *lenp);
CV_PossibleValue_t CV_OnOff[] = {{0, "Off"}, {1, "On"}, {0, NULL}}; CV_PossibleValue_t CV_OnOff[] = {{0, "Off"}, {1, "On"}, {0, NULL}};
CV_PossibleValue_t CV_YesNo[] = {{0, "No"}, {1, "Yes"}, {0, NULL}}; CV_PossibleValue_t CV_YesNo[] = {{0, "No"}, {1, "Yes"}, {0, NULL}};
CV_PossibleValue_t CV_Unsigned[] = {{0, "MIN"}, {999999999, "MAX"}, {0, NULL}}; CV_PossibleValue_t CV_Unsigned[] = {{0, "MIN"}, {999999999, "MAX"}, {0, NULL}};
...@@ -100,31 +102,61 @@ static cmdalias_t *com_alias; // aliases list ...@@ -100,31 +102,61 @@ static cmdalias_t *com_alias; // aliases list
static vsbuf_t com_text; // variable sized buffer static vsbuf_t com_text; // variable sized buffer
/** Purges control characters out of some text.
*
* \param s The text.
* \param np Optionally a pointer to fill with the new string length.
* \return The text.
* \sa COM_ExecuteString
*/
static char *
COM_Purge (char *s, int *np)
{
char *t;
char *p;
int n;
n = strlen(s);
t = s + n + 1;
p = s;
while (( p = strchr(p, '\033') ))
{
memmove(p, &p[1], t - p - 1);
n--;
}
if (np)
(*np) = n;
return s;
}
/** Adds text into the command buffer for later execution. /** Adds text into the command buffer for later execution.
* *
* \param ptext The text to add. * \param ptext The text to add.
* \sa COM_BufInsertText * \sa COM_BufInsertTextEx
*/ */
void COM_BufAddText(const char *ptext) void COM_BufAddTextEx(const char *ptext, int flags)
{ {
size_t l; int l;
char *text;
l = strlen(ptext); text = COM_Purge(Z_StrDup(ptext), &l);
if (com_text.cursize + l >= com_text.maxsize) if (com_text.cursize + 2 + l >= com_text.maxsize)
{ {
CONS_Alert(CONS_WARNING, M_GetText("Command buffer full!\n")); CONS_Alert(CONS_WARNING, M_GetText("Command buffer full!\n"));
return; return;
} }
VS_Write(&com_text, ptext, l);
VS_WriteEx(&com_text, text, l, flags);
Z_Free(text);
} }
/** Adds command text and executes it immediately. /** Adds command text and executes it immediately.
* *
* \param ptext The text to execute. A newline is automatically added. * \param ptext The text to execute. A newline is automatically added.
* \sa COM_BufAddText * \sa COM_BufAddTextEx
*/ */
void COM_BufInsertText(const char *ptext) void COM_BufInsertTextEx(const char *ptext, int flags)
{ {
char *temp = NULL; char *temp = NULL;
size_t templen; size_t templen;
...@@ -138,7 +170,7 @@ void COM_BufInsertText(const char *ptext) ...@@ -138,7 +170,7 @@ void COM_BufInsertText(const char *ptext)
} }
// add the entire text of the file (or alias) // add the entire text of the file (or alias)
COM_BufAddText(ptext); COM_BufAddTextEx(ptext, flags);
COM_BufExecute(); // do it right away COM_BufExecute(); // do it right away
// add the copied off data // add the copied off data
...@@ -272,6 +304,7 @@ static size_t com_argc; ...@@ -272,6 +304,7 @@ static size_t com_argc;
static char *com_argv[MAX_ARGS]; static char *com_argv[MAX_ARGS];
static const char *com_null_string = ""; static const char *com_null_string = "";
static char *com_args = NULL; // current command args or NULL static char *com_args = NULL; // current command args or NULL
static int com_flags;
static void Got_NetVar(UINT8 **p, INT32 playernum); static void Got_NetVar(UINT8 **p, INT32 playernum);
...@@ -394,12 +427,21 @@ static void COM_TokenizeString(char *ptext) ...@@ -394,12 +427,21 @@ static void COM_TokenizeString(char *ptext)
com_argc = 0; com_argc = 0;
com_args = NULL; com_args = NULL;
com_flags = 0;
while (com_argc < MAX_ARGS) while (com_argc < MAX_ARGS)
{ {
// Skip whitespace up to a newline. // Skip whitespace up to a newline.
while (*ptext != '\0' && *ptext <= ' ' && *ptext != '\n') while (*ptext != '\0' && *ptext <= ' ' && *ptext != '\n')
ptext++; {
if (ptext[0] == '\033')
{
com_flags = (unsigned)ptext[1];
ptext += 2;
}
else
ptext++;
}
// A newline means end of command in buffer, // A newline means end of command in buffer,
// thus end of this command's args too. // thus end of this command's args too.
...@@ -1016,6 +1058,15 @@ void VS_Write(vsbuf_t *buf, const void *data, size_t length) ...@@ -1016,6 +1058,15 @@ void VS_Write(vsbuf_t *buf, const void *data, size_t length)
M_Memcpy(VS_GetSpace(buf, length), data, length); M_Memcpy(VS_GetSpace(buf, length), data, length);
} }
void VS_WriteEx(vsbuf_t *buf, const void *data, size_t length, int flags)
{
char *p;
p = VS_GetSpace(buf, 2 + length);
p[0] = '\033';
p[1] = flags;
M_Memcpy(&p[2], data, length);
}
/** Prints text in a variable buffer. Like VS_Write() plus a /** Prints text in a variable buffer. Like VS_Write() plus a
* trailing NUL. * trailing NUL.
* *
...@@ -2008,6 +2059,9 @@ static boolean CV_Command(void) ...@@ -2008,6 +2059,9 @@ static boolean CV_Command(void)
if (!v) if (!v)
return false; return false;
if (( com_flags & COM_SAFE ) && ( v->flags & CV_NOLUA ))
return false;
// perform a variable print or set // perform a variable print or set
if (COM_Argc() == 1) if (COM_Argc() == 1)
{ {
...@@ -2109,8 +2163,13 @@ skipwhite: ...@@ -2109,8 +2163,13 @@ skipwhite:
com_token[len] = 0; com_token[len] = 0;
return data; return data;
} }
com_token[len] = c; if (c == '\033')
len++; data++;
else
{
com_token[len] = c;
len++;
}
} }
} }
...@@ -2126,10 +2185,22 @@ skipwhite: ...@@ -2126,10 +2185,22 @@ skipwhite:
// parse a regular word // parse a regular word
do do
{ {
com_token[len] = c; if (c == '\033')
data++; {
len++; do
c = *data; {
data += 2;
c = *data;
}
while (c == '\033') ;
}
else
{
com_token[len] = c;
data++;
len++;
c = *data;
}
if (c == '{' || c == '}' || c == ')'|| c == '(' || c == '\'') if (c == '{' || c == '}' || c == ')'|| c == '(' || c == '\'')
break; break;
} while (c > 32); } while (c > 32);
......
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
// Command buffer & command execution // Command buffer & command execution
//=================================== //===================================
enum
{
COM_SAFE = 1,
};
typedef void (*com_func_t)(void); typedef void (*com_func_t)(void);
void COM_AddCommand(const char *name, com_func_t func); void COM_AddCommand(const char *name, com_func_t func);
...@@ -36,10 +41,12 @@ size_t COM_FirstOption(void); ...@@ -36,10 +41,12 @@ size_t COM_FirstOption(void);
const char *COM_CompleteCommand(const char *partial, INT32 skips); const char *COM_CompleteCommand(const char *partial, INT32 skips);
// insert at queu (at end of other command) // insert at queu (at end of other command)
void COM_BufAddText(const char *btext); #define COM_BufAddText(s) COM_BufAddTextEx(s, 0)
void COM_BufAddTextEx(const char *btext, int flags);
// insert in head (before other command) // insert in head (before other command)
void COM_BufInsertText(const char *btext); #define COM_BufInsertText(s) COM_BufInsertTextEx(s, 0)
void COM_BufInsertTextEx(const char *btext, int flags);
// don't bother inserting, just do immediately // don't bother inserting, just do immediately
void COM_ImmedExecute(const char *ptext); void COM_ImmedExecute(const char *ptext);
...@@ -71,6 +78,7 @@ void VS_Free(vsbuf_t *buf); ...@@ -71,6 +78,7 @@ void VS_Free(vsbuf_t *buf);
void VS_Clear(vsbuf_t *buf); void VS_Clear(vsbuf_t *buf);
void *VS_GetSpace(vsbuf_t *buf, size_t length); void *VS_GetSpace(vsbuf_t *buf, size_t length);
void VS_Write(vsbuf_t *buf, const void *data, size_t length); void VS_Write(vsbuf_t *buf, const void *data, size_t length);
void VS_WriteEx(vsbuf_t *buf, const void *data, size_t length, int flags);
void VS_Print(vsbuf_t *buf, const char *data); // strcats onto the sizebuf void VS_Print(vsbuf_t *buf, const char *data); // strcats onto the sizebuf
//================== //==================
...@@ -100,7 +108,8 @@ typedef enum ...@@ -100,7 +108,8 @@ typedef enum
CV_HIDEN = 1024, // variable is not part of the cvar list so cannot be accessed by the console CV_HIDEN = 1024, // variable is not part of the cvar list so cannot be accessed by the console
// can only be set when we have the pointer to it // can only be set when we have the pointer to it
// used on menus // used on menus
CV_CHEAT = 2048 // Don't let this be used in multiplayer unless cheats are on. CV_CHEAT = 2048, // Don't let this be used in multiplayer unless cheats are on.
CV_NOLUA = 4096,/* don't let this be called from Lua */
} cvflags_t; } cvflags_t;
typedef struct CV_PossibleValue_s typedef struct CV_PossibleValue_s
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "g_input.h" #include "g_input.h"
#include "hu_stuff.h" #include "hu_stuff.h"
#include "keys.h" #include "keys.h"
#include "r_main.h"
#include "r_defs.h" #include "r_defs.h"
#include "sounds.h" #include "sounds.h"
#include "st_stuff.h" #include "st_stuff.h"
...@@ -591,6 +592,8 @@ void CON_ToggleOff(void) ...@@ -591,6 +592,8 @@ void CON_ToggleOff(void)
CON_ClearHUD(); CON_ClearHUD();
con_forcepic = 0; con_forcepic = 0;
con_clipviewtop = -1; // remove console clipping of view con_clipviewtop = -1; // remove console clipping of view
I_UpdateMouseGrab();
} }
boolean CON_Ready(void) boolean CON_Ready(void)
...@@ -609,14 +612,6 @@ void CON_Ticker(void) ...@@ -609,14 +612,6 @@ void CON_Ticker(void)
con_tick++; con_tick++;
con_tick &= 7; con_tick &= 7;
// if the menu is open then close the console.
if (menuactive && con_destlines)
{
consoletoggle = false;
con_destlines = 0;
CON_ClearHUD();
}
// console key was pushed // console key was pushed
if (consoletoggle) if (consoletoggle)
{ {
...@@ -627,6 +622,7 @@ void CON_Ticker(void) ...@@ -627,6 +622,7 @@ void CON_Ticker(void)
{ {
con_destlines = 0; con_destlines = 0;
CON_ClearHUD(); CON_ClearHUD();
I_UpdateMouseGrab();
} }
else else
CON_ChangeHeight(); CON_ChangeHeight();
...@@ -772,7 +768,7 @@ boolean CON_Responder(event_t *ev) ...@@ -772,7 +768,7 @@ boolean CON_Responder(event_t *ev)
// check for console toggle key // check for console toggle key
if (ev->type != ev_console) if (ev->type != ev_console)
{ {
if (modeattacking || metalrecording) if (modeattacking || metalrecording || menuactive)
return false; return false;
if (key == gamecontrol[gc_console][0] || key == gamecontrol[gc_console][1]) if (key == gamecontrol[gc_console][0] || key == gamecontrol[gc_console][1])
...@@ -787,7 +783,7 @@ boolean CON_Responder(event_t *ev) ...@@ -787,7 +783,7 @@ boolean CON_Responder(event_t *ev)
// check other keys only if console prompt is active // check other keys only if console prompt is active
if (!consoleready && key < NUMINPUTS) // metzgermeister: boundary check!! if (!consoleready && key < NUMINPUTS) // metzgermeister: boundary check!!
{ {
if (bindtable[key]) if (! menuactive && bindtable[key])
{ {
COM_BufAddText(bindtable[key]); COM_BufAddText(bindtable[key]);
COM_BufAddText("\n"); COM_BufAddText("\n");
...@@ -1285,10 +1281,10 @@ void CONS_Printf(const char *fmt, ...) ...@@ -1285,10 +1281,10 @@ void CONS_Printf(const char *fmt, ...)
con_scrollup = 0; con_scrollup = 0;
// if not in display loop, force screen update // if not in display loop, force screen update
if (con_startup) if (con_startup && (!setrenderneeded))
{ {
#ifdef _WINDOWS #ifdef _WINDOWS
patch_t *con_backpic = W_CachePatchName("CONSBACK", PU_CACHE); patch_t *con_backpic = W_CachePatchName("CONSBACK", PU_PATCH);
// Jimita: CON_DrawBackpic just called V_DrawScaledPatch // Jimita: CON_DrawBackpic just called V_DrawScaledPatch
V_DrawScaledPatch(0, 0, 0, con_backpic); V_DrawScaledPatch(0, 0, 0, con_backpic);
...@@ -1545,10 +1541,15 @@ static void CON_DrawConsole(void) ...@@ -1545,10 +1541,15 @@ static void CON_DrawConsole(void)
// draw console background // draw console background
if (cons_backpic.value || con_forcepic) if (cons_backpic.value || con_forcepic)
{ {
patch_t *con_backpic = W_CachePatchName("CONSBACK", PU_CACHE); patch_t *con_backpic = W_CachePatchName("CONSBACK", PU_PATCH);
int h;
h = con_curlines/vid.dupy;
// Jimita: CON_DrawBackpic just called V_DrawScaledPatch // Jimita: CON_DrawBackpic just called V_DrawScaledPatch
V_DrawScaledPatch(0, 0, 0, con_backpic); //V_DrawScaledPatch(0, 0, 0, con_backpic);
V_DrawCroppedPatch(0, 0, FRACUNIT, 0, con_backpic,
0, ( BASEVIDHEIGHT - h ), BASEVIDWIDTH, h);
W_UnlockCachedPatch(con_backpic); W_UnlockCachedPatch(con_backpic);
} }
...@@ -1602,8 +1603,18 @@ void CON_Drawer(void) ...@@ -1602,8 +1603,18 @@ void CON_Drawer(void)
if (!con_started || !graphics_started) if (!con_started || !graphics_started)
return; return;
if (needpatchrecache)
{
W_FlushCachedPatches();
HU_LoadGraphics();
}
if (con_recalc) if (con_recalc)
{
CON_RecalcSize(); CON_RecalcSize();
if (con_curlines <= 0)
CON_ClearHUD();
}
if (con_curlines > 0) if (con_curlines > 0)
CON_DrawConsole(); CON_DrawConsole();
......
...@@ -70,7 +70,7 @@ ...@@ -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)
...@@ -1303,6 +1303,8 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) ...@@ -1303,6 +1303,8 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime)
M_Memcpy(netbuffer->u.serverinfo.mapmd5, mapmd5, 16); M_Memcpy(netbuffer->u.serverinfo.mapmd5, mapmd5, 16);
memset(netbuffer->u.serverinfo.maptitle, 0, sizeof netbuffer->u.serverinfo.maptitle);
if (mapheaderinfo[gamemap-1] && *mapheaderinfo[gamemap-1]->lvlttl) if (mapheaderinfo[gamemap-1] && *mapheaderinfo[gamemap-1]->lvlttl)
{ {
char *read = mapheaderinfo[gamemap-1]->lvlttl, *writ = netbuffer->u.serverinfo.maptitle; char *read = mapheaderinfo[gamemap-1]->lvlttl, *writ = netbuffer->u.serverinfo.maptitle;
...@@ -1321,8 +1323,6 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime) ...@@ -1321,8 +1323,6 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime)
else else
strncpy(netbuffer->u.serverinfo.maptitle, "UNKNOWN", 32); strncpy(netbuffer->u.serverinfo.maptitle, "UNKNOWN", 32);
netbuffer->u.serverinfo.maptitle[32] = '\0';
if (mapheaderinfo[gamemap-1] && !(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE)) if (mapheaderinfo[gamemap-1] && !(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
netbuffer->u.serverinfo.iszone = 1; netbuffer->u.serverinfo.iszone = 1;
else else
...@@ -1624,6 +1624,7 @@ static void CL_LoadReceivedSavegame(void) ...@@ -1624,6 +1624,7 @@ static void CL_LoadReceivedSavegame(void)
paused = false; paused = false;
demoplayback = false; demoplayback = false;
titlemapinaction = TITLEMAP_OFF;
titledemo = false; titledemo = false;
automapactive = false; automapactive = false;
...@@ -2987,8 +2988,8 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum) ...@@ -2987,8 +2988,8 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
CL_RemovePlayer(pnum, kickreason); CL_RemovePlayer(pnum, kickreason);
} }
consvar_t cv_allownewplayer = {"allowjoin", "On", CV_SAVE|CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL }; consvar_t cv_allownewplayer = {"allowjoin", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL };
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_SAVE|CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}}; static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}};
consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t resynchattempts_cons_t[] = {{1, "MIN"}, {20, "MAX"}, {0, "No"}, {0, NULL}}; static CV_PossibleValue_t resynchattempts_cons_t[] = {{1, "MIN"}, {20, "MAX"}, {0, "No"}, {0, NULL}};
......
...@@ -108,6 +108,8 @@ boolean devparm = false; // started game with -devparm ...@@ -108,6 +108,8 @@ boolean devparm = false; // started game with -devparm
boolean singletics = false; // timedemo boolean singletics = false; // timedemo
boolean lastdraw = false; boolean lastdraw = false;
static void D_CheckRendererState(void);
postimg_t postimgtype = postimg_none; postimg_t postimgtype = postimg_none;
INT32 postimgparam; INT32 postimgparam;
postimg_t postimgtype2 = postimg_none; postimg_t postimgtype2 = postimg_none;
...@@ -186,14 +188,14 @@ void D_ProcessEvents(void) ...@@ -186,14 +188,14 @@ void D_ProcessEvents(void)
continue; continue;
} }
// Menu input
if (M_Responder(ev))
continue; // menu ate the event
// console input // console input
if (CON_Responder(ev)) if (CON_Responder(ev))
continue; // ate the event continue; // ate the event
// Menu input
if (M_Responder(ev))
continue; // menu ate the event
G_Responder(ev); G_Responder(ev);
} }
} }
...@@ -212,6 +214,7 @@ INT16 wipetypepost = -1; ...@@ -212,6 +214,7 @@ INT16 wipetypepost = -1;
static void D_Display(void) static void D_Display(void)
{ {
INT32 setrenderstillneeded = 0;
boolean forcerefresh = false; boolean forcerefresh = false;
static boolean wipe = false; static boolean wipe = false;
INT32 wipedefindex = 0; INT32 wipedefindex = 0;
...@@ -222,11 +225,38 @@ static void D_Display(void) ...@@ -222,11 +225,38 @@ static void D_Display(void)
if (nodrawers) if (nodrawers)
return; // for comparative timing/profiling return; // for comparative timing/profiling
// check for change of screen size (video mode) // Lactozilla: Switching renderers works by checking
if (setmodeneeded && !wipe) // if the game has to do it right when the frame
// needs to render. If so, five things will happen:
// 1. Interface functions will be called so
// that switching to OpenGL creates a
// GL context, and switching to Software
// allocates screen buffers.
// 2. Software will set drawer functions,
// and OpenGL will load textures and
// create plane polygons, if necessary.
// 3. Functions related to switching video
// modes (resolution) are called.
// 4. Patch data is freed from memory,
// and recached if necessary.
// 5. The frame is ready to be drawn!
// stop movie if needs to change renderer
if (setrenderneeded && (moviemode == MM_APNG))
M_StopMovie();
// check for change of renderer or screen size (video mode)
if ((setrenderneeded || setmodeneeded) && !wipe)
{
if (setrenderneeded)
{
CONS_Debug(DBG_RENDER, "setrenderneeded set (%d)\n", setrenderneeded);
setrenderstillneeded = setrenderneeded;
}
SCR_SetMode(); // change video mode SCR_SetMode(); // change video mode
}
if (vid.recalc) if (vid.recalc || setrenderstillneeded)
{ {
SCR_Recalc(); // NOTE! setsizeneeded is set by SCR_Recalc() SCR_Recalc(); // NOTE! setsizeneeded is set by SCR_Recalc()
#ifdef HWRENDER #ifdef HWRENDER
...@@ -237,12 +267,15 @@ static void D_Display(void) ...@@ -237,12 +267,15 @@ static void D_Display(void)
} }
// change the view size if needed // change the view size if needed
if (setsizeneeded) if (setsizeneeded || setrenderstillneeded)
{ {
R_ExecuteSetViewSize(); R_ExecuteSetViewSize();
forcerefresh = true; // force background redraw forcerefresh = true; // force background redraw
} }
// Lactozilla: Renderer switching
D_CheckRendererState();
// draw buffered stuff to screen // draw buffered stuff to screen
// Used only by linux GGI version // Used only by linux GGI version
I_UpdateNoBlit(); I_UpdateNoBlit();
...@@ -274,7 +307,10 @@ static void D_Display(void) ...@@ -274,7 +307,10 @@ static void D_Display(void)
&& wipetypepre != UINT8_MAX) && wipetypepre != UINT8_MAX)
{ {
F_WipeStartScreen(); F_WipeStartScreen();
F_WipeColorFill(31); // Check for Mega Genesis fade
wipestyleflags = WSF_FADEOUT;
if (F_TryColormapFade(31))
wipetypepost = -1; // Don't run the fade below this one
F_WipeEndScreen(); F_WipeEndScreen();
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN); F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
} }
...@@ -454,7 +490,7 @@ static void D_Display(void) ...@@ -454,7 +490,7 @@ static void D_Display(void)
py = 4; py = 4;
else else
py = viewwindowy + 4; py = viewwindowy + 4;
patch = W_CachePatchName("M_PAUSE", PU_CACHE); patch = W_CachePatchName("M_PAUSE", PU_PATCH);
V_DrawScaledPatch(viewwindowx + (BASEVIDWIDTH - SHORT(patch->width))/2, py, 0, patch); V_DrawScaledPatch(viewwindowx + (BASEVIDWIDTH - SHORT(patch->width))/2, py, 0, patch);
#else #else
INT32 y = ((automapactive) ? (32) : (BASEVIDHEIGHT/2)); INT32 y = ((automapactive) ? (32) : (BASEVIDHEIGHT/2));
...@@ -466,13 +502,12 @@ static void D_Display(void) ...@@ -466,13 +502,12 @@ static void D_Display(void)
// vid size change is now finished if it was on... // vid size change is now finished if it was on...
vid.recalc = 0; vid.recalc = 0;
// FIXME: draw either console or menu, not the two
if (gamestate != GS_TIMEATTACK)
CON_Drawer();
M_Drawer(); // menu is drawn even on top of everything M_Drawer(); // menu is drawn even on top of everything
// focus lost moved to M_Drawer // focus lost moved to M_Drawer
if (gamestate != GS_TIMEATTACK)
CON_Drawer();
// //
// wipe update // wipe update
// //
...@@ -488,6 +523,7 @@ static void D_Display(void) ...@@ -488,6 +523,7 @@ static void D_Display(void)
if (rendermode != render_none) if (rendermode != render_none)
{ {
F_WipeEndScreen(); F_WipeEndScreen();
// Funny. // Funny.
if (WipeStageTitle && st_overlay) if (WipeStageTitle && st_overlay)
{ {
...@@ -497,6 +533,14 @@ static void D_Display(void) ...@@ -497,6 +533,14 @@ static void D_Display(void)
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
F_WipeStartScreen(); F_WipeStartScreen();
} }
// Check for Mega Genesis fade
if (F_ShouldColormapFade())
{
wipestyleflags |= WSF_FADEIN;
wipestyleflags &= ~WSF_FADEOUT;
}
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN); F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
} }
...@@ -545,6 +589,25 @@ static void D_Display(void) ...@@ -545,6 +589,25 @@ static void D_Display(void)
I_FinishUpdate(); // page flip or blit buffer I_FinishUpdate(); // page flip or blit buffer
} }
needpatchflush = false;
needpatchrecache = false;
}
// Lactozilla: Check the renderer's state
// after a possible renderer switch.
void D_CheckRendererState(void)
{
// flush all patches from memory
// (also frees memory tagged with PU_CACHE)
// (which are not necessarily patches but I don't care)
if (needpatchflush)
Z_FlushCachedPatches();
// some patches have been freed,
// so cache them again
if (needpatchrecache)
R_ReloadHUDGraphics();
} }
// ========================================================================= // =========================================================================
...@@ -562,9 +625,6 @@ void D_SRB2Loop(void) ...@@ -562,9 +625,6 @@ void D_SRB2Loop(void)
// Pushing of + parameters is now done back in D_SRB2Main, not here. // Pushing of + parameters is now done back in D_SRB2Main, not here.
CONS_Printf("I_StartupKeyboard()...\n");
I_StartupKeyboard();
#ifdef _WINDOWS #ifdef _WINDOWS
CONS_Printf("I_StartupMouse()...\n"); CONS_Printf("I_StartupMouse()...\n");
I_DoStartupMouse(); I_DoStartupMouse();
...@@ -591,8 +651,7 @@ void D_SRB2Loop(void) ...@@ -591,8 +651,7 @@ void D_SRB2Loop(void)
// hack to start on a nice clear console screen. // hack to start on a nice clear console screen.
COM_ImmedExecute("cls;version"); COM_ImmedExecute("cls;version");
if (rendermode == render_soft) V_DrawScaledPatch(0, 0, 0, W_CachePatchNum(W_GetNumForName("CONSBACK"), PU_CACHE));
V_DrawScaledPatch(0, 0, 0, (patch_t *)W_CacheLumpNum(W_GetNumForName("CONSBACK"), PU_CACHE));
I_FinishUpdate(); // page flip or blit buffer I_FinishUpdate(); // page flip or blit buffer
for (;;) for (;;)
...@@ -986,10 +1045,8 @@ void D_SRB2Main(void) ...@@ -986,10 +1045,8 @@ void D_SRB2Main(void)
I_OutputMsg("setvbuf didnt work\n"); I_OutputMsg("setvbuf didnt work\n");
#endif #endif
#ifdef GETTEXT
// initialise locale code // initialise locale code
M_StartupLocale(); M_StartupLocale();
#endif
// get parameters from a response file (eg: srb2 @parms.txt) // get parameters from a response file (eg: srb2 @parms.txt)
M_FindResponseFile(); M_FindResponseFile();
...@@ -1109,26 +1166,6 @@ void D_SRB2Main(void) ...@@ -1109,26 +1166,6 @@ void D_SRB2Main(void)
if (M_CheckParm("-server") || dedicated) if (M_CheckParm("-server") || dedicated)
netgame = server = true; netgame = server = true;
if (M_CheckParm("-warp") && M_IsNextParm())
{
const char *word = M_GetNextParm();
char ch; // use this with sscanf to catch non-digits with
if (fastncmp(word, "MAP", 3)) // MAPxx name
pstartmap = M_MapNumber(word[3], word[4]);
else if (sscanf(word, "%d%c", &pstartmap, &ch) != 1) // a plain number
I_Error("Cannot warp to map %s (invalid map name)\n", word);
// Don't check if lump exists just yet because the wads haven't been loaded!
// Just do a basic range check here.
if (pstartmap < 1 || pstartmap > NUMMAPS)
I_Error("Cannot warp to map %d (out of range)\n", pstartmap);
else
{
if (!M_CheckParm("-server"))
G_SetGameModified(true);
autostart = true;
}
}
CONS_Printf("Z_Init(): Init zone memory allocation daemon. \n"); CONS_Printf("Z_Init(): Init zone memory allocation daemon. \n");
Z_Init(); Z_Init();
...@@ -1185,6 +1222,20 @@ void D_SRB2Main(void) ...@@ -1185,6 +1222,20 @@ void D_SRB2Main(void)
mainwadstally = packetsizetally; // technically not accurate atm, remember to port the two-stage -file process from kart in 2.2.x mainwadstally = packetsizetally; // technically not accurate atm, remember to port the two-stage -file process from kart in 2.2.x
if (M_CheckParm("-warp") && M_IsNextParm())
{
const char *word = M_GetNextParm();
pstartmap = G_FindMapByNameOrCode(word, 0);
if (! pstartmap)
I_Error("Cannot find a map remotely named '%s'\n", word);
else
{
if (!M_CheckParm("-server"))
G_SetGameModified(true);
autostart = true;
}
}
cht_Init(); cht_Init();
//---------------------------------------------------- READY SCREEN //---------------------------------------------------- READY SCREEN
...@@ -1193,6 +1244,13 @@ void D_SRB2Main(void) ...@@ -1193,6 +1244,13 @@ void D_SRB2Main(void)
CONS_Printf("I_StartupGraphics()...\n"); CONS_Printf("I_StartupGraphics()...\n");
I_StartupGraphics(); I_StartupGraphics();
#ifdef HWRENDER
// Lactozilla: Add every hardware mode CVAR and CCMD.
// Has to be done before the configuration file loads,
// but after the OpenGL library loads.
HWR_AddCommands();
#endif
//--------------------------------------------------------- CONSOLE //--------------------------------------------------------- CONSOLE
// setup loading screen // setup loading screen
SCR_Startup(); SCR_Startup();
...@@ -1223,6 +1281,16 @@ void D_SRB2Main(void) ...@@ -1223,6 +1281,16 @@ void D_SRB2Main(void)
// set user default mode or mode set at cmdline // set user default mode or mode set at cmdline
SCR_CheckDefaultMode(); SCR_CheckDefaultMode();
// Lactozilla: Does the render mode need to change?
if ((setrenderneeded != 0) && (setrenderneeded != rendermode))
{
needpatchflush = true;
needpatchrecache = true;
VID_CheckRenderer();
SCR_ChangeRendererCVars(setrenderneeded);
}
D_CheckRendererState();
wipegamestate = gamestate; wipegamestate = gamestate;
savedata.lives = 0; // flag this as not-used savedata.lives = 0; // flag this as not-used
...@@ -1281,9 +1349,10 @@ void D_SRB2Main(void) ...@@ -1281,9 +1349,10 @@ void D_SRB2Main(void)
I_StartupSound(); I_StartupSound();
I_InitMusic(); I_InitMusic();
S_InitSfxChannels(cv_soundvolume.value); S_InitSfxChannels(cv_soundvolume.value);
S_InitMusicDefs();
} }
S_InitMusicDefs();
CONS_Printf("ST_Init(): Init status bar.\n"); CONS_Printf("ST_Init(): Init status bar.\n");
ST_Init(); ST_Init();
......
...@@ -40,6 +40,8 @@ extern SINT8 nodetoplayer2[MAXNETNODES]; // Say the numplayer for this node if a ...@@ -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);
......
...@@ -823,6 +823,10 @@ void D_RegisterClientCommands(void) ...@@ -823,6 +823,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);
...@@ -837,6 +841,10 @@ void D_RegisterClientCommands(void) ...@@ -837,6 +841,10 @@ void D_RegisterClientCommands(void)
// screen.c // screen.c
CV_RegisterVar(&cv_fullscreen); CV_RegisterVar(&cv_fullscreen);
CV_RegisterVar(&cv_renderview); CV_RegisterVar(&cv_renderview);
CV_RegisterVar(&cv_renderer);
#ifdef HWRENDER
CV_RegisterVar(&cv_newrenderer);
#endif
CV_RegisterVar(&cv_scr_depth); CV_RegisterVar(&cv_scr_depth);
CV_RegisterVar(&cv_scr_width); CV_RegisterVar(&cv_scr_width);
CV_RegisterVar(&cv_scr_height); CV_RegisterVar(&cv_scr_height);
...@@ -1788,18 +1796,15 @@ static void Command_Map_f(void) ...@@ -1788,18 +1796,15 @@ static void Command_Map_f(void)
boolean newresetplayers; boolean newresetplayers;
boolean mustmodifygame; boolean mustmodifygame;
boolean usemapcode = false;
INT32 newmapnum; INT32 newmapnum;
char * mapname; char * mapname;
size_t mapnamelen;
char *realmapname = NULL; char *realmapname = NULL;
INT32 newgametype = gametype; INT32 newgametype = gametype;
INT32 d; INT32 d;
char *p;
if (client && !IsPlayerAdmin(consoleplayer)) if (client && !IsPlayerAdmin(consoleplayer))
{ {
...@@ -1859,56 +1864,16 @@ static void Command_Map_f(void) ...@@ -1859,56 +1864,16 @@ static void Command_Map_f(void)
} }
mapname = ConcatCommandArgv(1, first_option); mapname = ConcatCommandArgv(1, first_option);
mapnamelen = strlen(mapname);
if (mapnamelen == 2)/* maybe two digit code */ newmapnum = G_FindMapByNameOrCode(mapname, &realmapname);
{
if (( newmapnum = M_MapNumber(mapname[0], mapname[1]) ))
usemapcode = true;
}
else if (mapnamelen == 5 && strnicmp(mapname, "MAP", 3) == 0)
{
if (( newmapnum = M_MapNumber(mapname[3], mapname[4]) ) == 0)
{
CONS_Alert(CONS_ERROR, M_GetText("Invalid map code '%s'.\n"), mapname);
Z_Free(mapname);
return;
}
usemapcode = true;
}
if (!usemapcode) if (newmapnum == 0)
{
/* Now detect map number in base 10, which no one asked for. */
newmapnum = strtol(mapname, &p, 10);
if (*p == '\0')/* we got it */
{
if (newmapnum < 1 || newmapnum > NUMMAPS)
{
CONS_Alert(CONS_ERROR, M_GetText("Invalid map number %d.\n"), newmapnum);
Z_Free(mapname);
return;
}
usemapcode = true;
}
else
{
newmapnum = G_FindMap(mapname, &realmapname, NULL, NULL);
}
}
if (newmapnum == 0 || !mapheaderinfo[newmapnum-1])
{ {
CONS_Alert(CONS_ERROR, M_GetText("Could not find any map described as '%s'.\n"), mapname); CONS_Alert(CONS_ERROR, M_GetText("Could not find any map described as '%s'.\n"), mapname);
Z_Free(mapname); Z_Free(mapname);
return; return;
} }
if (usemapcode)
{
realmapname = G_BuildMapTitle(newmapnum);
}
if (mustmodifygame && option_force) if (mustmodifygame && option_force)
{ {
G_SetGameModified(false); G_SetGameModified(false);
...@@ -2175,6 +2140,8 @@ static void Got_Pause(UINT8 **cp, INT32 playernum) ...@@ -2175,6 +2140,8 @@ static void Got_Pause(UINT8 **cp, INT32 playernum)
else else
S_ResumeAudio(); S_ResumeAudio();
} }
I_UpdateMouseGrab();
} }
// Command for stuck characters in netgames, griefing, etc. // Command for stuck characters in netgames, griefing, etc.
......
...@@ -242,6 +242,7 @@ INT32 flags; Bits = 3232 MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|M ...@@ -242,6 +242,7 @@ INT32 flags; Bits = 3232 MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|M
INT32 raisestate; Respawn frame = 32 S_NULL // raisestate INT32 raisestate; Respawn frame = 32 S_NULL // raisestate
}, */ }, */
#ifdef HWRENDER
static INT32 searchvalue(const char *s) static INT32 searchvalue(const char *s)
{ {
while (s[0] != '=' && s[0]) while (s[0] != '=' && s[0])
...@@ -255,7 +256,6 @@ static INT32 searchvalue(const char *s) ...@@ -255,7 +256,6 @@ static INT32 searchvalue(const char *s)
} }
} }
#ifdef HWRENDER
static float searchfvalue(const char *s) static float searchfvalue(const char *s)
{ {
while (s[0] != '=' && s[0]) while (s[0] != '=' && s[0])
...@@ -886,7 +886,9 @@ static void readspriteinfo(MYFILE *f, INT32 num, boolean sprite2) ...@@ -886,7 +886,9 @@ static void readspriteinfo(MYFILE *f, INT32 num, boolean sprite2)
char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL); char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
char *word, *word2; char *word, *word2;
char *tmp; char *tmp;
#ifdef HWRENDER
INT32 value; INT32 value;
#endif
char *lastline; char *lastline;
INT32 skinnumbers[MAXSKINS]; INT32 skinnumbers[MAXSKINS];
INT32 foundskins = 0; INT32 foundskins = 0;
...@@ -947,9 +949,9 @@ static void readspriteinfo(MYFILE *f, INT32 num, boolean sprite2) ...@@ -947,9 +949,9 @@ static void readspriteinfo(MYFILE *f, INT32 num, boolean sprite2)
break; break;
} }
strupr(word); strupr(word);
#ifdef HWRENDER
value = atoi(word2); // used for numerical settings value = atoi(word2); // used for numerical settings
#ifdef HWRENDER
if (fastcmp(word, "LIGHTTYPE")) if (fastcmp(word, "LIGHTTYPE"))
{ {
if (sprite2) if (sprite2)
...@@ -4460,20 +4462,34 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile) ...@@ -4460,20 +4462,34 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
ignorelines(f); ignorelines(f);
} }
} }
// Last I heard this crashes the game if you try to use it else if (fastcmp(word, "SRB2"))
// so this is disabled for now
// -- Monster Iestyn
/* else if (fastcmp(word, "SRB2"))
{ {
INT32 ver = searchvalue(strtok(NULL, "\n")); if (isdigit(word2[0]))
if (ver != PATCHVERSION) {
deh_warning("Patch is for SRB2 version %d,\nonly version %d is supported", ver, PATCHVERSION); i = atoi(word2);
if (i != PATCHVERSION)
{
deh_warning(
"Patch is for SRB2 version %d, "
"only version %d is supported",
i,
PATCHVERSION
);
}
}
else
{
deh_warning(
"SRB2 version definition has incorrect format, "
"use \"SRB2 %d\"",
PATCHVERSION
);
}
} }
// Clear all data in certain locations (mostly for unlocks) // Clear all data in certain locations (mostly for unlocks)
// Unless you REALLY want to piss people off, // Unless you REALLY want to piss people off,
// define a custom gamedata /before/ doing this!! // define a custom gamedata /before/ doing this!!
// (then again, modifiedgame will prevent game data saving anyway) // (then again, modifiedgame will prevent game data saving anyway)
*/
else if (fastcmp(word, "CLEAR")) else if (fastcmp(word, "CLEAR"))
{ {
boolean clearall = (fastcmp(word2, "ALL")); boolean clearall = (fastcmp(word2, "ALL"));
...@@ -4523,11 +4539,13 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile) ...@@ -4523,11 +4539,13 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
if (introchanged) if (introchanged)
{ {
menuactive = false; menuactive = false;
I_UpdateMouseGrab();
COM_BufAddText("playintro"); COM_BufAddText("playintro");
} }
else if (titlechanged) else if (titlechanged)
{ {
menuactive = false; menuactive = false;
I_UpdateMouseGrab();
COM_BufAddText("exitgame"); // Command_ExitGame_f() but delayed COM_BufAddText("exitgame"); // Command_ExitGame_f() but delayed
} }
} }
...@@ -9446,6 +9464,7 @@ struct { ...@@ -9446,6 +9464,7 @@ struct {
{"CV_HIDEN",CV_HIDEN}, {"CV_HIDEN",CV_HIDEN},
{"CV_HIDDEN",CV_HIDEN}, {"CV_HIDDEN",CV_HIDEN},
{"CV_CHEAT",CV_CHEAT}, {"CV_CHEAT",CV_CHEAT},
{"CV_NOLUA",CV_NOLUA},
// v_video flags // v_video flags
{"V_NOSCALEPATCH",V_NOSCALEPATCH}, {"V_NOSCALEPATCH",V_NOSCALEPATCH},
......
...@@ -47,7 +47,7 @@ extern const char *superactions[MAXRECURSION]; ...@@ -47,7 +47,7 @@ extern const char *superactions[MAXRECURSION];
extern UINT8 superstack; extern UINT8 superstack;
// If the dehacked patch does not match this version, we throw a warning // If the dehacked patch does not match this version, we throw a warning
#define PATCHVERSION 210 #define PATCHVERSION 220
#define MAXLINELEN 1024 #define MAXLINELEN 1024
......
...@@ -338,3 +338,8 @@ void I_StartupGraphics(void) ...@@ -338,3 +338,8 @@ void I_StartupGraphics(void)
graphics_started = true; graphics_started = true;
} }
void I_StartupHardwareGraphics(void)
{
// oh yeah woo yeah oh yeah woo yeah oh yeah woo yeah oh yeah woo yeah oh yeah woo yeah oh yeah woo yeah oh yeah woo y
}