mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-22 04:21:23 +00:00
Merge remote-tracking branch 'origin/next' into netxcmd-refactor
This commit is contained in:
commit
6e1463e399
322 changed files with 8655 additions and 6162 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -13,11 +13,11 @@ Win32_LIB_ASM_Release
|
||||||
*.dgb
|
*.dgb
|
||||||
*.debug
|
*.debug
|
||||||
*.debug.txt
|
*.debug.txt
|
||||||
/bin/VC10/
|
|
||||||
/objs/VC10/
|
|
||||||
*.user
|
*.user
|
||||||
*.db
|
*.db
|
||||||
*.opendb
|
*.opendb
|
||||||
/.vs
|
/.vs
|
||||||
/debian
|
/debian
|
||||||
/assets/debian
|
/assets/debian
|
||||||
|
/make
|
||||||
|
/bin
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
# Enable CCache early
|
# Enable CCache early
|
||||||
set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache")
|
set(SRB2_USE_CCACHE OFF CACHE BOOL "Use CCache")
|
||||||
|
@ -34,12 +34,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
### Useful functions
|
### Useful functions
|
||||||
|
|
||||||
# Prepend sources with current source directory
|
# Add sources from Sourcefile
|
||||||
function(prepend_sources SOURCE_FILES)
|
function(target_sourcefile type)
|
||||||
foreach(SOURCE_FILE ${${SOURCE_FILES}})
|
file(STRINGS Sourcefile list
|
||||||
set(MODIFIED ${MODIFIED} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE})
|
REGEX "[-0-9A-Za-z_]+\.${type}")
|
||||||
endforeach()
|
target_sources(SRB2SDL2 PRIVATE ${list})
|
||||||
set(${SOURCE_FILES} ${MODIFIED} PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Macro to add OSX framework
|
# Macro to add OSX framework
|
||||||
|
|
8
Makefile
Normal file
8
Makefile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
ifdef SILENT
|
||||||
|
MAKEFLAGS+=--no-print-directory
|
||||||
|
endif
|
||||||
|
|
||||||
|
all :
|
||||||
|
|
||||||
|
% ::
|
||||||
|
@$(MAKE) -C src $(MAKECMDGOALS)
|
|
@ -1,4 +1,5 @@
|
||||||
# Sonic Robo Blast 2
|
# Sonic Robo Blast 2
|
||||||
|
[![latest release](https://badgen.net/github/release/STJr/SRB2/stable)](https://github.com/STJr/SRB2/releases/latest)
|
||||||
|
|
||||||
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
||||||
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
||||||
|
|
34
appveyor.yml
34
appveyor.yml
|
@ -2,15 +2,11 @@ version: 2.2.9.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
CC: ccache
|
CC: i686-w64-mingw32-gcc
|
||||||
CCACHE_CC: i686-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
|
CFLAGS: -Wno-implicit-fallthrough
|
||||||
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
|
|
||||||
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
|
||||||
|
@ -19,8 +15,6 @@ environment:
|
||||||
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
|
|
||||||
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`.
|
||||||
|
@ -53,11 +47,6 @@ cache:
|
||||||
- C:\Users\appveyor\srb2_cache
|
- C:\Users\appveyor\srb2_cache
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- if [%CONFIGURATION%] == [SDL64] ( set "X86_64=1" )
|
|
||||||
- if [%CONFIGURATION%] == [SDL64] ( set "CONFIGURATION=SDL" )
|
|
||||||
- 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"
|
- if not exist "%NASM_ZIP%.zip" appveyor DownloadFile "%NASM_URL%" -FileName "%NASM_ZIP%.zip"
|
||||||
- 7z x -y "%NASM_ZIP%.zip" -o%TMP% >null
|
- 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
|
- robocopy /S /xx /ns /nc /nfl /ndl /np /njh /njs "%TMP%\%NASM_ZIP%" "%MINGW_SDK%\bin" nasm.exe || exit 0
|
||||||
|
@ -72,43 +61,31 @@ install:
|
||||||
|
|
||||||
configuration:
|
configuration:
|
||||||
- SDL
|
- SDL
|
||||||
- SDL64
|
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- set "Path=%MINGW_SDK%\bin;%Path%"
|
- set "Path=%MINGW_SDK%\bin;%Path%"
|
||||||
- if [%X86_64%] == [1] ( x86_64-w64-mingw32-gcc --version ) else ( i686-w64-mingw32-gcc --version )
|
|
||||||
- mingw32-make --version
|
- mingw32-make --version
|
||||||
- if not [%X86_64%] == [1] ( nasm -v )
|
- nasm -v
|
||||||
- if not [%NOUPX%] == [1] ( upx -V )
|
- if not [%NOUPX%] == [1] ( upx -V )
|
||||||
- ccache -V
|
- ccache -V
|
||||||
- ccache -s
|
- ccache -s
|
||||||
- if [%NOUPX%] == [1] ( set "NOUPX=NOUPX=1" ) else ( set "NOUPX=" )
|
|
||||||
- if defined [%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%] ( set "COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%" ) else ( set "COMMIT=%APPVEYOR_REPO_COMMIT%" )
|
- if defined [%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%] ( set "COMMIT=%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%" ) else ( set "COMMIT=%APPVEYOR_REPO_COMMIT%" )
|
||||||
- cmd: git rev-parse --short %COMMIT%>%TMP%/gitshort.txt
|
- cmd: git rev-parse --short %COMMIT%>%TMP%/gitshort.txt
|
||||||
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
||||||
# for pull requests, take the owner's name only, if this isn't the same repo of course
|
# for pull requests, take the owner's name only, if this isn't the same repo of course
|
||||||
- set "REPO=%APPVEYOR_REPO_BRANCH%"
|
- set "REPO=%APPVEYOR_REPO_BRANCH%"
|
||||||
- if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [] ( if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [%APPVEYOR_REPO_NAME%] ( for /f "delims=/" %%a in ("%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%") do set "REPO=%%a-%APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH%" ) )
|
- if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [] ( if not [%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%] == [%APPVEYOR_REPO_NAME%] ( for /f "delims=/" %%a in ("%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%") do set "REPO=%%a-%APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH%" ) )
|
||||||
- set "EXENAME=EXENAME=srb2win-%REPO%-%GITSHORT%.exe"
|
- set "SRB2_MFLAGS=-C src NOECHOFILENAMES=1 CCACHE=1 EXENAME=srb2win-%REPO%-%GITSHORT%.exe"
|
||||||
- set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 NOOBJDUMP=1 %NOUPX% %EXENAME%"
|
|
||||||
- if [%X86_64%] == [1] ( set "MINGW_FLAGS=MINGW64=1 X86_64=1 GCC81=1" ) else ( set "MINGW_FLAGS=MINGW=1 GCC91=1" )
|
|
||||||
- set "SRB2_MFLAGS=%SRB2_MFLAGS% %MINGW_FLAGS% %CONFIGURATION%=1"
|
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmd: mingw32-make.exe %SRB2_MFLAGS% clean
|
- cmd: mingw32-make.exe %SRB2_MFLAGS% clean
|
||||||
- cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k
|
- cmd: mingw32-make.exe %SRB2_MFLAGS% ERRORMODE=1 -k
|
||||||
|
|
||||||
after_build:
|
after_build:
|
||||||
- if [%X86_64%] == [1] (
|
|
||||||
set "BUILD_PATH=bin\Mingw64\Release"
|
|
||||||
) else (
|
|
||||||
set "BUILD_PATH=bin\Mingw\Release"
|
|
||||||
)
|
|
||||||
- if [%X86_64%] == [1] ( set "CONFIGURATION=%CONFIGURATION%64" )
|
|
||||||
- ccache -s
|
- ccache -s
|
||||||
- set BUILD_ARCHIVE=%REPO%-%GITSHORT%-%CONFIGURATION%.7z
|
- set BUILD_ARCHIVE=%REPO%-%GITSHORT%-%CONFIGURATION%.7z
|
||||||
- set BUILDSARCHIVE=%REPO%-%CONFIGURATION%.7z
|
- set BUILDSARCHIVE=%REPO%-%CONFIGURATION%.7z
|
||||||
- cmd: 7z a %BUILD_ARCHIVE% %BUILD_PATH% -xr!.gitignore
|
- cmd: 7z a %BUILD_ARCHIVE% bin -xr!.gitignore
|
||||||
- appveyor PushArtifact %BUILD_ARCHIVE%
|
- appveyor PushArtifact %BUILD_ARCHIVE%
|
||||||
#- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
|
#- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
|
||||||
#- appveyor PushArtifact %BUILDSARCHIVE%
|
#- appveyor PushArtifact %BUILDSARCHIVE%
|
||||||
|
@ -139,3 +116,4 @@ test: off
|
||||||
on_finish:
|
on_finish:
|
||||||
#- cmd: echo xfreerdp /u:appveyor /cert-ignore +clipboard /v:<ip>:<port>
|
#- 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'))
|
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
||||||
|
# vim: et ts=1
|
||||||
|
|
2
bin/FreeBSD/Debug/.gitignore
vendored
2
bin/FreeBSD/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/FreeBSD/Release/.gitignore
vendored
2
bin/FreeBSD/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
1
bin/Linux/Debug/.gitignore
vendored
1
bin/Linux/Debug/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
3
bin/Linux/Release/.gitignore
vendored
3
bin/Linux/Release/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/lsdlsrb2
|
|
||||||
/pnd
|
|
||||||
/*.mo
|
|
1
bin/Linux64/Debug/.gitignore
vendored
1
bin/Linux64/Debug/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
1
bin/Linux64/Release/.gitignore
vendored
1
bin/Linux64/Release/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/lsdlsrb2
|
|
3
bin/Mingw/Debug/.gitignore
vendored
3
bin/Mingw/Debug/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
*.exe
|
|
||||||
*.mo
|
|
||||||
r_opengl.dll
|
|
4
bin/Mingw/Release/.gitignore
vendored
4
bin/Mingw/Release/.gitignore
vendored
|
@ -1,4 +0,0 @@
|
||||||
*.exe
|
|
||||||
*.mo
|
|
||||||
r_opengl.dll
|
|
||||||
*.bat
|
|
3
bin/Mingw64/Debug/.gitignore
vendored
3
bin/Mingw64/Debug/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/srb2sdl.exe
|
|
||||||
/srb2win.exe
|
|
||||||
/r_opengl.dll
|
|
3
bin/Mingw64/Release/.gitignore
vendored
3
bin/Mingw64/Release/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
/srb2sdl.exe
|
|
||||||
/srb2win.exe
|
|
||||||
/r_opengl.dll
|
|
2
bin/SDL/Debug/.gitignore
vendored
2
bin/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/SDL/Release/.gitignore
vendored
2
bin/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
bin/VC/.gitignore
vendored
2
bin/VC/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
/Release
|
|
||||||
/Debug
|
|
2
bin/VC9/.gitignore
vendored
2
bin/VC9/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
/Win32
|
|
||||||
/x64
|
|
2
bin/dummy/.gitignore
vendored
2
bin/dummy/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/.gitignore
vendored
2
dep/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
#All folders
|
|
||||||
*.d
|
|
2
dep/FreeBSD/SDL/Debug/.gitignore
vendored
2
dep/FreeBSD/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/FreeBSD/SDL/Release/.gitignore
vendored
2
dep/FreeBSD/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux/SDL/Debug/.gitignore
vendored
2
dep/Linux/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux/SDL/Release/.gitignore
vendored
2
dep/Linux/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux64/SDL/Debug/.gitignore
vendored
2
dep/Linux64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Linux64/SDL/Release/.gitignore
vendored
2
dep/Linux64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/MasterClient/.gitignore
vendored
2
dep/MasterClient/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/MasterServer/.gitignore
vendored
2
dep/MasterServer/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/Debug/.gitignore
vendored
2
dep/Mingw/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/Release/.gitignore
vendored
2
dep/Mingw/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/SDL/Debug/.gitignore
vendored
2
dep/Mingw/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw/SDL/Release/.gitignore
vendored
2
dep/Mingw/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/Debug/.gitignore
vendored
2
dep/Mingw64/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/Release/.gitignore
vendored
2
dep/Mingw64/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/SDL/Debug/.gitignore
vendored
2
dep/Mingw64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/Mingw64/SDL/Release/.gitignore
vendored
2
dep/Mingw64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/SDL/Release/.gitignore
vendored
2
dep/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/VC/.gitignore
vendored
2
dep/VC/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/VC9/.gitignore
vendored
2
dep/VC9/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/cygwin/Debug/.gitignore
vendored
2
dep/cygwin/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/cygwin/Release/.gitignore
vendored
2
dep/cygwin/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
dep/dummy/.gitignore
vendored
2
dep/dummy/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
|
@ -640,6 +640,39 @@ linedeftypes
|
||||||
prefix = "(63)";
|
prefix = "(63)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
96
|
||||||
|
{
|
||||||
|
title = "Apply Tag to Tagged Sectors";
|
||||||
|
prefix = "(96)";
|
||||||
|
flags1024text = "[10] Offsets are target tags";
|
||||||
|
flags8192text = "[13] Use front side offsets";
|
||||||
|
flags32768text = "[15] Use back side offsets";
|
||||||
|
}
|
||||||
|
|
||||||
|
97
|
||||||
|
{
|
||||||
|
title = "Apply Tag to Front Sector";
|
||||||
|
prefix = "(97)";
|
||||||
|
flags8192text = "[13] Use front side offsets";
|
||||||
|
flags32768text = "[15] Use back side offsets";
|
||||||
|
}
|
||||||
|
|
||||||
|
98
|
||||||
|
{
|
||||||
|
title = "Apply Tag to Back Sector";
|
||||||
|
prefix = "(98)";
|
||||||
|
flags8192text = "[13] Use front side offsets";
|
||||||
|
flags32768text = "[15] Use back side offsets";
|
||||||
|
}
|
||||||
|
|
||||||
|
99
|
||||||
|
{
|
||||||
|
title = "Apply Tag to Front and Back Sectors";
|
||||||
|
prefix = "(99)";
|
||||||
|
flags8192text = "[13] Use front side offsets";
|
||||||
|
flags32768text = "[15] Use back side offsets";
|
||||||
|
}
|
||||||
|
|
||||||
540
|
540
|
||||||
{
|
{
|
||||||
title = "Floor Friction";
|
title = "Floor Friction";
|
||||||
|
@ -3059,6 +3092,78 @@ linedeftypes
|
||||||
slopeargs = 3;
|
slopeargs = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
723
|
||||||
|
{
|
||||||
|
title = "Copy Backside Floor Slope from Line Tag";
|
||||||
|
prefix = "(720)";
|
||||||
|
slope = "copy";
|
||||||
|
slopeargs = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
724
|
||||||
|
{
|
||||||
|
title = "Copy Backside Ceiling Slope from Line Tag";
|
||||||
|
prefix = "(721)";
|
||||||
|
slope = "copy";
|
||||||
|
slopeargs = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
725
|
||||||
|
{
|
||||||
|
title = "Copy Backside Floor and Ceiling Slope from Line Tag";
|
||||||
|
prefix = "(722)";
|
||||||
|
slope = "copy";
|
||||||
|
slopeargs = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
730
|
||||||
|
{
|
||||||
|
title = "Copy Frontside Floor Slope to Backside";
|
||||||
|
prefix = "(730)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
731
|
||||||
|
{
|
||||||
|
title = "Copy Frontside Ceiling Slope to Backside";
|
||||||
|
prefix = "(731)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
732
|
||||||
|
{
|
||||||
|
title = "Copy Frontside Floor and Ceiling Slope to Backside";
|
||||||
|
prefix = "(732)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
733
|
||||||
|
{
|
||||||
|
title = "Copy Backside Floor Slope to Frontside";
|
||||||
|
prefix = "(733)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
734
|
||||||
|
{
|
||||||
|
title = "Copy Backside Ceiling Slope to Frontside";
|
||||||
|
prefix = "(734)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
735
|
||||||
|
{
|
||||||
|
title = "Copy Backside Floor and Ceiling Slope to Frontside";
|
||||||
|
prefix = "(735)";
|
||||||
|
slope = "copy";
|
||||||
|
copyslopeargs = 10;
|
||||||
|
}
|
||||||
|
|
||||||
799
|
799
|
||||||
{
|
{
|
||||||
title = "Set Tagged Dynamic Slope Vertex to Front Sector Height";
|
title = "Set Tagged Dynamic Slope Vertex to Front Sector Height";
|
||||||
|
@ -3484,6 +3589,7 @@ thingtypes
|
||||||
sprite = "ARCHA1";
|
sprite = "ARCHA1";
|
||||||
width = 24;
|
width = 24;
|
||||||
height = 32;
|
height = 32;
|
||||||
|
flags8text = "[8] Don't jump away";
|
||||||
}
|
}
|
||||||
118
|
118
|
||||||
{
|
{
|
||||||
|
|
8
objs/.gitignore
vendored
8
objs/.gitignore
vendored
|
@ -1,8 +0,0 @@
|
||||||
#All folders
|
|
||||||
SRB2.res
|
|
||||||
depend.dep
|
|
||||||
depend.ped
|
|
||||||
*.o
|
|
||||||
#VC9 folder only
|
|
||||||
/VC9/Win32
|
|
||||||
/VC9/x64
|
|
2
objs/FreeBSD/SDL/Debug/.gitignore
vendored
2
objs/FreeBSD/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/FreeBSD/SDL/Release/.gitignore
vendored
2
objs/FreeBSD/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Linux/SDL/Debug/.gitignore
vendored
2
objs/Linux/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Linux/SDL/Release/.gitignore
vendored
2
objs/Linux/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Linux64/SDL/Debug/.gitignore
vendored
2
objs/Linux64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Linux64/SDL/Release/.gitignore
vendored
2
objs/Linux64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/MasterClient/.gitignore
vendored
2
objs/MasterClient/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/MasterServer/.gitignore
vendored
2
objs/MasterServer/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw/Debug/.gitignore
vendored
2
objs/Mingw/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw/Release/.gitignore
vendored
2
objs/Mingw/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw/SDL/Debug/.gitignore
vendored
2
objs/Mingw/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw/SDL/Release/.gitignore
vendored
2
objs/Mingw/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw64/Debug/.gitignore
vendored
2
objs/Mingw64/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw64/Release/.gitignore
vendored
2
objs/Mingw64/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw64/SDL/Debug/.gitignore
vendored
2
objs/Mingw64/SDL/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/Mingw64/SDL/Release/.gitignore
vendored
2
objs/Mingw64/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/SDL/Release/.gitignore
vendored
2
objs/SDL/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/VC/.gitignore
vendored
2
objs/VC/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/VC9/.gitignore
vendored
2
objs/VC9/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/cygwin/Debug/.gitignore
vendored
2
objs/cygwin/Debug/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/cygwin/Release/.gitignore
vendored
2
objs/cygwin/Release/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
2
objs/dummy/.gitignore
vendored
2
objs/dummy/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
# DON'T REMOVE
|
|
||||||
# This keeps the folder from disappearing
|
|
|
@ -1,238 +1,14 @@
|
||||||
# SRB2 Core
|
# SRB2 Core
|
||||||
|
|
||||||
|
add_executable(SRB2SDL2 MACOSX_BUNDLE WIN32)
|
||||||
|
|
||||||
# Core sources
|
# Core sources
|
||||||
set(SRB2_CORE_SOURCES
|
target_sourcefile(c)
|
||||||
am_map.c
|
target_sources(SRB2SDL2 PRIVATE comptime.c md5.c config.h.in)
|
||||||
b_bot.c
|
|
||||||
command.c
|
|
||||||
comptime.c
|
|
||||||
console.c
|
|
||||||
d_clisrv.c
|
|
||||||
d_main.c
|
|
||||||
d_net.c
|
|
||||||
d_netcmd.c
|
|
||||||
d_netfil.c
|
|
||||||
dehacked.c
|
|
||||||
deh_soc.c
|
|
||||||
deh_lua.c
|
|
||||||
deh_tables.c
|
|
||||||
f_finale.c
|
|
||||||
f_wipe.c
|
|
||||||
filesrch.c
|
|
||||||
g_demo.c
|
|
||||||
g_game.c
|
|
||||||
g_input.c
|
|
||||||
hu_stuff.c
|
|
||||||
i_tcp.c
|
|
||||||
info.c
|
|
||||||
lzf.c
|
|
||||||
m_aatree.c
|
|
||||||
m_anigif.c
|
|
||||||
m_argv.c
|
|
||||||
m_bbox.c
|
|
||||||
m_cheat.c
|
|
||||||
m_cond.c
|
|
||||||
m_fixed.c
|
|
||||||
m_menu.c
|
|
||||||
m_misc.c
|
|
||||||
m_perfstats.c
|
|
||||||
m_queue.c
|
|
||||||
m_random.c
|
|
||||||
md5.c
|
|
||||||
mserv.c
|
|
||||||
http-mserv.c
|
|
||||||
s_sound.c
|
|
||||||
screen.c
|
|
||||||
sounds.c
|
|
||||||
st_stuff.c
|
|
||||||
#string.c
|
|
||||||
tables.c
|
|
||||||
v_video.c
|
|
||||||
w_wad.c
|
|
||||||
y_inter.c
|
|
||||||
z_zone.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_CORE_HEADERS
|
set(SRB2_ASM_SOURCES vid_copy.s)
|
||||||
am_map.h
|
|
||||||
b_bot.h
|
|
||||||
byteptr.h
|
|
||||||
command.h
|
|
||||||
console.h
|
|
||||||
d_clisrv.h
|
|
||||||
d_event.h
|
|
||||||
d_main.h
|
|
||||||
d_net.h
|
|
||||||
d_netcmd.h
|
|
||||||
d_netfil.h
|
|
||||||
d_player.h
|
|
||||||
d_think.h
|
|
||||||
d_ticcmd.h
|
|
||||||
dehacked.h
|
|
||||||
deh_soc.h
|
|
||||||
deh_lua.h
|
|
||||||
deh_tables.h
|
|
||||||
doomdata.h
|
|
||||||
doomdef.h
|
|
||||||
doomstat.h
|
|
||||||
doomtype.h
|
|
||||||
endian.h
|
|
||||||
f_finale.h
|
|
||||||
fastcmp.h
|
|
||||||
filesrch.h
|
|
||||||
g_demo.h
|
|
||||||
g_game.h
|
|
||||||
g_input.h
|
|
||||||
g_state.h
|
|
||||||
hu_stuff.h
|
|
||||||
i_joy.h
|
|
||||||
i_net.h
|
|
||||||
i_sound.h
|
|
||||||
i_system.h
|
|
||||||
i_tcp.h
|
|
||||||
i_video.h
|
|
||||||
info.h
|
|
||||||
keys.h
|
|
||||||
lzf.h
|
|
||||||
m_aatree.h
|
|
||||||
m_anigif.h
|
|
||||||
m_argv.h
|
|
||||||
m_bbox.h
|
|
||||||
m_cheat.h
|
|
||||||
m_cond.h
|
|
||||||
m_dllist.h
|
|
||||||
m_fixed.h
|
|
||||||
m_menu.h
|
|
||||||
m_misc.h
|
|
||||||
m_perfstats.h
|
|
||||||
m_queue.h
|
|
||||||
m_random.h
|
|
||||||
m_swap.h
|
|
||||||
md5.h
|
|
||||||
mserv.h
|
|
||||||
p5prof.h
|
|
||||||
s_sound.h
|
|
||||||
screen.h
|
|
||||||
sounds.h
|
|
||||||
st_stuff.h
|
|
||||||
tables.h
|
|
||||||
v_video.h
|
|
||||||
w_wad.h
|
|
||||||
y_inter.h
|
|
||||||
z_zone.h
|
|
||||||
|
|
||||||
config.h.in
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_CORE_RENDER_SOURCES
|
|
||||||
r_bsp.c
|
|
||||||
r_data.c
|
|
||||||
r_draw.c
|
|
||||||
r_main.c
|
|
||||||
r_plane.c
|
|
||||||
r_segs.c
|
|
||||||
r_skins.c
|
|
||||||
r_sky.c
|
|
||||||
r_splats.c
|
|
||||||
r_things.c
|
|
||||||
r_textures.c
|
|
||||||
r_patch.c
|
|
||||||
r_patchrotation.c
|
|
||||||
r_picformats.c
|
|
||||||
r_portal.c
|
|
||||||
|
|
||||||
r_bsp.h
|
|
||||||
r_data.h
|
|
||||||
r_defs.h
|
|
||||||
r_draw.h
|
|
||||||
r_local.h
|
|
||||||
r_main.h
|
|
||||||
r_plane.h
|
|
||||||
r_segs.h
|
|
||||||
r_skins.h
|
|
||||||
r_sky.h
|
|
||||||
r_splats.h
|
|
||||||
r_state.h
|
|
||||||
r_things.h
|
|
||||||
r_textures.h
|
|
||||||
r_patch.h
|
|
||||||
r_patchrotation.h
|
|
||||||
r_picformats.h
|
|
||||||
r_portal.h
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_CORE_GAME_SOURCES
|
|
||||||
p_ceilng.c
|
|
||||||
p_enemy.c
|
|
||||||
p_floor.c
|
|
||||||
p_inter.c
|
|
||||||
p_lights.c
|
|
||||||
p_map.c
|
|
||||||
p_maputl.c
|
|
||||||
p_mobj.c
|
|
||||||
p_polyobj.c
|
|
||||||
p_saveg.c
|
|
||||||
p_setup.c
|
|
||||||
p_sight.c
|
|
||||||
p_slopes.c
|
|
||||||
p_spec.c
|
|
||||||
p_telept.c
|
|
||||||
p_tick.c
|
|
||||||
p_user.c
|
|
||||||
taglist.c
|
|
||||||
|
|
||||||
p_local.h
|
|
||||||
p_maputl.h
|
|
||||||
p_mobj.h
|
|
||||||
p_polyobj.h
|
|
||||||
p_pspr.h
|
|
||||||
p_saveg.h
|
|
||||||
p_setup.h
|
|
||||||
p_slopes.h
|
|
||||||
p_spec.h
|
|
||||||
p_tick.h
|
|
||||||
taglist.h
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
|
||||||
set(SRB2_CORE_SOURCES ${SRB2_CORE_SOURCES} string.c)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
prepend_sources(SRB2_CORE_SOURCES)
|
|
||||||
prepend_sources(SRB2_CORE_HEADERS)
|
|
||||||
prepend_sources(SRB2_CORE_RENDER_SOURCES)
|
|
||||||
prepend_sources(SRB2_CORE_GAME_SOURCES)
|
|
||||||
|
|
||||||
set(SRB2_CORE_HEADERS ${SRB2_CORE_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
|
||||||
source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS})
|
|
||||||
source_group("Renderer" FILES ${SRB2_CORE_RENDER_SOURCES})
|
|
||||||
source_group("Game" FILES ${SRB2_CORE_GAME_SOURCES})
|
|
||||||
|
|
||||||
|
|
||||||
set(SRB2_ASM_SOURCES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vid_copy.s
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_NASM_SOURCES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/tmap_mmx.nas
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/tmap.nas
|
|
||||||
)
|
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
list(APPEND SRB2_NASM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/tmap_vc.nas)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(SRB2_NASM_OBJECTS
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/tmap_mmx.obj
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/tmap.obj
|
|
||||||
)
|
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
list(APPEND SRB2_NASM_OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/tmap_vc.obj)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
source_group("Assembly" FILES ${SRB2_ASM_SOURCES} ${SRB2_NASM_SOURCES})
|
|
||||||
|
|
||||||
|
set(SRB2_NASM_SOURCES tmap_mmx.nas tmap.nas)
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
set(SRB2_CONFIG_HAVE_PNG ON CACHE BOOL
|
set(SRB2_CONFIG_HAVE_PNG ON CACHE BOOL
|
||||||
|
@ -268,92 +44,7 @@ if(${CMAKE_SYSTEM} MATCHES "Windows") ###set on Windows only
|
||||||
"Use SRB2's internal copies of required dependencies (SDL2, PNG, zlib, GME, OpenMPT).")
|
"Use SRB2's internal copies of required dependencies (SDL2, PNG, zlib, GME, OpenMPT).")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SRB2_LUA_SOURCES
|
add_subdirectory(blua)
|
||||||
lua_baselib.c
|
|
||||||
lua_blockmaplib.c
|
|
||||||
lua_consolelib.c
|
|
||||||
lua_hooklib.c
|
|
||||||
lua_hudlib.c
|
|
||||||
lua_infolib.c
|
|
||||||
lua_maplib.c
|
|
||||||
lua_taglib.c
|
|
||||||
lua_mathlib.c
|
|
||||||
lua_mobjlib.c
|
|
||||||
lua_playerlib.c
|
|
||||||
lua_polyobjlib.c
|
|
||||||
lua_script.c
|
|
||||||
lua_skinlib.c
|
|
||||||
lua_thinkerlib.c
|
|
||||||
)
|
|
||||||
set(SRB2_LUA_HEADERS
|
|
||||||
lua_hook.h
|
|
||||||
lua_hud.h
|
|
||||||
lua_libs.h
|
|
||||||
lua_script.h
|
|
||||||
)
|
|
||||||
|
|
||||||
prepend_sources(SRB2_LUA_SOURCES)
|
|
||||||
prepend_sources(SRB2_LUA_HEADERS)
|
|
||||||
|
|
||||||
source_group("LUA" FILES ${SRB2_LUA_SOURCES} ${SRB2_LUA_HEADERS})
|
|
||||||
|
|
||||||
set(SRB2_BLUA_SOURCES
|
|
||||||
blua/lapi.c
|
|
||||||
blua/lauxlib.c
|
|
||||||
blua/lbaselib.c
|
|
||||||
blua/lcode.c
|
|
||||||
blua/ldebug.c
|
|
||||||
blua/ldo.c
|
|
||||||
blua/ldump.c
|
|
||||||
blua/lfunc.c
|
|
||||||
blua/lgc.c
|
|
||||||
blua/linit.c
|
|
||||||
blua/liolib.c
|
|
||||||
blua/llex.c
|
|
||||||
blua/lmem.c
|
|
||||||
blua/lobject.c
|
|
||||||
blua/lopcodes.c
|
|
||||||
blua/lparser.c
|
|
||||||
blua/lstate.c
|
|
||||||
blua/lstring.c
|
|
||||||
blua/lstrlib.c
|
|
||||||
blua/ltable.c
|
|
||||||
blua/ltablib.c
|
|
||||||
blua/ltm.c
|
|
||||||
blua/lundump.c
|
|
||||||
blua/lvm.c
|
|
||||||
blua/lzio.c
|
|
||||||
)
|
|
||||||
set(SRB2_BLUA_HEADERS
|
|
||||||
blua/lapi.h
|
|
||||||
blua/lauxlib.h
|
|
||||||
blua/lcode.h
|
|
||||||
blua/ldebug.h
|
|
||||||
blua/ldo.h
|
|
||||||
blua/lfunc.h
|
|
||||||
blua/lgc.h
|
|
||||||
blua/llex.h
|
|
||||||
blua/llimits.h
|
|
||||||
blua/lmem.h
|
|
||||||
blua/lobject.h
|
|
||||||
blua/lopcodes.h
|
|
||||||
blua/lparser.h
|
|
||||||
blua/lstate.h
|
|
||||||
blua/lstring.h
|
|
||||||
blua/ltable.h
|
|
||||||
blua/ltm.h
|
|
||||||
blua/lua.h
|
|
||||||
blua/luaconf.h
|
|
||||||
blua/lualib.h
|
|
||||||
blua/lundump.h
|
|
||||||
blua/lvm.h
|
|
||||||
blua/lzio.h
|
|
||||||
)
|
|
||||||
|
|
||||||
prepend_sources(SRB2_BLUA_SOURCES)
|
|
||||||
prepend_sources(SRB2_BLUA_HEADERS)
|
|
||||||
|
|
||||||
source_group("LUA\\Interpreter" FILES ${SRB2_BLUA_SOURCES} ${SRB2_BLUA_HEADERS})
|
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HAVE_GME})
|
if(${SRB2_CONFIG_HAVE_GME})
|
||||||
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
|
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
|
||||||
|
@ -369,7 +60,7 @@ if(${SRB2_CONFIG_HAVE_GME})
|
||||||
endif()
|
endif()
|
||||||
if(${GME_FOUND})
|
if(${GME_FOUND})
|
||||||
set(SRB2_HAVE_GME ON)
|
set(SRB2_HAVE_GME ON)
|
||||||
add_definitions(-DHAVE_LIBGME)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_LIBGME)
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that GME is available but it was not found.")
|
message(WARNING "You have specified that GME is available but it was not found.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -389,7 +80,7 @@ if(${SRB2_CONFIG_HAVE_OPENMPT})
|
||||||
endif()
|
endif()
|
||||||
if(${OPENMPT_FOUND})
|
if(${OPENMPT_FOUND})
|
||||||
set(SRB2_HAVE_OPENMPT ON)
|
set(SRB2_HAVE_OPENMPT ON)
|
||||||
add_definitions(-DHAVE_OPENMPT)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENMPT)
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that OpenMPT is available but it was not found.")
|
message(WARNING "You have specified that OpenMPT is available but it was not found.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -412,8 +103,7 @@ if(${SRB2_CONFIG_HAVE_MIXERX})
|
||||||
endif()
|
endif()
|
||||||
if(${MIXERX_FOUND})
|
if(${MIXERX_FOUND})
|
||||||
set(SRB2_HAVE_MIXERX ON)
|
set(SRB2_HAVE_MIXERX ON)
|
||||||
set(SRB2_SDL2_SOUNDIMPL mixer_sound.c)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXERX)
|
||||||
add_definitions(-DHAVE_MIXERX)
|
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that SDL Mixer X is available but it was not found.")
|
message(WARNING "You have specified that SDL Mixer X is available but it was not found.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -433,7 +123,7 @@ if(${SRB2_CONFIG_HAVE_ZLIB})
|
||||||
endif()
|
endif()
|
||||||
if(${ZLIB_FOUND})
|
if(${ZLIB_FOUND})
|
||||||
set(SRB2_HAVE_ZLIB ON)
|
set(SRB2_HAVE_ZLIB ON)
|
||||||
add_definitions(-DHAVE_ZLIB)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_ZLIB)
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that ZLIB is available but it was not found. SRB2 may not compile correctly.")
|
message(WARNING "You have specified that ZLIB is available but it was not found. SRB2 may not compile correctly.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -454,14 +144,9 @@ if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB})
|
||||||
endif()
|
endif()
|
||||||
if(${PNG_FOUND})
|
if(${PNG_FOUND})
|
||||||
set(SRB2_HAVE_PNG ON)
|
set(SRB2_HAVE_PNG ON)
|
||||||
add_definitions(-DHAVE_PNG)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_PNG)
|
||||||
add_definitions(-D_LARGEFILE64_SOURCE)
|
target_compile_definitions(SRB2SDL2 PRIVATE -D_LARGEFILE64_SOURCE)
|
||||||
set(SRB2_PNG_SOURCES apng.c)
|
target_sources(SRB2SDL2 PRIVATE apng.c)
|
||||||
set(SRB2_PNG_HEADERS apng.h)
|
|
||||||
prepend_sources(SRB2_PNG_SOURCES)
|
|
||||||
prepend_sources(SRB2_PNG_HEADERS)
|
|
||||||
source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS}
|
|
||||||
${SRB2_PNG_SOURCES} ${SRB2_PNG_HEADERS})
|
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that PNG is available but it was not found. SRB2 may not compile correctly.")
|
message(WARNING "You have specified that PNG is available but it was not found. SRB2 may not compile correctly.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -482,7 +167,7 @@ if(${SRB2_CONFIG_HAVE_CURL})
|
||||||
endif()
|
endif()
|
||||||
if(${CURL_FOUND})
|
if(${CURL_FOUND})
|
||||||
set(SRB2_HAVE_CURL ON)
|
set(SRB2_HAVE_CURL ON)
|
||||||
add_definitions(-DHAVE_CURL)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_CURL)
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that CURL is available but it was not found. SRB2 may not compile correctly.")
|
message(WARNING "You have specified that CURL is available but it was not found. SRB2 may not compile correctly.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -490,59 +175,19 @@ endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HAVE_THREADS})
|
if(${SRB2_CONFIG_HAVE_THREADS})
|
||||||
set(SRB2_HAVE_THREADS ON)
|
set(SRB2_HAVE_THREADS ON)
|
||||||
set(SRB2_CORE_HEADERS ${SRB2_CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/i_threads.h)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS)
|
||||||
add_definitions(-DHAVE_THREADS)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HWRENDER})
|
if(${SRB2_CONFIG_HWRENDER})
|
||||||
add_definitions(-DHWRENDER)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHWRENDER)
|
||||||
set(SRB2_HWRENDER_SOURCES
|
add_subdirectory(hardware)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_batching.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_bsp.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_cache.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_clip.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_draw.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_light.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_main.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md2.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md2load.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md3load.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_model.c
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/u_list.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set (SRB2_HWRENDER_HEADERS
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_batching.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_clip.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_data.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_defs.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_dll.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_drv.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_glob.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_light.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_main.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md2.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md2load.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_md3load.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/hw_model.h
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/u_list.h
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_R_OPENGL_SOURCES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/r_opengl/r_opengl.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_R_OPENGL_HEADERS
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/hardware/r_opengl/r_opengl.h
|
|
||||||
)
|
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HWRENDER} AND ${SRB2_CONFIG_STATIC_OPENGL})
|
if(${SRB2_CONFIG_HWRENDER} AND ${SRB2_CONFIG_STATIC_OPENGL})
|
||||||
find_package(OpenGL)
|
find_package(OpenGL)
|
||||||
if(${OPENGL_FOUND})
|
if(${OPENGL_FOUND})
|
||||||
add_definitions(-DHWRENDER)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHWRENDER)
|
||||||
add_definitions(-DSTATIC_OPENGL)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DSTATIC_OPENGL)
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified static opengl but opengl was not found. Not setting HWRENDER.")
|
message(WARNING "You have specified static opengl but opengl was not found. Not setting HWRENDER.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -563,12 +208,16 @@ if(${SRB2_CONFIG_USEASM})
|
||||||
set(CMAKE_ASM_NASM_FLAGS "${SRB2_ASM_FLAGS}" CACHE STRING "Flags used by the assembler during all build types.")
|
set(CMAKE_ASM_NASM_FLAGS "${SRB2_ASM_FLAGS}" CACHE STRING "Flags used by the assembler during all build types.")
|
||||||
enable_language(ASM_NASM)
|
enable_language(ASM_NASM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SRB2_USEASM ON)
|
set(SRB2_USEASM ON)
|
||||||
add_definitions(-DUSEASM)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DUSEASM)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3 -mfpmath=sse")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3 -mfpmath=sse")
|
||||||
|
|
||||||
|
target_sources(SRB2SDL2 PRIVATE ${SRB2_ASM_SOURCES}
|
||||||
|
${SRB2_NASM_SOURCES})
|
||||||
else()
|
else()
|
||||||
set(SRB2_USEASM OFF)
|
set(SRB2_USEASM OFF)
|
||||||
add_definitions(-DNONX86 -DNORUSEASM)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DNONX86 -DNORUSEASM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Targets
|
# Targets
|
||||||
|
@ -604,7 +253,9 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-absolute-value)
|
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-absolute-value)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DCMAKECONFIG)
|
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-trigraphs)
|
||||||
|
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DCMAKECONFIG)
|
||||||
|
|
||||||
#add_library(SRB2Core STATIC
|
#add_library(SRB2Core STATIC
|
||||||
# ${SRB2_CORE_SOURCES}
|
# ${SRB2_CORE_SOURCES}
|
||||||
|
|
1101
src/Makefile
1101
src/Makefile
File diff suppressed because it is too large
Load diff
478
src/Makefile.cfg
478
src/Makefile.cfg
|
@ -1,478 +0,0 @@
|
||||||
# vim: ft=make
|
|
||||||
#
|
|
||||||
# Makefile.cfg for SRB2
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# GNU compiler & tools' flags
|
|
||||||
# and other things
|
|
||||||
#
|
|
||||||
|
|
||||||
# See the following variable don't start with 'GCC'. This is
|
|
||||||
# to avoid a false positive with the version detection...
|
|
||||||
|
|
||||||
SUPPORTED_GCC_VERSIONS:=\
|
|
||||||
101 102\
|
|
||||||
91 92 93\
|
|
||||||
81 82 83 84\
|
|
||||||
71 72 73 74 75\
|
|
||||||
61 62 63 64\
|
|
||||||
51 52 53 54 55\
|
|
||||||
40 41 42 43 44 45 46 47 48 49
|
|
||||||
|
|
||||||
LATEST_GCC_VERSION=10.2
|
|
||||||
|
|
||||||
# gcc or g++
|
|
||||||
ifdef PREFIX
|
|
||||||
CC=$(PREFIX)-gcc
|
|
||||||
CXX=$(PREFIX)-g++
|
|
||||||
OBJCOPY=$(PREFIX)-objcopy
|
|
||||||
OBJDUMP=$(PREFIX)-objdump
|
|
||||||
STRIP=$(PREFIX)-strip
|
|
||||||
WINDRES=$(PREFIX)-windres
|
|
||||||
else
|
|
||||||
OBJCOPY=objcopy
|
|
||||||
OBJDUMP=objdump
|
|
||||||
STRIP=strip
|
|
||||||
WINDRES=windres
|
|
||||||
endif
|
|
||||||
|
|
||||||
# because Apple screws with us on this
|
|
||||||
# need to get bintools from homebrew
|
|
||||||
ifdef MACOSX
|
|
||||||
CC=clang
|
|
||||||
CXX=clang
|
|
||||||
OBJCOPY=gobjcopy
|
|
||||||
OBJDUMP=gobjdump
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Automatically set version flag, but not if one was manually set
|
|
||||||
# And don't bother if this is a clean only run
|
|
||||||
ifeq (,$(filter GCC% CLEANONLY,$(.VARIABLES)))
|
|
||||||
version:=$(shell $(CC) --version)
|
|
||||||
# check if this is in fact GCC
|
|
||||||
ifneq (,$(or $(findstring gcc,$(version)),$(findstring GCC,$(version))))
|
|
||||||
version:=$(shell $(CC) -dumpversion)
|
|
||||||
|
|
||||||
# Turn version into words of major, minor
|
|
||||||
v:=$(subst ., ,$(version))
|
|
||||||
# concat. major minor
|
|
||||||
v:=$(word 1,$(v))$(word 2,$(v))
|
|
||||||
|
|
||||||
# If this version is not in the list, default to the latest supported
|
|
||||||
ifeq (,$(filter $(v),$(SUPPORTED_GCC_VERSIONS)))
|
|
||||||
define line =
|
|
||||||
Your compiler version, GCC $(version), is not supported by the Makefile.
|
|
||||||
The Makefile will assume GCC $(LATEST_GCC_VERSION).))
|
|
||||||
endef
|
|
||||||
$(call print,$(line))
|
|
||||||
GCC$(subst .,,$(LATEST_GCC_VERSION))=1
|
|
||||||
else
|
|
||||||
$(call print,Detected GCC $(version) (GCC$(v)))
|
|
||||||
GCC$(v)=1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC102
|
|
||||||
GCC101=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC101
|
|
||||||
GCC93=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC93
|
|
||||||
GCC92=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC92
|
|
||||||
GCC91=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC91
|
|
||||||
GCC84=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC84
|
|
||||||
GCC83=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC83
|
|
||||||
GCC82=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC82
|
|
||||||
GCC81=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC81
|
|
||||||
GCC75=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC75
|
|
||||||
GCC74=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC74
|
|
||||||
GCC73=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC73
|
|
||||||
GCC72=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC72
|
|
||||||
GCC71=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC71
|
|
||||||
GCC64=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC64
|
|
||||||
GCC63=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC63
|
|
||||||
GCC62=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC62
|
|
||||||
GCC61=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC61
|
|
||||||
GCC55=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC55
|
|
||||||
GCC54=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC54
|
|
||||||
GCC53=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC53
|
|
||||||
GCC52=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC52
|
|
||||||
GCC51=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC51
|
|
||||||
GCC49=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC49
|
|
||||||
GCC48=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC48
|
|
||||||
GCC47=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC47
|
|
||||||
GCC46=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC46
|
|
||||||
GCC45=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC45
|
|
||||||
GCC44=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC44
|
|
||||||
GCC43=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC43
|
|
||||||
GCC42=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC42
|
|
||||||
GCC41=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC41
|
|
||||||
GCC40=1
|
|
||||||
VCHELP=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef GCC295
|
|
||||||
GCC29=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
OLDWFLAGS:=$(WFLAGS)
|
|
||||||
# -W -Wno-unused
|
|
||||||
WFLAGS=-Wall
|
|
||||||
ifndef GCC295
|
|
||||||
#WFLAGS+=-Wno-packed
|
|
||||||
endif
|
|
||||||
ifndef RELAXWARNINGS
|
|
||||||
WFLAGS+=-W
|
|
||||||
#WFLAGS+=-Wno-sign-compare
|
|
||||||
ifndef GCC295
|
|
||||||
WFLAGS+=-Wno-div-by-zero
|
|
||||||
endif
|
|
||||||
#WFLAGS+=-Wsystem-headers
|
|
||||||
WFLAGS+=-Wfloat-equal
|
|
||||||
#WFLAGS+=-Wtraditional
|
|
||||||
ifdef VCHELP
|
|
||||||
WFLAGS+=-Wdeclaration-after-statement
|
|
||||||
WFLAGS+=-Wno-error=declaration-after-statement
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wundef
|
|
||||||
ifndef GCC295
|
|
||||||
WFLAGS+=-Wendif-labels
|
|
||||||
endif
|
|
||||||
ifdef GCC41
|
|
||||||
WFLAGS+=-Wshadow
|
|
||||||
endif
|
|
||||||
#WFLAGS+=-Wlarger-than-%len%
|
|
||||||
WFLAGS+=-Wpointer-arith -Wbad-function-cast
|
|
||||||
ifdef GCC45
|
|
||||||
#WFLAGS+=-Wc++-compat
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wcast-qual
|
|
||||||
ifndef NOCASTALIGNWARN
|
|
||||||
WFLAGS+=-Wcast-align
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wwrite-strings
|
|
||||||
ifndef ERRORMODE
|
|
||||||
#WFLAGS+=-Wconversion
|
|
||||||
ifdef GCC43
|
|
||||||
#WFLAGS+=-Wno-sign-conversion
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wsign-compare
|
|
||||||
ifdef GCC91
|
|
||||||
WFLAGS+=-Wno-error=address-of-packed-member
|
|
||||||
endif
|
|
||||||
ifdef GCC45
|
|
||||||
WFLAGS+=-Wlogical-op
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Waggregate-return
|
|
||||||
ifdef HAIKU
|
|
||||||
ifdef GCC41
|
|
||||||
#WFLAGS+=-Wno-attributes
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
#WFLAGS+=-Wstrict-prototypes
|
|
||||||
ifdef GCC40
|
|
||||||
WFLAGS+=-Wold-style-definition
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wmissing-prototypes -Wmissing-declarations
|
|
||||||
ifdef GCC40
|
|
||||||
WFLAGS+=-Wmissing-field-initializers
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wmissing-noreturn
|
|
||||||
#WFLAGS+=-Wmissing-format-attribute
|
|
||||||
#WFLAGS+=-Wno-multichar
|
|
||||||
#WFLAGS+=-Wno-deprecated-declarations
|
|
||||||
#WFLAGS+=-Wpacked
|
|
||||||
#WFLAGS+=-Wpadded
|
|
||||||
#WFLAGS+=-Wredundant-decls
|
|
||||||
WFLAGS+=-Wnested-externs
|
|
||||||
#WFLAGS+=-Wunreachable-code
|
|
||||||
WFLAGS+=-Winline
|
|
||||||
ifdef GCC43
|
|
||||||
WFLAGS+=-funit-at-a-time
|
|
||||||
WFLAGS+=-Wlogical-op
|
|
||||||
endif
|
|
||||||
ifndef GCC295
|
|
||||||
WFLAGS+=-Wdisabled-optimization
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wformat-y2k
|
|
||||||
ifdef GCC71
|
|
||||||
WFLAGS+=-Wno-error=format-overflow=2
|
|
||||||
endif
|
|
||||||
WFLAGS+=-Wformat-security
|
|
||||||
ifndef GCC29
|
|
||||||
#WFLAGS+=-Winit-self
|
|
||||||
endif
|
|
||||||
ifdef GCC46
|
|
||||||
WFLAGS+=-Wno-suggest-attribute=noreturn
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef NOLDWARNING
|
|
||||||
LDFLAGS+=-Wl,--as-needed
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef ERRORMODE
|
|
||||||
WFLAGS+=-Werror
|
|
||||||
endif
|
|
||||||
|
|
||||||
WFLAGS+=$(OLDWFLAGS)
|
|
||||||
|
|
||||||
ifdef GCC43
|
|
||||||
#WFLAGS+=-Wno-error=clobbered
|
|
||||||
endif
|
|
||||||
ifdef GCC44
|
|
||||||
WFLAGS+=-Wno-error=array-bounds
|
|
||||||
endif
|
|
||||||
ifdef GCC46
|
|
||||||
WFLAGS+=-Wno-error=suggest-attribute=noreturn
|
|
||||||
endif
|
|
||||||
ifdef GCC54
|
|
||||||
WFLAGS+=-Wno-logical-op -Wno-error=logical-op
|
|
||||||
endif
|
|
||||||
ifdef GCC61
|
|
||||||
WFLAGS+=-Wno-tautological-compare -Wno-error=tautological-compare
|
|
||||||
endif
|
|
||||||
ifdef GCC71
|
|
||||||
WFLAGS+=-Wimplicit-fallthrough=4
|
|
||||||
endif
|
|
||||||
ifdef GCC81
|
|
||||||
WFLAGS+=-Wno-error=format-overflow
|
|
||||||
WFLAGS+=-Wno-error=stringop-truncation
|
|
||||||
WFLAGS+=-Wno-error=stringop-overflow
|
|
||||||
WFLAGS+=-Wno-format-overflow
|
|
||||||
WFLAGS+=-Wno-stringop-truncation
|
|
||||||
WFLAGS+=-Wno-stringop-overflow
|
|
||||||
WFLAGS+=-Wno-error=multistatement-macros
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
#indicate platform and what interface use with
|
|
||||||
ifndef LINUX
|
|
||||||
ifndef FREEBSD
|
|
||||||
ifndef CYGWIN32
|
|
||||||
ifndef MINGW
|
|
||||||
ifndef MINGW64
|
|
||||||
ifndef SDL
|
|
||||||
ifndef DUMMY
|
|
||||||
$(error No interface or platform flag defined)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
#determine the interface directory (where you put all i_*.c)
|
|
||||||
i_net_o=$(OBJDIR)/i_net.o
|
|
||||||
i_system_o=$(OBJDIR)/i_system.o
|
|
||||||
i_sound_o=$(OBJDIR)/i_sound.o
|
|
||||||
i_main_o=$(OBJDIR)/i_main.o
|
|
||||||
#set OBJDIR and BIN's starting place
|
|
||||||
OBJDIR=../objs
|
|
||||||
BIN=../bin
|
|
||||||
DEPDIR=../dep
|
|
||||||
#Nasm ASM and rm
|
|
||||||
ifdef YASM
|
|
||||||
NASM?=yasm
|
|
||||||
else
|
|
||||||
NASM?=nasm
|
|
||||||
endif
|
|
||||||
REMOVE?=rm -f
|
|
||||||
MKDIR?=mkdir -p
|
|
||||||
GZIP?=gzip
|
|
||||||
GZIP_OPTS?=-9 -f -n
|
|
||||||
GZIP_OPT2=$(GZIP_OPTS) --rsyncable
|
|
||||||
UPX?=upx
|
|
||||||
UPX_OPTS?=--best --preserve-build-id
|
|
||||||
ifndef ECHO
|
|
||||||
UPX_OPTS+=-q
|
|
||||||
endif
|
|
||||||
|
|
||||||
#Interface Setup
|
|
||||||
ifdef DUMMY
|
|
||||||
INTERFACE=dummy
|
|
||||||
OBJDIR:=$(OBJDIR)/dummy
|
|
||||||
BIN:=$(BIN)/dummy
|
|
||||||
DEPDIR:=$(DEPDIR)/dummy
|
|
||||||
else
|
|
||||||
ifdef LINUX
|
|
||||||
NASMFORMAT=elf -DLINUX
|
|
||||||
SDL=1
|
|
||||||
ifdef LINUX64
|
|
||||||
OBJDIR:=$(OBJDIR)/Linux64
|
|
||||||
BIN:=$(BIN)/Linux64
|
|
||||||
DEPDIR:=$(DEPDIR)/Linux64
|
|
||||||
else
|
|
||||||
OBJDIR:=$(OBJDIR)/Linux
|
|
||||||
BIN:=$(BIN)/Linux
|
|
||||||
DEPDIR:=$(DEPDIR)/Linux
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
ifdef FREEBSD
|
|
||||||
INTERFACE=sdl
|
|
||||||
NASMFORMAT=elf -DLINUX
|
|
||||||
SDL=1
|
|
||||||
|
|
||||||
OBJDIR:=$(OBJDIR)/FreeBSD
|
|
||||||
BIN:=$(BIN)/FreeBSD
|
|
||||||
DEPDIR:=$(DEPDIR)/Linux
|
|
||||||
else
|
|
||||||
ifdef SOLARIS
|
|
||||||
INTERFACE=sdl
|
|
||||||
NASMFORMAT=elf -DLINUX
|
|
||||||
SDL=1
|
|
||||||
|
|
||||||
OBJDIR:=$(OBJDIR)/Solaris
|
|
||||||
BIN:=$(BIN)/Solaris
|
|
||||||
DEPDIR:=$(DEPDIR)/Solaris
|
|
||||||
else
|
|
||||||
ifdef CYGWIN32
|
|
||||||
INTERFACE=sdl
|
|
||||||
NASMFORMAT=win32
|
|
||||||
SDL=1
|
|
||||||
|
|
||||||
OBJDIR:=$(OBJDIR)/cygwin
|
|
||||||
BIN:=$(BIN)/Cygwin
|
|
||||||
DEPDIR:=$(DEPDIR)/Cygwin
|
|
||||||
else
|
|
||||||
ifdef MINGW64
|
|
||||||
#NASMFORMAT=win64
|
|
||||||
SDL=1
|
|
||||||
OBJDIR:=$(OBJDIR)/Mingw64
|
|
||||||
BIN:=$(BIN)/Mingw64
|
|
||||||
DEPDIR:=$(DEPDIR)/Mingw64
|
|
||||||
else
|
|
||||||
ifdef MINGW
|
|
||||||
NASMFORMAT=win32
|
|
||||||
SDL=1
|
|
||||||
OBJDIR:=$(OBJDIR)/Mingw
|
|
||||||
BIN:=$(BIN)/Mingw
|
|
||||||
DEPDIR:=$(DEPDIR)/Mingw
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef ARCHNAME
|
|
||||||
OBJDIR:=$(OBJDIR)/$(ARCHNAME)
|
|
||||||
BIN:=$(BIN)/$(ARCHNAME)
|
|
||||||
DEPDIR:=$(DEPDIR)/$(ARCHNAME)
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJDUMP_OPTS?=--wide --source --line-numbers
|
|
||||||
LD=$(CC)
|
|
||||||
|
|
||||||
ifdef SDL
|
|
||||||
INTERFACE=sdl
|
|
||||||
OBJDIR:=$(OBJDIR)/SDL
|
|
||||||
DEPDIR:=$(DEPDIR)/SDL
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef DUMMY
|
|
||||||
ifdef DEBUGMODE
|
|
||||||
OBJDIR:=$(OBJDIR)/Debug
|
|
||||||
BIN:=$(BIN)/Debug
|
|
||||||
DEPDIR:=$(DEPDIR)/Debug
|
|
||||||
else
|
|
||||||
OBJDIR:=$(OBJDIR)/Release
|
|
||||||
BIN:=$(BIN)/Release
|
|
||||||
DEPDIR:=$(DEPDIR)/Release
|
|
||||||
endif
|
|
||||||
endif
|
|
103
src/Makefile.d/detect.mk
Normal file
103
src/Makefile.d/detect.mk
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
#
|
||||||
|
# Detect the host system and compiler version.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Previously featured:\
|
||||||
|
PANDORA\
|
||||||
|
HAIKU\
|
||||||
|
DUMMY\
|
||||||
|
DJGPPDOS\
|
||||||
|
SOLARIS\
|
||||||
|
MACOSX\
|
||||||
|
|
||||||
|
all_systems:=\
|
||||||
|
LINUX64\
|
||||||
|
MINGW64\
|
||||||
|
MINGW\
|
||||||
|
UNIX\
|
||||||
|
LINUX\
|
||||||
|
FREEBSD\
|
||||||
|
SDL\
|
||||||
|
|
||||||
|
# check for user specified system
|
||||||
|
ifeq (,$(filter $(all_systems),$(.VARIABLES)))
|
||||||
|
ifeq ($(OS),Windows_NT) # all windows are Windows_NT...
|
||||||
|
|
||||||
|
_m=Detected a Windows system,\
|
||||||
|
compiling for 32-bit MinGW SDL...)
|
||||||
|
$(call Print,$(_m))
|
||||||
|
|
||||||
|
# go for a 32-bit sdl mingw exe by default
|
||||||
|
MINGW:=1
|
||||||
|
|
||||||
|
else # if you on the *nix
|
||||||
|
|
||||||
|
system:=$(shell uname -s)
|
||||||
|
|
||||||
|
ifeq ($(system),Linux)
|
||||||
|
new_system:=LINUX
|
||||||
|
else
|
||||||
|
|
||||||
|
$(error \
|
||||||
|
Could not automatically detect your system,\
|
||||||
|
try specifying a system manually)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(shell getconf LONG_BIT),64)
|
||||||
|
system+=64-bit
|
||||||
|
new_system:=$(new_system)64
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(call Print,Detected $(system) ($(new_system))...)
|
||||||
|
$(new_system):=1
|
||||||
|
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# This must have high to low order.
|
||||||
|
gcc_versions:=\
|
||||||
|
102 101\
|
||||||
|
93 92 91\
|
||||||
|
84 83 82 81\
|
||||||
|
75 74 73 72 71\
|
||||||
|
64 63 62 61\
|
||||||
|
55 54 53 52 51\
|
||||||
|
49 48 47 46 45 44 43 42 41 40
|
||||||
|
|
||||||
|
latest_gcc_version:=10.2
|
||||||
|
|
||||||
|
# Automatically set version flag, but not if one was
|
||||||
|
# manually set. And don't bother if this is a clean only
|
||||||
|
# run.
|
||||||
|
ifeq (,$(call Wildvar,GCC% destructive))
|
||||||
|
version:=$(shell $(CC) --version)
|
||||||
|
|
||||||
|
# check if this is in fact GCC
|
||||||
|
ifneq (,$(or $(findstring gcc,$(version)),\
|
||||||
|
$(findstring GCC,$(version))))
|
||||||
|
|
||||||
|
version:=$(shell $(CC) -dumpversion)
|
||||||
|
|
||||||
|
# Turn version into words of major, minor
|
||||||
|
v:=$(subst ., ,$(version))
|
||||||
|
# concat. major minor
|
||||||
|
v:=$(word 1,$(v))$(word 2,$(v))
|
||||||
|
|
||||||
|
# If this version is not in the list,
|
||||||
|
# default to the latest supported
|
||||||
|
ifeq (,$(filter $(v),$(gcc_versions)))
|
||||||
|
define line =
|
||||||
|
Your compiler version, GCC $(version), \
|
||||||
|
is not supported by the Makefile.
|
||||||
|
The Makefile will assume GCC $(latest_gcc_version).
|
||||||
|
endef
|
||||||
|
$(call Print,$(line))
|
||||||
|
GCC$(subst .,,$(latest_gcc_version)):=1
|
||||||
|
else
|
||||||
|
$(call Print,Detected GCC $(version) (GCC$(v)))
|
||||||
|
GCC$(v):=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
endif
|
75
src/Makefile.d/features.mk
Normal file
75
src/Makefile.d/features.mk
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#
|
||||||
|
# Makefile for feature flags.
|
||||||
|
#
|
||||||
|
|
||||||
|
passthru_opts+=\
|
||||||
|
NONET NO_IPV6 NOHW NOMD5 NOPOSTPROCESSING\
|
||||||
|
MOBJCONSISTANCY PACKETDROP ZDEBUG\
|
||||||
|
HAVE_MINIUPNPC\
|
||||||
|
|
||||||
|
# build with debugging information
|
||||||
|
ifdef DEBUGMODE
|
||||||
|
PACKETDROP=1
|
||||||
|
opts+=-DPARANOIA -DRANGECHECK
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOHW
|
||||||
|
opts+=-DHWRENDER
|
||||||
|
sources+=$(call List,hardware/Sourcefile)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOASM
|
||||||
|
ifndef NONX86
|
||||||
|
sources+=tmap.nas tmap_mmx.nas
|
||||||
|
opts+=-DUSEASM
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOMD5
|
||||||
|
sources+=md5.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOZLIB
|
||||||
|
ifndef NOPNG
|
||||||
|
ifdef PNG_PKGCONFIG
|
||||||
|
$(eval $(call Use_pkg_config,PNG_PKGCONFIG))
|
||||||
|
else
|
||||||
|
PNG_CONFIG?=$(call Prefix,libpng-config)
|
||||||
|
$(eval $(call Configure,PNG,$(PNG_CONFIG) \
|
||||||
|
$(if $(PNG_STATIC),--static),,--ldflags))
|
||||||
|
endif
|
||||||
|
ifdef LINUX
|
||||||
|
opts+=-D_LARGFILE64_SOURCE
|
||||||
|
endif
|
||||||
|
opts+=-DHAVE_PNG
|
||||||
|
sources+=apng.c
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NONET
|
||||||
|
ifndef NOCURL
|
||||||
|
CURLCONFIG?=curl-config
|
||||||
|
$(eval $(call Configure,CURL,$(CURLCONFIG)))
|
||||||
|
opts+=-DHAVE_CURL
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef HAVE_MINIUPNPC
|
||||||
|
libs+=-lminiupnpc
|
||||||
|
endif
|
||||||
|
|
||||||
|
# (Valgrind is a memory debugger.)
|
||||||
|
ifdef VALGRIND
|
||||||
|
VALGRIND_PKGCONFIG?=valgrind
|
||||||
|
$(eval $(call Use_pkg_config,VALGRIND))
|
||||||
|
ZDEBUG=1
|
||||||
|
opts+=-DHAVE_VALGRIND
|
||||||
|
endif
|
||||||
|
|
||||||
|
default_packages:=\
|
||||||
|
GME/libgme/LIBGME\
|
||||||
|
OPENMPT/libopenmpt/LIBOPENMPT\
|
||||||
|
ZLIB/zlib\
|
||||||
|
|
||||||
|
$(foreach p,$(default_packages),\
|
||||||
|
$(eval $(call Check_pkg_config,$(p))))
|
42
src/Makefile.d/nix.mk
Normal file
42
src/Makefile.d/nix.mk
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#
|
||||||
|
# Makefile options for unices (linux, bsd...)
|
||||||
|
#
|
||||||
|
|
||||||
|
EXENAME?=lsdl2srb2
|
||||||
|
|
||||||
|
opts+=-DUNIXCOMMON -DLUA_USE_POSIX
|
||||||
|
# Use -rdynamic so a backtrace log shows function names
|
||||||
|
# instead of addresses
|
||||||
|
libs+=-lm -rdynamic
|
||||||
|
|
||||||
|
ifndef nasm_format
|
||||||
|
nasm_format:=elf -DLINUX
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOHW
|
||||||
|
opts+=-I/usr/X11R6/include
|
||||||
|
libs+=-L/usr/X11R6/lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
SDL=1
|
||||||
|
|
||||||
|
# In common usage.
|
||||||
|
ifdef LINUX
|
||||||
|
libs+=-lrt
|
||||||
|
passthru_opts+=NOTERMIOS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Tested by Steel, as of release 2.2.8.
|
||||||
|
ifdef FREEBSD
|
||||||
|
opts+=-I/usr/X11R6/include -DLINUX -DFREEBSD
|
||||||
|
libs+=-L/usr/X11R6/lib -lipx -lkvm
|
||||||
|
endif
|
||||||
|
|
||||||
|
# FIXME: UNTESTED
|
||||||
|
#ifdef SOLARIS
|
||||||
|
#NOIPX=1
|
||||||
|
#NOASM=1
|
||||||
|
#opts+=-I/usr/local/include -I/opt/sfw/include \
|
||||||
|
# -DSOLARIS -DINADDR_NONE=INADDR_ANY -DBSD_COMP
|
||||||
|
#libs+=-L/opt/sfw/lib -lsocket -lnsl
|
||||||
|
#endif
|
16
src/Makefile.d/old.mk
Normal file
16
src/Makefile.d/old.mk
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#
|
||||||
|
# Warn about old build directories and offer to purge.
|
||||||
|
#
|
||||||
|
|
||||||
|
_old:=$(wildcard $(addprefix ../bin/,FreeBSD Linux \
|
||||||
|
Linux64 Mingw Mingw64 SDL dummy) ../objs ../dep)
|
||||||
|
|
||||||
|
ifdef _old
|
||||||
|
$(foreach v,$(_old),$(info $(abspath $(v))))
|
||||||
|
$(info )
|
||||||
|
$(info These directories are no longer\
|
||||||
|
required and should be removed.)
|
||||||
|
$(info You may remove them manually or\
|
||||||
|
by using 'make distclean')
|
||||||
|
$(error )
|
||||||
|
endif
|
69
src/Makefile.d/platform.mk
Normal file
69
src/Makefile.d/platform.mk
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#
|
||||||
|
# Platform specific options.
|
||||||
|
#
|
||||||
|
|
||||||
|
PKG_CONFIG?=pkg-config
|
||||||
|
|
||||||
|
ifdef WINDOWSHELL
|
||||||
|
rmrf=-2>NUL DEL /S /Q
|
||||||
|
mkdir=-2>NUL MD
|
||||||
|
cat=TYPE
|
||||||
|
else
|
||||||
|
rmrf=rm -rf
|
||||||
|
mkdir=mkdir -p
|
||||||
|
cat=cat
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef LINUX64
|
||||||
|
LINUX=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef MINGW64
|
||||||
|
MINGW=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef LINUX
|
||||||
|
UNIX=1
|
||||||
|
ifdef LINUX64
|
||||||
|
NONX86=1
|
||||||
|
# LINUX64 does not imply X86_64=1;
|
||||||
|
# could mean ARM64 or Itanium
|
||||||
|
platform=linux/64
|
||||||
|
else
|
||||||
|
platform=linux
|
||||||
|
endif
|
||||||
|
else ifdef FREEBSD
|
||||||
|
UNIX=1
|
||||||
|
platform=freebsd
|
||||||
|
else ifdef SOLARIS # FIXME: UNTESTED
|
||||||
|
UNIX=1
|
||||||
|
platform=solaris
|
||||||
|
else ifdef CYGWIN32 # FIXME: UNTESTED
|
||||||
|
nasm_format=win32
|
||||||
|
platform=cygwin
|
||||||
|
else ifdef MINGW
|
||||||
|
ifdef MINGW64
|
||||||
|
NONX86=1
|
||||||
|
NOASM=1
|
||||||
|
# MINGW64 should not necessarily imply X86_64=1,
|
||||||
|
# but we make that assumption elsewhere
|
||||||
|
# Once that changes, remove this
|
||||||
|
X86_64=1
|
||||||
|
platform=mingw/64
|
||||||
|
else
|
||||||
|
platform=mingw
|
||||||
|
endif
|
||||||
|
include Makefile.d/win32.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef platform
|
||||||
|
makedir:=$(makedir)/$(platform)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef UNIX
|
||||||
|
include Makefile.d/nix.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef SDL
|
||||||
|
include Makefile.d/sdl.mk
|
||||||
|
endif
|
79
src/Makefile.d/sdl.mk
Normal file
79
src/Makefile.d/sdl.mk
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
#
|
||||||
|
# Makefile options for SDL2 backend.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# SDL...., *looks at Alam*, THIS IS A MESS!
|
||||||
|
#
|
||||||
|
# ...a little bird flexes its muscles...
|
||||||
|
#
|
||||||
|
|
||||||
|
makedir:=$(makedir)/SDL
|
||||||
|
|
||||||
|
sources+=$(call List,sdl/Sourcefile)
|
||||||
|
opts+=-DDIRECTFULLSCREEN -DHAVE_SDL
|
||||||
|
|
||||||
|
# FIXME: UNTESTED
|
||||||
|
#ifdef PANDORA
|
||||||
|
#include sdl/SRB2Pandora/Makefile.cfg
|
||||||
|
#endif #ifdef PANDORA
|
||||||
|
|
||||||
|
# FIXME: UNTESTED
|
||||||
|
#ifdef CYGWIN32
|
||||||
|
#include sdl/MakeCYG.cfg
|
||||||
|
#endif #ifdef CYGWIN32
|
||||||
|
|
||||||
|
ifndef NOHW
|
||||||
|
sources+=sdl/ogl_sdl.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef NOMIXER
|
||||||
|
sources+=sdl/sdl_sound.c
|
||||||
|
else
|
||||||
|
opts+=-DHAVE_MIXER
|
||||||
|
sources+=sdl/mixer_sound.c
|
||||||
|
|
||||||
|
ifdef HAVE_MIXERX
|
||||||
|
opts+=-DHAVE_MIXERX
|
||||||
|
libs+=-lSDL2_mixer_ext
|
||||||
|
else
|
||||||
|
libs+=-lSDL2_mixer
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NOTHREADS
|
||||||
|
opts+=-DHAVE_THREADS
|
||||||
|
sources+=sdl/i_threads.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef SDL_PKGCONFIG
|
||||||
|
$(eval $(call Use_pkg_config,SDL))
|
||||||
|
else
|
||||||
|
SDL_CONFIG?=$(call Prefix,sdl2-config)
|
||||||
|
SDL_CFLAGS?=$(shell $(SDL_CONFIG) --cflags)
|
||||||
|
SDL_LDFLAGS?=$(shell $(SDL_CONFIG) \
|
||||||
|
$(if $(STATIC),--static-libs,--libs))
|
||||||
|
$(eval $(call Propogate_flags,SDL))
|
||||||
|
endif
|
||||||
|
|
||||||
|
# use the x86 asm code
|
||||||
|
ifndef CYGWIN32
|
||||||
|
ifndef NOASM
|
||||||
|
USEASM=1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef MINGW
|
||||||
|
ifndef NOSDLMAIN
|
||||||
|
SDLMAIN=1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef SDLMAIN
|
||||||
|
opts+=-DSDLMAIN
|
||||||
|
else
|
||||||
|
ifdef MINGW
|
||||||
|
opts+=-Umain
|
||||||
|
libs+=-mconsole
|
||||||
|
endif
|
||||||
|
endif
|
93
src/Makefile.d/util.mk
Normal file
93
src/Makefile.d/util.mk
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
#
|
||||||
|
# Utility macros for the rest of the Makefiles.
|
||||||
|
#
|
||||||
|
|
||||||
|
Ifnot=$(if $(1),$(3),$(2))
|
||||||
|
Ifndef=$(call Ifnot,$($(1)),$(2),$(3))
|
||||||
|
|
||||||
|
# Match and expand a list of variables by pattern.
|
||||||
|
Wildvar=$(foreach v,$(filter $(1),$(.VARIABLES)),$($(v)))
|
||||||
|
|
||||||
|
# Read a list of words from file and prepend each with the
|
||||||
|
# directory of the file.
|
||||||
|
_cat=$(shell $(cat) $(call Windows_path,$(1)))
|
||||||
|
List=$(addprefix $(dir $(1)),$(call _cat,$(1)))
|
||||||
|
|
||||||
|
# Convert path separators to backslash on Windows.
|
||||||
|
Windows_path=$(if $(WINDOWSHELL),$(subst /,\,$(1)),$(1))
|
||||||
|
|
||||||
|
define Propogate_flags =
|
||||||
|
opts+=$$($(1)_CFLAGS)
|
||||||
|
libs+=$$($(1)_LDFLAGS)
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Set library's _CFLAGS and _LDFLAGS from some command.
|
||||||
|
# Automatically propogates the flags too.
|
||||||
|
# 1: variable prefix (e.g. CURL)
|
||||||
|
# 2: start of command (e.g. curl-config)
|
||||||
|
# --- optional ----
|
||||||
|
# 3: CFLAGS command arguments, default '--cflags'
|
||||||
|
# 4: LDFLAGS command arguments, default '--libs'
|
||||||
|
# 5: common command arguments at the end of command
|
||||||
|
define Configure =
|
||||||
|
$(1)_CFLAGS?=$$(shell $(2) $(or $(3),--cflags) $(5))
|
||||||
|
$(1)_LDFLAGS?=$$(shell $(2) $(or $(4),--libs) $(5))
|
||||||
|
$(call Propogate_flags,$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Configure library with pkg-config. The package name is
|
||||||
|
# taken from a _PKGCONFIG variable.
|
||||||
|
# 1: variable prefix
|
||||||
|
#
|
||||||
|
# LIBGME_PKGCONFIG=libgme
|
||||||
|
# $(eval $(call Use_pkg_config,LIBGME))
|
||||||
|
define Use_pkg_config =
|
||||||
|
$(call Configure,$(1),$(PKG_CONFIG),,,$($(1)_PKGCONFIG))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Check disabling flag and configure package in one step
|
||||||
|
# according to delimited argument.
|
||||||
|
# (There is only one argument, but it split by slash.)
|
||||||
|
# 1/: short form library name (uppercase). This is
|
||||||
|
# prefixed with 'NO' and 'HAVE_'. E.g. NOGME, HAVE_GME
|
||||||
|
# /2: package name (e.g. libgme)
|
||||||
|
# /3: variable prefix
|
||||||
|
#
|
||||||
|
# The following example would check if NOGME is not
|
||||||
|
# defined before attempting to define LIBGME_CFLAGS and
|
||||||
|
# LIBGME_LDFLAGS as with Use_pkg_config.
|
||||||
|
#
|
||||||
|
# $(eval $(call Check_pkg_config,GME/libgme/LIBGME))
|
||||||
|
define Check_pkg_config =
|
||||||
|
_p:=$(subst /, ,$(1))
|
||||||
|
_v1:=$$(word 1,$$(_p))
|
||||||
|
_v2:=$$(or $$(word 3,$$(_p)),$$(_v1))
|
||||||
|
ifndef NO$$(_v1)
|
||||||
|
$$(_v2)_PKGCONFIG?=$$(word 2,$$(_p))
|
||||||
|
$$(eval $$(call Use_pkg_config,$$(_v2)))
|
||||||
|
opts+=-DHAVE_$$(_v1)
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
# $(call Prefix,gcc)
|
||||||
|
Prefix=$(if $(PREFIX),$(PREFIX)-)$(1)
|
||||||
|
|
||||||
|
Echo=
|
||||||
|
Echo_name=
|
||||||
|
Print=
|
||||||
|
|
||||||
|
ifndef SILENT
|
||||||
|
Echo=@echo $(1)
|
||||||
|
ifndef ECHO
|
||||||
|
ifndef NOECHOFILENAMES
|
||||||
|
Echo_name=$(call Echo,-- $(1) ...)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifndef MAKE_RESTARTS
|
||||||
|
ifndef destructive
|
||||||
|
Print=$(info $(1))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
.=$(call Ifndef,ECHO,@)
|
177
src/Makefile.d/versions.mk
Normal file
177
src/Makefile.d/versions.mk
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
#
|
||||||
|
# Flags to put a sock in GCC!
|
||||||
|
#
|
||||||
|
|
||||||
|
# See the versions list in detect.mk
|
||||||
|
# This will define all version flags going backward.
|
||||||
|
# Yes, it's magic.
|
||||||
|
define _predecessor =
|
||||||
|
ifdef GCC$(firstword $(1))
|
||||||
|
GCC$(lastword $(1)):=1
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
_n:=$(words $(gcc_versions))
|
||||||
|
$(foreach v,$(join $(wordlist 2,$(_n),- $(gcc_versions)),\
|
||||||
|
$(addprefix =,$(wordlist 2,$(_n),$(gcc_versions)))),\
|
||||||
|
$(and $(findstring =,$(v)),\
|
||||||
|
$(eval $(call _predecessor,$(subst =, ,$(v))))))
|
||||||
|
|
||||||
|
# -W -Wno-unused
|
||||||
|
WFLAGS:=-Wall -Wno-trigraphs
|
||||||
|
ifndef GCC295
|
||||||
|
#WFLAGS+=-Wno-packed
|
||||||
|
endif
|
||||||
|
ifndef RELAXWARNINGS
|
||||||
|
WFLAGS+=-W
|
||||||
|
#WFLAGS+=-Wno-sign-compare
|
||||||
|
ifndef GCC295
|
||||||
|
WFLAGS+=-Wno-div-by-zero
|
||||||
|
endif
|
||||||
|
#WFLAGS+=-Wsystem-headers
|
||||||
|
WFLAGS+=-Wfloat-equal
|
||||||
|
#WFLAGS+=-Wtraditional
|
||||||
|
WFLAGS+=-Wundef
|
||||||
|
ifndef GCC295
|
||||||
|
WFLAGS+=-Wendif-labels
|
||||||
|
endif
|
||||||
|
ifdef GCC41
|
||||||
|
WFLAGS+=-Wdeclaration-after-statement
|
||||||
|
WFLAGS+=-Wno-error=declaration-after-statement
|
||||||
|
WFLAGS+=-Wshadow
|
||||||
|
endif
|
||||||
|
#WFLAGS+=-Wlarger-than-%len%
|
||||||
|
WFLAGS+=-Wpointer-arith -Wbad-function-cast
|
||||||
|
ifdef GCC45
|
||||||
|
#WFLAGS+=-Wc++-compat
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wcast-qual
|
||||||
|
ifndef NOCASTALIGNWARN
|
||||||
|
WFLAGS+=-Wcast-align
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wwrite-strings
|
||||||
|
ifndef ERRORMODE
|
||||||
|
#WFLAGS+=-Wconversion
|
||||||
|
ifdef GCC43
|
||||||
|
#WFLAGS+=-Wno-sign-conversion
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wsign-compare
|
||||||
|
ifdef GCC91
|
||||||
|
WFLAGS+=-Wno-error=address-of-packed-member
|
||||||
|
endif
|
||||||
|
ifdef GCC45
|
||||||
|
WFLAGS+=-Wlogical-op
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Waggregate-return
|
||||||
|
ifdef HAIKU
|
||||||
|
ifdef GCC41
|
||||||
|
#WFLAGS+=-Wno-attributes
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
#WFLAGS+=-Wstrict-prototypes
|
||||||
|
ifdef GCC40
|
||||||
|
WFLAGS+=-Wold-style-definition
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wmissing-prototypes -Wmissing-declarations
|
||||||
|
ifdef GCC40
|
||||||
|
WFLAGS+=-Wmissing-field-initializers
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wmissing-noreturn
|
||||||
|
#WFLAGS+=-Wmissing-format-attribute
|
||||||
|
#WFLAGS+=-Wno-multichar
|
||||||
|
#WFLAGS+=-Wno-deprecated-declarations
|
||||||
|
#WFLAGS+=-Wpacked
|
||||||
|
#WFLAGS+=-Wpadded
|
||||||
|
#WFLAGS+=-Wredundant-decls
|
||||||
|
WFLAGS+=-Wnested-externs
|
||||||
|
#WFLAGS+=-Wunreachable-code
|
||||||
|
WFLAGS+=-Winline
|
||||||
|
ifdef GCC43
|
||||||
|
WFLAGS+=-funit-at-a-time
|
||||||
|
WFLAGS+=-Wlogical-op
|
||||||
|
endif
|
||||||
|
ifndef GCC295
|
||||||
|
WFLAGS+=-Wdisabled-optimization
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wformat-y2k
|
||||||
|
ifdef GCC71
|
||||||
|
WFLAGS+=-Wno-error=format-overflow=2
|
||||||
|
endif
|
||||||
|
WFLAGS+=-Wformat-security
|
||||||
|
ifndef GCC29
|
||||||
|
#WFLAGS+=-Winit-self
|
||||||
|
endif
|
||||||
|
ifdef GCC46
|
||||||
|
WFLAGS+=-Wno-suggest-attribute=noreturn
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef NOLDWARNING
|
||||||
|
LDFLAGS+=-Wl,--as-needed
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef ERRORMODE
|
||||||
|
WFLAGS+=-Werror
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef GCC43
|
||||||
|
#WFLAGS+=-Wno-error=clobbered
|
||||||
|
endif
|
||||||
|
ifdef GCC44
|
||||||
|
WFLAGS+=-Wno-error=array-bounds
|
||||||
|
endif
|
||||||
|
ifdef GCC46
|
||||||
|
WFLAGS+=-Wno-error=suggest-attribute=noreturn
|
||||||
|
endif
|
||||||
|
ifdef GCC54
|
||||||
|
WFLAGS+=-Wno-logical-op -Wno-error=logical-op
|
||||||
|
endif
|
||||||
|
ifdef GCC61
|
||||||
|
WFLAGS+=-Wno-tautological-compare -Wno-error=tautological-compare
|
||||||
|
endif
|
||||||
|
ifdef GCC71
|
||||||
|
WFLAGS+=-Wimplicit-fallthrough=4
|
||||||
|
endif
|
||||||
|
ifdef GCC81
|
||||||
|
WFLAGS+=-Wno-error=format-overflow
|
||||||
|
WFLAGS+=-Wno-error=stringop-truncation
|
||||||
|
WFLAGS+=-Wno-error=stringop-overflow
|
||||||
|
WFLAGS+=-Wno-format-overflow
|
||||||
|
WFLAGS+=-Wno-stringop-truncation
|
||||||
|
WFLAGS+=-Wno-stringop-overflow
|
||||||
|
WFLAGS+=-Wno-error=multistatement-macros
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef NONX86
|
||||||
|
ifdef X86_64 # yeah that SEEMS contradictory
|
||||||
|
opts+=-march=nocona
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
ifndef GCC29
|
||||||
|
opts+=-msse3 -mfpmath=sse
|
||||||
|
else
|
||||||
|
opts+=-mpentium
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef DEBUGMODE
|
||||||
|
ifdef GCC48
|
||||||
|
opts+=-Og
|
||||||
|
else
|
||||||
|
opts+=O0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef VALGRIND
|
||||||
|
ifdef GCC46
|
||||||
|
WFLAGS+=-Wno-error=unused-but-set-variable
|
||||||
|
WFLAGS+=-Wno-unused-but-set-variable
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Lua
|
||||||
|
ifdef GCC43
|
||||||
|
ifndef GCC44
|
||||||
|
WFLAGS+=-Wno-logical-op
|
||||||
|
endif
|
||||||
|
endif
|
99
src/Makefile.d/win32.mk
Normal file
99
src/Makefile.d/win32.mk
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
#
|
||||||
|
# Mingw, if you don't know, that's Win32/Win64
|
||||||
|
#
|
||||||
|
|
||||||
|
ifndef MINGW64
|
||||||
|
EXENAME?=srb2win.exe
|
||||||
|
else
|
||||||
|
EXENAME?=srb2win64.exe
|
||||||
|
endif
|
||||||
|
|
||||||
|
sources+=win32/Srb2win.rc
|
||||||
|
opts+=-DSTDC_HEADERS
|
||||||
|
libs+=-ladvapi32 -lkernel32 -lmsvcrt -luser32
|
||||||
|
|
||||||
|
nasm_format:=win32
|
||||||
|
|
||||||
|
SDL=1
|
||||||
|
|
||||||
|
ifndef NOHW
|
||||||
|
opts+=-DUSE_WGL_SWAP
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef MINGW64
|
||||||
|
libs+=-lws2_32
|
||||||
|
else
|
||||||
|
ifdef NO_IPV6
|
||||||
|
libs+=-lwsock32
|
||||||
|
else
|
||||||
|
libs+=-lws2_32
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef NONET
|
||||||
|
ifndef MINGW64 # miniupnc is broken with MINGW64
|
||||||
|
opts+=-I../libs -DSTATIC_MINIUPNPC
|
||||||
|
libs+=-L../libs/miniupnpc/mingw$(32) -lws2_32 -liphlpapi
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef MINGW64
|
||||||
|
32=32
|
||||||
|
x86=x86
|
||||||
|
i686=i686
|
||||||
|
else
|
||||||
|
32=64
|
||||||
|
x86=x86_64
|
||||||
|
i686=x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
|
mingw:=$(i686)-w64-mingw32
|
||||||
|
|
||||||
|
define _set =
|
||||||
|
$(1)_CFLAGS?=$($(1)_opts)
|
||||||
|
$(1)_LDFLAGS?=$($(1)_libs)
|
||||||
|
endef
|
||||||
|
|
||||||
|
lib:=../libs/gme
|
||||||
|
LIBGME_opts:=-I$(lib)/include
|
||||||
|
LIBGME_libs:=-L$(lib)/win$(32) -lgme
|
||||||
|
$(eval $(call _set,LIBGME))
|
||||||
|
|
||||||
|
lib:=../libs/libopenmpt
|
||||||
|
LIBOPENMPT_opts:=-I$(lib)/inc
|
||||||
|
LIBOPENMPT_libs:=-L$(lib)/lib/$(x86)/mingw -lopenmpt
|
||||||
|
$(eval $(call _set,LIBOPENMPT))
|
||||||
|
|
||||||
|
ifndef NOMIXERX
|
||||||
|
HAVE_MIXERX=1
|
||||||
|
lib:=../libs/SDLMixerX/$(mingw)
|
||||||
|
else
|
||||||
|
lib:=../libs/SDL2_mixer/$(mingw)
|
||||||
|
endif
|
||||||
|
|
||||||
|
mixer_opts:=-I$(lib)/include/SDL2
|
||||||
|
mixer_libs:=-L$(lib)/lib
|
||||||
|
|
||||||
|
lib:=../libs/SDL2/$(mingw)
|
||||||
|
SDL_opts:=-I$(lib)/include/SDL2\
|
||||||
|
$(mixer_opts) -Dmain=SDL_main
|
||||||
|
SDL_libs:=-L$(lib)/lib $(mixer_libs)\
|
||||||
|
-lmingw32 -lSDL2main -lSDL2 -mwindows
|
||||||
|
$(eval $(call _set,SDL))
|
||||||
|
|
||||||
|
lib:=../libs/zlib
|
||||||
|
ZLIB_opts:=-I$(lib)
|
||||||
|
ZLIB_libs:=-L$(lib)/win32 -lz$(32)
|
||||||
|
$(eval $(call _set,ZLIB))
|
||||||
|
|
||||||
|
ifndef PNG_CONFIG
|
||||||
|
lib:=../libs/libpng-src
|
||||||
|
PNG_opts:=-I$(lib)
|
||||||
|
PNG_libs:=-L$(lib)/projects -lpng$(32)
|
||||||
|
$(eval $(call _set,PNG))
|
||||||
|
endif
|
||||||
|
|
||||||
|
lib:=../libs/curl
|
||||||
|
CURL_opts:=-I$(lib)/include
|
||||||
|
CURL_libs:=-L$(lib)/lib$(32) -lcurl
|
||||||
|
$(eval $(call _set,CURL))
|
98
src/Sourcefile
Normal file
98
src/Sourcefile
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
string.c
|
||||||
|
d_main.c
|
||||||
|
d_clisrv.c
|
||||||
|
d_net.c
|
||||||
|
d_netfil.c
|
||||||
|
d_netcmd.c
|
||||||
|
dehacked.c
|
||||||
|
deh_soc.c
|
||||||
|
deh_lua.c
|
||||||
|
deh_tables.c
|
||||||
|
z_zone.c
|
||||||
|
f_finale.c
|
||||||
|
f_wipe.c
|
||||||
|
g_demo.c
|
||||||
|
g_game.c
|
||||||
|
g_input.c
|
||||||
|
am_map.c
|
||||||
|
command.c
|
||||||
|
console.c
|
||||||
|
hu_stuff.c
|
||||||
|
y_inter.c
|
||||||
|
st_stuff.c
|
||||||
|
m_aatree.c
|
||||||
|
m_anigif.c
|
||||||
|
m_argv.c
|
||||||
|
m_bbox.c
|
||||||
|
m_cheat.c
|
||||||
|
m_cond.c
|
||||||
|
m_easing.c
|
||||||
|
m_fixed.c
|
||||||
|
m_menu.c
|
||||||
|
m_misc.c
|
||||||
|
m_perfstats.c
|
||||||
|
m_random.c
|
||||||
|
m_queue.c
|
||||||
|
info.c
|
||||||
|
p_ceilng.c
|
||||||
|
p_enemy.c
|
||||||
|
p_floor.c
|
||||||
|
p_inter.c
|
||||||
|
p_lights.c
|
||||||
|
p_map.c
|
||||||
|
p_maputl.c
|
||||||
|
p_mobj.c
|
||||||
|
p_polyobj.c
|
||||||
|
p_saveg.c
|
||||||
|
p_setup.c
|
||||||
|
p_sight.c
|
||||||
|
p_spec.c
|
||||||
|
p_telept.c
|
||||||
|
p_tick.c
|
||||||
|
p_user.c
|
||||||
|
p_slopes.c
|
||||||
|
tables.c
|
||||||
|
r_bsp.c
|
||||||
|
r_data.c
|
||||||
|
r_draw.c
|
||||||
|
r_main.c
|
||||||
|
r_plane.c
|
||||||
|
r_segs.c
|
||||||
|
r_skins.c
|
||||||
|
r_sky.c
|
||||||
|
r_splats.c
|
||||||
|
r_things.c
|
||||||
|
r_textures.c
|
||||||
|
r_patch.c
|
||||||
|
r_patchrotation.c
|
||||||
|
r_picformats.c
|
||||||
|
r_portal.c
|
||||||
|
screen.c
|
||||||
|
taglist.c
|
||||||
|
v_video.c
|
||||||
|
s_sound.c
|
||||||
|
sounds.c
|
||||||
|
w_wad.c
|
||||||
|
filesrch.c
|
||||||
|
mserv.c
|
||||||
|
http-mserv.c
|
||||||
|
i_tcp.c
|
||||||
|
lzf.c
|
||||||
|
vid_copy.s
|
||||||
|
b_bot.c
|
||||||
|
lua_script.c
|
||||||
|
lua_baselib.c
|
||||||
|
lua_mathlib.c
|
||||||
|
lua_hooklib.c
|
||||||
|
lua_consolelib.c
|
||||||
|
lua_infolib.c
|
||||||
|
lua_mobjlib.c
|
||||||
|
lua_playerlib.c
|
||||||
|
lua_skinlib.c
|
||||||
|
lua_thinkerlib.c
|
||||||
|
lua_maplib.c
|
||||||
|
lua_taglib.c
|
||||||
|
lua_polyobjlib.c
|
||||||
|
lua_blockmaplib.c
|
||||||
|
lua_hudlib.c
|
||||||
|
lua_inputlib.c
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019-2020, James R.
|
Copyright 2019-2021, James R.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019-2020, James R.
|
Copyright 2019-2021, James R.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
244
src/b_bot.c
244
src/b_bot.c
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2011-2020 by Sonic Team Junior.
|
// Copyright (C) 2011-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -18,29 +18,38 @@
|
||||||
#include "b_bot.h"
|
#include "b_bot.h"
|
||||||
#include "lua_hook.h"
|
#include "lua_hook.h"
|
||||||
|
|
||||||
// If you want multiple bots, variables like this will
|
void B_UpdateBotleader(player_t *player)
|
||||||
// have to be stuffed in something accessible through player_t.
|
|
||||||
static boolean lastForward = false;
|
|
||||||
static boolean lastBlocked = false;
|
|
||||||
static boolean blocked = false;
|
|
||||||
|
|
||||||
static boolean jump_last = false;
|
|
||||||
static boolean spin_last = false;
|
|
||||||
static UINT8 anxiety = 0;
|
|
||||||
static boolean panic = false;
|
|
||||||
static UINT8 flymode = 0;
|
|
||||||
static boolean spinmode = false;
|
|
||||||
static boolean thinkfly = false;
|
|
||||||
|
|
||||||
static inline void B_ResetAI(void)
|
|
||||||
{
|
{
|
||||||
jump_last = false;
|
UINT32 i;
|
||||||
spin_last = false;
|
fixed_t dist;
|
||||||
anxiety = 0;
|
fixed_t neardist = INT32_MAX;
|
||||||
panic = false;
|
player_t *nearplayer = NULL;
|
||||||
flymode = 0;
|
//Find new botleader
|
||||||
spinmode = false;
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
thinkfly = false;
|
{
|
||||||
|
if (players[i].bot || players[i].playerstate != PST_LIVE || players[i].spectator || !players[i].mo)
|
||||||
|
continue;
|
||||||
|
if (!player->mo) //Can't do distance calculations if there's no player object, so we'll just take the first we find
|
||||||
|
{
|
||||||
|
player->botleader = &players[i];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Update best candidate based on nearest distance
|
||||||
|
dist = R_PointToDist2(player->mo->x, player->mo->y, players[i].mo->x, players[i].mo->y);
|
||||||
|
if (neardist > dist)
|
||||||
|
{
|
||||||
|
neardist = dist;
|
||||||
|
nearplayer = &players[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Set botleader to best candidate (or null if none available)
|
||||||
|
player->botleader = nearplayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void B_ResetAI(botmem_t *mem)
|
||||||
|
{
|
||||||
|
mem->thinkstate = AI_FOLLOW;
|
||||||
|
mem->catchup_tics = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
|
@ -49,39 +58,47 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
|
|
||||||
player_t *player = sonic->player, *bot = tails->player;
|
player_t *player = sonic->player, *bot = tails->player;
|
||||||
ticcmd_t *pcmd = &player->cmd;
|
ticcmd_t *pcmd = &player->cmd;
|
||||||
boolean water = tails->eflags & MFE_UNDERWATER;
|
botmem_t *mem = &bot->botmem;
|
||||||
|
boolean water = (tails->eflags & MFE_UNDERWATER);
|
||||||
SINT8 flip = P_MobjFlip(tails);
|
SINT8 flip = P_MobjFlip(tails);
|
||||||
boolean _2d = (tails->flags2 & MF2_TWOD) || twodlevel;
|
boolean _2d = (tails->flags2 & MF2_TWOD) || twodlevel;
|
||||||
fixed_t scale = tails->scale;
|
fixed_t scale = tails->scale;
|
||||||
|
boolean jump_last = (bot->lastbuttons & BT_JUMP);
|
||||||
|
boolean spin_last = (bot->lastbuttons & BT_SPIN);
|
||||||
|
|
||||||
fixed_t dist = P_AproxDistance(sonic->x - tails->x, sonic->y - tails->y);
|
fixed_t dist = P_AproxDistance(sonic->x - tails->x, sonic->y - tails->y);
|
||||||
fixed_t zdist = flip * (sonic->z - tails->z);
|
fixed_t zdist = flip * (sonic->z - tails->z);
|
||||||
angle_t ang = sonic->angle;
|
angle_t ang = sonic->angle;
|
||||||
fixed_t pmom = P_AproxDistance(sonic->momx, sonic->momy);
|
fixed_t pmom = P_AproxDistance(sonic->momx, sonic->momy);
|
||||||
fixed_t bmom = P_AproxDistance(tails->momx, tails->momy);
|
fixed_t bmom = P_AproxDistance(tails->momx, tails->momy);
|
||||||
fixed_t followmax = 128 * 8 * scale; // Max follow distance before AI begins to enter "panic" state
|
fixed_t followmax = 128 * 8 * scale; // Max follow distance before AI begins to enter catchup state
|
||||||
fixed_t followthres = 92 * scale; // Distance that AI will try to reach
|
fixed_t followthres = 92 * scale; // Distance that AI will try to reach
|
||||||
fixed_t followmin = 32 * scale;
|
fixed_t followmin = 32 * scale;
|
||||||
fixed_t comfortheight = 96 * scale;
|
fixed_t comfortheight = 96 * scale;
|
||||||
fixed_t touchdist = 24 * scale;
|
fixed_t touchdist = 24 * scale;
|
||||||
boolean stalled = (bmom < scale >> 1) && dist > followthres; // Helps to see if the AI is having trouble catching up
|
boolean stalled = (bmom < scale >> 1) && dist > followthres; // Helps to see if the AI is having trouble catching up
|
||||||
boolean samepos = (sonic->x == tails->x && sonic->y == tails->y);
|
boolean samepos = (sonic->x == tails->x && sonic->y == tails->y);
|
||||||
|
boolean blocked = bot->blocked;
|
||||||
|
|
||||||
if (!samepos)
|
if (!samepos)
|
||||||
ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y);
|
ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y);
|
||||||
|
|
||||||
// We can't follow Sonic if he's not around!
|
// Lua can handle it!
|
||||||
if (!sonic || sonic->health <= 0)
|
if (LUA_HookBotAI(sonic, tails, cmd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Lua can handle it!
|
// We can't follow Sonic if he's not around!
|
||||||
if (LUAh_BotAI(sonic, tails, cmd))
|
if (!sonic || sonic->health <= 0)
|
||||||
|
{
|
||||||
|
mem->thinkstate = AI_STANDBY;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
else if (mem->thinkstate == AI_STANDBY)
|
||||||
|
mem->thinkstate = AI_FOLLOW;
|
||||||
|
|
||||||
if (tails->player->powers[pw_carry] == CR_MACESPIN || tails->player->powers[pw_carry] == CR_GENERIC)
|
if (tails->player->powers[pw_carry] == CR_MACESPIN || tails->player->powers[pw_carry] == CR_GENERIC)
|
||||||
{
|
{
|
||||||
boolean isrelevant = (sonic->player->powers[pw_carry] == CR_MACESPIN || sonic->player->powers[pw_carry] == CR_GENERIC);
|
boolean isrelevant = (sonic->player->powers[pw_carry] == CR_MACESPIN || sonic->player->powers[pw_carry] == CR_GENERIC);
|
||||||
dist = P_AproxDistance(tails->x-sonic->x, tails->y-sonic->y);
|
|
||||||
if (sonic->player->cmd.buttons & BT_JUMP && (sonic->player->pflags & PF_JUMPED) && isrelevant)
|
if (sonic->player->cmd.buttons & BT_JUMP && (sonic->player->pflags & PF_JUMPED) && isrelevant)
|
||||||
cmd->buttons |= BT_JUMP;
|
cmd->buttons |= BT_JUMP;
|
||||||
if (isrelevant)
|
if (isrelevant)
|
||||||
|
@ -103,56 +120,57 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
followmin = 0;
|
followmin = 0;
|
||||||
followthres = 16*scale;
|
followthres = 16*scale;
|
||||||
followmax >>= 1;
|
followmax >>= 1;
|
||||||
thinkfly = false;
|
if (mem->thinkstate == AI_THINKFLY)
|
||||||
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check anxiety
|
// Update catchup_tics
|
||||||
if (spinmode)
|
if (mem->thinkstate == AI_SPINFOLLOW)
|
||||||
{
|
{
|
||||||
anxiety = 0;
|
mem-> catchup_tics = 0;
|
||||||
panic = false;
|
|
||||||
}
|
}
|
||||||
else if (dist > followmax || zdist > comfortheight || stalled)
|
else if (dist > followmax || zdist > comfortheight || stalled)
|
||||||
{
|
{
|
||||||
anxiety = min(anxiety + 2, 70);
|
mem-> catchup_tics = min(mem-> catchup_tics + 2, 70);
|
||||||
if (anxiety >= 70)
|
if (mem-> catchup_tics >= 70)
|
||||||
panic = true;
|
mem->thinkstate = AI_CATCHUP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
anxiety = max(anxiety - 1, 0);
|
mem-> catchup_tics = max(mem-> catchup_tics - 1, 0);
|
||||||
panic = false;
|
if (mem->thinkstate == AI_CATCHUP)
|
||||||
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Orientation
|
// Orientation
|
||||||
|
// cmd->angleturn won't be relative to player angle, since we're not going through G_BuildTiccmd.
|
||||||
if (bot->pflags & (PF_SPINNING|PF_STARTDASH))
|
if (bot->pflags & (PF_SPINNING|PF_STARTDASH))
|
||||||
{
|
{
|
||||||
cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
||||||
}
|
}
|
||||||
else if (flymode == 2)
|
else if (mem->thinkstate == AI_FLYCARRY)
|
||||||
{
|
{
|
||||||
cmd->angleturn = sonic->player->cmd.angleturn - (tails->angle >> 16);
|
cmd->angleturn = sonic->player->cmd.angleturn;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmd->angleturn = (ang - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (ang) >> 16; // NOT FRACBITS DAMNIT
|
||||||
}
|
}
|
||||||
|
|
||||||
// ********
|
// ********
|
||||||
// FLY MODE
|
// FLY MODE
|
||||||
// spinmode check
|
// exiting check
|
||||||
if (spinmode || player->exiting)
|
if (player->exiting && mem->thinkstate == AI_THINKFLY)
|
||||||
thinkfly = false;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Activate co-op flight
|
// Activate co-op flight
|
||||||
if (thinkfly && player->pflags & PF_JUMPED)
|
if (mem->thinkstate == AI_THINKFLY && player->pflags & PF_JUMPED)
|
||||||
{
|
{
|
||||||
if (!jump_last)
|
if (!jump_last)
|
||||||
{
|
{
|
||||||
jump = true;
|
jump = true;
|
||||||
flymode = 1;
|
mem->thinkstate = AI_FLYSTANDBY;
|
||||||
thinkfly = false;
|
|
||||||
bot->pflags |= PF_CANCARRY;
|
bot->pflags |= PF_CANCARRY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,20 +183,19 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
&& P_IsObjectOnGround(sonic) && P_IsObjectOnGround(tails)
|
&& P_IsObjectOnGround(sonic) && P_IsObjectOnGround(tails)
|
||||||
&& !(player->pflags & PF_STASIS)
|
&& !(player->pflags & PF_STASIS)
|
||||||
&& bot->charability == CA_FLY)
|
&& bot->charability == CA_FLY)
|
||||||
thinkfly = true;
|
mem->thinkstate = AI_THINKFLY;
|
||||||
else
|
else if (mem->thinkstate == AI_THINKFLY)
|
||||||
thinkfly = false;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
|
|
||||||
// Set carried state
|
// Set carried state
|
||||||
if (player->powers[pw_carry] == CR_PLAYER && sonic->tracer == tails)
|
if (player->powers[pw_carry] == CR_PLAYER && sonic->tracer == tails)
|
||||||
{
|
{
|
||||||
flymode = 2;
|
mem->thinkstate = AI_FLYCARRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ready for takeoff
|
// Ready for takeoff
|
||||||
if (flymode == 1)
|
if (mem->thinkstate == AI_FLYSTANDBY)
|
||||||
{
|
{
|
||||||
thinkfly = false;
|
|
||||||
if (zdist < -64*scale || (flip * tails->momz) > scale) // Make sure we're not too high up
|
if (zdist < -64*scale || (flip * tails->momz) > scale) // Make sure we're not too high up
|
||||||
spin = true;
|
spin = true;
|
||||||
else if (!jump_last)
|
else if (!jump_last)
|
||||||
|
@ -186,10 +203,10 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
|
|
||||||
// Abort if the player moves away or spins
|
// Abort if the player moves away or spins
|
||||||
if (dist > followthres || player->dashspeed)
|
if (dist > followthres || player->dashspeed)
|
||||||
flymode = 0;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
// Read player inputs while carrying
|
// Read player inputs while carrying
|
||||||
else if (flymode == 2)
|
else if (mem->thinkstate == AI_FLYCARRY)
|
||||||
{
|
{
|
||||||
cmd->forwardmove = pcmd->forwardmove;
|
cmd->forwardmove = pcmd->forwardmove;
|
||||||
cmd->sidemove = pcmd->sidemove;
|
cmd->sidemove = pcmd->sidemove;
|
||||||
|
@ -203,19 +220,19 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
// End flymode
|
// End flymode
|
||||||
if (player->powers[pw_carry] != CR_PLAYER)
|
if (player->powers[pw_carry] != CR_PLAYER)
|
||||||
{
|
{
|
||||||
flymode = 0;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flymode && P_IsObjectOnGround(tails) && !(pcmd->buttons & BT_JUMP))
|
if (P_IsObjectOnGround(tails) && !(pcmd->buttons & BT_JUMP) && (mem->thinkstate == AI_FLYSTANDBY || mem->thinkstate == AI_FLYCARRY))
|
||||||
flymode = 0;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
|
|
||||||
// ********
|
// ********
|
||||||
// SPINNING
|
// SPINNING
|
||||||
if (panic || flymode || !(player->pflags & PF_SPINNING) || (player->pflags & PF_JUMPED))
|
if (!(player->pflags & (PF_SPINNING|PF_STARTDASH)) && mem->thinkstate == AI_SPINFOLLOW)
|
||||||
spinmode = false;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
else
|
else if (mem->thinkstate == AI_FOLLOW || mem->thinkstate == AI_SPINFOLLOW)
|
||||||
{
|
{
|
||||||
if (!_2d)
|
if (!_2d)
|
||||||
{
|
{
|
||||||
|
@ -224,21 +241,21 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
if (dist < followthres && dist > touchdist) // Do positioning
|
if (dist < followthres && dist > touchdist) // Do positioning
|
||||||
{
|
{
|
||||||
cmd->angleturn = (ang - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (ang) >> 16; // NOT FRACBITS DAMNIT
|
||||||
cmd->forwardmove = 50;
|
cmd->forwardmove = 50;
|
||||||
spinmode = true;
|
mem->thinkstate = AI_SPINFOLLOW;
|
||||||
}
|
}
|
||||||
else if (dist < touchdist)
|
else if (dist < touchdist)
|
||||||
{
|
{
|
||||||
if (!bmom && (!(bot->pflags & PF_SPINNING) || (bot->dashspeed && bot->pflags & PF_SPINNING)))
|
if (!bmom && (!(bot->pflags & PF_SPINNING) || (bot->dashspeed && bot->pflags & PF_SPINNING)))
|
||||||
{
|
{
|
||||||
cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
||||||
spin = true;
|
spin = true;
|
||||||
}
|
}
|
||||||
spinmode = true;
|
mem->thinkstate = AI_SPINFOLLOW;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
spinmode = false;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
// Spin
|
// Spin
|
||||||
else if (player->dashspeed == bot->dashspeed && player->pflags & PF_SPINNING)
|
else if (player->dashspeed == bot->dashspeed && player->pflags & PF_SPINNING)
|
||||||
|
@ -246,12 +263,12 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
if (bot->pflags & PF_SPINNING || !spin_last)
|
if (bot->pflags & PF_SPINNING || !spin_last)
|
||||||
{
|
{
|
||||||
spin = true;
|
spin = true;
|
||||||
cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
||||||
cmd->forwardmove = MAXPLMOVE;
|
cmd->forwardmove = MAXPLMOVE;
|
||||||
spinmode = true;
|
mem->thinkstate = AI_SPINFOLLOW;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
spinmode = false;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 2D mode
|
// 2D mode
|
||||||
|
@ -261,17 +278,19 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
&& ((bot->pflags & PF_SPINNING) || !spin_last))
|
&& ((bot->pflags & PF_SPINNING) || !spin_last))
|
||||||
{
|
{
|
||||||
spin = true;
|
spin = true;
|
||||||
spinmode = true;
|
mem->thinkstate = AI_SPINFOLLOW;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ********
|
// ********
|
||||||
// FOLLOW
|
// FOLLOW
|
||||||
if (!(flymode || spinmode))
|
if (mem->thinkstate == AI_FOLLOW || mem->thinkstate == AI_CATCHUP)
|
||||||
{
|
{
|
||||||
// Too far
|
// Too far
|
||||||
if (panic || dist > followthres)
|
if (mem->thinkstate == AI_CATCHUP || dist > followthres)
|
||||||
{
|
{
|
||||||
if (!_2d)
|
if (!_2d)
|
||||||
cmd->forwardmove = MAXPLMOVE;
|
cmd->forwardmove = MAXPLMOVE;
|
||||||
|
@ -281,7 +300,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
cmd->sidemove = -MAXPLMOVE;
|
cmd->sidemove = -MAXPLMOVE;
|
||||||
}
|
}
|
||||||
// Within threshold
|
// Within threshold
|
||||||
else if (!panic && dist > followmin && abs(zdist) < 192*scale)
|
else if (dist > followmin && abs(zdist) < 192*scale)
|
||||||
{
|
{
|
||||||
if (!_2d)
|
if (!_2d)
|
||||||
cmd->forwardmove = FixedHypot(pcmd->forwardmove, pcmd->sidemove);
|
cmd->forwardmove = FixedHypot(pcmd->forwardmove, pcmd->sidemove);
|
||||||
|
@ -292,7 +311,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
else if (dist < followmin)
|
else if (dist < followmin)
|
||||||
{
|
{
|
||||||
// Copy inputs
|
// Copy inputs
|
||||||
cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
||||||
bot->drawangle = ang;
|
bot->drawangle = ang;
|
||||||
cmd->forwardmove = 8 * pcmd->forwardmove / 10;
|
cmd->forwardmove = 8 * pcmd->forwardmove / 10;
|
||||||
cmd->sidemove = 8 * pcmd->sidemove / 10;
|
cmd->sidemove = 8 * pcmd->sidemove / 10;
|
||||||
|
@ -301,7 +320,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
|
|
||||||
// ********
|
// ********
|
||||||
// JUMP
|
// JUMP
|
||||||
if (!(flymode || spinmode))
|
if (mem->thinkstate == AI_FOLLOW || mem->thinkstate == AI_CATCHUP || (mem->thinkstate == AI_SPINFOLLOW && player->pflags & PF_JUMPED))
|
||||||
{
|
{
|
||||||
// Flying catch-up
|
// Flying catch-up
|
||||||
if (bot->pflags & PF_THOKKED)
|
if (bot->pflags & PF_THOKKED)
|
||||||
|
@ -319,31 +338,30 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
// Start jump
|
// Start jump
|
||||||
else if (!jump_last && !(bot->pflags & PF_JUMPED) //&& !(player->pflags & PF_SPINNING)
|
else if (!jump_last && !(bot->pflags & PF_JUMPED) //&& !(player->pflags & PF_SPINNING)
|
||||||
&& ((zdist > 32*scale && player->pflags & PF_JUMPED) // Following
|
&& ((zdist > 32*scale && player->pflags & PF_JUMPED) // Following
|
||||||
|| (zdist > 64*scale && panic) // Vertical catch-up
|
|| (zdist > 64*scale && mem->thinkstate == AI_CATCHUP) // Vertical catch-up
|
||||||
|| (stalled && anxiety > 20 && bot->powers[pw_carry] == CR_NONE)
|
|| (stalled && mem-> catchup_tics > 20 && bot->powers[pw_carry] == CR_NONE)
|
||||||
//|| (bmom < scale>>3 && dist > followthres && !(bot->powers[pw_carry])) // Stopped & not in carry state
|
//|| (bmom < scale>>3 && dist > followthres && !(bot->powers[pw_carry])) // Stopped & not in carry state
|
||||||
|| (bot->pflags & PF_SPINNING && !(bot->pflags & PF_JUMPED)))) // Spinning
|
|| (bot->pflags & PF_SPINNING && !(bot->pflags & PF_JUMPED)))) // Spinning
|
||||||
jump = true;
|
jump = true;
|
||||||
// Hold jump
|
// Hold jump
|
||||||
else if (bot->pflags & PF_JUMPED && jump_last && tails->momz*flip > 0 && (zdist > 0 || panic))
|
else if (bot->pflags & PF_JUMPED && jump_last && tails->momz*flip > 0 && (zdist > 0 || mem->thinkstate == AI_CATCHUP))
|
||||||
jump = true;
|
jump = true;
|
||||||
// Start flying
|
// Start flying
|
||||||
else if (bot->pflags & PF_JUMPED && panic && !jump_last && bot->charability == CA_FLY)
|
else if (bot->pflags & PF_JUMPED && mem->thinkstate == AI_CATCHUP && !jump_last && bot->charability == CA_FLY)
|
||||||
jump = true;
|
jump = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ********
|
// ********
|
||||||
// HISTORY
|
// HISTORY
|
||||||
jump_last = jump;
|
//jump_last = jump;
|
||||||
spin_last = spin;
|
//spin_last = spin;
|
||||||
|
|
||||||
// Turn the virtual keypresses into ticcmd_t.
|
// Turn the virtual keypresses into ticcmd_t.
|
||||||
B_KeysToTiccmd(tails, cmd, forward, backward, left, right, false, false, jump, spin);
|
B_KeysToTiccmd(tails, cmd, forward, backward, left, right, false, false, jump, spin);
|
||||||
|
|
||||||
// Update our status
|
// Update our status
|
||||||
lastForward = forward;
|
mem->lastForward = forward;
|
||||||
lastBlocked = blocked;
|
mem->lastBlocked = blocked;
|
||||||
blocked = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
|
@ -363,25 +381,28 @@ void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
CV_SetValue(&cv_analog[1], false);
|
CV_SetValue(&cv_analog[1], false);
|
||||||
|
|
||||||
// Let Lua scripts build ticcmds
|
// Let Lua scripts build ticcmds
|
||||||
if (LUAh_BotTiccmd(player, cmd))
|
if (LUA_HookTiccmd(player, cmd, HOOK(BotTiccmd)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// We don't have any main character AI, sorry. D:
|
// Make sure we have a valid main character to follow
|
||||||
if (player-players == consoleplayer)
|
B_UpdateBotleader(player);
|
||||||
|
if (!player->botleader)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Basic Tails AI
|
// Single Player Tails AI
|
||||||
B_BuildTailsTiccmd(players[consoleplayer].mo, player->mo, cmd);
|
//B_BuildTailsTiccmd(players[consoleplayer].mo, player->mo, cmd);
|
||||||
|
B_BuildTailsTiccmd(player->botleader->mo, player->mo, cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin)
|
void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin)
|
||||||
{
|
{
|
||||||
|
player_t *player = mo->player;
|
||||||
// don't try to do stuff if your sonic is in a minecart or something
|
// don't try to do stuff if your sonic is in a minecart or something
|
||||||
if (players[consoleplayer].powers[pw_carry] && players[consoleplayer].powers[pw_carry] != CR_PLAYER)
|
if (&player->botleader && player->botleader->powers[pw_carry] && player->botleader->powers[pw_carry] != CR_PLAYER)
|
||||||
return;
|
return;
|
||||||
// Turn the virtual keypresses into ticcmd_t.
|
// Turn the virtual keypresses into ticcmd_t.
|
||||||
if (twodlevel || mo->flags2 & MF2_TWOD) {
|
if (twodlevel || mo->flags2 & MF2_TWOD) {
|
||||||
if (players[consoleplayer].climbing
|
if (player->botleader->climbing
|
||||||
|| mo->player->pflags & PF_GLIDING) {
|
|| mo->player->pflags & PF_GLIDING) {
|
||||||
// Don't mess with bot inputs during these unhandled movement conditions.
|
// Don't mess with bot inputs during these unhandled movement conditions.
|
||||||
// The normal AI doesn't use abilities, so custom AI should be sending us exactly what it wants anyway.
|
// The normal AI doesn't use abilities, so custom AI should be sending us exactly what it wants anyway.
|
||||||
|
@ -420,10 +441,10 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
|
||||||
cmd->forwardmove += MAXPLMOVE<<FRACBITS>>16;
|
cmd->forwardmove += MAXPLMOVE<<FRACBITS>>16;
|
||||||
if (backward)
|
if (backward)
|
||||||
cmd->forwardmove -= MAXPLMOVE<<FRACBITS>>16;
|
cmd->forwardmove -= MAXPLMOVE<<FRACBITS>>16;
|
||||||
if (left)
|
if (left)
|
||||||
cmd->angleturn += 1280;
|
cmd->angleturn += 1280;
|
||||||
if (right)
|
if (right)
|
||||||
cmd->angleturn -= 1280;
|
cmd->angleturn -= 1280;
|
||||||
if (strafeleft)
|
if (strafeleft)
|
||||||
cmd->sidemove -= MAXPLMOVE<<FRACBITS>>16;
|
cmd->sidemove -= MAXPLMOVE<<FRACBITS>>16;
|
||||||
if (straferight)
|
if (straferight)
|
||||||
|
@ -447,21 +468,26 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
|
||||||
void B_MoveBlocked(player_t *player)
|
void B_MoveBlocked(player_t *player)
|
||||||
{
|
{
|
||||||
(void)player;
|
(void)player;
|
||||||
blocked = true;
|
player->blocked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean B_CheckRespawn(player_t *player)
|
boolean B_CheckRespawn(player_t *player)
|
||||||
{
|
{
|
||||||
mobj_t *sonic = players[consoleplayer].mo;
|
mobj_t *sonic;
|
||||||
mobj_t *tails = player->mo;
|
mobj_t *tails = player->mo;
|
||||||
|
|
||||||
|
//We don't have a main player to spawn to!
|
||||||
|
if (!player->botleader)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sonic = player->botleader->mo;
|
||||||
// We can't follow Sonic if he's not around!
|
// We can't follow Sonic if he's not around!
|
||||||
if (!sonic || sonic->health <= 0)
|
if (!sonic || sonic->health <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// B_RespawnBot doesn't do anything if the condition above this isn't met
|
// B_RespawnBot doesn't do anything if the condition above this isn't met
|
||||||
{
|
{
|
||||||
UINT8 shouldForce = LUAh_BotRespawn(sonic, tails);
|
UINT8 shouldForce = LUA_Hook2Mobj(sonic, tails, MOBJ_HOOK(BotRespawn));
|
||||||
|
|
||||||
if (P_MobjWasRemoved(sonic) || P_MobjWasRemoved(tails))
|
if (P_MobjWasRemoved(sonic) || P_MobjWasRemoved(tails))
|
||||||
return (shouldForce == 1); // mobj was removed
|
return (shouldForce == 1); // mobj was removed
|
||||||
|
@ -505,15 +531,19 @@ void B_RespawnBot(INT32 playernum)
|
||||||
{
|
{
|
||||||
player_t *player = &players[playernum];
|
player_t *player = &players[playernum];
|
||||||
fixed_t x,y,z;
|
fixed_t x,y,z;
|
||||||
mobj_t *sonic = players[consoleplayer].mo;
|
mobj_t *sonic;
|
||||||
mobj_t *tails;
|
mobj_t *tails;
|
||||||
|
|
||||||
|
if (!player->botleader)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sonic = player->botleader->mo;
|
||||||
if (!sonic || sonic->health <= 0)
|
if (!sonic || sonic->health <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
B_ResetAI();
|
B_ResetAI(&player->botmem);
|
||||||
|
|
||||||
player->bot = 1;
|
player->bot = BOT_2PAI;
|
||||||
P_SpawnPlayer(playernum);
|
P_SpawnPlayer(playernum);
|
||||||
tails = player->mo;
|
tails = player->mo;
|
||||||
|
|
||||||
|
@ -540,10 +570,6 @@ void B_RespawnBot(INT32 playernum)
|
||||||
player->powers[pw_spacetime] = sonic->player->powers[pw_spacetime];
|
player->powers[pw_spacetime] = sonic->player->powers[pw_spacetime];
|
||||||
player->powers[pw_gravityboots] = sonic->player->powers[pw_gravityboots];
|
player->powers[pw_gravityboots] = sonic->player->powers[pw_gravityboots];
|
||||||
player->powers[pw_nocontrol] = sonic->player->powers[pw_nocontrol];
|
player->powers[pw_nocontrol] = sonic->player->powers[pw_nocontrol];
|
||||||
player->acceleration = sonic->player->acceleration;
|
|
||||||
player->accelstart = sonic->player->accelstart;
|
|
||||||
player->thrustfactor = sonic->player->thrustfactor;
|
|
||||||
player->normalspeed = sonic->player->normalspeed;
|
|
||||||
player->pflags |= PF_AUTOBRAKE|(sonic->player->pflags & PF_DIRECTIONCHAR);
|
player->pflags |= PF_AUTOBRAKE|(sonic->player->pflags & PF_DIRECTIONCHAR);
|
||||||
|
|
||||||
P_TeleportMove(tails, x, y, z);
|
P_TeleportMove(tails, x, y, z);
|
||||||
|
@ -561,11 +587,11 @@ void B_RespawnBot(INT32 playernum)
|
||||||
void B_HandleFlightIndicator(player_t *player)
|
void B_HandleFlightIndicator(player_t *player)
|
||||||
{
|
{
|
||||||
mobj_t *tails = player->mo;
|
mobj_t *tails = player->mo;
|
||||||
|
botmem_t *mem = &player->botmem;
|
||||||
if (!tails)
|
if (!tails)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (thinkfly && player->bot == 1 && tails->health)
|
if (mem->thinkstate == AI_THINKFLY && player->bot == BOT_2PAI && tails->health)
|
||||||
{
|
{
|
||||||
if (!tails->hnext)
|
if (!tails->hnext)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2020 by Sonic Team Junior.
|
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
/// \file b_bot.h
|
/// \file b_bot.h
|
||||||
/// \brief Basic bot handling
|
/// \brief Basic bot handling
|
||||||
|
|
||||||
|
void B_UpdateBotleader(player_t *player);
|
||||||
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd);
|
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd);
|
||||||
void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin);
|
void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin);
|
||||||
boolean B_CheckRespawn(player_t *player);
|
boolean B_CheckRespawn(player_t *player);
|
||||||
|
|
1
src/blua/CMakeLists.txt
Normal file
1
src/blua/CMakeLists.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
target_sourcefile(c)
|
|
@ -1,53 +0,0 @@
|
||||||
ifdef UNIXCOMMON
|
|
||||||
LUA_CFLAGS+=-DLUA_USE_POSIX
|
|
||||||
endif
|
|
||||||
ifdef LINUX
|
|
||||||
LUA_CFLAGS+=-DLUA_USE_POSIX
|
|
||||||
endif
|
|
||||||
ifdef GCC43
|
|
||||||
ifndef GCC44
|
|
||||||
WFLAGS+=-Wno-logical-op
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJS:=$(OBJS) \
|
|
||||||
$(OBJDIR)/lapi.o \
|
|
||||||
$(OBJDIR)/lbaselib.o \
|
|
||||||
$(OBJDIR)/ldo.o \
|
|
||||||
$(OBJDIR)/lfunc.o \
|
|
||||||
$(OBJDIR)/linit.o \
|
|
||||||
$(OBJDIR)/liolib.o \
|
|
||||||
$(OBJDIR)/llex.o \
|
|
||||||
$(OBJDIR)/lmem.o \
|
|
||||||
$(OBJDIR)/lobject.o \
|
|
||||||
$(OBJDIR)/lstate.o \
|
|
||||||
$(OBJDIR)/lstrlib.o \
|
|
||||||
$(OBJDIR)/ltablib.o \
|
|
||||||
$(OBJDIR)/lundump.o \
|
|
||||||
$(OBJDIR)/lzio.o \
|
|
||||||
$(OBJDIR)/lauxlib.o \
|
|
||||||
$(OBJDIR)/lcode.o \
|
|
||||||
$(OBJDIR)/ldebug.o \
|
|
||||||
$(OBJDIR)/ldump.o \
|
|
||||||
$(OBJDIR)/lgc.o \
|
|
||||||
$(OBJDIR)/lopcodes.o \
|
|
||||||
$(OBJDIR)/lparser.o \
|
|
||||||
$(OBJDIR)/lstring.o \
|
|
||||||
$(OBJDIR)/ltable.o \
|
|
||||||
$(OBJDIR)/ltm.o \
|
|
||||||
$(OBJDIR)/lvm.o \
|
|
||||||
$(OBJDIR)/lua_script.o \
|
|
||||||
$(OBJDIR)/lua_baselib.o \
|
|
||||||
$(OBJDIR)/lua_mathlib.o \
|
|
||||||
$(OBJDIR)/lua_hooklib.o \
|
|
||||||
$(OBJDIR)/lua_consolelib.o \
|
|
||||||
$(OBJDIR)/lua_infolib.o \
|
|
||||||
$(OBJDIR)/lua_mobjlib.o \
|
|
||||||
$(OBJDIR)/lua_playerlib.o \
|
|
||||||
$(OBJDIR)/lua_skinlib.o \
|
|
||||||
$(OBJDIR)/lua_thinkerlib.o \
|
|
||||||
$(OBJDIR)/lua_maplib.o \
|
|
||||||
$(OBJDIR)/lua_taglib.o \
|
|
||||||
$(OBJDIR)/lua_polyobjlib.o \
|
|
||||||
$(OBJDIR)/lua_blockmaplib.o \
|
|
||||||
$(OBJDIR)/lua_hudlib.o
|
|
25
src/blua/Sourcefile
Normal file
25
src/blua/Sourcefile
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
lapi.c
|
||||||
|
lbaselib.c
|
||||||
|
ldo.c
|
||||||
|
lfunc.c
|
||||||
|
linit.c
|
||||||
|
liolib.c
|
||||||
|
llex.c
|
||||||
|
lmem.c
|
||||||
|
lobject.c
|
||||||
|
lstate.c
|
||||||
|
lstrlib.c
|
||||||
|
ltablib.c
|
||||||
|
lundump.c
|
||||||
|
lzio.c
|
||||||
|
lauxlib.c
|
||||||
|
lcode.c
|
||||||
|
ldebug.c
|
||||||
|
ldump.c
|
||||||
|
lgc.c
|
||||||
|
lopcodes.c
|
||||||
|
lparser.c
|
||||||
|
lstring.c
|
||||||
|
ltable.c
|
||||||
|
ltm.c
|
||||||
|
lvm.c
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -650,7 +650,7 @@ static void COM_ExecuteString(char *ptext)
|
||||||
else
|
else
|
||||||
{ // Monster Iestyn: keep track of how many levels of recursion we're in
|
{ // Monster Iestyn: keep track of how many levels of recursion we're in
|
||||||
recursion++;
|
recursion++;
|
||||||
COM_BufInsertText(a->value);
|
COM_BufInsertTextEx(a->value, com_flags);
|
||||||
recursion--;
|
recursion--;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1738,6 +1738,8 @@ void CV_SaveVars(UINT8 **p, boolean in_demo)
|
||||||
static void CV_LoadVars(UINT8 **p,
|
static void CV_LoadVars(UINT8 **p,
|
||||||
consvar_t *(*got)(UINT8 **p, char **ret_value, boolean *ret_stealth))
|
consvar_t *(*got)(UINT8 **p, char **ret_value, boolean *ret_stealth))
|
||||||
{
|
{
|
||||||
|
const boolean store = (client || demoplayback);
|
||||||
|
|
||||||
consvar_t *cvar;
|
consvar_t *cvar;
|
||||||
UINT16 count;
|
UINT16 count;
|
||||||
|
|
||||||
|
@ -1751,7 +1753,7 @@ static void CV_LoadVars(UINT8 **p,
|
||||||
{
|
{
|
||||||
if (cvar->flags & CV_NETVAR)
|
if (cvar->flags & CV_NETVAR)
|
||||||
{
|
{
|
||||||
if (client && cvar->revert.v.string == NULL)
|
if (store && cvar->revert.v.string == NULL)
|
||||||
{
|
{
|
||||||
cvar->revert.v.const_munge = cvar->string;
|
cvar->revert.v.const_munge = cvar->string;
|
||||||
cvar->revert.allocated = ( cvar->zstring != NULL );
|
cvar->revert.allocated = ( cvar->zstring != NULL );
|
||||||
|
@ -2364,7 +2366,10 @@ static boolean CV_Command(void)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (( com_flags & COM_SAFE ) && ( v->flags & CV_NOLUA ))
|
if (( com_flags & COM_SAFE ) && ( v->flags & CV_NOLUA ))
|
||||||
return false;
|
{
|
||||||
|
CONS_Alert(CONS_WARNING, "Variable '%s' cannot be changed from Lua.\n", v->name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// perform a variable print or set
|
// perform a variable print or set
|
||||||
if (COM_Argc() == 1)
|
if (COM_Argc() == 1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -221,7 +221,7 @@ static void CONS_Bind_f(void)
|
||||||
for (key = 0; key < NUMINPUTS; key++)
|
for (key = 0; key < NUMINPUTS; key++)
|
||||||
if (bindtable[key])
|
if (bindtable[key])
|
||||||
{
|
{
|
||||||
CONS_Printf("%s : \"%s\"\n", G_KeynumToString(key), bindtable[key]);
|
CONS_Printf("%s : \"%s\"\n", G_KeyNumToString(key), bindtable[key]);
|
||||||
na = 1;
|
na = 1;
|
||||||
}
|
}
|
||||||
if (!na)
|
if (!na)
|
||||||
|
@ -229,7 +229,7 @@ static void CONS_Bind_f(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
key = G_KeyStringtoNum(COM_Argv(1));
|
key = G_KeyStringToNum(COM_Argv(1));
|
||||||
if (key <= 0 || key >= NUMINPUTS)
|
if (key <= 0 || key >= NUMINPUTS)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Invalid key name\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("Invalid key name\n"));
|
||||||
|
@ -1697,7 +1697,10 @@ static void CON_DrawHudlines(void)
|
||||||
{
|
{
|
||||||
charflags = (*p & 0x7f) << V_CHARCOLORSHIFT;
|
charflags = (*p & 0x7f) << V_CHARCOLORSHIFT;
|
||||||
p++;
|
p++;
|
||||||
|
c++;
|
||||||
}
|
}
|
||||||
|
if (c >= con_width)
|
||||||
|
break;
|
||||||
if (*p < HU_FONTSTART)
|
if (*p < HU_FONTSTART)
|
||||||
;//charwidth = 4 * con_scalefactor;
|
;//charwidth = 4 * con_scalefactor;
|
||||||
else
|
else
|
||||||
|
@ -1818,7 +1821,10 @@ static void CON_DrawConsole(void)
|
||||||
{
|
{
|
||||||
charflags = (*p & 0x7f) << V_CHARCOLORSHIFT;
|
charflags = (*p & 0x7f) << V_CHARCOLORSHIFT;
|
||||||
p++;
|
p++;
|
||||||
|
c++;
|
||||||
}
|
}
|
||||||
|
if (c >= con_width)
|
||||||
|
break;
|
||||||
V_DrawCharacter(x, y, (INT32)(*p) | charflags | cv_constextsize.value | V_NOSCALESTART, true);
|
V_DrawCharacter(x, y, (INT32)(*p) | charflags | cv_constextsize.value | V_NOSCALESTART, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
284
src/d_clisrv.c
284
src/d_clisrv.c
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -1244,15 +1244,14 @@ static boolean CL_SendJoin(void)
|
||||||
CONS_Printf(M_GetText("Sending join request...\n"));
|
CONS_Printf(M_GetText("Sending join request...\n"));
|
||||||
netbuffer->packettype = PT_CLIENTJOIN;
|
netbuffer->packettype = PT_CLIENTJOIN;
|
||||||
|
|
||||||
|
netbuffer->u.clientcfg.modversion = MODVERSION;
|
||||||
|
strncpy(netbuffer->u.clientcfg.application,
|
||||||
|
SRB2APPLICATION,
|
||||||
|
sizeof netbuffer->u.clientcfg.application);
|
||||||
|
|
||||||
if (splitscreen || botingame)
|
if (splitscreen || botingame)
|
||||||
localplayers++;
|
localplayers++;
|
||||||
netbuffer->u.clientcfg.localplayers = localplayers;
|
netbuffer->u.clientcfg.localplayers = localplayers;
|
||||||
netbuffer->u.clientcfg._255 = 255;
|
|
||||||
netbuffer->u.clientcfg.packetversion = PACKETVERSION;
|
|
||||||
netbuffer->u.clientcfg.version = VERSION;
|
|
||||||
netbuffer->u.clientcfg.subversion = SUBVERSION;
|
|
||||||
strncpy(netbuffer->u.clientcfg.application, SRB2APPLICATION,
|
|
||||||
sizeof netbuffer->u.clientcfg.application);
|
|
||||||
|
|
||||||
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
||||||
if (splitscreen)
|
if (splitscreen)
|
||||||
|
@ -1295,6 +1294,21 @@ static INT32 FindRejoinerNum(SINT8 node)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static UINT8
|
||||||
|
GetRefuseReason (INT32 node)
|
||||||
|
{
|
||||||
|
if (!node || FindRejoinerNum(node) != -1)
|
||||||
|
return 0;
|
||||||
|
else if (bannednode && bannednode[node])
|
||||||
|
return REFUSE_BANNED;
|
||||||
|
else if (!cv_allownewplayer.value)
|
||||||
|
return REFUSE_JOINS_DISABLED;
|
||||||
|
else if (D_NumPlayers() >= cv_maxplayers.value)
|
||||||
|
return REFUSE_SLOTS_FULL;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void SV_SendServerInfo(INT32 node, tic_t servertime)
|
static void SV_SendServerInfo(INT32 node, tic_t servertime)
|
||||||
{
|
{
|
||||||
UINT8 *p;
|
UINT8 *p;
|
||||||
|
@ -1313,14 +1327,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime)
|
||||||
netbuffer->u.serverinfo.numberofplayer = (UINT8)D_NumPlayers();
|
netbuffer->u.serverinfo.numberofplayer = (UINT8)D_NumPlayers();
|
||||||
netbuffer->u.serverinfo.maxplayer = (UINT8)cv_maxplayers.value;
|
netbuffer->u.serverinfo.maxplayer = (UINT8)cv_maxplayers.value;
|
||||||
|
|
||||||
if (!node || FindRejoinerNum(node) != -1)
|
netbuffer->u.serverinfo.refusereason = GetRefuseReason(node);
|
||||||
netbuffer->u.serverinfo.refusereason = 0;
|
|
||||||
else if (!cv_allownewplayer.value)
|
|
||||||
netbuffer->u.serverinfo.refusereason = 1;
|
|
||||||
else if (D_NumPlayers() >= cv_maxplayers.value)
|
|
||||||
netbuffer->u.serverinfo.refusereason = 2;
|
|
||||||
else
|
|
||||||
netbuffer->u.serverinfo.refusereason = 0;
|
|
||||||
|
|
||||||
strncpy(netbuffer->u.serverinfo.gametypename, Gametype_Names[gametype],
|
strncpy(netbuffer->u.serverinfo.gametypename, Gametype_Names[gametype],
|
||||||
sizeof netbuffer->u.serverinfo.gametypename);
|
sizeof netbuffer->u.serverinfo.gametypename);
|
||||||
|
@ -1438,9 +1445,6 @@ static boolean SV_SendServerConfig(INT32 node)
|
||||||
|
|
||||||
netbuffer->packettype = PT_SERVERCFG;
|
netbuffer->packettype = PT_SERVERCFG;
|
||||||
|
|
||||||
netbuffer->u.servercfg.version = VERSION;
|
|
||||||
netbuffer->u.servercfg.subversion = SUBVERSION;
|
|
||||||
|
|
||||||
netbuffer->u.servercfg.serverplayer = (UINT8)serverplayer;
|
netbuffer->u.servercfg.serverplayer = (UINT8)serverplayer;
|
||||||
netbuffer->u.servercfg.totalslotnum = (UINT8)(doomcom->numslots);
|
netbuffer->u.servercfg.totalslotnum = (UINT8)(doomcom->numslots);
|
||||||
netbuffer->u.servercfg.gametic = (tic_t)LONG(gametic);
|
netbuffer->u.servercfg.gametic = (tic_t)LONG(gametic);
|
||||||
|
@ -1761,20 +1765,24 @@ static void SL_InsertServer(serverinfo_pak* info, SINT8 node)
|
||||||
if (serverlistcount >= MAXSERVERLIST)
|
if (serverlistcount >= MAXSERVERLIST)
|
||||||
return; // list full
|
return; // list full
|
||||||
|
|
||||||
if (info->_255 != 255)
|
/* check it later if connecting to this one */
|
||||||
return;/* old packet format */
|
if (node != servernode)
|
||||||
|
{
|
||||||
|
if (info->_255 != 255)
|
||||||
|
return;/* old packet format */
|
||||||
|
|
||||||
if (info->packetversion != PACKETVERSION)
|
if (info->packetversion != PACKETVERSION)
|
||||||
return;/* old new packet format */
|
return;/* old new packet format */
|
||||||
|
|
||||||
if (info->version != VERSION)
|
if (info->version != VERSION)
|
||||||
return; // Not same version.
|
return; // Not same version.
|
||||||
|
|
||||||
if (info->subversion != SUBVERSION)
|
if (info->subversion != SUBVERSION)
|
||||||
return; // Close, but no cigar.
|
return; // Close, but no cigar.
|
||||||
|
|
||||||
if (strcmp(info->application, SRB2APPLICATION))
|
if (strcmp(info->application, SRB2APPLICATION))
|
||||||
return;/* that's a different mod */
|
return;/* that's a different mod */
|
||||||
|
}
|
||||||
|
|
||||||
i = serverlistcount++;
|
i = serverlistcount++;
|
||||||
}
|
}
|
||||||
|
@ -1923,6 +1931,72 @@ void CL_UpdateServerList(boolean internetsearch, INT32 room)
|
||||||
|
|
||||||
#endif // ifndef NONET
|
#endif // ifndef NONET
|
||||||
|
|
||||||
|
static const char * InvalidServerReason (INT32 i)
|
||||||
|
{
|
||||||
|
#define EOT "\nPress ESC\n"
|
||||||
|
|
||||||
|
serverinfo_pak *info = &serverlist[i].info;
|
||||||
|
|
||||||
|
/* magic number for new packet format */
|
||||||
|
if (info->_255 != 255)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"Outdated server (version unknown).\n" EOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp(info->application, SRB2APPLICATION, sizeof
|
||||||
|
info->application))
|
||||||
|
{
|
||||||
|
return va(
|
||||||
|
"%s cannot connect\n"
|
||||||
|
"to %s servers.\n" EOT,
|
||||||
|
SRB2APPLICATION,
|
||||||
|
info->application);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
info->packetversion != PACKETVERSION ||
|
||||||
|
info->version != VERSION ||
|
||||||
|
info->subversion != SUBVERSION
|
||||||
|
){
|
||||||
|
return va(
|
||||||
|
"Incompatible %s versions.\n"
|
||||||
|
"(server version %d.%d.%d)\n" EOT,
|
||||||
|
SRB2APPLICATION,
|
||||||
|
info->version / 100,
|
||||||
|
info->version % 100,
|
||||||
|
info->subversion);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (info->refusereason)
|
||||||
|
{
|
||||||
|
case REFUSE_BANNED:
|
||||||
|
return
|
||||||
|
"You have been banned\n"
|
||||||
|
"from the server.\n" EOT;
|
||||||
|
case REFUSE_JOINS_DISABLED:
|
||||||
|
return
|
||||||
|
"The server is not accepting\n"
|
||||||
|
"joins for the moment.\n" EOT;
|
||||||
|
case REFUSE_SLOTS_FULL:
|
||||||
|
return va(
|
||||||
|
"Maximum players reached: %d\n" EOT,
|
||||||
|
info->maxplayer);
|
||||||
|
default:
|
||||||
|
if (info->refusereason)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"You can't join.\n"
|
||||||
|
"I don't know why,\n"
|
||||||
|
"but you can't join.\n" EOT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
#undef EOT
|
||||||
|
}
|
||||||
|
|
||||||
/** Called by CL_ServerConnectionTicker
|
/** Called by CL_ServerConnectionTicker
|
||||||
*
|
*
|
||||||
* \param asksent The last time we asked the server to join. We re-ask every second in case our request got lost in transmit.
|
* \param asksent The last time we asked the server to join. We re-ask every second in case our request got lost in transmit.
|
||||||
|
@ -1953,23 +2027,23 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quit here rather than downloading files and being refused later.
|
|
||||||
if (serverlist[i].info.refusereason)
|
|
||||||
{
|
|
||||||
D_QuitNetGame();
|
|
||||||
CL_Reset();
|
|
||||||
D_StartTitle();
|
|
||||||
if (serverlist[i].info.refusereason == 1)
|
|
||||||
M_StartMessage(M_GetText("The server is not accepting\njoins for the moment.\n\nPress ESC\n"), NULL, MM_NOTHING);
|
|
||||||
else if (serverlist[i].info.refusereason == 2)
|
|
||||||
M_StartMessage(va(M_GetText("Maximum players reached: %d\n\nPress ESC\n"), serverlist[i].info.maxplayer), NULL, MM_NOTHING);
|
|
||||||
else
|
|
||||||
M_StartMessage(M_GetText("You can't join.\nI don't know why,\nbut you can't join.\n\nPress ESC\n"), NULL, MM_NOTHING);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
|
const char *reason = InvalidServerReason(i);
|
||||||
|
|
||||||
|
// Quit here rather than downloading files
|
||||||
|
// and being refused later.
|
||||||
|
if (reason)
|
||||||
|
{
|
||||||
|
char *message = Z_StrDup(reason);
|
||||||
|
D_QuitNetGame();
|
||||||
|
CL_Reset();
|
||||||
|
D_StartTitle();
|
||||||
|
M_StartMessage(message, NULL, MM_NOTHING);
|
||||||
|
Z_Free(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
D_ParseFileneeded(serverlist[i].info.fileneedednum,
|
D_ParseFileneeded(serverlist[i].info.fileneedednum,
|
||||||
serverlist[i].info.fileneeded);
|
serverlist[i].info.fileneeded);
|
||||||
CONS_Printf(M_GetText("Checking files...\n"));
|
CONS_Printf(M_GetText("Checking files...\n"));
|
||||||
|
@ -2557,7 +2631,7 @@ void CL_ClearPlayer(INT32 playernum)
|
||||||
//
|
//
|
||||||
// Removes a player from the current game
|
// Removes a player from the current game
|
||||||
//
|
//
|
||||||
static void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
||||||
{
|
{
|
||||||
// Sanity check: exceptional cases (i.e. c-fails) can cause multiple
|
// Sanity check: exceptional cases (i.e. c-fails) can cause multiple
|
||||||
// kick commands to be issued for the same player.
|
// kick commands to be issued for the same player.
|
||||||
|
@ -2630,14 +2704,14 @@ static void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LUAh_PlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
LUA_HookPlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
||||||
|
|
||||||
// don't look through someone's view who isn't there
|
// don't look through someone's view who isn't there
|
||||||
if (playernum == displayplayer)
|
if (playernum == displayplayer)
|
||||||
{
|
{
|
||||||
// Call ViewpointSwitch hooks here.
|
// Call ViewpointSwitch hooks here.
|
||||||
// The viewpoint was forcibly changed.
|
// The viewpoint was forcibly changed.
|
||||||
LUAh_ViewpointSwitch(&players[consoleplayer], &players[consoleplayer], true);
|
LUA_HookViewpointSwitch(&players[consoleplayer], &players[consoleplayer], true);
|
||||||
displayplayer = consoleplayer;
|
displayplayer = consoleplayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2693,7 +2767,6 @@ void CL_Reset(void)
|
||||||
doomcom->numslots = 1;
|
doomcom->numslots = 1;
|
||||||
SV_StopServer();
|
SV_StopServer();
|
||||||
SV_ResetServer();
|
SV_ResetServer();
|
||||||
CV_RevertNetVars();
|
|
||||||
|
|
||||||
// make sure we don't leave any fileneeded gunk over from a failed join
|
// make sure we don't leave any fileneeded gunk over from a failed join
|
||||||
fileneedednum = 0;
|
fileneedednum = 0;
|
||||||
|
@ -3046,7 +3119,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
{
|
{
|
||||||
case KICK_MSG_GO_AWAY:
|
case KICK_MSG_GO_AWAY:
|
||||||
if (!players[pnum].quittime)
|
if (!players[pnum].quittime)
|
||||||
HU_AddChatText(va("\x82*%s has been kicked (Go away)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s has been kicked (No reason given)", player_names[pnum]), false);
|
||||||
kickreason = KR_KICK;
|
kickreason = KR_KICK;
|
||||||
break;
|
break;
|
||||||
case KICK_MSG_PING_HIGH:
|
case KICK_MSG_PING_HIGH:
|
||||||
|
@ -3054,7 +3127,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
kickreason = KR_PINGLIMIT;
|
kickreason = KR_PINGLIMIT;
|
||||||
break;
|
break;
|
||||||
case KICK_MSG_CON_FAIL:
|
case KICK_MSG_CON_FAIL:
|
||||||
HU_AddChatText(va("\x82*%s left the game (Synch Failure)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s left the game (Synch failure)", player_names[pnum]), false);
|
||||||
kickreason = KR_SYNCH;
|
kickreason = KR_SYNCH;
|
||||||
|
|
||||||
if (M_CheckParm("-consisdump")) // Helps debugging some problems
|
if (M_CheckParm("-consisdump")) // Helps debugging some problems
|
||||||
|
@ -3100,7 +3173,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
kickreason = KR_LEAVE;
|
kickreason = KR_LEAVE;
|
||||||
break;
|
break;
|
||||||
case KICK_MSG_BANNED:
|
case KICK_MSG_BANNED:
|
||||||
HU_AddChatText(va("\x82*%s has been banned (Don't come back)", player_names[pnum]), false);
|
HU_AddChatText(va("\x82*%s has been banned (No reason given)", player_names[pnum]), false);
|
||||||
kickreason = KR_BAN;
|
kickreason = KR_BAN;
|
||||||
break;
|
break;
|
||||||
case KICK_MSG_CUSTOM_KICK:
|
case KICK_MSG_CUSTOM_KICK:
|
||||||
|
@ -3117,7 +3190,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
|
|
||||||
if (pnum == consoleplayer)
|
if (pnum == consoleplayer)
|
||||||
{
|
{
|
||||||
LUAh_GameQuit(false);
|
LUA_HookBool(false, HOOK(GameQuit));
|
||||||
#ifdef DUMPCONSISTENCY
|
#ifdef DUMPCONSISTENCY
|
||||||
if (msg == KICK_MSG_CON_FAIL) SV_SavedGame();
|
if (msg == KICK_MSG_CON_FAIL) SV_SavedGame();
|
||||||
#endif
|
#endif
|
||||||
|
@ -3325,6 +3398,8 @@ void SV_ResetServer(void)
|
||||||
// clear server_context
|
// clear server_context
|
||||||
memset(server_context, '-', 8);
|
memset(server_context, '-', 8);
|
||||||
|
|
||||||
|
CV_RevertNetVars();
|
||||||
|
|
||||||
DEBFILE("\n-=-=-=-=-=-=-= Server Reset =-=-=-=-=-=-=-\n\n");
|
DEBFILE("\n-=-=-=-=-=-=-= Server Reset =-=-=-=-=-=-=-\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3537,7 +3612,7 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
||||||
COM_BufAddText(va("sayto %d %s\n", newplayernum, motd));
|
COM_BufAddText(va("sayto %d %s\n", newplayernum, motd));
|
||||||
|
|
||||||
if (!rejoined)
|
if (!rejoined)
|
||||||
LUAh_PlayerJoin(newplayernum);
|
LUA_HookInt(newplayernum, HOOK(PlayerJoin));
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean SV_AddWaitingPlayers(const char *name, const char *name2)
|
static boolean SV_AddWaitingPlayers(const char *name, const char *name2)
|
||||||
|
@ -3714,6 +3789,78 @@ static size_t TotalTextCmdPerTic(tic_t tic)
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
ConnectionRefused (SINT8 node, INT32 rejoinernum)
|
||||||
|
{
|
||||||
|
clientconfig_pak *cc = &netbuffer->u.clientcfg;
|
||||||
|
|
||||||
|
boolean rejoining = (rejoinernum != -1);
|
||||||
|
|
||||||
|
if (!node)/* server connecting to itself */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (
|
||||||
|
cc->modversion != MODVERSION ||
|
||||||
|
strncmp(cc->application, SRB2APPLICATION,
|
||||||
|
sizeof cc->application)
|
||||||
|
){
|
||||||
|
return/* this is probably client's fault */
|
||||||
|
"Incompatible.";
|
||||||
|
}
|
||||||
|
else if (bannednode && bannednode[node])
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"You have been banned\n"
|
||||||
|
"from the server.";
|
||||||
|
}
|
||||||
|
else if (cc->localplayers != 1)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"Wrong player count.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!rejoining)
|
||||||
|
{
|
||||||
|
if (!cv_allownewplayer.value)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"The server is not accepting\n"
|
||||||
|
"joins for the moment.";
|
||||||
|
}
|
||||||
|
else if (D_NumPlayers() >= cv_maxplayers.value)
|
||||||
|
{
|
||||||
|
return va(
|
||||||
|
"Maximum players reached: %d",
|
||||||
|
cv_maxplayers.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (luafiletransfers)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
"The serveris broadcasting a file\n"
|
||||||
|
"requested by a Lua script.\n"
|
||||||
|
"Please wait a bit and then\n"
|
||||||
|
"try rejoining.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (netgame)
|
||||||
|
{
|
||||||
|
const tic_t th = 2 * cv_joindelay.value * TICRATE;
|
||||||
|
|
||||||
|
if (joindelay > th)
|
||||||
|
{
|
||||||
|
return va(
|
||||||
|
"Too many people are connecting.\n"
|
||||||
|
"Please wait %d seconds and then\n"
|
||||||
|
"try rejoining.",
|
||||||
|
(joindelay - th) / TICRATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/** Called when a PT_CLIENTJOIN packet is received
|
/** Called when a PT_CLIENTJOIN packet is received
|
||||||
*
|
*
|
||||||
* \param node The packet sender
|
* \param node The packet sender
|
||||||
|
@ -3724,33 +3871,14 @@ static void HandleConnect(SINT8 node)
|
||||||
char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME + 1];
|
char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME + 1];
|
||||||
INT32 rejoinernum;
|
INT32 rejoinernum;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
const char *refuse;
|
||||||
|
|
||||||
rejoinernum = FindRejoinerNum(node);
|
rejoinernum = FindRejoinerNum(node);
|
||||||
|
|
||||||
if (bannednode && bannednode[node])
|
refuse = ConnectionRefused(node, rejoinernum);
|
||||||
SV_SendRefuse(node, M_GetText("You have been banned\nfrom the server."));
|
|
||||||
else if (netbuffer->u.clientcfg._255 != 255 ||
|
if (refuse)
|
||||||
netbuffer->u.clientcfg.packetversion != PACKETVERSION)
|
SV_SendRefuse(node, refuse);
|
||||||
SV_SendRefuse(node, "Incompatible packet formats.");
|
|
||||||
else if (strncmp(netbuffer->u.clientcfg.application, SRB2APPLICATION,
|
|
||||||
sizeof netbuffer->u.clientcfg.application))
|
|
||||||
SV_SendRefuse(node, "Different SRB2 modifications\nare not compatible.");
|
|
||||||
else if (netbuffer->u.clientcfg.version != VERSION
|
|
||||||
|| netbuffer->u.clientcfg.subversion != SUBVERSION)
|
|
||||||
SV_SendRefuse(node, va(M_GetText("Different SRB2 versions cannot\nplay a netgame!\n(server version %d.%d.%d)"), VERSION/100, VERSION%100, SUBVERSION));
|
|
||||||
else if (!cv_allownewplayer.value && node && rejoinernum == -1)
|
|
||||||
SV_SendRefuse(node, M_GetText("The server is not accepting\njoins for the moment."));
|
|
||||||
else if (D_NumPlayers() >= cv_maxplayers.value && rejoinernum == -1)
|
|
||||||
SV_SendRefuse(node, va(M_GetText("Maximum players reached: %d"), cv_maxplayers.value));
|
|
||||||
else if (netgame && netbuffer->u.clientcfg.localplayers > 1) // Hacked client?
|
|
||||||
SV_SendRefuse(node, M_GetText("Too many players from\nthis node."));
|
|
||||||
else if (netgame && !netbuffer->u.clientcfg.localplayers) // Stealth join?
|
|
||||||
SV_SendRefuse(node, M_GetText("No players from\nthis node."));
|
|
||||||
else if (luafiletransfers)
|
|
||||||
SV_SendRefuse(node, M_GetText("The server is broadcasting a file\nrequested by a Lua script.\nPlease wait a bit and then\ntry rejoining."));
|
|
||||||
else if (netgame && joindelay > 2 * (tic_t)cv_joindelay.value * TICRATE)
|
|
||||||
SV_SendRefuse(node, va(M_GetText("Too many people are connecting.\nPlease wait %d seconds and then\ntry rejoining."),
|
|
||||||
(joindelay - 2 * cv_joindelay.value * TICRATE) / TICRATE));
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
@ -3817,7 +3945,7 @@ static void HandleConnect(SINT8 node)
|
||||||
static void HandleShutdown(SINT8 node)
|
static void HandleShutdown(SINT8 node)
|
||||||
{
|
{
|
||||||
(void)node;
|
(void)node;
|
||||||
LUAh_GameQuit(false);
|
LUA_HookBool(false, HOOK(GameQuit));
|
||||||
D_QuitNetGame();
|
D_QuitNetGame();
|
||||||
CL_Reset();
|
CL_Reset();
|
||||||
D_StartTitle();
|
D_StartTitle();
|
||||||
|
@ -3832,7 +3960,7 @@ static void HandleShutdown(SINT8 node)
|
||||||
static void HandleTimeout(SINT8 node)
|
static void HandleTimeout(SINT8 node)
|
||||||
{
|
{
|
||||||
(void)node;
|
(void)node;
|
||||||
LUAh_GameQuit(false);
|
LUA_HookBool(false, HOOK(GameQuit));
|
||||||
D_QuitNetGame();
|
D_QuitNetGame();
|
||||||
CL_Reset();
|
CL_Reset();
|
||||||
D_StartTitle();
|
D_StartTitle();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -22,11 +22,15 @@
|
||||||
#include "mserv.h"
|
#include "mserv.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The 'packet version' is used to distinguish packet formats.
|
The 'packet version' is used to distinguish packet
|
||||||
This version is independent of VERSION and SUBVERSION. Different
|
formats. This version is independent of VERSION and
|
||||||
applications may follow different packet versions.
|
SUBVERSION. Different applications may follow different
|
||||||
|
packet versions.
|
||||||
|
|
||||||
|
If you change the struct or the meaning of a field
|
||||||
|
therein, increment this number.
|
||||||
*/
|
*/
|
||||||
#define PACKETVERSION 3
|
#define PACKETVERSION 4
|
||||||
|
|
||||||
// Network play related stuff.
|
// Network play related stuff.
|
||||||
// There is a data struct that stores network
|
// There is a data struct that stores network
|
||||||
|
@ -141,9 +145,6 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT8 version; // Different versions don't work
|
|
||||||
UINT8 subversion; // Contains build version
|
|
||||||
|
|
||||||
// Server launch stuffs
|
// Server launch stuffs
|
||||||
UINT8 serverplayer;
|
UINT8 serverplayer;
|
||||||
UINT8 totalslotnum; // "Slots": highest player number in use plus one.
|
UINT8 totalslotnum; // "Slots": highest player number in use plus one.
|
||||||
|
@ -190,16 +191,19 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT8 _255;/* see serverinfo_pak */
|
UINT8 modversion;
|
||||||
UINT8 packetversion;
|
|
||||||
char application[MAXAPPLICATION];
|
char application[MAXAPPLICATION];
|
||||||
UINT8 version; // Different versions don't work
|
|
||||||
UINT8 subversion; // Contains build version
|
|
||||||
UINT8 localplayers;
|
UINT8 localplayers;
|
||||||
UINT8 mode;
|
UINT8 mode;
|
||||||
char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME];
|
char names[MAXSPLITSCREENPLAYERS][MAXPLAYERNAME];
|
||||||
} ATTRPACK clientconfig_pak;
|
} ATTRPACK clientconfig_pak;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
REFUSE_JOINS_DISABLED = 1,
|
||||||
|
REFUSE_SLOTS_FULL,
|
||||||
|
REFUSE_BANNED,
|
||||||
|
};
|
||||||
|
|
||||||
#define MAXSERVERNAME 32
|
#define MAXSERVERNAME 32
|
||||||
#define MAXFILENEEDED 915
|
#define MAXFILENEEDED 915
|
||||||
// This packet is too large
|
// This packet is too large
|
||||||
|
@ -217,7 +221,7 @@ typedef struct
|
||||||
UINT8 subversion;
|
UINT8 subversion;
|
||||||
UINT8 numberofplayer;
|
UINT8 numberofplayer;
|
||||||
UINT8 maxplayer;
|
UINT8 maxplayer;
|
||||||
UINT8 refusereason; // 0: joinable, 1: joins disabled, 2: full
|
UINT8 refusereason; // 0: joinable, REFUSE enum
|
||||||
char gametypename[24];
|
char gametypename[24];
|
||||||
UINT8 modifiedgame;
|
UINT8 modifiedgame;
|
||||||
UINT8 cheatsenabled;
|
UINT8 cheatsenabled;
|
||||||
|
@ -401,6 +405,7 @@ void CL_Reset(void);
|
||||||
void CL_ClearPlayer(INT32 playernum);
|
void CL_ClearPlayer(INT32 playernum);
|
||||||
void CL_QueryServerList(msg_server_t *list);
|
void CL_QueryServerList(msg_server_t *list);
|
||||||
void CL_UpdateServerList(boolean internetsearch, INT32 room);
|
void CL_UpdateServerList(boolean internetsearch, INT32 room);
|
||||||
|
void CL_RemovePlayer(INT32 playernum, kickreason_t reason);
|
||||||
// Is there a game running
|
// Is there a game running
|
||||||
boolean Playing(void);
|
boolean Playing(void);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
65
src/d_main.c
65
src/d_main.c
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -175,10 +175,53 @@ void D_ProcessEvents(void)
|
||||||
|
|
||||||
boolean eaten;
|
boolean eaten;
|
||||||
|
|
||||||
|
// Reset possibly stale mouse info
|
||||||
|
G_SetMouseDeltas(0, 0, 1);
|
||||||
|
G_SetMouseDeltas(0, 0, 2);
|
||||||
|
mouse.buttons &= ~(MB_SCROLLUP|MB_SCROLLDOWN);
|
||||||
|
mouse2.buttons &= ~(MB_SCROLLUP|MB_SCROLLDOWN);
|
||||||
|
|
||||||
for (; eventtail != eventhead; eventtail = (eventtail+1) & (MAXEVENTS-1))
|
for (; eventtail != eventhead; eventtail = (eventtail+1) & (MAXEVENTS-1))
|
||||||
{
|
{
|
||||||
|
boolean hooked = false;
|
||||||
|
|
||||||
ev = &events[eventtail];
|
ev = &events[eventtail];
|
||||||
|
|
||||||
|
// Set mouse buttons early in case event is eaten later
|
||||||
|
if (ev->type == ev_keydown || ev->type == ev_keyup)
|
||||||
|
{
|
||||||
|
// Mouse buttons
|
||||||
|
if ((UINT32)(ev->data1 - KEY_MOUSE1) < MOUSEBUTTONS)
|
||||||
|
{
|
||||||
|
if (ev->type == ev_keydown)
|
||||||
|
mouse.buttons |= 1 << (ev->data1 - KEY_MOUSE1);
|
||||||
|
else
|
||||||
|
mouse.buttons &= ~(1 << (ev->data1 - KEY_MOUSE1));
|
||||||
|
}
|
||||||
|
else if ((UINT32)(ev->data1 - KEY_2MOUSE1) < MOUSEBUTTONS)
|
||||||
|
{
|
||||||
|
if (ev->type == ev_keydown)
|
||||||
|
mouse2.buttons |= 1 << (ev->data1 - KEY_2MOUSE1);
|
||||||
|
else
|
||||||
|
mouse2.buttons &= ~(1 << (ev->data1 - KEY_2MOUSE1));
|
||||||
|
}
|
||||||
|
// Scroll (has no keyup event)
|
||||||
|
else switch (ev->data1) {
|
||||||
|
case KEY_MOUSEWHEELUP:
|
||||||
|
mouse.buttons |= MB_SCROLLUP;
|
||||||
|
break;
|
||||||
|
case KEY_MOUSEWHEELDOWN:
|
||||||
|
mouse.buttons |= MB_SCROLLDOWN;
|
||||||
|
break;
|
||||||
|
case KEY_2MOUSEWHEELUP:
|
||||||
|
mouse2.buttons |= MB_SCROLLUP;
|
||||||
|
break;
|
||||||
|
case KEY_2MOUSEWHEELDOWN:
|
||||||
|
mouse2.buttons |= MB_SCROLLDOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Screenshots over everything so that they can be taken anywhere.
|
// Screenshots over everything so that they can be taken anywhere.
|
||||||
if (M_ScreenshotResponder(ev))
|
if (M_ScreenshotResponder(ev))
|
||||||
continue; // ate the event
|
continue; // ate the event
|
||||||
|
@ -189,6 +232,12 @@ void D_ProcessEvents(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!CON_Ready() && !menuactive) {
|
||||||
|
if (G_LuaResponder(ev))
|
||||||
|
continue;
|
||||||
|
hooked = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Menu input
|
// Menu input
|
||||||
#ifdef HAVE_THREADS
|
#ifdef HAVE_THREADS
|
||||||
I_lock_mutex(&m_menu_mutex);
|
I_lock_mutex(&m_menu_mutex);
|
||||||
|
@ -203,6 +252,12 @@ void D_ProcessEvents(void)
|
||||||
if (eaten)
|
if (eaten)
|
||||||
continue; // menu ate the event
|
continue; // menu ate the event
|
||||||
|
|
||||||
|
if (!hooked && !CON_Ready()) {
|
||||||
|
if (G_LuaResponder(ev))
|
||||||
|
continue;
|
||||||
|
hooked = true;
|
||||||
|
}
|
||||||
|
|
||||||
// console input
|
// console input
|
||||||
#ifdef HAVE_THREADS
|
#ifdef HAVE_THREADS
|
||||||
I_lock_mutex(&con_mutex);
|
I_lock_mutex(&con_mutex);
|
||||||
|
@ -217,8 +272,16 @@ void D_ProcessEvents(void)
|
||||||
if (eaten)
|
if (eaten)
|
||||||
continue; // ate the event
|
continue; // ate the event
|
||||||
|
|
||||||
|
if (!hooked && G_LuaResponder(ev))
|
||||||
|
continue;
|
||||||
|
|
||||||
G_Responder(ev);
|
G_Responder(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mouse.rdx || mouse.rdy)
|
||||||
|
G_SetMouseDeltas(mouse.rdx, mouse.rdy, 1);
|
||||||
|
if (mouse2.rdx || mouse2.rdy)
|
||||||
|
G_SetMouseDeltas(mouse2.rdx, mouse2.rdy, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2020 by Sonic Team Junior.
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue