mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 09:11:48 +00:00
Merge remote-tracking branch 'stjr/next' into patch-refactor
This commit is contained in:
commit
376022f3d7
66 changed files with 1779 additions and 1429 deletions
4
.gitattributes
vendored
4
.gitattributes
vendored
|
@ -1,15 +1,17 @@
|
||||||
#Source code
|
#Source code
|
||||||
|
/Makefile text=auto
|
||||||
/src/*.c text=auto
|
/src/*.c text=auto
|
||||||
/src/*.h text=auto
|
/src/*.h text=auto
|
||||||
/src/*.s text=auto
|
/src/*.s text=auto
|
||||||
/src/*.m text=auto
|
/src/*.m text=auto
|
||||||
/src/*.xpm text=auto
|
/src/*.xpm text=auto
|
||||||
/src/Makefile text=auto
|
/src/Makefile text=auto
|
||||||
|
/tools/Makefile text=auto
|
||||||
/src/Make*.cfg text=auto
|
/src/Make*.cfg text=auto
|
||||||
/src/CMakeLists.txt text=auto
|
/src/CMakeLists.txt text=auto
|
||||||
|
*.mk -whitespace text=auto
|
||||||
# Windows EOL
|
# Windows EOL
|
||||||
*.cs -crlf -whitespace
|
*.cs -crlf -whitespace
|
||||||
*.mk -crlf -whitespace
|
|
||||||
*.bat -crlf -whitespace
|
*.bat -crlf -whitespace
|
||||||
*.dev -crlf -whitespace
|
*.dev -crlf -whitespace
|
||||||
*.dsp -crlf -whitespace
|
*.dsp -crlf -whitespace
|
||||||
|
|
505
.gitlab-ci.yml
Normal file
505
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,505 @@
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: clone
|
||||||
|
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_CONCURRENT_ID/$CI_PROJECT_PATH
|
||||||
|
|
||||||
|
default:
|
||||||
|
image: debian:stable-slim
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- key: ccache-$CI_PROJECT_PATH_SLUG-$CI_JOB_NAME_SLUG
|
||||||
|
fallback_keys:
|
||||||
|
- cache-$CI_PROJECT_PATH_SLUG-$CI_DEFAULT_BRANCH
|
||||||
|
- cache-$CI_PROJECT_PATH_SLUG-default
|
||||||
|
paths:
|
||||||
|
- ccache
|
||||||
|
- ccache_statslog
|
||||||
|
|
||||||
|
- key: apt-$CI_JOB_IMAGE
|
||||||
|
paths:
|
||||||
|
- apt-cache
|
||||||
|
unprotect: true
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- - |
|
||||||
|
# debconf
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:debconf[collapsed=true]\r\e[0KSetup debconf's environment"
|
||||||
|
- export DEBIAN_FRONTEND="noninteractive"
|
||||||
|
- export DEBIAN_PRIORITY="low"
|
||||||
|
- export DEBCONF_NONINTERACTIVE_SEEN="true"
|
||||||
|
- |
|
||||||
|
# debconf
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:debconf\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# dpkg_aa
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:dpkg_aa[collapsed=true]\r\e[0KAdding architectures to dpkg"
|
||||||
|
- dpkg --add-architecture i386
|
||||||
|
- dpkg --add-architecture amd64
|
||||||
|
- dpkg --add-architecture arm64
|
||||||
|
- |
|
||||||
|
# dpkg_aa
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:dpkg_aa\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# apt_conf
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_conf[collapsed=true]\r\e[0KSetting up APT conf"
|
||||||
|
- export APT_CACHE_DIR=`pwd`/apt-cache
|
||||||
|
- mkdir --parents --verbose $APT_CACHE_DIR/partial/
|
||||||
|
- touch /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# apt.conf
|
||||||
|
echo Adding options to apt.conf':'
|
||||||
|
- |
|
||||||
|
# APT::Install-Recommends
|
||||||
|
echo APT::Install-Recommends "false"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# quit
|
||||||
|
echo quiet "1"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# APT::Get::Assume-Yes
|
||||||
|
echo APT::Get::Assume-Yes "true"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# Dir::Cache::Archives
|
||||||
|
echo Dir::Cache::Archives "$APT_CACHE_DIR"\; | tee --append /etc/apt/apt.conf.d/99build
|
||||||
|
- |
|
||||||
|
# apt_conf
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_conf\r\e[0K"
|
||||||
|
- - |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_update[collapsed=true]\r\e[0KUpdating APT listing"
|
||||||
|
- apt-get update
|
||||||
|
- |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_update\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_pre
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_pre[collapsed=true]\r\e[0KInstalling pre packages"
|
||||||
|
- apt-get install apt-utils
|
||||||
|
- |
|
||||||
|
# apt_pre
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_pre\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_upgrade
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_upgrade[collapsed=true]\r\e[0KUpdating existing packages"
|
||||||
|
- apt-get upgrade
|
||||||
|
- |
|
||||||
|
# apt_update
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_upgrade\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_common
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_common[collapsed=true]\r\e[0KInstalling common packages"
|
||||||
|
- apt-get install make git ccache nasm
|
||||||
|
- |
|
||||||
|
# apt_common
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_common\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# ccache_config
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_config[collapsed=true]\r\e[0KSetting up ccache config"
|
||||||
|
- mkdir --parents --verbose ~/.ccache/
|
||||||
|
- touch ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# cache.conf
|
||||||
|
echo Adding ccache configution option
|
||||||
|
- |
|
||||||
|
# base_dir
|
||||||
|
echo base_dir = $PWD | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# cache_dir
|
||||||
|
echo cache_dir = $PWD/ccache | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# compiler_check
|
||||||
|
echo compiler_check = content | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# stats_log
|
||||||
|
echo stats_log = $PWD/ccache_statslog | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# max_size
|
||||||
|
echo max_size = 50M | tee --append ~/.ccache/ccache.conf
|
||||||
|
- |
|
||||||
|
# ccache_config
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_config\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# cache_reset
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_reset[collapsed=true]\r\e[0KResetting ccache statistics"
|
||||||
|
- ccache --zero-stats
|
||||||
|
- ccache --show-stats
|
||||||
|
- |
|
||||||
|
# ccache_reset
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_reset\r\e[0K"
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME_SLUG"
|
||||||
|
|
||||||
|
after_script:
|
||||||
|
- - |
|
||||||
|
# apt_clean
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_clean[collapsed=true]\r\e[0KCleaning of unneeded APT packages"
|
||||||
|
- apt-get autoclean
|
||||||
|
- |
|
||||||
|
# apt_clean
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_clean\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# ccache_stats
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:ccache_stats[collapsed=true]\r\e[0Kccache statistics:"
|
||||||
|
- ccache --show-stats --verbose
|
||||||
|
- ccache --show-log-stats --verbose
|
||||||
|
- |
|
||||||
|
# ccahe_stats
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:ccache_stats\r\e[0K"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- build
|
||||||
|
|
||||||
|
Debian testing GCC:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
image: debian:testing-slim
|
||||||
|
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-gcc"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev libpng-dev libcurl4-openssl-dev libgme-dev libopenmpt-dev
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Windows x86:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: on_success
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Win32"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-Win32"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PREFIX: i686-w64-mingw32
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-mingw-w64-i686-win32
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW=1 SDL=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW=1 SDL=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:amd64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: on_success
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian amd64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-x86-64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: x86_64-linux-gnu-gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
OBJCOPY: x86_64-linux-gnu-objcopy
|
||||||
|
OBJDUMP: x86_64-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-x86-64-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64 libgme-dev:amd64 libopenmpt-dev:amd64
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:i386:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian i386"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-i686"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: i686-linux-gnu-gcc
|
||||||
|
OBJCOPY: i686-linux-gnu-objcopy
|
||||||
|
OBJDUMP: i686-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-i686-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:i386 libpng-dev:i386 libcurl4-openssl-dev:i386 libgme-dev:i386 libopenmpt-dev:i386
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable:arm64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Debian arm64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-aarch64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: aarch64-linux-gnu-gcc
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
OBJCOPY: aarch64-linux-gnu-objcopy
|
||||||
|
OBJDUMP: aarch64-linux-gnu-objdump
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-aarch64-linux-gnu || apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libgme-dev:arm64 libopenmpt-dev:arm64
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 ERRORMODE=1 NONX86=1C || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 LINUX64=1 NONX86=1 ARM64=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Windows x64:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- "bin/"
|
||||||
|
- "src/comptime.h"
|
||||||
|
expose_as: "Win64"
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-Win64"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PREFIX: x86_64-w64-mingw32
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc-mingw-w64-x86-64-win32
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW64=1 SDL=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 MINGW64=1 SDL=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable Clang:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-clang"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: clang
|
||||||
|
WFLAGS: -Wno-cast-align
|
||||||
|
CFLAGS: -Wno-cast-align
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install clang
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install libsdl2-mixer-dev libpng-dev libcurl4-openssl-dev libgme-dev libopenmpt-dev
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian stable musl:
|
||||||
|
stage: build
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-musl"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: musl-gcc
|
||||||
|
LDD: musl-ldd
|
||||||
|
|
||||||
|
script:
|
||||||
|
- - |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_toolchain[collapsed=true]\r\e[0KInstalling toolchain packages"
|
||||||
|
- apt-get install gcc
|
||||||
|
- |
|
||||||
|
# apt_toolchain
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_toolchain\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
|
||||||
|
- apt-get install musl-tools
|
||||||
|
- |
|
||||||
|
# apt_development
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
|
||||||
|
|
||||||
|
- - |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
|
||||||
|
- make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 SDL=0 NOHW=1 NOZLIB=1 NOCURL=1 NOGME=1 NOOPENMPT=1 || make --directory=src --keep-going CCACHE=1 ERRORMODE=1 NONX86=1 SDL=0 NOHW=1 NOZLIB=1 NOCURL=1 NOGME=1 NOOPENMPT=1
|
||||||
|
- |
|
||||||
|
# make
|
||||||
|
echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
|
||||||
|
|
||||||
|
Debian testing Clang:
|
||||||
|
extends: Debian stable Clang
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
image: debian:testing-slim
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-clang"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: clang
|
||||||
|
WFLAGS: -Wno-cast-align -Wno-deprecated-non-prototype
|
||||||
|
CFLAGS: -Wno-cast-align -Wno-deprecated-non-prototype
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
||||||
|
|
||||||
|
Debian testing musl:
|
||||||
|
extends: Debian stable musl
|
||||||
|
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
image: debian:testing-slim
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-musl"
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CC: musl-gcc
|
||||||
|
LDD: musl-ldd
|
||||||
|
LDFLAGS: -Wl,-fuse-ld=gold
|
|
@ -3,12 +3,12 @@ ifdef ComSpec
|
||||||
COMSPEC=$(ComSpec)
|
COMSPEC=$(ComSpec)
|
||||||
endif
|
endif
|
||||||
ifdef COMSPEC
|
ifdef COMSPEC
|
||||||
OBJCOPY=objcopy.exe
|
OBJCOPY?=objcopy.exe
|
||||||
OBJDUMP=objdump.exe
|
OBJDUMP?=objdump.exe
|
||||||
GZIP?=gzip.exe
|
GZIP?=gzip.exe
|
||||||
else
|
else
|
||||||
OBJCOPY=objcopy
|
OBJCOPY?=objcopy
|
||||||
OBJDUMP=objdump
|
OBJDUMP?=objdump
|
||||||
GZIP?=gzip
|
GZIP?=gzip
|
||||||
endif
|
endif
|
||||||
DBGNAME=$(BIN).debug
|
DBGNAME=$(BIN).debug
|
||||||
|
|
|
@ -140,9 +140,9 @@ endif
|
||||||
|
|
||||||
OBJDUMP_OPTS?=--wide --source --line-numbers
|
OBJDUMP_OPTS?=--wide --source --line-numbers
|
||||||
|
|
||||||
OBJCOPY:=$(call Prefix,objcopy)
|
OBJCOPY?=$(call Prefix,objcopy)
|
||||||
OBJDUMP:=$(call Prefix,objdump)
|
OBJDUMP?=$(call Prefix,objdump)
|
||||||
WINDRES:=$(call Prefix,windres)
|
WINDRES?=$(call Prefix,windres)
|
||||||
|
|
||||||
GZIP?=gzip
|
GZIP?=gzip
|
||||||
GZIP_OPTS?=-9 -f -n
|
GZIP_OPTS?=-9 -f -n
|
||||||
|
|
|
@ -56,15 +56,18 @@ endif
|
||||||
|
|
||||||
# This must have high to low order.
|
# This must have high to low order.
|
||||||
gcc_versions:=\
|
gcc_versions:=\
|
||||||
102 101\
|
132 131 130\
|
||||||
93 92 91\
|
123 122 121 120\
|
||||||
84 83 82 81\
|
114 113 112 111 110\
|
||||||
75 74 73 72 71\
|
105 104 103 102 101 100\
|
||||||
64 63 62 61\
|
95 94 93 92 91 90\
|
||||||
55 54 53 52 51\
|
85 84 83 82 81 80\
|
||||||
|
75 74 73 72 71 70\
|
||||||
|
64 63 62 61 60\
|
||||||
|
55 54 53 52 51 50\
|
||||||
49 48 47 46 45 44 43 42 41 40
|
49 48 47 46 45 44 43 42 41 40
|
||||||
|
|
||||||
latest_gcc_version:=10.2
|
latest_gcc_version:=13.2
|
||||||
|
|
||||||
# Automatically set version flag, but not if one was
|
# Automatically set version flag, but not if one was
|
||||||
# manually set. And don't bother if this is a clean only
|
# manually set. And don't bother if this is a clean only
|
||||||
|
@ -74,13 +77,18 @@ ifeq (,$(call Wildvar,GCC% destructive))
|
||||||
# can't use $(CC) --version here since that uses argv[0] to display the name
|
# can't use $(CC) --version here since that uses argv[0] to display the name
|
||||||
# also gcc outputs the information to stderr, so I had to do 2>&1
|
# also gcc outputs the information to stderr, so I had to do 2>&1
|
||||||
# this program really doesn't like identifying itself
|
# this program really doesn't like identifying itself
|
||||||
version:=$(shell $(CC) -v 2>&1)
|
shellversion:=$(shell $(CC) -v 2>&1)
|
||||||
|
# Try to remove "-win32"
|
||||||
|
version:=$(subst -win32,.0,$(shellversion))
|
||||||
|
|
||||||
# check if this is in fact GCC
|
# check if this is in fact GCC
|
||||||
ifneq (,$(findstring gcc version,$(version)))
|
ifneq (,$(findstring gcc version,$(version)))
|
||||||
|
|
||||||
# in stark contrast to the name, gcc will give me a nicely formatted version number for free
|
# in stark contrast to the name, gcc will give me a nicely formatted version number for free
|
||||||
version:=$(shell $(CC) -dumpfullversion)
|
shellversion:=$(shell $(CC) -dumpfullversion)
|
||||||
|
|
||||||
|
# Try to remove "-win32"
|
||||||
|
version:=$(subst -win32,.0,$(shellversion))
|
||||||
|
|
||||||
# Turn version into words of major, minor
|
# Turn version into words of major, minor
|
||||||
v:=$(subst ., ,$(version))
|
v:=$(subst ., ,$(version))
|
||||||
|
|
|
@ -1,66 +1,66 @@
|
||||||
#
|
#
|
||||||
# Makefile for feature flags.
|
# Makefile for feature flags.
|
||||||
#
|
#
|
||||||
|
|
||||||
passthru_opts+=\
|
passthru_opts+=\
|
||||||
NO_IPV6 NOHW NOMD5 NOPOSTPROCESSING\
|
NO_IPV6 NOHW NOMD5 NOPOSTPROCESSING\
|
||||||
MOBJCONSISTANCY PACKETDROP ZDEBUG\
|
MOBJCONSISTANCY PACKETDROP ZDEBUG\
|
||||||
HAVE_MINIUPNPC\
|
HAVE_MINIUPNPC\
|
||||||
|
|
||||||
# build with debugging information
|
# build with debugging information
|
||||||
ifdef DEBUGMODE
|
ifdef DEBUGMODE
|
||||||
PACKETDROP=1
|
PACKETDROP=1
|
||||||
opts+=-DPARANOIA -DRANGECHECK
|
opts+=-DPARANOIA -DRANGECHECK
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef NOHW
|
ifndef NOHW
|
||||||
opts+=-DHWRENDER
|
opts+=-DHWRENDER
|
||||||
sources+=$(call List,hardware/Sourcefile)
|
sources+=$(call List,hardware/Sourcefile)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef NOMD5
|
ifndef NOMD5
|
||||||
sources+=md5.c
|
sources+=md5.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef NOZLIB
|
ifndef NOZLIB
|
||||||
ifndef NOPNG
|
ifndef NOPNG
|
||||||
ifdef PNG_PKGCONFIG
|
ifdef PNG_PKGCONFIG
|
||||||
$(eval $(call Use_pkg_config,PNG_PKGCONFIG))
|
$(eval $(call Use_pkg_config,PNG_PKGCONFIG))
|
||||||
else
|
else
|
||||||
PNG_CONFIG?=$(call Prefix,libpng-config)
|
PNG_CONFIG?=$(call Prefix,libpng-config)
|
||||||
$(eval $(call Configure,PNG,$(PNG_CONFIG) \
|
$(eval $(call Configure,PNG,$(PNG_CONFIG) \
|
||||||
$(if $(PNG_STATIC),--static),,--ldflags))
|
$(if $(PNG_STATIC),--static),,--ldflags))
|
||||||
endif
|
endif
|
||||||
ifdef LINUX
|
ifdef LINUX
|
||||||
opts+=-D_LARGEFILE64_SOURCE
|
opts+=-D_LARGEFILE64_SOURCE
|
||||||
endif
|
endif
|
||||||
opts+=-DHAVE_PNG
|
opts+=-DHAVE_PNG
|
||||||
sources+=apng.c
|
sources+=apng.c
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef NOCURL
|
ifndef NOCURL
|
||||||
CURLCONFIG?=curl-config
|
CURLCONFIG?=curl-config
|
||||||
$(eval $(call Configure,CURL,$(CURLCONFIG)))
|
$(eval $(call Configure,CURL,$(CURLCONFIG)))
|
||||||
opts+=-DHAVE_CURL
|
opts+=-DHAVE_CURL
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef HAVE_MINIUPNPC
|
ifdef HAVE_MINIUPNPC
|
||||||
libs+=-lminiupnpc
|
libs+=-lminiupnpc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# (Valgrind is a memory debugger.)
|
# (Valgrind is a memory debugger.)
|
||||||
ifdef VALGRIND
|
ifdef VALGRIND
|
||||||
VALGRIND_PKGCONFIG?=valgrind
|
VALGRIND_PKGCONFIG?=valgrind
|
||||||
$(eval $(call Use_pkg_config,VALGRIND))
|
$(eval $(call Use_pkg_config,VALGRIND))
|
||||||
ZDEBUG=1
|
ZDEBUG=1
|
||||||
opts+=-DHAVE_VALGRIND
|
opts+=-DHAVE_VALGRIND
|
||||||
endif
|
endif
|
||||||
|
|
||||||
default_packages:=\
|
default_packages:=\
|
||||||
GME/libgme/LIBGME\
|
GME/libgme/LIBGME\
|
||||||
OPENMPT/libopenmpt/LIBOPENMPT\
|
OPENMPT/libopenmpt/LIBOPENMPT\
|
||||||
ZLIB/zlib\
|
ZLIB/zlib\
|
||||||
|
|
||||||
$(foreach p,$(default_packages),\
|
$(foreach p,$(default_packages),\
|
||||||
$(eval $(call Check_pkg_config,$(p))))
|
$(eval $(call Check_pkg_config,$(p))))
|
||||||
|
|
|
@ -543,13 +543,13 @@ static void CON_RecalcSize(void)
|
||||||
con_scalefactor = 1;
|
con_scalefactor = 1;
|
||||||
break;
|
break;
|
||||||
case V_SMALLSCALEPATCH:
|
case V_SMALLSCALEPATCH:
|
||||||
con_scalefactor = vid.smalldupx;
|
con_scalefactor = vid.smalldup;
|
||||||
break;
|
break;
|
||||||
case V_MEDSCALEPATCH:
|
case V_MEDSCALEPATCH:
|
||||||
con_scalefactor = vid.meddupx;
|
con_scalefactor = vid.meddup;
|
||||||
break;
|
break;
|
||||||
default: // Full scaling
|
default: // Full scaling
|
||||||
con_scalefactor = vid.dupx;
|
con_scalefactor = vid.dup;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,7 +667,7 @@ static void CON_MoveConsole(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not instant - Increment fracmovement fractionally
|
// Not instant - Increment fracmovement fractionally
|
||||||
fracmovement += FixedMul(cons_speed.value*vid.fdupy, renderdeltatics);
|
fracmovement += FixedMul(cons_speed.value*vid.fdup, renderdeltatics);
|
||||||
|
|
||||||
if (con_curlines < con_destlines) // Move the console downwards
|
if (con_curlines < con_destlines) // Move the console downwards
|
||||||
{
|
{
|
||||||
|
@ -1764,9 +1764,9 @@ static void CON_DrawBackpic(void)
|
||||||
con_backpic = W_CachePatchNum(piclump, PU_PATCH);
|
con_backpic = W_CachePatchNum(piclump, PU_PATCH);
|
||||||
|
|
||||||
// Center the backpic, and draw a vertically cropped patch.
|
// Center the backpic, and draw a vertically cropped patch.
|
||||||
w = (con_backpic->width * vid.dupx);
|
w = con_backpic->width * vid.dup;
|
||||||
x = (vid.width / 2) - (w / 2);
|
x = (vid.width / 2) - (w / 2);
|
||||||
h = con_curlines/vid.dupy;
|
h = con_curlines/vid.dup;
|
||||||
|
|
||||||
// If the patch doesn't fill the entire screen,
|
// If the patch doesn't fill the entire screen,
|
||||||
// then fill the sides with a solid color.
|
// then fill the sides with a solid color.
|
||||||
|
|
|
@ -1614,6 +1614,9 @@ void D_SRB2Main(void)
|
||||||
if (D_CheckNetGame())
|
if (D_CheckNetGame())
|
||||||
autostart = true;
|
autostart = true;
|
||||||
|
|
||||||
|
if (!dedicated)
|
||||||
|
pickedchar = R_SkinAvailable(cv_defaultskin.string);
|
||||||
|
|
||||||
// check for a driver that wants intermission stats
|
// check for a driver that wants intermission stats
|
||||||
// start the apropriate game based on parms
|
// start the apropriate game based on parms
|
||||||
if (M_CheckParm("-metal"))
|
if (M_CheckParm("-metal"))
|
||||||
|
@ -1627,8 +1630,6 @@ void D_SRB2Main(void)
|
||||||
autostart = true;
|
autostart = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pickedchar = R_SkinAvailable(cv_defaultskin.string);
|
|
||||||
|
|
||||||
// user settings come before "+" parameters.
|
// user settings come before "+" parameters.
|
||||||
if (dedicated)
|
if (dedicated)
|
||||||
COM_ImmedExecute(va("exec \"%s"PATHSEP"adedserv.cfg\"\n", srb2home));
|
COM_ImmedExecute(va("exec \"%s"PATHSEP"adedserv.cfg\"\n", srb2home));
|
||||||
|
|
|
@ -607,6 +607,7 @@ typedef struct player_s
|
||||||
|
|
||||||
tic_t jointime; // Timer when player joins game to change skin/color
|
tic_t jointime; // Timer when player joins game to change skin/color
|
||||||
tic_t quittime; // Time elapsed since user disconnected, zero if connected
|
tic_t quittime; // Time elapsed since user disconnected, zero if connected
|
||||||
|
tic_t lastinputtime; // the last tic the player has made any input
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
fixed_t fovadd; // adjust FOV for hw rendering
|
fixed_t fovadd; // adjust FOV for hw rendering
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -297,7 +297,8 @@ static int ScanConstants(lua_State *L, boolean mathlib, const char *word)
|
||||||
CacheAndPushConstant(L, word, (lua_Integer)PF_FULLSTASIS);
|
CacheAndPushConstant(L, word, (lua_Integer)PF_FULLSTASIS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (fastcmp(p, "USEDOWN")) // Remove case when 2.3 nears release...
|
// TODO: 2.3: Delete this alias
|
||||||
|
else if (fastcmp(p, "USEDOWN"))
|
||||||
{
|
{
|
||||||
CacheAndPushConstant(L, word, (lua_Integer)PF_SPINDOWN);
|
CacheAndPushConstant(L, word, (lua_Integer)PF_SPINDOWN);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -583,7 +584,8 @@ static int ScanConstants(lua_State *L, boolean mathlib, const char *word)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fastcmp(word, "BT_USE")) // Remove case when 2.3 nears release...
|
// TODO: 2.3: Delete this alias
|
||||||
|
if (fastcmp(word, "BT_USE"))
|
||||||
{
|
{
|
||||||
CacheAndPushConstant(L, word, (lua_Integer)BT_SPIN);
|
CacheAndPushConstant(L, word, (lua_Integer)BT_SPIN);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -771,8 +773,7 @@ int LUA_SOCLib(lua_State *L)
|
||||||
lua_register(L,"getActionName",lib_getActionName);
|
lua_register(L,"getActionName",lib_getActionName);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_ACTION);
|
luaL_newmetatable(L, META_ACTION);
|
||||||
lua_pushcfunction(L, action_call);
|
LUA_SetCFunctionField(L, "__call", action_call);
|
||||||
lua_setfield(L, -2, "__call");
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -911,6 +911,7 @@ static void readspriteframe(MYFILE *f, spriteinfo_t *sprinfo, UINT8 frame)
|
||||||
sprinfo->pivot[frame].x = value;
|
sprinfo->pivot[frame].x = value;
|
||||||
else if (fastcmp(word, "YPIVOT"))
|
else if (fastcmp(word, "YPIVOT"))
|
||||||
sprinfo->pivot[frame].y = value;
|
sprinfo->pivot[frame].y = value;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
else if (fastcmp(word, "ROTAXIS"))
|
else if (fastcmp(word, "ROTAXIS"))
|
||||||
deh_warning("SpriteInfo: ROTAXIS is deprecated and will be removed.");
|
deh_warning("SpriteInfo: ROTAXIS is deprecated and will be removed.");
|
||||||
else
|
else
|
||||||
|
@ -1617,6 +1618,7 @@ void readlevelheader(MYFILE *f, INT32 num)
|
||||||
sizeof(mapheaderinfo[num-1]->musname), va("Level header %d: music", num));
|
sizeof(mapheaderinfo[num-1]->musname), va("Level header %d: music", num));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// TODO: 2.3: Delete
|
||||||
else if (fastcmp(word, "MUSICSLOT"))
|
else if (fastcmp(word, "MUSICSLOT"))
|
||||||
deh_warning("Level header %d: MusicSlot parameter is deprecated and will be removed.\nUse \"Music\" instead.", num);
|
deh_warning("Level header %d: MusicSlot parameter is deprecated and will be removed.\nUse \"Music\" instead.", num);
|
||||||
else if (fastcmp(word, "MUSICTRACK"))
|
else if (fastcmp(word, "MUSICTRACK"))
|
||||||
|
|
|
@ -1933,6 +1933,13 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_SMALLGRABCHAIN",
|
"S_SMALLGRABCHAIN",
|
||||||
"S_BIGGRABCHAIN",
|
"S_BIGGRABCHAIN",
|
||||||
|
|
||||||
|
// Blue spring on a ball
|
||||||
|
"S_BLUESPRINGBALL",
|
||||||
|
"S_BLUESPRINGBALL2",
|
||||||
|
"S_BLUESPRINGBALL3",
|
||||||
|
"S_BLUESPRINGBALL4",
|
||||||
|
"S_BLUESPRINGBALL5",
|
||||||
|
|
||||||
// Yellow spring on a ball
|
// Yellow spring on a ball
|
||||||
"S_YELLOWSPRINGBALL",
|
"S_YELLOWSPRINGBALL",
|
||||||
"S_YELLOWSPRINGBALL2",
|
"S_YELLOWSPRINGBALL2",
|
||||||
|
@ -3891,6 +3898,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_BIGMACE", // Big Mace
|
"MT_BIGMACE", // Big Mace
|
||||||
"MT_SMALLGRABCHAIN", // Small Grab Chain
|
"MT_SMALLGRABCHAIN", // Small Grab Chain
|
||||||
"MT_BIGGRABCHAIN", // Big Grab Chain
|
"MT_BIGGRABCHAIN", // Big Grab Chain
|
||||||
|
"MT_BLUESPRINGBALL", // Blue spring on a ball
|
||||||
"MT_YELLOWSPRINGBALL", // Yellow spring on a ball
|
"MT_YELLOWSPRINGBALL", // Yellow spring on a ball
|
||||||
"MT_REDSPRINGBALL", // Red spring on a ball
|
"MT_REDSPRINGBALL", // Red spring on a ball
|
||||||
"MT_SMALLFIREBAR", // Small Firebar
|
"MT_SMALLFIREBAR", // Small Firebar
|
||||||
|
|
|
@ -14,13 +14,18 @@ size_t I_GetFreeMem(size_t *total)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_Sleep(UINT32 ms){}
|
void I_Sleep(UINT32 ms)
|
||||||
|
{
|
||||||
|
(void)ms;
|
||||||
|
}
|
||||||
|
|
||||||
precise_t I_GetPreciseTime(void) {
|
precise_t I_GetPreciseTime(void)
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT64 I_GetPrecisePrecision(void) {
|
UINT64 I_GetPrecisePrecision(void)
|
||||||
|
{
|
||||||
return 1000000;
|
return 1000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,10 +187,12 @@ const char *I_ClipboardPaste(void)
|
||||||
|
|
||||||
size_t I_GetRandomBytes(char *destination, size_t amount)
|
size_t I_GetRandomBytes(char *destination, size_t amount)
|
||||||
{
|
{
|
||||||
|
(void)destination;
|
||||||
|
(void)amount;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_RegisterSysCommands(void) {}
|
void I_RegisterSysCommands(void){}
|
||||||
|
|
||||||
void I_GetCursorPosition(INT32 *x, INT32 *y)
|
void I_GetCursorPosition(INT32 *x, INT32 *y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1327,7 +1327,7 @@ void F_CreditDrawer(void)
|
||||||
y += 12<<FRACBITS;
|
y += 12<<FRACBITS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (FixedMul(y,vid.dupy) > vid.height)
|
if (FixedMul(y,vid.dup) > vid.height)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1362,7 +1362,7 @@ void F_CreditTicker(void)
|
||||||
case 1: y += 30<<FRACBITS; break;
|
case 1: y += 30<<FRACBITS; break;
|
||||||
default: y += 12<<FRACBITS; break;
|
default: y += 12<<FRACBITS; break;
|
||||||
}
|
}
|
||||||
if (FixedMul(y,vid.dupy) > vid.height)
|
if (FixedMul(y,vid.dup) > vid.height)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2082,7 +2082,7 @@ void F_EndingDrawer(void)
|
||||||
if (goodending && finalecount >= TICRATE && finalecount < INFLECTIONPOINT)
|
if (goodending && finalecount >= TICRATE && finalecount < INFLECTIONPOINT)
|
||||||
{
|
{
|
||||||
INT32 workingtime = finalecount - TICRATE;
|
INT32 workingtime = finalecount - TICRATE;
|
||||||
fixed_t radius = ((vid.width/vid.dupx)*(INFLECTIONPOINT - TICRATE - workingtime))/(INFLECTIONPOINT - TICRATE);
|
fixed_t radius = ((vid.width/vid.dup)*(INFLECTIONPOINT - TICRATE - workingtime))/(INFLECTIONPOINT - TICRATE);
|
||||||
angle_t fa;
|
angle_t fa;
|
||||||
INT32 eemeralds_cur[4];
|
INT32 eemeralds_cur[4];
|
||||||
char patchname[7] = "CEMGx0";
|
char patchname[7] = "CEMGx0";
|
||||||
|
@ -2287,7 +2287,6 @@ void F_InitMenuPresValues(void)
|
||||||
void F_SkyScroll(const char *patchname)
|
void F_SkyScroll(const char *patchname)
|
||||||
{
|
{
|
||||||
INT32 x, basey = 0;
|
INT32 x, basey = 0;
|
||||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
patch_t *pat;
|
patch_t *pat;
|
||||||
|
|
||||||
if (rendermode == render_none)
|
if (rendermode == render_none)
|
||||||
|
@ -2315,17 +2314,17 @@ void F_SkyScroll(const char *patchname)
|
||||||
curbgy %= pat->height * 16;
|
curbgy %= pat->height * 16;
|
||||||
|
|
||||||
// Ooh, fancy frame interpolation
|
// Ooh, fancy frame interpolation
|
||||||
x = ((curbgx*dupz) + FixedInt((rendertimefrac-FRACUNIT) * curbgxspeed*dupz)) / 16;
|
x = ((curbgx*vid.dup) + FixedInt((rendertimefrac-FRACUNIT) * curbgxspeed*vid.dup)) / 16;
|
||||||
basey = ((curbgy*dupz) + FixedInt((rendertimefrac-FRACUNIT) * curbgyspeed*dupz)) / 16;
|
basey = ((curbgy*vid.dup) + FixedInt((rendertimefrac-FRACUNIT) * curbgyspeed*vid.dup)) / 16;
|
||||||
|
|
||||||
if (x > 0) // Make sure that we don't leave the left or top sides empty
|
if (x > 0) // Make sure that we don't leave the left or top sides empty
|
||||||
x -= pat->width * dupz;
|
x -= pat->width * vid.dup;
|
||||||
if (basey > 0)
|
if (basey > 0)
|
||||||
basey -= pat->height * dupz;
|
basey -= pat->height * vid.dup;
|
||||||
|
|
||||||
for (; x < vid.width; x += pat->width * dupz)
|
for (; x < vid.width; x += pat->width * vid.dup)
|
||||||
{
|
{
|
||||||
for (INT32 y = basey; y < vid.height; y += pat->height * dupz)
|
for (INT32 y = basey; y < vid.height; y += pat->height * vid.dup)
|
||||||
V_DrawScaledPatch(x, y, V_NOSCALESTART, pat);
|
V_DrawScaledPatch(x, y, V_NOSCALESTART, pat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2603,7 +2602,7 @@ static void F_LoadAlacroixGraphics(SINT8 newttscale)
|
||||||
|
|
||||||
static void F_FigureActiveTtScale(void)
|
static void F_FigureActiveTtScale(void)
|
||||||
{
|
{
|
||||||
SINT8 newttscale = max(1, min(6, vid.dupx));
|
SINT8 newttscale = max(1, min(6, vid.dup));
|
||||||
SINT8 oldttscale = activettscale;
|
SINT8 oldttscale = activettscale;
|
||||||
|
|
||||||
if (newttscale == testttscale)
|
if (newttscale == testttscale)
|
||||||
|
@ -4095,7 +4094,7 @@ static fixed_t F_GetPromptHideHudBound(void)
|
||||||
F_GetPageTextGeometry(&pagelines, &rightside, &boxh, &texth, &texty, &namey, &chevrony, &textx, &textr);
|
F_GetPageTextGeometry(&pagelines, &rightside, &boxh, &texth, &texty, &namey, &chevrony, &textx, &textr);
|
||||||
|
|
||||||
// calc boxheight (see V_DrawPromptBack)
|
// calc boxheight (see V_DrawPromptBack)
|
||||||
boxh *= vid.dupy;
|
boxh *= vid.dup;
|
||||||
boxh = (boxh * 4) + (boxh/2)*5; // 4 lines of space plus gaps between and some leeway
|
boxh = (boxh * 4) + (boxh/2)*5; // 4 lines of space plus gaps between and some leeway
|
||||||
|
|
||||||
// return a coordinate to check
|
// return a coordinate to check
|
||||||
|
|
94
src/g_demo.c
94
src/g_demo.c
|
@ -1492,8 +1492,9 @@ void G_BeginRecording(void)
|
||||||
demo_p += 16;
|
demo_p += 16;
|
||||||
|
|
||||||
// Skin
|
// Skin
|
||||||
for (i = 0; i < 16 && cv_skin.string[i]; i++)
|
const char *skinname = skins[players[0].skin].name;
|
||||||
name[i] = cv_skin.string[i];
|
for (i = 0; i < 16 && skinname[i]; i++)
|
||||||
|
name[i] = skinname[i];
|
||||||
for (; i < 16; i++)
|
for (; i < 16; i++)
|
||||||
name[i] = '\0';
|
name[i] = '\0';
|
||||||
M_Memcpy(demo_p,name,16);
|
M_Memcpy(demo_p,name,16);
|
||||||
|
@ -1891,16 +1892,9 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
p++; // VERSION
|
p++; // VERSION
|
||||||
p++; // SUBVERSION
|
p++; // SUBVERSION
|
||||||
oldversion = READUINT16(p);
|
oldversion = READUINT16(p);
|
||||||
switch(oldversion) // demoversion
|
if (oldversion < 0x000c || oldversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
// too old (or new), cannot support
|
||||||
case 0x000f: // The previous demoversions also supported
|
|
||||||
case 0x000e:
|
|
||||||
case 0x000d: // all that changed between then and now was longer color name
|
|
||||||
case 0x000c:
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
||||||
Z_Free(buffer);
|
Z_Free(buffer);
|
||||||
return UINT8_MAX;
|
return UINT8_MAX;
|
||||||
|
@ -1973,14 +1967,11 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
lumpnum_t l;
|
lumpnum_t l;
|
||||||
char skin[17],color[MAXCOLORNAME+1],*n,*pdemoname;
|
char skin[17],color[MAXCOLORNAME+1],*n,*pdemoname;
|
||||||
UINT8 version,subversion,charability,charability2,thrustfactor,accelstart,acceleration,cnamelen;
|
UINT8 version,subversion,charability,charability2,thrustfactor,accelstart,acceleration;
|
||||||
pflags_t pflags;
|
pflags_t pflags;
|
||||||
UINT32 randseed, followitem;
|
UINT32 randseed, followitem;
|
||||||
fixed_t camerascale,shieldscale,actionspd,mindash,maxdash,normalspeed,runspeed,jumpfactor,height,spinheight;
|
fixed_t camerascale,shieldscale,actionspd,mindash,maxdash,normalspeed,runspeed,jumpfactor,height,spinheight;
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
#ifdef OLD22DEMOCOMPAT
|
|
||||||
boolean use_old_demo_vars = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
skin[16] = '\0';
|
skin[16] = '\0';
|
||||||
color[MAXCOLORNAME] = '\0';
|
color[MAXCOLORNAME] = '\0';
|
||||||
|
@ -2039,23 +2030,13 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
subversion = READUINT8(demo_p);
|
subversion = READUINT8(demo_p);
|
||||||
demoversion = READUINT16(demo_p);
|
demoversion = READUINT16(demo_p);
|
||||||
demo_forwardmove_rng = (demoversion < 0x0010);
|
demo_forwardmove_rng = (demoversion < 0x0010);
|
||||||
switch(demoversion)
|
|
||||||
{
|
|
||||||
case 0x000f:
|
|
||||||
case 0x000d:
|
|
||||||
case 0x000e:
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
cnamelen = MAXCOLORNAME;
|
|
||||||
break;
|
|
||||||
#ifdef OLD22DEMOCOMPAT
|
#ifdef OLD22DEMOCOMPAT
|
||||||
// all that changed between then and now was longer color name
|
if (demoversion < 0x000c || demoversion > DEMOVERSION)
|
||||||
case 0x000c:
|
#else
|
||||||
cnamelen = 16;
|
if (demoversion < 0x000d || demoversion > DEMOVERSION)
|
||||||
use_old_demo_vars = true;
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
{
|
||||||
default:
|
// too old (or new), cannot support
|
||||||
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
CONS_Alert(CONS_ERROR, "%s", msg);
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
M_StartMessage(msg, NULL, MM_NOTHING);
|
||||||
|
@ -2182,8 +2163,8 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
demo_p += 16;
|
demo_p += 16;
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
M_Memcpy(color,demo_p,cnamelen);
|
M_Memcpy(color, demo_p, (demoversion < 0x000d) ? 16 : MAXCOLORNAME);
|
||||||
demo_p += cnamelen;
|
demo_p += (demoversion < 0x000d) ? 16 : MAXCOLORNAME;
|
||||||
|
|
||||||
charability = READUINT8(demo_p);
|
charability = READUINT8(demo_p);
|
||||||
charability2 = READUINT8(demo_p);
|
charability2 = READUINT8(demo_p);
|
||||||
|
@ -2219,7 +2200,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
|
|
||||||
// net var data
|
// net var data
|
||||||
#ifdef OLD22DEMOCOMPAT
|
#ifdef OLD22DEMOCOMPAT
|
||||||
if (use_old_demo_vars)
|
if (demoversion < 0x000d)
|
||||||
CV_LoadOldDemoVars(&demo_p);
|
CV_LoadOldDemoVars(&demo_p);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -2352,19 +2333,13 @@ UINT8 G_CheckDemoForError(char *defdemoname)
|
||||||
demo_p++; // version
|
demo_p++; // version
|
||||||
demo_p++; // subversion
|
demo_p++; // subversion
|
||||||
our_demo_version = READUINT16(demo_p);
|
our_demo_version = READUINT16(demo_p);
|
||||||
switch(our_demo_version)
|
|
||||||
{
|
|
||||||
case 0x000d:
|
|
||||||
case 0x000e:
|
|
||||||
case 0x000f:
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
break;
|
|
||||||
#ifdef OLD22DEMOCOMPAT
|
#ifdef OLD22DEMOCOMPAT
|
||||||
case 0x000c:
|
if (our_demo_version < 0x000c || our_demo_version > DEMOVERSION)
|
||||||
break;
|
#else
|
||||||
|
if (our_demo_version < 0x000d || our_demo_version > DEMOVERSION)
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
{
|
||||||
default:
|
// too old (or new), cannot support
|
||||||
return DFILE_ERROR_NOTDEMO;
|
return DFILE_ERROR_NOTDEMO;
|
||||||
}
|
}
|
||||||
demo_p += 16; // demo checksum
|
demo_p += 16; // demo checksum
|
||||||
|
@ -2386,7 +2361,6 @@ void G_AddGhost(char *defdemoname)
|
||||||
INT32 i;
|
INT32 i;
|
||||||
lumpnum_t l;
|
lumpnum_t l;
|
||||||
char name[17],skin[17],color[MAXCOLORNAME+1],*n,*pdemoname,md5[16];
|
char name[17],skin[17],color[MAXCOLORNAME+1],*n,*pdemoname,md5[16];
|
||||||
UINT8 cnamelen;
|
|
||||||
demoghost *gh;
|
demoghost *gh;
|
||||||
UINT8 flags, subversion;
|
UINT8 flags, subversion;
|
||||||
UINT8 *buffer,*p;
|
UINT8 *buffer,*p;
|
||||||
|
@ -2438,20 +2412,9 @@ void G_AddGhost(char *defdemoname)
|
||||||
p++; // VERSION
|
p++; // VERSION
|
||||||
subversion = READUINT8(p); // SUBVERSION
|
subversion = READUINT8(p); // SUBVERSION
|
||||||
ghostversion = READUINT16(p);
|
ghostversion = READUINT16(p);
|
||||||
switch(ghostversion)
|
if (ghostversion < 0x000c || ghostversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000f:
|
// too old (or new), cannot support
|
||||||
case 0x000d:
|
|
||||||
case 0x000e:
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
cnamelen = MAXCOLORNAME;
|
|
||||||
break;
|
|
||||||
// all that changed between then and now was longer color name
|
|
||||||
case 0x000c:
|
|
||||||
cnamelen = 16;
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), pdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), pdemoname);
|
||||||
Z_Free(pdemoname);
|
Z_Free(pdemoname);
|
||||||
Z_Free(buffer);
|
Z_Free(buffer);
|
||||||
|
@ -2514,8 +2477,8 @@ void G_AddGhost(char *defdemoname)
|
||||||
p += 16;
|
p += 16;
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
M_Memcpy(color, p,cnamelen);
|
M_Memcpy(color, p, (ghostversion < 0x000d) ? 16 : MAXCOLORNAME);
|
||||||
p += cnamelen;
|
p += (ghostversion < 0x000d) ? 16 : MAXCOLORNAME;
|
||||||
|
|
||||||
// Ghosts do not have a player structure to put this in.
|
// Ghosts do not have a player structure to put this in.
|
||||||
p++; // charability
|
p++; // charability
|
||||||
|
@ -2698,16 +2661,9 @@ void G_DoPlayMetal(void)
|
||||||
metal_p++; // VERSION
|
metal_p++; // VERSION
|
||||||
metal_p++; // SUBVERSION
|
metal_p++; // SUBVERSION
|
||||||
metalversion = READUINT16(metal_p);
|
metalversion = READUINT16(metal_p);
|
||||||
switch(metalversion)
|
if (metalversion < 0x000c || metalversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
// too old (or new), cannot support
|
||||||
case 0x000f:
|
|
||||||
case 0x000e: // There are checks wheter the momentum is from older demo versions or not
|
|
||||||
case 0x000d: // all that changed between then and now was longer color name
|
|
||||||
case 0x000c:
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, format version incompatible.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, format version incompatible.\n"));
|
||||||
Z_Free(metalbuffer);
|
Z_Free(metalbuffer);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#include "r_fps.h" // frame interpolation/uncapped
|
#include "r_fps.h" // frame interpolation/uncapped
|
||||||
|
|
||||||
#include "lua_hud.h"
|
#include "lua_hud.h"
|
||||||
|
#include "lua_libs.h"
|
||||||
|
|
||||||
gameaction_t gameaction;
|
gameaction_t gameaction;
|
||||||
gamestate_t gamestate = GS_NULL;
|
gamestate_t gamestate = GS_NULL;
|
||||||
|
@ -1170,7 +1171,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
// why build a ticcmd if we're paused?
|
// why build a ticcmd if we're paused?
|
||||||
// Or, for that matter, if we're being reborn.
|
// Or, for that matter, if we're being reborn.
|
||||||
// ...OR if we're blindfolded. No looking into the floor.
|
// ...OR if we're blindfolded. No looking into the floor.
|
||||||
if (paused || P_AutoPause() || (gamestate == GS_LEVEL && (player->playerstate == PST_REBORN || ((gametyperules & GTR_TAG)
|
if (ignoregameinputs || paused || P_AutoPause() || (gamestate == GS_LEVEL && (player->playerstate == PST_REBORN || ((gametyperules & GTR_TAG)
|
||||||
&& (leveltime < hidetime * TICRATE) && (player->pflags & PF_TAGIT)))))
|
&& (leveltime < hidetime * TICRATE) && (player->pflags & PF_TAGIT)))))
|
||||||
{//@TODO splitscreen player
|
{//@TODO splitscreen player
|
||||||
cmd->angleturn = ticcmd_oldangleturn[forplayer];
|
cmd->angleturn = ticcmd_oldangleturn[forplayer];
|
||||||
|
@ -4346,7 +4347,7 @@ void G_LoadGameSettings(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GAMEDATA_ID 0x86E4A27C // Change every major version, as usual
|
#define GAMEDATA_ID 0x86E4A27C // Change every major version, as usual
|
||||||
#define COMPAT_GAMEDATA_ID 0xFCAFE211 // Can be removed entirely for 2.3
|
#define COMPAT_GAMEDATA_ID 0xFCAFE211 // TODO: 2.3: Delete
|
||||||
|
|
||||||
// G_LoadGameData
|
// G_LoadGameData
|
||||||
// Loads the main data file, which stores information such as emblems found, etc.
|
// Loads the main data file, which stores information such as emblems found, etc.
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
#include "hu_stuff.h" // need HUFONT start & end
|
#include "hu_stuff.h" // need HUFONT start & end
|
||||||
#include "netcode/d_net.h"
|
#include "netcode/d_net.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
|
#include "lua_script.h"
|
||||||
|
#include "lua_libs.h"
|
||||||
|
|
||||||
#define MAXMOUSESENSITIVITY 100 // sensitivity steps
|
#define MAXMOUSESENSITIVITY 100 // sensitivity steps
|
||||||
|
|
||||||
|
@ -116,7 +118,10 @@ void G_MapEventsToControls(event_t *ev)
|
||||||
{
|
{
|
||||||
case ev_keydown:
|
case ev_keydown:
|
||||||
if (ev->key < NUMINPUTS)
|
if (ev->key < NUMINPUTS)
|
||||||
gamekeydown[ev->key] = 1;
|
{
|
||||||
|
if (!ignoregameinputs)
|
||||||
|
gamekeydown[ev->key] = 1;
|
||||||
|
}
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -144,7 +149,7 @@ void G_MapEventsToControls(event_t *ev)
|
||||||
|
|
||||||
case ev_joystick: // buttons are virtual keys
|
case ev_joystick: // buttons are virtual keys
|
||||||
i = ev->key;
|
i = ev->key;
|
||||||
if (i >= JOYAXISSET || menuactive || CON_Ready() || chat_on)
|
if (i >= JOYAXISSET || menuactive || CON_Ready() || chat_on || ignoregameinputs)
|
||||||
break;
|
break;
|
||||||
if (ev->x != INT32_MAX) joyxmove[i] = ev->x;
|
if (ev->x != INT32_MAX) joyxmove[i] = ev->x;
|
||||||
if (ev->y != INT32_MAX) joyymove[i] = ev->y;
|
if (ev->y != INT32_MAX) joyymove[i] = ev->y;
|
||||||
|
@ -152,7 +157,7 @@ void G_MapEventsToControls(event_t *ev)
|
||||||
|
|
||||||
case ev_joystick2: // buttons are virtual keys
|
case ev_joystick2: // buttons are virtual keys
|
||||||
i = ev->key;
|
i = ev->key;
|
||||||
if (i >= JOYAXISSET || menuactive || CON_Ready() || chat_on)
|
if (i >= JOYAXISSET || menuactive || CON_Ready() || chat_on || ignoregameinputs)
|
||||||
break;
|
break;
|
||||||
if (ev->x != INT32_MAX) joy2xmove[i] = ev->x;
|
if (ev->x != INT32_MAX) joy2xmove[i] = ev->x;
|
||||||
if (ev->y != INT32_MAX) joy2ymove[i] = ev->y;
|
if (ev->y != INT32_MAX) joy2ymove[i] = ev->y;
|
||||||
|
@ -997,7 +1002,7 @@ static void setcontrol(INT32 (*gc)[2])
|
||||||
INT32 player = ((void*)gc == (void*)&gamecontrolbis ? 1 : 0);
|
INT32 player = ((void*)gc == (void*)&gamecontrolbis ? 1 : 0);
|
||||||
boolean nestedoverride = false;
|
boolean nestedoverride = false;
|
||||||
|
|
||||||
// Update me for 2.3
|
// TODO: 2.3: Delete the "use" alias
|
||||||
namectrl = (stricmp(COM_Argv(1), "use")) ? COM_Argv(1) : "spin";
|
namectrl = (stricmp(COM_Argv(1), "use")) ? COM_Argv(1) : "spin";
|
||||||
|
|
||||||
for (numctrl = 0; numctrl < NUM_GAMECONTROLS && stricmp(namectrl, gamecontrolname[numctrl]);
|
for (numctrl = 0; numctrl < NUM_GAMECONTROLS && stricmp(namectrl, gamecontrolname[numctrl]);
|
||||||
|
|
|
@ -42,10 +42,10 @@ int unsortedVertexArrayAllocSize = 65536;
|
||||||
// Call HWR_RenderBatches to render all the collected geometry.
|
// Call HWR_RenderBatches to render all the collected geometry.
|
||||||
void HWR_StartBatching(void)
|
void HWR_StartBatching(void)
|
||||||
{
|
{
|
||||||
if (currently_batching)
|
if (currently_batching)
|
||||||
I_Error("Repeat call to HWR_StartBatching without HWR_RenderBatches");
|
I_Error("Repeat call to HWR_StartBatching without HWR_RenderBatches");
|
||||||
|
|
||||||
// init arrays if that has not been done yet
|
// init arrays if that has not been done yet
|
||||||
if (!finalVertexArray)
|
if (!finalVertexArray)
|
||||||
{
|
{
|
||||||
finalVertexArray = malloc(finalVertexArrayAllocSize * sizeof(FOutVector));
|
finalVertexArray = malloc(finalVertexArrayAllocSize * sizeof(FOutVector));
|
||||||
|
@ -55,7 +55,7 @@ void HWR_StartBatching(void)
|
||||||
unsortedVertexArray = malloc(unsortedVertexArrayAllocSize * sizeof(FOutVector));
|
unsortedVertexArray = malloc(unsortedVertexArrayAllocSize * sizeof(FOutVector));
|
||||||
}
|
}
|
||||||
|
|
||||||
currently_batching = true;
|
currently_batching = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This replaces the direct calls to pfnSetTexture in cases where batching is available.
|
// This replaces the direct calls to pfnSetTexture in cases where batching is available.
|
||||||
|
|
|
@ -78,10 +78,8 @@ void HWR_DrawPatch(patch_t *gpatch, INT32 x, INT32 y, INT32 option)
|
||||||
// | /|
|
// | /|
|
||||||
// |/ |
|
// |/ |
|
||||||
// 0--1
|
// 0--1
|
||||||
float sdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f;
|
float sdup = FIXED_TO_FLOAT(vid.fdup)*2.0f;
|
||||||
float sdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f;
|
float pdup = FIXED_TO_FLOAT(vid.fdup)*2.0f;
|
||||||
float pdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f;
|
|
||||||
float pdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f;
|
|
||||||
|
|
||||||
// make patch ready in hardware cache
|
// make patch ready in hardware cache
|
||||||
HWR_GetPatch(gpatch);
|
HWR_GetPatch(gpatch);
|
||||||
|
@ -90,25 +88,23 @@ void HWR_DrawPatch(patch_t *gpatch, INT32 x, INT32 y, INT32 option)
|
||||||
switch (option & V_SCALEPATCHMASK)
|
switch (option & V_SCALEPATCHMASK)
|
||||||
{
|
{
|
||||||
case V_NOSCALEPATCH:
|
case V_NOSCALEPATCH:
|
||||||
pdupx = pdupy = 2.0f;
|
pdup = 2.0f;
|
||||||
break;
|
break;
|
||||||
case V_SMALLSCALEPATCH:
|
case V_SMALLSCALEPATCH:
|
||||||
pdupx = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupx);
|
pdup = 2.0f * FIXED_TO_FLOAT(vid.fsmalldup);
|
||||||
pdupy = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupy);
|
|
||||||
break;
|
break;
|
||||||
case V_MEDSCALEPATCH:
|
case V_MEDSCALEPATCH:
|
||||||
pdupx = 2.0f * FIXED_TO_FLOAT(vid.fmeddupx);
|
pdup = 2.0f * FIXED_TO_FLOAT(vid.fmeddup);
|
||||||
pdupy = 2.0f * FIXED_TO_FLOAT(vid.fmeddupy);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (option & V_NOSCALESTART)
|
if (option & V_NOSCALESTART)
|
||||||
sdupx = sdupy = 2.0f;
|
sdup = 2.0f;
|
||||||
|
|
||||||
v[0].x = v[3].x = (x*sdupx-(gpatch->leftoffset)*pdupx)/vid.width - 1;
|
v[0].x = v[3].x = (x*sdup-(gpatch->leftoffset)*pdup)/vid.width - 1;
|
||||||
v[2].x = v[1].x = (x*sdupx+(gpatch->width-gpatch->leftoffset)*pdupx)/vid.width - 1;
|
v[2].x = v[1].x = (x*sdup+(gpatch->width-gpatch->leftoffset)*pdup)/vid.width - 1;
|
||||||
v[0].y = v[1].y = 1-(y*sdupy-(gpatch->topoffset)*pdupy)/vid.height;
|
v[0].y = v[1].y = 1-(y*sdup-(gpatch->topoffset)*pdup)/vid.height;
|
||||||
v[2].y = v[3].y = 1-(y*sdupy+(gpatch->height-gpatch->topoffset)*pdupy)/vid.height;
|
v[2].y = v[3].y = 1-(y*sdup+(gpatch->height-gpatch->topoffset)*pdup)/vid.height;
|
||||||
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
|
@ -138,7 +134,7 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||||
// | /|
|
// | /|
|
||||||
// |/ |
|
// |/ |
|
||||||
// 0--1
|
// 0--1
|
||||||
float dupx, dupy, fscalew, fscaleh, fwidth, fheight;
|
float dup, fscalew, fscaleh, fwidth, fheight;
|
||||||
|
|
||||||
UINT8 perplayershuffle = 0;
|
UINT8 perplayershuffle = 0;
|
||||||
|
|
||||||
|
@ -158,25 +154,21 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||||
else opacity = softwaretranstogl[10-alphalevel];
|
else opacity = softwaretranstogl[10-alphalevel];
|
||||||
}
|
}
|
||||||
|
|
||||||
dupx = (float)vid.dupx;
|
dup = (float)vid.dup;
|
||||||
dupy = (float)vid.dupy;
|
|
||||||
|
|
||||||
switch (option & V_SCALEPATCHMASK)
|
switch (option & V_SCALEPATCHMASK)
|
||||||
{
|
{
|
||||||
case V_NOSCALEPATCH:
|
case V_NOSCALEPATCH:
|
||||||
dupx = dupy = 1.0f;
|
dup = 1.0f;
|
||||||
break;
|
break;
|
||||||
case V_SMALLSCALEPATCH:
|
case V_SMALLSCALEPATCH:
|
||||||
dupx = (float)vid.smalldupx;
|
dup = (float)vid.smalldup;
|
||||||
dupy = (float)vid.smalldupy;
|
|
||||||
break;
|
break;
|
||||||
case V_MEDSCALEPATCH:
|
case V_MEDSCALEPATCH:
|
||||||
dupx = (float)vid.meddupx;
|
dup = (float)vid.meddup;
|
||||||
dupy = (float)vid.meddupy;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dupx = dupy = (dupx < dupy ? dupx : dupy);
|
|
||||||
fscalew = fscaleh = FIXED_TO_FLOAT(pscale);
|
fscalew = fscaleh = FIXED_TO_FLOAT(pscale);
|
||||||
if (vscale != pscale)
|
if (vscale != pscale)
|
||||||
fscaleh = FIXED_TO_FLOAT(vscale);
|
fscaleh = FIXED_TO_FLOAT(vscale);
|
||||||
|
@ -270,8 +262,8 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||||
|
|
||||||
if (!(option & V_NOSCALESTART))
|
if (!(option & V_NOSCALESTART))
|
||||||
{
|
{
|
||||||
cx = cx * dupx;
|
cx = cx * dup;
|
||||||
cy = cy * dupy;
|
cy = cy * dup;
|
||||||
|
|
||||||
if (!(option & V_SCALEPATCHMASK))
|
if (!(option & V_SCALEPATCHMASK))
|
||||||
{
|
{
|
||||||
|
@ -288,40 +280,40 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// centre screen
|
// centre screen
|
||||||
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dupx) > 1.0E-36f)
|
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (option & V_SNAPTORIGHT)
|
if (option & V_SNAPTORIGHT)
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx));
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup));
|
||||||
else if (!(option & V_SNAPTOLEFT))
|
else if (!(option & V_SNAPTOLEFT))
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/2;
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup))/2;
|
||||||
if (perplayershuffle & 4)
|
if (perplayershuffle & 4)
|
||||||
cx -= ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/4;
|
cx -= ((float)vid.width - ((float)BASEVIDWIDTH * dup))/4;
|
||||||
else if (perplayershuffle & 8)
|
else if (perplayershuffle & 8)
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/4;
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup))/4;
|
||||||
}
|
}
|
||||||
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dupy) > 1.0E-36f)
|
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (option & V_SNAPTOBOTTOM)
|
if (option & V_SNAPTOBOTTOM)
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy));
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup));
|
||||||
else if (!(option & V_SNAPTOTOP))
|
else if (!(option & V_SNAPTOTOP))
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/2;
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/2;
|
||||||
if (perplayershuffle & 1)
|
if (perplayershuffle & 1)
|
||||||
cy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/4;
|
cy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/4;
|
||||||
else if (perplayershuffle & 2)
|
else if (perplayershuffle & 2)
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/4;
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pscale != FRACUNIT || vscale != FRACUNIT || (splitscreen && option & V_PERPLAYER))
|
if (pscale != FRACUNIT || vscale != FRACUNIT || (splitscreen && option & V_PERPLAYER))
|
||||||
{
|
{
|
||||||
fwidth = (float)(gpatch->width) * fscalew * dupx;
|
fwidth = (float)(gpatch->width) * fscalew * dup;
|
||||||
fheight = (float)(gpatch->height) * fscaleh * dupy;
|
fheight = (float)(gpatch->height) * fscaleh * dup;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fwidth = (float)(gpatch->width) * dupx;
|
fwidth = (float)(gpatch->width) * dup;
|
||||||
fheight = (float)(gpatch->height) * dupy;
|
fheight = (float)(gpatch->height) * dup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1
|
// positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1
|
||||||
|
@ -384,7 +376,7 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
// | /|
|
// | /|
|
||||||
// |/ |
|
// |/ |
|
||||||
// 0--1
|
// 0--1
|
||||||
float dupx, dupy, fscalew, fscaleh, fwidth, fheight;
|
float dup, fscalew, fscaleh, fwidth, fheight;
|
||||||
|
|
||||||
UINT8 perplayershuffle = 0;
|
UINT8 perplayershuffle = 0;
|
||||||
|
|
||||||
|
@ -396,25 +388,21 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
|
|
||||||
hwrPatch = ((GLPatch_t *)gpatch->hardware);
|
hwrPatch = ((GLPatch_t *)gpatch->hardware);
|
||||||
|
|
||||||
dupx = (float)vid.dupx;
|
dup = (float)vid.dup;
|
||||||
dupy = (float)vid.dupy;
|
|
||||||
|
|
||||||
switch (option & V_SCALEPATCHMASK)
|
switch (option & V_SCALEPATCHMASK)
|
||||||
{
|
{
|
||||||
case V_NOSCALEPATCH:
|
case V_NOSCALEPATCH:
|
||||||
dupx = dupy = 1.0f;
|
dup = 1.0f;
|
||||||
break;
|
break;
|
||||||
case V_SMALLSCALEPATCH:
|
case V_SMALLSCALEPATCH:
|
||||||
dupx = (float)vid.smalldupx;
|
dup = (float)vid.smalldup;
|
||||||
dupy = (float)vid.smalldupy;
|
|
||||||
break;
|
break;
|
||||||
case V_MEDSCALEPATCH:
|
case V_MEDSCALEPATCH:
|
||||||
dupx = (float)vid.meddupx;
|
dup = (float)vid.meddup;
|
||||||
dupy = (float)vid.meddupy;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dupx = dupy = (dupx < dupy ? dupx : dupy);
|
|
||||||
fscalew = fscaleh = FIXED_TO_FLOAT(pscale);
|
fscalew = fscaleh = FIXED_TO_FLOAT(pscale);
|
||||||
if (vscale != pscale)
|
if (vscale != pscale)
|
||||||
fscaleh = FIXED_TO_FLOAT(vscale);
|
fscaleh = FIXED_TO_FLOAT(vscale);
|
||||||
|
@ -492,8 +480,8 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
|
|
||||||
if (!(option & V_NOSCALESTART))
|
if (!(option & V_NOSCALESTART))
|
||||||
{
|
{
|
||||||
cx = cx * dupx;
|
cx = cx * dup;
|
||||||
cy = cy * dupy;
|
cy = cy * dup;
|
||||||
|
|
||||||
if (!(option & V_SCALEPATCHMASK))
|
if (!(option & V_SCALEPATCHMASK))
|
||||||
{
|
{
|
||||||
|
@ -501,27 +489,27 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
// no the patch is cropped do not do this ever
|
// no the patch is cropped do not do this ever
|
||||||
|
|
||||||
// centre screen
|
// centre screen
|
||||||
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dupx) > 1.0E-36f)
|
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (option & V_SNAPTORIGHT)
|
if (option & V_SNAPTORIGHT)
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx));
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup));
|
||||||
else if (!(option & V_SNAPTOLEFT))
|
else if (!(option & V_SNAPTOLEFT))
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/2;
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup))/2;
|
||||||
if (perplayershuffle & 4)
|
if (perplayershuffle & 4)
|
||||||
cx -= ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/4;
|
cx -= ((float)vid.width - ((float)BASEVIDWIDTH * dup))/4;
|
||||||
else if (perplayershuffle & 8)
|
else if (perplayershuffle & 8)
|
||||||
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/4;
|
cx += ((float)vid.width - ((float)BASEVIDWIDTH * dup))/4;
|
||||||
}
|
}
|
||||||
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dupy) > 1.0E-36f)
|
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (option & V_SNAPTOBOTTOM)
|
if (option & V_SNAPTOBOTTOM)
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy));
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup));
|
||||||
else if (!(option & V_SNAPTOTOP))
|
else if (!(option & V_SNAPTOTOP))
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/2;
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/2;
|
||||||
if (perplayershuffle & 1)
|
if (perplayershuffle & 1)
|
||||||
cy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/4;
|
cy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/4;
|
||||||
else if (perplayershuffle & 2)
|
else if (perplayershuffle & 2)
|
||||||
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/4;
|
cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup))/4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -537,13 +525,13 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
|
|
||||||
if (pscale != FRACUNIT || vscale != FRACUNIT || (splitscreen && option & V_PERPLAYER))
|
if (pscale != FRACUNIT || vscale != FRACUNIT || (splitscreen && option & V_PERPLAYER))
|
||||||
{
|
{
|
||||||
fwidth *= fscalew * dupx;
|
fwidth *= fscalew * dup;
|
||||||
fheight *= fscaleh * dupy;
|
fheight *= fscaleh * dup;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fwidth *= dupx;
|
fwidth *= dup;
|
||||||
fheight *= dupy;
|
fheight *= dup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1
|
// positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1
|
||||||
|
@ -679,9 +667,9 @@ void HWR_DrawPic(INT32 x, INT32 y, lumpnum_t lumpnum)
|
||||||
// 0--1
|
// 0--1
|
||||||
|
|
||||||
v[0].x = v[3].x = 2.0f * (float)x/vid.width - 1;
|
v[0].x = v[3].x = 2.0f * (float)x/vid.width - 1;
|
||||||
v[2].x = v[1].x = 2.0f * (float)(x + patch->width*FIXED_TO_FLOAT(vid.fdupx))/vid.width - 1;
|
v[2].x = v[1].x = 2.0f * (float)(x + patch->width*FIXED_TO_FLOAT(vid.fdup))/vid.width - 1;
|
||||||
v[0].y = v[1].y = 1.0f - 2.0f * (float)y/vid.height;
|
v[0].y = v[1].y = 1.0f - 2.0f * (float)y/vid.height;
|
||||||
v[2].y = v[3].y = 1.0f - 2.0f * (float)(y + patch->height*FIXED_TO_FLOAT(vid.fdupy))/vid.height;
|
v[2].y = v[3].y = 1.0f - 2.0f * (float)(y + patch->height*FIXED_TO_FLOAT(vid.fdup))/vid.height;
|
||||||
|
|
||||||
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
v[0].z = v[1].z = v[2].z = v[3].z = 1.0f;
|
||||||
|
|
||||||
|
@ -871,35 +859,33 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac
|
||||||
|
|
||||||
if (!(color & V_NOSCALESTART))
|
if (!(color & V_NOSCALESTART))
|
||||||
{
|
{
|
||||||
float dupx = (float)vid.dupx, dupy = (float)vid.dupy;
|
fx *= vid.dup;
|
||||||
|
fy *= vid.dup;
|
||||||
|
fw *= vid.dup;
|
||||||
|
fh *= vid.dup;
|
||||||
|
|
||||||
fx *= dupx;
|
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * vid.dup) > 1.0E-36f)
|
||||||
fy *= dupy;
|
|
||||||
fw *= dupx;
|
|
||||||
fh *= dupy;
|
|
||||||
|
|
||||||
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dupx) > 1.0E-36f)
|
|
||||||
{
|
{
|
||||||
if (color & V_SNAPTORIGHT)
|
if (color & V_SNAPTORIGHT)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx));
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup));
|
||||||
else if (!(color & V_SNAPTOLEFT))
|
else if (!(color & V_SNAPTOLEFT))
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 2;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 2;
|
||||||
if (perplayershuffle & 4)
|
if (perplayershuffle & 4)
|
||||||
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 4;
|
||||||
else if (perplayershuffle & 8)
|
else if (perplayershuffle & 8)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 4;
|
||||||
}
|
}
|
||||||
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dupy) > 1.0E-36f)
|
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * vid.dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
// same thing here
|
// same thing here
|
||||||
if (color & V_SNAPTOBOTTOM)
|
if (color & V_SNAPTOBOTTOM)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy));
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup));
|
||||||
else if (!(color & V_SNAPTOTOP))
|
else if (!(color & V_SNAPTOTOP))
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 2;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 2;
|
||||||
if (perplayershuffle & 1)
|
if (perplayershuffle & 1)
|
||||||
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 4;
|
||||||
else if (perplayershuffle & 2)
|
else if (perplayershuffle & 2)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1037,10 +1023,10 @@ void HWR_DrawViewBorder(INT32 clearlines)
|
||||||
clearlines = BASEVIDHEIGHT; // refresh all
|
clearlines = BASEVIDHEIGHT; // refresh all
|
||||||
|
|
||||||
// calc view size based on original game resolution
|
// calc view size based on original game resolution
|
||||||
baseviewwidth = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewwidth), vid.fdupx)); //(cv_viewsize.value * BASEVIDWIDTH/10)&~7;
|
baseviewwidth = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewwidth), vid.fdup)); //(cv_viewsize.value * BASEVIDWIDTH/10)&~7;
|
||||||
baseviewheight = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewheight), vid.fdupy));
|
baseviewheight = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewheight), vid.fdup));
|
||||||
top = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_baseviewwindowy), vid.fdupy));
|
top = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_baseviewwindowy), vid.fdup));
|
||||||
side = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewwindowx), vid.fdupx));
|
side = FixedInt(FixedDiv(FLOAT_TO_FIXED(gl_viewwindowx), vid.fdup));
|
||||||
|
|
||||||
// top
|
// top
|
||||||
HWR_DrawFlatFill(0, 0,
|
HWR_DrawFlatFill(0, 0,
|
||||||
|
@ -1255,35 +1241,35 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32
|
||||||
|
|
||||||
if (!(color & V_NOSCALESTART))
|
if (!(color & V_NOSCALESTART))
|
||||||
{
|
{
|
||||||
float dupx = (float)vid.dupx, dupy = (float)vid.dupy;
|
float dup = (float)vid.dup;
|
||||||
|
|
||||||
fx *= dupx;
|
fx *= dup;
|
||||||
fy *= dupy;
|
fy *= dup;
|
||||||
fw *= dupx;
|
fw *= dup;
|
||||||
fh *= dupy;
|
fh *= dup;
|
||||||
|
|
||||||
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dupx) > 1.0E-36f)
|
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (color & V_SNAPTORIGHT)
|
if (color & V_SNAPTORIGHT)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx));
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dup));
|
||||||
else if (!(color & V_SNAPTOLEFT))
|
else if (!(color & V_SNAPTOLEFT))
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 2;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dup)) / 2;
|
||||||
if (perplayershuffle & 4)
|
if (perplayershuffle & 4)
|
||||||
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * dup)) / 4;
|
||||||
else if (perplayershuffle & 8)
|
else if (perplayershuffle & 8)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dup)) / 4;
|
||||||
}
|
}
|
||||||
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dupy) > 1.0E-36f)
|
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
// same thing here
|
// same thing here
|
||||||
if (color & V_SNAPTOBOTTOM)
|
if (color & V_SNAPTOBOTTOM)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy));
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup));
|
||||||
else if (!(color & V_SNAPTOTOP))
|
else if (!(color & V_SNAPTOTOP))
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 2;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup)) / 2;
|
||||||
if (perplayershuffle & 1)
|
if (perplayershuffle & 1)
|
||||||
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dup)) / 4;
|
||||||
else if (perplayershuffle & 2)
|
else if (perplayershuffle & 2)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dup)) / 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,8 +1407,6 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color)
|
||||||
|
|
||||||
if (!(color & V_NOSCALESTART))
|
if (!(color & V_NOSCALESTART))
|
||||||
{
|
{
|
||||||
float dupx = (float)vid.dupx, dupy = (float)vid.dupy;
|
|
||||||
|
|
||||||
if (x == 0 && y == 0 && w == BASEVIDWIDTH && h == BASEVIDHEIGHT)
|
if (x == 0 && y == 0 && w == BASEVIDWIDTH && h == BASEVIDHEIGHT)
|
||||||
{
|
{
|
||||||
RGBA_t rgbaColour = V_GetColor(color);
|
RGBA_t rgbaColour = V_GetColor(color);
|
||||||
|
@ -1435,33 +1419,33 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fx *= dupx;
|
fx *= vid.dup;
|
||||||
fy *= dupy;
|
fy *= vid.dup;
|
||||||
fw *= dupx;
|
fw *= vid.dup;
|
||||||
fh *= dupy;
|
fh *= vid.dup;
|
||||||
|
|
||||||
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * dupx) > 1.0E-36f)
|
if (fabsf((float)vid.width - (float)BASEVIDWIDTH * vid.dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
if (color & V_SNAPTORIGHT)
|
if (color & V_SNAPTORIGHT)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx));
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup));
|
||||||
else if (!(color & V_SNAPTOLEFT))
|
else if (!(color & V_SNAPTOLEFT))
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 2;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 2;
|
||||||
if (perplayershuffle & 4)
|
if (perplayershuffle & 4)
|
||||||
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx -= ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 4;
|
||||||
else if (perplayershuffle & 8)
|
else if (perplayershuffle & 8)
|
||||||
fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 4;
|
fx += ((float)vid.width - ((float)BASEVIDWIDTH * vid.dup)) / 4;
|
||||||
}
|
}
|
||||||
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * dupy) > 1.0E-36f)
|
if (fabsf((float)vid.height - (float)BASEVIDHEIGHT * vid.dup) > 1.0E-36f)
|
||||||
{
|
{
|
||||||
// same thing here
|
// same thing here
|
||||||
if (color & V_SNAPTOBOTTOM)
|
if (color & V_SNAPTOBOTTOM)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy));
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup));
|
||||||
else if (!(color & V_SNAPTOTOP))
|
else if (!(color & V_SNAPTOTOP))
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 2;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 2;
|
||||||
if (perplayershuffle & 1)
|
if (perplayershuffle & 1)
|
||||||
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy -= ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 4;
|
||||||
else if (perplayershuffle & 2)
|
else if (perplayershuffle & 2)
|
||||||
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 4;
|
fy += ((float)vid.height - ((float)BASEVIDHEIGHT * vid.dup)) / 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,7 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_BMCH
|
&lspr[NOLIGHT], // SPR_BMCH
|
||||||
&lspr[NOLIGHT], // SPR_SMCE
|
&lspr[NOLIGHT], // SPR_SMCE
|
||||||
&lspr[NOLIGHT], // SPR_BMCE
|
&lspr[NOLIGHT], // SPR_BMCE
|
||||||
|
&lspr[NOLIGHT], // SPR_BSPB
|
||||||
&lspr[NOLIGHT], // SPR_YSPB
|
&lspr[NOLIGHT], // SPR_YSPB
|
||||||
&lspr[NOLIGHT], // SPR_RSPB
|
&lspr[NOLIGHT], // SPR_RSPB
|
||||||
&lspr[REDBALL_L], // SPR_SFBR
|
&lspr[REDBALL_L], // SPR_SFBR
|
||||||
|
|
|
@ -229,6 +229,8 @@ void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *col
|
||||||
// Clamp the light level, since it can sometimes go out of the 0-255 range from animations
|
// Clamp the light level, since it can sometimes go out of the 0-255 range from animations
|
||||||
light_level = min(max(light_level, 0), 255);
|
light_level = min(max(light_level, 0), 255);
|
||||||
|
|
||||||
|
V_CubeApply(&tint_color.s.red, &tint_color.s.green, &tint_color.s.blue);
|
||||||
|
V_CubeApply(&fade_color.s.red, &fade_color.s.green, &fade_color.s.blue);
|
||||||
Surface->PolyColor.rgba = poly_color.rgba;
|
Surface->PolyColor.rgba = poly_color.rgba;
|
||||||
Surface->TintColor.rgba = tint_color.rgba;
|
Surface->TintColor.rgba = tint_color.rgba;
|
||||||
Surface->FadeColor.rgba = fade_color.rgba;
|
Surface->FadeColor.rgba = fade_color.rgba;
|
||||||
|
@ -4064,14 +4066,11 @@ static void HWR_DrawSprite(gl_vissprite_t *spr)
|
||||||
float xscale, yscale;
|
float xscale, yscale;
|
||||||
float xoffset, yoffset;
|
float xoffset, yoffset;
|
||||||
float leftoffset, topoffset;
|
float leftoffset, topoffset;
|
||||||
float scale = spr->scale;
|
|
||||||
float zoffset = (P_MobjFlip(spr->mobj) * 0.05f);
|
float zoffset = (P_MobjFlip(spr->mobj) * 0.05f);
|
||||||
pslope_t *splatslope = NULL;
|
pslope_t *splatslope = NULL;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
renderflags_t renderflags = spr->renderflags;
|
renderflags_t renderflags = spr->renderflags;
|
||||||
if (renderflags & RF_SHADOWEFFECTS)
|
|
||||||
scale *= spr->shadowscale;
|
|
||||||
|
|
||||||
if (spr->rotateflags & SRF_3D || renderflags & RF_NOSPLATBILLBOARD)
|
if (spr->rotateflags & SRF_3D || renderflags & RF_NOSPLATBILLBOARD)
|
||||||
angle = spr->mobj->angle;
|
angle = spr->mobj->angle;
|
||||||
|
|
|
@ -486,7 +486,7 @@ void HWR_InitModels(void)
|
||||||
size_t i;
|
size_t i;
|
||||||
INT32 s;
|
INT32 s;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char name[24], filename[32];
|
char name[26], filename[32];
|
||||||
float scale, offset;
|
float scale, offset;
|
||||||
size_t prefixlen;
|
size_t prefixlen;
|
||||||
|
|
||||||
|
@ -585,7 +585,7 @@ modelfound:
|
||||||
void HWR_AddPlayerModel(int skin) // For skins that were added after startup
|
void HWR_AddPlayerModel(int skin) // For skins that were added after startup
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char name[24], filename[32];
|
char name[26], filename[32];
|
||||||
float scale, offset;
|
float scale, offset;
|
||||||
size_t prefixlen;
|
size_t prefixlen;
|
||||||
|
|
||||||
|
@ -644,7 +644,7 @@ void HWR_AddSpriteModel(size_t spritenum) // For sprites that were added after s
|
||||||
// name[24] is used to check for names in the models.dat file that match with sprites or player skins
|
// name[24] is used to check for names in the models.dat file that match with sprites or player skins
|
||||||
// sprite names are always 4 characters long, and names is for player skins can be up to 19 characters long
|
// sprite names are always 4 characters long, and names is for player skins can be up to 19 characters long
|
||||||
// PLAYERMODELPREFIX is 6 characters long
|
// PLAYERMODELPREFIX is 6 characters long
|
||||||
char name[24], filename[32];
|
char name[26], filename[32];
|
||||||
float scale, offset;
|
float scale, offset;
|
||||||
|
|
||||||
if (nomd2s)
|
if (nomd2s)
|
||||||
|
|
|
@ -672,6 +672,9 @@ void GeneratePolygonNormals(model_t *model, int ztag)
|
||||||
|
|
||||||
for (k = 0; k < mesh->numTriangles; k++)
|
for (k = 0; k < mesh->numTriangles; k++)
|
||||||
{
|
{
|
||||||
|
/// TODO: normalize vectors
|
||||||
|
(void)vertices;
|
||||||
|
(void)polyNormals;
|
||||||
// Vector::Normal(vertices, polyNormals);
|
// Vector::Normal(vertices, polyNormals);
|
||||||
vertices += 3 * 3;
|
vertices += 3 * 3;
|
||||||
polyNormals++;
|
polyNormals++;
|
||||||
|
|
35
src/info.c
35
src/info.c
|
@ -250,6 +250,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"BMCH", // Big Mace Chain
|
"BMCH", // Big Mace Chain
|
||||||
"SMCE", // Small Mace
|
"SMCE", // Small Mace
|
||||||
"BMCE", // Big Mace
|
"BMCE", // Big Mace
|
||||||
|
"BSPB", // Blue spring on a ball
|
||||||
"YSPB", // Yellow spring on a ball
|
"YSPB", // Yellow spring on a ball
|
||||||
"RSPB", // Red spring on a ball
|
"RSPB", // Red spring on a ball
|
||||||
"SFBR", // Small Firebar
|
"SFBR", // Small Firebar
|
||||||
|
@ -2297,6 +2298,13 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_SMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_SMALLGRABCHAIN
|
{SPR_SMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_SMALLGRABCHAIN
|
||||||
{SPR_BMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BIGGRABCHAIN
|
{SPR_BMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BIGGRABCHAIN
|
||||||
|
|
||||||
|
// Blue spring on a ball
|
||||||
|
{SPR_BSPB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUESPRINGBALL
|
||||||
|
{SPR_BSPB, 4, 4, {A_Pain}, 0, 0, S_BLUESPRINGBALL3}, // S_BLUESPRINGBALL2
|
||||||
|
{SPR_BSPB, 3, 1, {NULL}, 0, 0, S_BLUESPRINGBALL4}, // S_BLUESPRINGBALL3
|
||||||
|
{SPR_BSPB, 2, 1, {NULL}, 0, 0, S_BLUESPRINGBALL5}, // S_BLUESPRINGBALL4
|
||||||
|
{SPR_BSPB, 1, 1, {NULL}, 0, 0, S_BLUESPRINGBALL}, // S_BLUESPRINGBALL5
|
||||||
|
|
||||||
// Yellow spring on a ball
|
// Yellow spring on a ball
|
||||||
{SPR_YSPB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRINGBALL
|
{SPR_YSPB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRINGBALL
|
||||||
{SPR_YSPB, 4, 4, {A_Pain}, 0, 0, S_YELLOWSPRINGBALL3}, // S_YELLOWSPRINGBALL2
|
{SPR_YSPB, 4, 4, {A_Pain}, 0, 0, S_YELLOWSPRINGBALL3}, // S_YELLOWSPRINGBALL2
|
||||||
|
@ -11679,6 +11687,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_BLUESPRINGBALL
|
||||||
|
1133, // doomednum
|
||||||
|
S_BLUESPRINGBALL, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_BLUESPRINGBALL2, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_spring, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
24*FRACUNIT, // speed
|
||||||
|
17*FRACUNIT, // radius
|
||||||
|
34*FRACUNIT, // height
|
||||||
|
1, // display offset
|
||||||
|
11*FRACUNIT, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_mswing, // activesound
|
||||||
|
MF_SCENERY|MF_SPRING|MF_NOGRAVITY, // flags
|
||||||
|
S_BLUESPRINGBALL2 // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_YELLOWSPRINGBALL
|
{ // MT_YELLOWSPRINGBALL
|
||||||
1134, // doomednum
|
1134, // doomednum
|
||||||
S_YELLOWSPRINGBALL, // spawnstate
|
S_YELLOWSPRINGBALL, // spawnstate
|
||||||
|
|
|
@ -797,6 +797,7 @@ typedef enum sprite
|
||||||
SPR_BMCH, // Big Mace Chain
|
SPR_BMCH, // Big Mace Chain
|
||||||
SPR_SMCE, // Small Mace
|
SPR_SMCE, // Small Mace
|
||||||
SPR_BMCE, // Big Mace
|
SPR_BMCE, // Big Mace
|
||||||
|
SPR_BSPB, // Blue spring on a ball
|
||||||
SPR_YSPB, // Yellow spring on a ball
|
SPR_YSPB, // Yellow spring on a ball
|
||||||
SPR_RSPB, // Red spring on a ball
|
SPR_RSPB, // Red spring on a ball
|
||||||
SPR_SFBR, // Small Firebar
|
SPR_SFBR, // Small Firebar
|
||||||
|
@ -2744,6 +2745,13 @@ typedef enum state
|
||||||
S_SMALLGRABCHAIN,
|
S_SMALLGRABCHAIN,
|
||||||
S_BIGGRABCHAIN,
|
S_BIGGRABCHAIN,
|
||||||
|
|
||||||
|
// Blue spring on a ball
|
||||||
|
S_BLUESPRINGBALL,
|
||||||
|
S_BLUESPRINGBALL2,
|
||||||
|
S_BLUESPRINGBALL3,
|
||||||
|
S_BLUESPRINGBALL4,
|
||||||
|
S_BLUESPRINGBALL5,
|
||||||
|
|
||||||
// Yellow spring on a ball
|
// Yellow spring on a ball
|
||||||
S_YELLOWSPRINGBALL,
|
S_YELLOWSPRINGBALL,
|
||||||
S_YELLOWSPRINGBALL2,
|
S_YELLOWSPRINGBALL2,
|
||||||
|
@ -4722,6 +4730,7 @@ typedef enum mobj_type
|
||||||
MT_BIGMACE, // Big Mace
|
MT_BIGMACE, // Big Mace
|
||||||
MT_SMALLGRABCHAIN, // Small Grab Chain
|
MT_SMALLGRABCHAIN, // Small Grab Chain
|
||||||
MT_BIGGRABCHAIN, // Big Grab Chain
|
MT_BIGGRABCHAIN, // Big Grab Chain
|
||||||
|
MT_BLUESPRINGBALL, // Blue spring on a ball
|
||||||
MT_YELLOWSPRINGBALL, // Yellow spring on a ball
|
MT_YELLOWSPRINGBALL, // Yellow spring on a ball
|
||||||
MT_REDSPRINGBALL, // Red spring on a ball
|
MT_REDSPRINGBALL, // Red spring on a ball
|
||||||
MT_SMALLFIREBAR, // Small Firebar
|
MT_SMALLFIREBAR, // Small Firebar
|
||||||
|
|
|
@ -1031,6 +1031,20 @@ static int lib_pRailThinker(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pCheckSkyHit(lua_State *L)
|
||||||
|
{
|
||||||
|
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
line_t *line = *((line_t **)luaL_checkudata(L, 2, META_LINE));
|
||||||
|
//HUDSAFE
|
||||||
|
INLEVEL
|
||||||
|
if (!mobj)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
if (!line)
|
||||||
|
return LUA_ErrInvalid(L, "line_t");
|
||||||
|
lua_pushboolean(L, P_CheckSkyHit(mobj, line));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pXYMovement(lua_State *L)
|
static int lib_pXYMovement(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
@ -1425,6 +1439,18 @@ static int lib_pGivePlayerRings(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pGivePlayerSpheres(lua_State *L)
|
||||||
|
{
|
||||||
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
INT32 num_spheres = (INT32)luaL_checkinteger(L, 2);
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!player)
|
||||||
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
|
P_GivePlayerSpheres(player, num_spheres);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pGivePlayerLives(lua_State *L)
|
static int lib_pGivePlayerLives(lua_State *L)
|
||||||
{
|
{
|
||||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
@ -1567,6 +1593,19 @@ static int lib_pInstaThrust(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pInstaThrustEvenIn2D(lua_State *L)
|
||||||
|
{
|
||||||
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
angle_t angle = luaL_checkangle(L, 2);
|
||||||
|
fixed_t move = luaL_checkfixed(L, 3);
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!mo)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_InstaThrustEvenIn2D(mo, angle, move);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pReturnThrustX(lua_State *L)
|
static int lib_pReturnThrustX(lua_State *L)
|
||||||
{
|
{
|
||||||
angle_t angle;
|
angle_t angle;
|
||||||
|
@ -1667,6 +1706,17 @@ static int lib_pDoJump(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pDoSpinDashDust(lua_State *L)
|
||||||
|
{
|
||||||
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!player)
|
||||||
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
|
P_DoSpinDashDust(player);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pSpawnThokMobj(lua_State *L)
|
static int lib_pSpawnThokMobj(lua_State *L)
|
||||||
{
|
{
|
||||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
@ -1717,6 +1767,48 @@ static int lib_pSwitchShield(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pDoTailsOverlay(lua_State *L)
|
||||||
|
{
|
||||||
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
mobj_t *tails = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!player)
|
||||||
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
|
if (!tails)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_DoTailsOverlay(player, tails);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_pDoMetalJetFume(lua_State *L)
|
||||||
|
{
|
||||||
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
mobj_t *fume = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!player)
|
||||||
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
|
if (!fume)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_DoMetalJetFume(player, fume);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_pDoFollowMobj(lua_State *L)
|
||||||
|
{
|
||||||
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
mobj_t *followmobj = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!player)
|
||||||
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
|
if (!followmobj)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_DoFollowMobj(player, followmobj);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pPlayerCanEnterSpinGaps(lua_State *L)
|
static int lib_pPlayerCanEnterSpinGaps(lua_State *L)
|
||||||
{
|
{
|
||||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
|
@ -1788,6 +1880,7 @@ static int lib_pMove(lua_State *L)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete
|
||||||
static int lib_pTeleportMove(lua_State *L)
|
static int lib_pTeleportMove(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *ptmthing = tmthing;
|
mobj_t *ptmthing = tmthing;
|
||||||
|
@ -2198,6 +2291,21 @@ static int lib_pDoMatchSuper(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pTouchSpecialThing(lua_State *L)
|
||||||
|
{
|
||||||
|
mobj_t *special = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
mobj_t *toucher = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||||
|
boolean heightcheck = lua_optboolean(L, 3);
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!special || !toucher)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
if (!toucher->player)
|
||||||
|
return luaL_error(L, "P_TouchSpecialThing requires a valid toucher.player.");
|
||||||
|
P_TouchSpecialThing(special, toucher, heightcheck);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// P_SPEC
|
// P_SPEC
|
||||||
////////////
|
////////////
|
||||||
|
|
||||||
|
@ -2214,6 +2322,40 @@ static int lib_pThrust(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lib_pThrustEvenIn2D(lua_State *L)
|
||||||
|
{
|
||||||
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
angle_t angle = luaL_checkangle(L, 2);
|
||||||
|
fixed_t move = luaL_checkfixed(L, 3);
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!mo)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_ThrustEvenIn2D(mo, angle, move);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_pVectorInstaThrust(lua_State *L)
|
||||||
|
{
|
||||||
|
fixed_t xa = luaL_checkfixed(L, 1);
|
||||||
|
fixed_t xb = luaL_checkfixed(L, 2);
|
||||||
|
fixed_t xc = luaL_checkfixed(L, 3);
|
||||||
|
fixed_t ya = luaL_checkfixed(L, 4);
|
||||||
|
fixed_t yb = luaL_checkfixed(L, 5);
|
||||||
|
fixed_t yc = luaL_checkfixed(L, 6);
|
||||||
|
fixed_t za = luaL_checkfixed(L, 7);
|
||||||
|
fixed_t zb = luaL_checkfixed(L, 8);
|
||||||
|
fixed_t zc = luaL_checkfixed(L, 9);
|
||||||
|
fixed_t momentum = luaL_checkfixed(L, 10);
|
||||||
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 11, META_MOBJ));
|
||||||
|
NOHUD
|
||||||
|
INLEVEL
|
||||||
|
if (!mo)
|
||||||
|
return LUA_ErrInvalid(L, "mobj_t");
|
||||||
|
P_VectorInstaThrust(xa, xb, xc, ya, yb, yc, za, zb, zc, momentum, mo);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int lib_pSetMobjStateNF(lua_State *L)
|
static int lib_pSetMobjStateNF(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
mobj_t *mobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
@ -2266,6 +2408,7 @@ static int lib_pMobjTouchingSectorSpecial(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete
|
||||||
static int lib_pThingOnSpecial3DFloor(lua_State *L)
|
static int lib_pThingOnSpecial3DFloor(lua_State *L)
|
||||||
{
|
{
|
||||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||||
|
@ -3544,7 +3687,7 @@ static int lib_gAddGametype(lua_State *L)
|
||||||
// Partly lifted from Got_AddPlayer
|
// Partly lifted from Got_AddPlayer
|
||||||
static int lib_gAddPlayer(lua_State *L)
|
static int lib_gAddPlayer(lua_State *L)
|
||||||
{
|
{
|
||||||
INT16 i, newplayernum, botcount = 1;
|
INT16 i, newplayernum;
|
||||||
player_t *newplayer;
|
player_t *newplayer;
|
||||||
SINT8 skinnum = 0, bot;
|
SINT8 skinnum = 0, bot;
|
||||||
|
|
||||||
|
@ -3552,10 +3695,8 @@ static int lib_gAddPlayer(lua_State *L)
|
||||||
{
|
{
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (players[i].bot)
|
|
||||||
botcount++; // How many of us are there already?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= MAXPLAYERS)
|
if (i >= MAXPLAYERS)
|
||||||
{
|
{
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
|
@ -3572,6 +3713,7 @@ static int lib_gAddPlayer(lua_State *L)
|
||||||
|
|
||||||
newplayer->jointime = 0;
|
newplayer->jointime = 0;
|
||||||
newplayer->quittime = 0;
|
newplayer->quittime = 0;
|
||||||
|
newplayer->lastinputtime = 0;
|
||||||
|
|
||||||
// Read the skin argument (defaults to Sonic)
|
// Read the skin argument (defaults to Sonic)
|
||||||
if (!lua_isnoneornil(L, 1))
|
if (!lua_isnoneornil(L, 1))
|
||||||
|
@ -4081,6 +4223,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_CreateFloorSpriteSlope",lib_pCreateFloorSpriteSlope},
|
{"P_CreateFloorSpriteSlope",lib_pCreateFloorSpriteSlope},
|
||||||
{"P_RemoveFloorSpriteSlope",lib_pRemoveFloorSpriteSlope},
|
{"P_RemoveFloorSpriteSlope",lib_pRemoveFloorSpriteSlope},
|
||||||
{"P_RailThinker",lib_pRailThinker},
|
{"P_RailThinker",lib_pRailThinker},
|
||||||
|
{"P_CheckSkyHit",lib_pCheckSkyHit},
|
||||||
{"P_XYMovement",lib_pXYMovement},
|
{"P_XYMovement",lib_pXYMovement},
|
||||||
{"P_RingXYMovement",lib_pRingXYMovement},
|
{"P_RingXYMovement",lib_pRingXYMovement},
|
||||||
{"P_SceneryXYMovement",lib_pSceneryXYMovement},
|
{"P_SceneryXYMovement",lib_pSceneryXYMovement},
|
||||||
|
@ -4113,6 +4256,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_SpawnShieldOrb",lib_pSpawnShieldOrb},
|
{"P_SpawnShieldOrb",lib_pSpawnShieldOrb},
|
||||||
{"P_SpawnGhostMobj",lib_pSpawnGhostMobj},
|
{"P_SpawnGhostMobj",lib_pSpawnGhostMobj},
|
||||||
{"P_GivePlayerRings",lib_pGivePlayerRings},
|
{"P_GivePlayerRings",lib_pGivePlayerRings},
|
||||||
|
{"P_GivePlayerSpheres",lib_pGivePlayerSpheres},
|
||||||
{"P_GivePlayerLives",lib_pGivePlayerLives},
|
{"P_GivePlayerLives",lib_pGivePlayerLives},
|
||||||
{"P_GiveCoopLives",lib_pGiveCoopLives},
|
{"P_GiveCoopLives",lib_pGiveCoopLives},
|
||||||
{"P_ResetScore",lib_pResetScore},
|
{"P_ResetScore",lib_pResetScore},
|
||||||
|
@ -4125,6 +4269,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_DoPlayerFinish",lib_pDoPlayerFinish},
|
{"P_DoPlayerFinish",lib_pDoPlayerFinish},
|
||||||
{"P_DoPlayerExit",lib_pDoPlayerExit},
|
{"P_DoPlayerExit",lib_pDoPlayerExit},
|
||||||
{"P_InstaThrust",lib_pInstaThrust},
|
{"P_InstaThrust",lib_pInstaThrust},
|
||||||
|
{"P_InstaThrustEvenIn2D",lib_pInstaThrustEvenIn2D},
|
||||||
{"P_ReturnThrustX",lib_pReturnThrustX},
|
{"P_ReturnThrustX",lib_pReturnThrustX},
|
||||||
{"P_ReturnThrustY",lib_pReturnThrustY},
|
{"P_ReturnThrustY",lib_pReturnThrustY},
|
||||||
{"P_LookForEnemies",lib_pLookForEnemies},
|
{"P_LookForEnemies",lib_pLookForEnemies},
|
||||||
|
@ -4133,10 +4278,14 @@ static luaL_Reg lib[] = {
|
||||||
{"P_HomingAttack",lib_pHomingAttack},
|
{"P_HomingAttack",lib_pHomingAttack},
|
||||||
{"P_SuperReady",lib_pSuperReady},
|
{"P_SuperReady",lib_pSuperReady},
|
||||||
{"P_DoJump",lib_pDoJump},
|
{"P_DoJump",lib_pDoJump},
|
||||||
|
{"P_DoSpinDashDust",lib_pDoSpinDashDust},
|
||||||
{"P_SpawnThokMobj",lib_pSpawnThokMobj},
|
{"P_SpawnThokMobj",lib_pSpawnThokMobj},
|
||||||
{"P_SpawnSpinMobj",lib_pSpawnSpinMobj},
|
{"P_SpawnSpinMobj",lib_pSpawnSpinMobj},
|
||||||
{"P_Telekinesis",lib_pTelekinesis},
|
{"P_Telekinesis",lib_pTelekinesis},
|
||||||
{"P_SwitchShield",lib_pSwitchShield},
|
{"P_SwitchShield",lib_pSwitchShield},
|
||||||
|
{"P_DoTailsOverlay",lib_pDoTailsOverlay},
|
||||||
|
{"P_DoMetalJetFume",lib_pDoMetalJetFume},
|
||||||
|
{"P_DoFollowMobj",lib_pDoFollowMobj},
|
||||||
{"P_PlayerCanEnterSpinGaps",lib_pPlayerCanEnterSpinGaps},
|
{"P_PlayerCanEnterSpinGaps",lib_pPlayerCanEnterSpinGaps},
|
||||||
{"P_PlayerShouldUseSpinHeight",lib_pPlayerShouldUseSpinHeight},
|
{"P_PlayerShouldUseSpinHeight",lib_pPlayerShouldUseSpinHeight},
|
||||||
|
|
||||||
|
@ -4155,6 +4304,7 @@ static luaL_Reg lib[] = {
|
||||||
{"P_FloorzAtPos",lib_pFloorzAtPos},
|
{"P_FloorzAtPos",lib_pFloorzAtPos},
|
||||||
{"P_CeilingzAtPos",lib_pCeilingzAtPos},
|
{"P_CeilingzAtPos",lib_pCeilingzAtPos},
|
||||||
{"P_DoSpring",lib_pDoSpring},
|
{"P_DoSpring",lib_pDoSpring},
|
||||||
|
{"P_TouchSpecialThing",lib_pTouchSpecialThing},
|
||||||
{"P_TryCameraMove", lib_pTryCameraMove},
|
{"P_TryCameraMove", lib_pTryCameraMove},
|
||||||
{"P_TeleportCameraMove", lib_pTeleportCameraMove},
|
{"P_TeleportCameraMove", lib_pTeleportCameraMove},
|
||||||
|
|
||||||
|
@ -4178,6 +4328,8 @@ static luaL_Reg lib[] = {
|
||||||
|
|
||||||
// p_spec
|
// p_spec
|
||||||
{"P_Thrust",lib_pThrust},
|
{"P_Thrust",lib_pThrust},
|
||||||
|
{"P_ThrustEvenIn2D",lib_pThrustEvenIn2D},
|
||||||
|
{"P_VectorInstaThrust",lib_pVectorInstaThrust},
|
||||||
{"P_SetMobjStateNF",lib_pSetMobjStateNF},
|
{"P_SetMobjStateNF",lib_pSetMobjStateNF},
|
||||||
{"P_DoSuperTransformation",lib_pDoSuperTransformation},
|
{"P_DoSuperTransformation",lib_pDoSuperTransformation},
|
||||||
{"P_ExplodeMissile",lib_pExplodeMissile},
|
{"P_ExplodeMissile",lib_pExplodeMissile},
|
||||||
|
@ -4302,8 +4454,7 @@ int LUA_BaseLib(lua_State *L)
|
||||||
// Set metatable for string
|
// Set metatable for string
|
||||||
lua_pushliteral(L, ""); // dummy string
|
lua_pushliteral(L, ""); // dummy string
|
||||||
lua_getmetatable(L, -1); // get string metatable
|
lua_getmetatable(L, -1); // get string metatable
|
||||||
lua_pushcfunction(L,lib_concat); // push concatination function
|
LUA_SetCFunctionField(L, "__add", lib_concat);
|
||||||
lua_setfield(L,-2,"__add"); // ... store it as mathematical addition
|
|
||||||
lua_pop(L, 2); // pop metatable and dummy string
|
lua_pop(L, 2); // pop metatable and dummy string
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
|
|
|
@ -194,6 +194,7 @@ static int lib_comAddCommand(lua_State *L)
|
||||||
if (lua_gettop(L) >= 3)
|
if (lua_gettop(L) >= 3)
|
||||||
{ // For the third argument, only take a boolean or a number.
|
{ // For the third argument, only take a boolean or a number.
|
||||||
lua_settop(L, 3);
|
lua_settop(L, 3);
|
||||||
|
// TODO: 2.3: Remove boolean option
|
||||||
if (lua_type(L, 3) == LUA_TBOOLEAN)
|
if (lua_type(L, 3) == LUA_TBOOLEAN)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING,
|
CONS_Alert(CONS_WARNING,
|
||||||
|
@ -374,6 +375,9 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
CV_PossibleValue_t *cvpv;
|
CV_PossibleValue_t *cvpv;
|
||||||
|
|
||||||
|
const char * const MINMAX[2] = {"MIN", "MAX"};
|
||||||
|
int minmax_unset = 3;
|
||||||
|
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
while (lua_next(L, 4))
|
while (lua_next(L, 4))
|
||||||
{
|
{
|
||||||
|
@ -392,16 +396,45 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
while (lua_next(L, 4))
|
while (lua_next(L, 4))
|
||||||
{
|
{
|
||||||
|
INT32 n;
|
||||||
|
const char * strval;
|
||||||
|
|
||||||
// stack: [...] PossibleValue table, index, value
|
// stack: [...] PossibleValue table, index, value
|
||||||
// 4 5 6
|
// 4 5 6
|
||||||
if (lua_type(L, 5) != LUA_TSTRING
|
if (lua_type(L, 5) != LUA_TSTRING
|
||||||
|| lua_type(L, 6) != LUA_TNUMBER)
|
|| lua_type(L, 6) != LUA_TNUMBER)
|
||||||
FIELDERROR("PossibleValue", "custom PossibleValue table requires a format of string=integer, i.e. {MIN=0, MAX=9999}");
|
FIELDERROR("PossibleValue", "custom PossibleValue table requires a format of string=integer, i.e. {MIN=0, MAX=9999}");
|
||||||
cvpv[i].strvalue = Z_StrDup(lua_tostring(L, 5));
|
|
||||||
cvpv[i].value = (INT32)lua_tonumber(L, 6);
|
strval = lua_tostring(L, 5);
|
||||||
i++;
|
|
||||||
|
if (
|
||||||
|
stricmp(strval, MINMAX[n=0]) == 0 ||
|
||||||
|
stricmp(strval, MINMAX[n=1]) == 0
|
||||||
|
){
|
||||||
|
/* need to shift forward */
|
||||||
|
if (minmax_unset == 3)
|
||||||
|
{
|
||||||
|
memmove(&cvpv[2], &cvpv[0],
|
||||||
|
i * sizeof *cvpv);
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
cvpv[n].strvalue = MINMAX[n];
|
||||||
|
minmax_unset &= ~(1 << n);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = i++;
|
||||||
|
cvpv[n].strvalue = Z_StrDup(strval);
|
||||||
|
}
|
||||||
|
|
||||||
|
cvpv[n].value = (INT32)lua_tonumber(L, 6);
|
||||||
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (minmax_unset && minmax_unset != 3)
|
||||||
|
FIELDERROR("PossibleValue", "custom PossibleValue table requires requires both MIN and MAX keys if one is present");
|
||||||
|
|
||||||
cvpv[i].value = 0;
|
cvpv[i].value = 0;
|
||||||
cvpv[i].strvalue = NULL;
|
cvpv[i].strvalue = NULL;
|
||||||
cvar->PossibleValue = cvpv;
|
cvar->PossibleValue = cvpv;
|
||||||
|
@ -626,10 +659,7 @@ static int cvar_get(lua_State *L)
|
||||||
int LUA_ConsoleLib(lua_State *L)
|
int LUA_ConsoleLib(lua_State *L)
|
||||||
{
|
{
|
||||||
// Metatable for consvar_t
|
// Metatable for consvar_t
|
||||||
luaL_newmetatable(L, META_CVAR);
|
LUA_RegisterUserdataMetatable(L, META_CVAR, cvar_get, NULL, NULL);
|
||||||
lua_pushcfunction(L, cvar_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
cvar_fields_ref = Lua_CreateFieldTable(L, cvar_opt);
|
cvar_fields_ref = Lua_CreateFieldTable(L, cvar_opt);
|
||||||
|
|
||||||
|
|
|
@ -1206,19 +1206,11 @@ static int libd_height(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int libd_dupx(lua_State *L)
|
static int libd_dup(lua_State *L)
|
||||||
{
|
{
|
||||||
HUDONLY
|
HUDONLY
|
||||||
lua_pushinteger(L, vid.dupx); // push integral scale (patch scale)
|
lua_pushinteger(L, vid.dup); // push integral scale (patch scale)
|
||||||
lua_pushfixed(L, vid.fdupx); // push fixed point scale (position scale)
|
lua_pushfixed(L, vid.fdup); // push fixed point scale (position scale)
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int libd_dupy(lua_State *L)
|
|
||||||
{
|
|
||||||
HUDONLY
|
|
||||||
lua_pushinteger(L, vid.dupy); // push integral scale (patch scale)
|
|
||||||
lua_pushfixed(L, vid.fdupy); // push fixed point scale (position scale)
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1338,8 +1330,8 @@ static luaL_Reg lib_draw[] = {
|
||||||
// properties
|
// properties
|
||||||
{"width", libd_width},
|
{"width", libd_width},
|
||||||
{"height", libd_height},
|
{"height", libd_height},
|
||||||
{"dupx", libd_dupx},
|
{"dupx", libd_dup},
|
||||||
{"dupy", libd_dupy},
|
{"dupy", libd_dup},
|
||||||
{"renderer", libd_renderer},
|
{"renderer", libd_renderer},
|
||||||
{"localTransFlag", libd_getlocaltransflag},
|
{"localTransFlag", libd_getlocaltransflag},
|
||||||
{"userTransFlag", libd_getusertransflag},
|
{"userTransFlag", libd_getusertransflag},
|
||||||
|
@ -1404,52 +1396,16 @@ int LUA_HudLib(lua_State *L)
|
||||||
luaL_register(L, NULL, lib_draw);
|
luaL_register(L, NULL, lib_draw);
|
||||||
lib_draw_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
lib_draw_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_HUDINFO);
|
LUA_RegisterUserdataMetatable(L, META_HUDINFO, hudinfo_get, hudinfo_set, hudinfo_num);
|
||||||
lua_pushcfunction(L, hudinfo_get);
|
LUA_RegisterUserdataMetatable(L, META_COLORMAP, colormap_get, NULL, NULL);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_PATCH, patch_get, patch_set, NULL);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_CAMERA, camera_get, camera_set, NULL);
|
||||||
lua_pushcfunction(L, hudinfo_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, hudinfo_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getHudInfo);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_hudinfolen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "hudinfo");
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_COLORMAP);
|
|
||||||
lua_pushcfunction(L, colormap_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_PATCH);
|
|
||||||
lua_pushcfunction(L, patch_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, patch_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
patch_fields_ref = Lua_CreateFieldTable(L, patch_opt);
|
patch_fields_ref = Lua_CreateFieldTable(L, patch_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_CAMERA);
|
|
||||||
lua_pushcfunction(L, camera_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, camera_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
camera_fields_ref = Lua_CreateFieldTable(L, camera_opt);
|
camera_fields_ref = Lua_CreateFieldTable(L, camera_opt);
|
||||||
|
|
||||||
|
LUA_RegisterGlobalUserdata(L, "hudinfo", lib_getHudInfo, NULL, lib_hudinfolen);
|
||||||
|
|
||||||
luaL_register(L, "hud", lib_hud);
|
luaL_register(L, "hud", lib_hud);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,6 +318,7 @@ static int PopPivotSubTable(spriteframepivot_t *pivot, lua_State *L, int stk, in
|
||||||
pivot[idx].x = (INT32)value;
|
pivot[idx].x = (INT32)value;
|
||||||
else if (ikey == 2 || (key && fastcmp(key, "y")))
|
else if (ikey == 2 || (key && fastcmp(key, "y")))
|
||||||
pivot[idx].y = (INT32)value;
|
pivot[idx].y = (INT32)value;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
else if (ikey == 3 || (key && fastcmp(key, "rotaxis")))
|
else if (ikey == 3 || (key && fastcmp(key, "rotaxis")))
|
||||||
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.")
|
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.")
|
||||||
else if (ikey == -1 && (key != NULL))
|
else if (ikey == -1 && (key != NULL))
|
||||||
|
@ -571,6 +572,7 @@ static int framepivot_get(lua_State *L)
|
||||||
lua_pushinteger(L, framepivot->x);
|
lua_pushinteger(L, framepivot->x);
|
||||||
else if (fastcmp("y", field))
|
else if (fastcmp("y", field))
|
||||||
lua_pushinteger(L, framepivot->y);
|
lua_pushinteger(L, framepivot->y);
|
||||||
|
// TODO: 2.3: Delete
|
||||||
else if (fastcmp("rotaxis", field))
|
else if (fastcmp("rotaxis", field))
|
||||||
{
|
{
|
||||||
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.");
|
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.");
|
||||||
|
@ -600,6 +602,7 @@ static int framepivot_set(lua_State *L)
|
||||||
framepivot->x = luaL_checkinteger(L, 3);
|
framepivot->x = luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp("y", field))
|
else if (fastcmp("y", field))
|
||||||
framepivot->y = luaL_checkinteger(L, 3);
|
framepivot->y = luaL_checkinteger(L, 3);
|
||||||
|
// TODO: 2.3: delete
|
||||||
else if (fastcmp("rotaxis", field))
|
else if (fastcmp("rotaxis", field))
|
||||||
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.")
|
LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.")
|
||||||
else
|
else
|
||||||
|
@ -1914,206 +1917,28 @@ int LUA_InfoLib(lua_State *L)
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_setfield(L, LUA_REGISTRYINDEX, LREG_ACTIONS);
|
lua_setfield(L, LUA_REGISTRYINDEX, LREG_ACTIONS);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_STATE);
|
LUA_RegisterUserdataMetatable(L, META_STATE, state_get, state_set, state_num);
|
||||||
lua_pushcfunction(L, state_get);
|
LUA_RegisterUserdataMetatable(L, META_MOBJINFO, mobjinfo_get, mobjinfo_set, mobjinfo_num);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_SKINCOLOR, skincolor_get, skincolor_set, skincolor_num);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_COLORRAMP, colorramp_get, colorramp_set, colorramp_len);
|
||||||
lua_pushcfunction(L, state_set);
|
LUA_RegisterUserdataMetatable(L, META_SFXINFO, sfxinfo_get, sfxinfo_set, sfxinfo_num);
|
||||||
lua_setfield(L, -2, "__newindex");
|
LUA_RegisterUserdataMetatable(L, META_SPRITEINFO, spriteinfo_get, spriteinfo_set, spriteinfo_num);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_PIVOTLIST, pivotlist_get, pivotlist_set, pivotlist_num);
|
||||||
lua_pushcfunction(L, state_num);
|
LUA_RegisterUserdataMetatable(L, META_FRAMEPIVOT, framepivot_get, framepivot_set, framepivot_num);
|
||||||
lua_setfield(L, -2, "__len");
|
LUA_RegisterUserdataMetatable(L, META_LUABANKS, lib_getluabanks, lib_setluabanks, lib_luabankslen);
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_MOBJINFO);
|
|
||||||
lua_pushcfunction(L, mobjinfo_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, mobjinfo_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, mobjinfo_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
mobjinfo_fields_ref = Lua_CreateFieldTable(L, mobjinfo_opt);
|
mobjinfo_fields_ref = Lua_CreateFieldTable(L, mobjinfo_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SKINCOLOR);
|
LUA_RegisterGlobalUserdata(L, "sprnames", lib_getSprname, NULL, lib_sprnamelen);
|
||||||
lua_pushcfunction(L, skincolor_get);
|
LUA_RegisterGlobalUserdata(L, "spr2names", lib_getSpr2name, NULL, lib_spr2namelen);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterGlobalUserdata(L, "spr2defaults", lib_getSpr2default, lib_setSpr2default, lib_spr2namelen);
|
||||||
|
LUA_RegisterGlobalUserdata(L, "states", lib_getState, lib_setState, lib_statelen);
|
||||||
lua_pushcfunction(L, skincolor_set);
|
LUA_RegisterGlobalUserdata(L, "mobjinfo", lib_getMobjInfo, lib_setMobjInfo, lib_mobjinfolen);
|
||||||
lua_setfield(L, -2, "__newindex");
|
LUA_RegisterGlobalUserdata(L, "skincolors", lib_getSkinColor, lib_setSkinColor, lib_skincolorslen);
|
||||||
|
LUA_RegisterGlobalUserdata(L, "spriteinfo", lib_getSpriteInfo, lib_setSpriteInfo, lib_spriteinfolen);
|
||||||
lua_pushcfunction(L, skincolor_num);
|
LUA_RegisterGlobalUserdata(L, "sfxinfo", lib_getSfxInfo, lib_setSfxInfo, lib_sfxlen);
|
||||||
lua_setfield(L, -2, "__len");
|
// TODO: 2.3: Delete this alias
|
||||||
lua_pop(L, 1);
|
LUA_RegisterGlobalUserdata(L, "S_sfx", lib_getSfxInfo, lib_setSfxInfo, lib_sfxlen);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_COLORRAMP);
|
|
||||||
lua_pushcfunction(L, colorramp_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, colorramp_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, colorramp_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SFXINFO);
|
|
||||||
lua_pushcfunction(L, sfxinfo_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, sfxinfo_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, sfxinfo_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SPRITEINFO);
|
|
||||||
lua_pushcfunction(L, spriteinfo_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, spriteinfo_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, spriteinfo_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_PIVOTLIST);
|
|
||||||
lua_pushcfunction(L, pivotlist_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, pivotlist_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, pivotlist_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_FRAMEPIVOT);
|
|
||||||
lua_pushcfunction(L, framepivot_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, framepivot_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, framepivot_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSprname);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_sprnamelen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "sprnames");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSpr2name);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_spr2namelen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "spr2names");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSpr2default);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setSpr2default);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_spr2namelen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "spr2defaults");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getState);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setState);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_statelen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "states");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getMobjInfo);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setMobjInfo);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_mobjinfolen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "mobjinfo");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSkinColor);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setSkinColor);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_skincolorslen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "skincolors");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSfxInfo);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setSfxInfo);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_sfxlen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_pushvalue(L, -1);
|
|
||||||
lua_setglobal(L, "S_sfx");
|
|
||||||
lua_setglobal(L, "sfxinfo");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSpriteInfo);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setSpriteInfo);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_spriteinfolen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "spriteinfo");
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_LUABANKS);
|
|
||||||
lua_pushcfunction(L, lib_getluabanks);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setluabanks);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_luabankslen);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "lua_libs.h"
|
#include "lua_libs.h"
|
||||||
|
|
||||||
boolean mousegrabbedbylua = true;
|
boolean mousegrabbedbylua = true;
|
||||||
|
boolean ignoregameinputs = false;
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// FUNCTIONS //
|
// FUNCTIONS //
|
||||||
|
@ -145,6 +146,51 @@ static luaL_Reg lib[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///////////////
|
||||||
|
// VARIABLES //
|
||||||
|
///////////////
|
||||||
|
|
||||||
|
static int lib_get(lua_State *L)
|
||||||
|
{
|
||||||
|
const char *field = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
if (fastcmp(field, "mouse"))
|
||||||
|
{
|
||||||
|
LUA_PushUserdata(L, &mouse, META_MOUSE);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (fastcmp(field, "mouse2"))
|
||||||
|
{
|
||||||
|
LUA_PushUserdata(L, &mouse2, META_MOUSE);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (fastcmp(field, "ignoregameinputs"))
|
||||||
|
{
|
||||||
|
lua_pushboolean(L, ignoregameinputs);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_set(lua_State *L)
|
||||||
|
{
|
||||||
|
const char *field = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
if (fastcmp(field, "ignoregameinputs"))
|
||||||
|
{
|
||||||
|
ignoregameinputs = luaL_checkboolean(L, 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lua_rawset(L, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
// gamekeydown[] //
|
// gamekeydown[] //
|
||||||
///////////////////
|
///////////////////
|
||||||
|
@ -239,32 +285,18 @@ static int mouse_num(lua_State *L)
|
||||||
|
|
||||||
int LUA_InputLib(lua_State *L)
|
int LUA_InputLib(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_newuserdata(L, 0);
|
LUA_RegisterUserdataMetatable(L, META_KEYEVENT, keyevent_get, NULL, NULL);
|
||||||
lua_createtable(L, 0, 2);
|
LUA_RegisterUserdataMetatable(L, META_MOUSE, mouse_get, NULL, mouse_num);
|
||||||
lua_pushcfunction(L, lib_getGameKeyDown);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_setGameKeyDown);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_lenGameKeyDown);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "gamekeydown");
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_KEYEVENT);
|
|
||||||
lua_pushcfunction(L, keyevent_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_MOUSE);
|
|
||||||
lua_pushcfunction(L, mouse_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, mouse_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
|
// Register the library, then add __index and __newindex
|
||||||
|
// metamethods to it to allow global variables
|
||||||
luaL_register(L, "input", lib);
|
luaL_register(L, "input", lib);
|
||||||
|
LUA_CreateAndSetMetatable(L, lib_get, lib_set, NULL, false);
|
||||||
|
|
||||||
|
LUA_CreateAndSetUserdataField(L, -1, "gamekeydown", lib_getGameKeyDown, lib_setGameKeyDown, lib_lenGameKeyDown, false);
|
||||||
|
// TODO: 2.3: Delete this alias (moved to input library)
|
||||||
|
LUA_RegisterGlobalUserdata(L, "gamekeydown", lib_getGameKeyDown, lib_setGameKeyDown, lib_lenGameKeyDown);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
extern lua_State *gL;
|
extern lua_State *gL;
|
||||||
|
|
||||||
extern boolean mousegrabbedbylua;
|
extern boolean mousegrabbedbylua;
|
||||||
|
extern boolean ignoregameinputs;
|
||||||
|
|
||||||
#define MUTABLE_TAGS
|
#define MUTABLE_TAGS
|
||||||
|
|
||||||
|
|
278
src/lua_maplib.c
278
src/lua_maplib.c
|
@ -35,7 +35,7 @@ enum sector_e {
|
||||||
sector_floorpic,
|
sector_floorpic,
|
||||||
sector_floorxoffset,
|
sector_floorxoffset,
|
||||||
sector_flooryoffset,
|
sector_flooryoffset,
|
||||||
sector_floorangle,
|
sector_floorangle,
|
||||||
sector_ceilingpic,
|
sector_ceilingpic,
|
||||||
sector_ceilingxoffset,
|
sector_ceilingxoffset,
|
||||||
sector_ceilingyoffset,
|
sector_ceilingyoffset,
|
||||||
|
@ -43,7 +43,7 @@ enum sector_e {
|
||||||
sector_lightlevel,
|
sector_lightlevel,
|
||||||
sector_floorlightlevel,
|
sector_floorlightlevel,
|
||||||
sector_floorlightabsolute,
|
sector_floorlightabsolute,
|
||||||
sector_floorlightsec,
|
sector_floorlightsec,
|
||||||
sector_ceilinglightlevel,
|
sector_ceilinglightlevel,
|
||||||
sector_ceilinglightabsolute,
|
sector_ceilinglightabsolute,
|
||||||
sector_ceilinglightsec,
|
sector_ceilinglightsec,
|
||||||
|
@ -77,14 +77,14 @@ static const char *const sector_opt[] = {
|
||||||
"ceilingpic",
|
"ceilingpic",
|
||||||
"ceilingxoffset",
|
"ceilingxoffset",
|
||||||
"ceilingyoffset",
|
"ceilingyoffset",
|
||||||
"ceilingangle",
|
"ceilingangle",
|
||||||
"lightlevel",
|
"lightlevel",
|
||||||
"floorlightlevel",
|
"floorlightlevel",
|
||||||
"floorlightabsolute",
|
"floorlightabsolute",
|
||||||
"floorlightsec",
|
"floorlightsec",
|
||||||
"ceilinglightlevel",
|
"ceilinglightlevel",
|
||||||
"ceilinglightabsolute",
|
"ceilinglightabsolute",
|
||||||
"ceilinglightsec",
|
"ceilinglightsec",
|
||||||
"special",
|
"special",
|
||||||
"tag",
|
"tag",
|
||||||
"taglist",
|
"taglist",
|
||||||
|
@ -663,11 +663,11 @@ static int sector_get(lua_State *L)
|
||||||
lua_pushfixed(L, sector->flooryoffset);
|
lua_pushfixed(L, sector->flooryoffset);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
case sector_floorangle:
|
case sector_floorangle:
|
||||||
{
|
{
|
||||||
lua_pushangle(L, sector->floorangle);
|
lua_pushangle(L, sector->floorangle);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
case sector_ceilingpic: // ceilingpic
|
case sector_ceilingpic: // ceilingpic
|
||||||
{
|
{
|
||||||
levelflat_t *levelflat = &levelflats[sector->ceilingpic];
|
levelflat_t *levelflat = &levelflats[sector->ceilingpic];
|
||||||
|
@ -691,7 +691,7 @@ static int sector_get(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_pushangle(L, sector->ceilingangle);
|
lua_pushangle(L, sector->ceilingangle);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
case sector_lightlevel:
|
case sector_lightlevel:
|
||||||
lua_pushinteger(L, sector->lightlevel);
|
lua_pushinteger(L, sector->lightlevel);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -703,7 +703,7 @@ static int sector_get(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
case sector_floorlightsec:
|
case sector_floorlightsec:
|
||||||
lua_pushinteger(L, sector->floorlightsec);
|
lua_pushinteger(L, sector->floorlightsec);
|
||||||
return 1;
|
return 1;
|
||||||
case sector_ceilinglightlevel:
|
case sector_ceilinglightlevel:
|
||||||
lua_pushinteger(L, sector->ceilinglightlevel);
|
lua_pushinteger(L, sector->ceilinglightlevel);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -712,7 +712,7 @@ static int sector_get(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
case sector_ceilinglightsec:
|
case sector_ceilinglightsec:
|
||||||
lua_pushinteger(L, sector->ceilinglightsec);
|
lua_pushinteger(L, sector->ceilinglightsec);
|
||||||
return 1;
|
return 1;
|
||||||
case sector_special:
|
case sector_special:
|
||||||
lua_pushinteger(L, sector->special);
|
lua_pushinteger(L, sector->special);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -842,7 +842,7 @@ static int sector_set(lua_State *L)
|
||||||
break;
|
break;
|
||||||
case sector_floorangle:
|
case sector_floorangle:
|
||||||
sector->floorangle = luaL_checkangle(L, 3);
|
sector->floorangle = luaL_checkangle(L, 3);
|
||||||
break;
|
break;
|
||||||
case sector_ceilingpic:
|
case sector_ceilingpic:
|
||||||
sector->ceilingpic = P_AddLevelFlatRuntime(luaL_checkstring(L, 3));
|
sector->ceilingpic = P_AddLevelFlatRuntime(luaL_checkstring(L, 3));
|
||||||
break;
|
break;
|
||||||
|
@ -866,7 +866,7 @@ static int sector_set(lua_State *L)
|
||||||
break;
|
break;
|
||||||
case sector_floorlightsec:
|
case sector_floorlightsec:
|
||||||
sector->floorlightsec = (INT32)luaL_checkinteger(L, 3);
|
sector->floorlightsec = (INT32)luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
case sector_ceilinglightlevel:
|
case sector_ceilinglightlevel:
|
||||||
sector->ceilinglightlevel = (INT16)luaL_checkinteger(L, 3);
|
sector->ceilinglightlevel = (INT16)luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
|
@ -875,7 +875,7 @@ static int sector_set(lua_State *L)
|
||||||
break;
|
break;
|
||||||
case sector_ceilinglightsec:
|
case sector_ceilinglightsec:
|
||||||
sector->ceilinglightsec = (INT32)luaL_checkinteger(L, 3);
|
sector->ceilinglightsec = (INT32)luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
case sector_special:
|
case sector_special:
|
||||||
sector->special = (INT16)luaL_checkinteger(L, 3);
|
sector->special = (INT16)luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
|
@ -1043,17 +1043,7 @@ static int line_get(lua_State *L)
|
||||||
lua_pushinteger(L, line->special);
|
lua_pushinteger(L, line->special);
|
||||||
return 1;
|
return 1;
|
||||||
case line_tag:
|
case line_tag:
|
||||||
// HELLO
|
// TODO: 2.3: Always return a unsigned value
|
||||||
// THIS IS LJ SONIC
|
|
||||||
// HOW IS YOUR DAY?
|
|
||||||
// BY THE WAY WHEN 2.3 OR 3.0 OR 4.0 OR SRB3 OR SRB4 OR WHATEVER IS OUT
|
|
||||||
// YOU SHOULD REMEMBER TO CHANGE THIS SO IT ALWAYS RETURNS A UNSIGNED VALUE
|
|
||||||
// HAVE A NICE DAY
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// you are ugly
|
|
||||||
lua_pushinteger(L, Tag_FGet(&line->tags));
|
lua_pushinteger(L, Tag_FGet(&line->tags));
|
||||||
return 1;
|
return 1;
|
||||||
case line_taglist:
|
case line_taglist:
|
||||||
|
@ -1108,6 +1098,7 @@ static int line_get(lua_State *L)
|
||||||
case line_polyobj:
|
case line_polyobj:
|
||||||
LUA_PushUserdata(L, line->polyobj, META_POLYOBJ);
|
LUA_PushUserdata(L, line->polyobj, META_POLYOBJ);
|
||||||
return 1;
|
return 1;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case line_text:
|
case line_text:
|
||||||
{
|
{
|
||||||
if (udmf)
|
if (udmf)
|
||||||
|
@ -1241,6 +1232,7 @@ static int side_get(lua_State *L)
|
||||||
case side_repeatcnt:
|
case side_repeatcnt:
|
||||||
lua_pushinteger(L, side->repeatcnt);
|
lua_pushinteger(L, side->repeatcnt);
|
||||||
return 1;
|
return 1;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case side_text:
|
case side_text:
|
||||||
{
|
{
|
||||||
if (udmf)
|
if (udmf)
|
||||||
|
@ -2843,170 +2835,36 @@ static int mapheaderinfo_get(lua_State *L)
|
||||||
|
|
||||||
int LUA_MapLib(lua_State *L)
|
int LUA_MapLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_SECTORLINES);
|
LUA_RegisterUserdataMetatable(L, META_SECTORLINES, sectorlines_get, NULL, sectorlines_num);
|
||||||
lua_pushcfunction(L, sectorlines_get);
|
LUA_RegisterUserdataMetatable(L, META_SECTOR, sector_get, sector_set, sector_num);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_SUBSECTOR, subsector_get, NULL, subsector_num);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_LINE, line_get, NULL, line_num);
|
||||||
lua_pushcfunction(L, sectorlines_num);
|
LUA_RegisterUserdataMetatable(L, META_LINEARGS, lineargs_get, NULL, lineargs_len);
|
||||||
lua_setfield(L, -2, "__len");
|
LUA_RegisterUserdataMetatable(L, META_LINESTRINGARGS, linestringargs_get, NULL, linestringargs_len);
|
||||||
lua_pop(L, 1);
|
LUA_RegisterUserdataMetatable(L, META_SIDENUM, sidenum_get, NULL, NULL);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_SIDE, side_get, side_set, side_num);
|
||||||
luaL_newmetatable(L, META_SECTOR);
|
LUA_RegisterUserdataMetatable(L, META_VERTEX, vertex_get, NULL, vertex_num);
|
||||||
lua_pushcfunction(L, sector_get);
|
LUA_RegisterUserdataMetatable(L, META_FFLOOR, ffloor_get, ffloor_set, NULL);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_BBOX, bbox_get, NULL, NULL);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_SLOPE, slope_get, slope_set, NULL);
|
||||||
lua_pushcfunction(L, sector_set);
|
LUA_RegisterUserdataMetatable(L, META_VECTOR2, vector2_get, NULL, NULL);
|
||||||
lua_setfield(L, -2, "__newindex");
|
LUA_RegisterUserdataMetatable(L, META_VECTOR3, vector3_get, NULL, NULL);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_MAPHEADER, mapheaderinfo_get, NULL, NULL);
|
||||||
lua_pushcfunction(L, sector_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
sector_fields_ref = Lua_CreateFieldTable(L, sector_opt);
|
sector_fields_ref = Lua_CreateFieldTable(L, sector_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SUBSECTOR);
|
|
||||||
lua_pushcfunction(L, subsector_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, subsector_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
subsector_fields_ref = Lua_CreateFieldTable(L, subsector_opt);
|
subsector_fields_ref = Lua_CreateFieldTable(L, subsector_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_LINE);
|
|
||||||
lua_pushcfunction(L, line_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, line_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
line_fields_ref = Lua_CreateFieldTable(L, line_opt);
|
line_fields_ref = Lua_CreateFieldTable(L, line_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_LINEARGS);
|
|
||||||
lua_pushcfunction(L, lineargs_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lineargs_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_LINESTRINGARGS);
|
|
||||||
lua_pushcfunction(L, linestringargs_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, linestringargs_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SIDENUM);
|
|
||||||
lua_pushcfunction(L, sidenum_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SIDE);
|
|
||||||
lua_pushcfunction(L, side_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, side_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, side_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
side_fields_ref = Lua_CreateFieldTable(L, side_opt);
|
side_fields_ref = Lua_CreateFieldTable(L, side_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_VERTEX);
|
|
||||||
lua_pushcfunction(L, vertex_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, vertex_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
vertex_fields_ref = Lua_CreateFieldTable(L, vertex_opt);
|
vertex_fields_ref = Lua_CreateFieldTable(L, vertex_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_FFLOOR);
|
|
||||||
lua_pushcfunction(L, ffloor_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, ffloor_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
ffloor_fields_ref = Lua_CreateFieldTable(L, ffloor_opt);
|
ffloor_fields_ref = Lua_CreateFieldTable(L, ffloor_opt);
|
||||||
|
|
||||||
#ifdef HAVE_LUA_SEGS
|
|
||||||
luaL_newmetatable(L, META_SEG);
|
|
||||||
lua_pushcfunction(L, seg_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, seg_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
seg_fields_ref = Lua_CreateFieldTable(L, seg_opt);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_NODE);
|
|
||||||
lua_pushcfunction(L, node_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, node_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
node_fields_ref = Lua_CreateFieldTable(L, node_opt);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_NODEBBOX);
|
|
||||||
//lua_pushcfunction(L, nodebbox_get);
|
|
||||||
//lua_setfield(L, -2, "__index");
|
|
||||||
lua_pushcfunction(L, nodebbox_call);
|
|
||||||
lua_setfield(L, -2, "__call");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_NODECHILDREN);
|
|
||||||
lua_pushcfunction(L, nodechildren_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_BBOX);
|
|
||||||
lua_pushcfunction(L, bbox_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SLOPE);
|
|
||||||
lua_pushcfunction(L, slope_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, slope_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
slope_fields_ref = Lua_CreateFieldTable(L, slope_opt);
|
slope_fields_ref = Lua_CreateFieldTable(L, slope_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_VECTOR2);
|
|
||||||
lua_pushcfunction(L, vector2_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_VECTOR3);
|
|
||||||
lua_pushcfunction(L, vector3_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_MAPHEADER);
|
|
||||||
lua_pushcfunction(L, mapheaderinfo_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
//lua_pushcfunction(L, mapheaderinfo_num);
|
|
||||||
//lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
mapheaderinfo_fields_ref = Lua_CreateFieldTable(L, mapheaderinfo_opt);
|
mapheaderinfo_fields_ref = Lua_CreateFieldTable(L, mapheaderinfo_opt);
|
||||||
|
|
||||||
|
LUA_RegisterGlobalUserdata(L, "subsectors", lib_getSubsector, NULL, lib_numsubsectors);
|
||||||
|
LUA_RegisterGlobalUserdata(L, "sides", lib_getSide, NULL, lib_numsides);
|
||||||
|
LUA_RegisterGlobalUserdata(L, "vertexes", lib_getVertex, NULL, lib_numvertexes);
|
||||||
|
LUA_RegisterGlobalUserdata(L, "mapheaderinfo", lib_getMapheaderinfo, NULL, lib_nummapheaders);
|
||||||
|
|
||||||
LUA_PushTaggableObjectArray(L, "sectors",
|
LUA_PushTaggableObjectArray(L, "sectors",
|
||||||
lib_iterateSectors,
|
lib_iterateSectors,
|
||||||
lib_getSector,
|
lib_getSector,
|
||||||
|
@ -3015,16 +2873,6 @@ int LUA_MapLib(lua_State *L)
|
||||||
&numsectors, §ors,
|
&numsectors, §ors,
|
||||||
sizeof (sector_t), META_SECTOR);
|
sizeof (sector_t), META_SECTOR);
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSubsector);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numsubsectors);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "subsectors");
|
|
||||||
|
|
||||||
LUA_PushTaggableObjectArray(L, "lines",
|
LUA_PushTaggableObjectArray(L, "lines",
|
||||||
lib_iterateLines,
|
lib_iterateLines,
|
||||||
lib_getLine,
|
lib_getLine,
|
||||||
|
@ -3033,56 +2881,22 @@ int LUA_MapLib(lua_State *L)
|
||||||
&numlines, &lines,
|
&numlines, &lines,
|
||||||
sizeof (line_t), META_LINE);
|
sizeof (line_t), META_LINE);
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSide);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numsides);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "sides");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getVertex);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numvertexes);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "vertexes");
|
|
||||||
|
|
||||||
#ifdef HAVE_LUA_SEGS
|
#ifdef HAVE_LUA_SEGS
|
||||||
lua_newuserdata(L, 0);
|
LUA_RegisterUserdataMetatable(L, META_SEG, seg_get, NULL, seg_num);
|
||||||
lua_createtable(L, 0, 2);
|
LUA_RegisterUserdataMetatable(L, META_NODE, node_get, NULL, node_num);
|
||||||
lua_pushcfunction(L, lib_getSeg);
|
LUA_RegisterUserdataMetatable(L, META_NODECHILDREN, nodechildren_get, NULL, NULL);
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numsegs);
|
seg_fields_ref = Lua_CreateFieldTable(L, seg_opt);
|
||||||
lua_setfield(L, -2, "__len");
|
node_fields_ref = Lua_CreateFieldTable(L, node_opt);
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "segs");
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
luaL_newmetatable(L, META_NODEBBOX);
|
||||||
lua_createtable(L, 0, 2);
|
//LUA_SetCFunctionField(L, "__index", nodebbox_get);
|
||||||
lua_pushcfunction(L, lib_getNode);
|
LUA_SetCFunctionField(L, "__call", nodebbox_call);
|
||||||
lua_setfield(L, -2, "__index");
|
lua_pop(L, 1);
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numnodes);
|
LUA_RegisterGlobalUserdata(L, "segs", lib_getSeg, NULL, lib_numsegs);
|
||||||
lua_setfield(L, -2, "__len");
|
LUA_RegisterGlobalUserdata(L, "nodes", lib_getNode, NULL, lib_numnodes);
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "nodes");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getMapheaderinfo);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_nummapheaders);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "mapheaderinfo");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,7 @@ static int lib_fixeddiv(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete
|
||||||
static int lib_fixedrem(lua_State *L)
|
static int lib_fixedrem(lua_State *L)
|
||||||
{
|
{
|
||||||
LUA_Deprecated(L, "FixedRem(a, b)", "a % b");
|
LUA_Deprecated(L, "FixedRem(a, b)", "a % b");
|
||||||
|
|
|
@ -1163,43 +1163,12 @@ static int lib_nummapthings(lua_State *L)
|
||||||
|
|
||||||
int LUA_MobjLib(lua_State *L)
|
int LUA_MobjLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_MOBJ);
|
LUA_RegisterUserdataMetatable(L, META_MOBJ, mobj_get, mobj_set, NULL);
|
||||||
lua_pushcfunction(L, mobj_get);
|
LUA_RegisterUserdataMetatable(L, META_THINGARGS, thingargs_get, NULL, thingargs_len);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_THINGSTRINGARGS, thingstringargs_get, NULL, thingstringargs_len);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_MAPTHING, mapthing_get, mapthing_set, mapthing_num);
|
||||||
lua_pushcfunction(L, mobj_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
mobj_fields_ref = Lua_CreateFieldTable(L, mobj_opt);
|
mobj_fields_ref = Lua_CreateFieldTable(L, mobj_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_THINGARGS);
|
|
||||||
lua_pushcfunction(L, thingargs_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, thingargs_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_THINGSTRINGARGS);
|
|
||||||
lua_pushcfunction(L, thingstringargs_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, thingstringargs_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_MAPTHING);
|
|
||||||
lua_pushcfunction(L, mapthing_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, mapthing_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, mapthing_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
mapthing_fields_ref = Lua_CreateFieldTable(L, mapthing_opt);
|
mapthing_fields_ref = Lua_CreateFieldTable(L, mapthing_opt);
|
||||||
|
|
||||||
LUA_PushTaggableObjectArray(L, "mapthings",
|
LUA_PushTaggableObjectArray(L, "mapthings",
|
||||||
|
|
|
@ -223,6 +223,7 @@ enum player_e
|
||||||
player_blocked,
|
player_blocked,
|
||||||
player_jointime,
|
player_jointime,
|
||||||
player_quittime,
|
player_quittime,
|
||||||
|
player_lastinputtime,
|
||||||
player_ping,
|
player_ping,
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
player_fovadd,
|
player_fovadd,
|
||||||
|
@ -371,6 +372,7 @@ static const char *const player_opt[] = {
|
||||||
"blocked",
|
"blocked",
|
||||||
"jointime",
|
"jointime",
|
||||||
"quittime",
|
"quittime",
|
||||||
|
"lastinputtime",
|
||||||
"ping",
|
"ping",
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
"fovadd",
|
"fovadd",
|
||||||
|
@ -407,7 +409,7 @@ static int player_get(lua_State *L)
|
||||||
case player_realmo:
|
case player_realmo:
|
||||||
LUA_PushUserdata(L, plr->mo, META_MOBJ);
|
LUA_PushUserdata(L, plr->mo, META_MOBJ);
|
||||||
break;
|
break;
|
||||||
// Kept for backward-compatibility
|
// TODO: 2.3: Kept for backward-compatibility
|
||||||
// Should be fixed to work like "realmo" later
|
// Should be fixed to work like "realmo" later
|
||||||
case player_mo:
|
case player_mo:
|
||||||
if (plr->spectator)
|
if (plr->spectator)
|
||||||
|
@ -826,6 +828,9 @@ static int player_get(lua_State *L)
|
||||||
case player_quittime:
|
case player_quittime:
|
||||||
lua_pushinteger(L, plr->quittime);
|
lua_pushinteger(L, plr->quittime);
|
||||||
break;
|
break;
|
||||||
|
case player_lastinputtime:
|
||||||
|
lua_pushinteger(L, plr->lastinputtime);
|
||||||
|
break;
|
||||||
case player_ping:
|
case player_ping:
|
||||||
lua_pushinteger(L, playerpingtable[plr - players]);
|
lua_pushinteger(L, playerpingtable[plr - players]);
|
||||||
break;
|
break;
|
||||||
|
@ -1349,6 +1354,9 @@ static int player_set(lua_State *L)
|
||||||
case player_quittime:
|
case player_quittime:
|
||||||
plr->quittime = (tic_t)luaL_checkinteger(L, 3);
|
plr->quittime = (tic_t)luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
|
case player_lastinputtime:
|
||||||
|
plr->lastinputtime = (tic_t)luaL_checkinteger(L, 3);
|
||||||
|
break;
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
case player_fovadd:
|
case player_fovadd:
|
||||||
plr->fovadd = luaL_checkfixed(L, 3);
|
plr->fovadd = luaL_checkfixed(L, 3);
|
||||||
|
@ -1523,48 +1531,13 @@ static int ticcmd_set(lua_State *L)
|
||||||
|
|
||||||
int LUA_PlayerLib(lua_State *L)
|
int LUA_PlayerLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_PLAYER);
|
LUA_RegisterUserdataMetatable(L, META_PLAYER, player_get, player_set, player_num);
|
||||||
lua_pushcfunction(L, player_get);
|
LUA_RegisterUserdataMetatable(L, META_POWERS, power_get, power_set, power_len);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_TICCMD, ticcmd_get, ticcmd_set, NULL);
|
||||||
|
|
||||||
lua_pushcfunction(L, player_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, player_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
player_fields_ref = Lua_CreateFieldTable(L, player_opt);
|
player_fields_ref = Lua_CreateFieldTable(L, player_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_POWERS);
|
|
||||||
lua_pushcfunction(L, power_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, power_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, power_len);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_TICCMD);
|
|
||||||
lua_pushcfunction(L, ticcmd_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, ticcmd_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
ticcmd_fields_ref = Lua_CreateFieldTable(L, ticcmd_opt);
|
ticcmd_fields_ref = Lua_CreateFieldTable(L, ticcmd_opt);
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
LUA_RegisterGlobalUserdata(L, "players", lib_getPlayer, NULL, lib_lenPlayer);
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getPlayer);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_lenPlayer);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "players");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -447,41 +447,10 @@ static int lib_numPolyObjects(lua_State *L)
|
||||||
|
|
||||||
int LUA_PolyObjLib(lua_State *L)
|
int LUA_PolyObjLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_POLYOBJVERTICES);
|
LUA_RegisterUserdataMetatable(L, META_POLYOBJVERTICES, polyobjvertices_get, NULL, polyobjvertices_num);
|
||||||
lua_pushcfunction(L, polyobjvertices_get);
|
LUA_RegisterUserdataMetatable(L, META_POLYOBJLINES, polyobjlines_get, NULL, polyobjlines_num);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_POLYOBJ, polyobj_get, polyobj_set, polyobj_num);
|
||||||
|
|
||||||
lua_pushcfunction(L, polyobjvertices_num);
|
LUA_RegisterGlobalUserdata(L, "polyobjects", lib_getPolyObject, NULL, lib_numPolyObjects);
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_POLYOBJLINES);
|
|
||||||
lua_pushcfunction(L, polyobjlines_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, polyobjlines_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_POLYOBJ);
|
|
||||||
lua_pushcfunction(L, polyobj_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, polyobj_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, polyobj_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getPolyObject);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numPolyObjects);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "polyobjects");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
104
src/lua_script.c
104
src/lua_script.c
|
@ -415,9 +415,11 @@ int LUA_PushGlobals(lua_State *L, const char *word)
|
||||||
} else if (fastcmp(word, "stagefailed")) {
|
} else if (fastcmp(word, "stagefailed")) {
|
||||||
lua_pushboolean(L, stagefailed);
|
lua_pushboolean(L, stagefailed);
|
||||||
return 1;
|
return 1;
|
||||||
|
// TODO: 2.3: Deprecated (moved to the input library)
|
||||||
} else if (fastcmp(word, "mouse")) {
|
} else if (fastcmp(word, "mouse")) {
|
||||||
LUA_PushUserdata(L, &mouse, META_MOUSE);
|
LUA_PushUserdata(L, &mouse, META_MOUSE);
|
||||||
return 1;
|
return 1;
|
||||||
|
// TODO: 2.3: Deprecated (moved to the input library)
|
||||||
} else if (fastcmp(word, "mouse2")) {
|
} else if (fastcmp(word, "mouse2")) {
|
||||||
LUA_PushUserdata(L, &mouse2, META_MOUSE);
|
LUA_PushUserdata(L, &mouse2, META_MOUSE);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -576,8 +578,7 @@ static void LUA_ClearState(void)
|
||||||
|
|
||||||
// lock the global namespace
|
// lock the global namespace
|
||||||
lua_getmetatable(L, LUA_GLOBALSINDEX);
|
lua_getmetatable(L, LUA_GLOBALSINDEX);
|
||||||
lua_pushcfunction(L, setglobals);
|
LUA_SetCFunctionField(L, "__newindex", setglobals);
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_setfield(L, -2, "__metatable");
|
lua_setfield(L, -2, "__metatable");
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
@ -1813,20 +1814,107 @@ void LUA_PushTaggableObjectArray
|
||||||
lua_newuserdata(L, 0);
|
lua_newuserdata(L, 0);
|
||||||
lua_createtable(L, 0, 2);
|
lua_createtable(L, 0, 2);
|
||||||
lua_createtable(L, 0, 2);
|
lua_createtable(L, 0, 2);
|
||||||
lua_pushcfunction(L, iterator);
|
LUA_SetCFunctionField(L, "iterate", iterator);
|
||||||
lua_setfield(L, -2, "iterate");
|
|
||||||
|
|
||||||
LUA_InsertTaggroupIterator(L, garray,
|
LUA_InsertTaggroupIterator(L, garray,
|
||||||
max_elements, element_array, sizeof_element, meta);
|
max_elements, element_array, sizeof_element, meta);
|
||||||
|
|
||||||
lua_createtable(L, 0, 1);
|
lua_createtable(L, 0, 1);
|
||||||
lua_pushcfunction(L, indexer);
|
LUA_SetCFunctionField(L, "__index", indexer);
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_setmetatable(L, -2);
|
lua_setmetatable(L, -2);
|
||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
|
|
||||||
lua_pushcfunction(L, counter);
|
LUA_SetCFunctionField(L, "__len", counter);
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
lua_setmetatable(L, -2);
|
||||||
lua_setglobal(L, field);
|
lua_setglobal(L, field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SetBasicMetamethods(
|
||||||
|
lua_State *L,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (get)
|
||||||
|
LUA_SetCFunctionField(L, "__index", get);
|
||||||
|
if (set)
|
||||||
|
LUA_SetCFunctionField(L, "__newindex", set);
|
||||||
|
if (len)
|
||||||
|
LUA_SetCFunctionField(L, "__len", len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LUA_SetCFunctionField(lua_State *L, const char *name, lua_CFunction value)
|
||||||
|
{
|
||||||
|
lua_pushcfunction(L, value);
|
||||||
|
lua_setfield(L, -2, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LUA_RegisterUserdataMetatable(
|
||||||
|
lua_State *L,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len
|
||||||
|
)
|
||||||
|
{
|
||||||
|
luaL_newmetatable(L, name);
|
||||||
|
SetBasicMetamethods(L, get, set, len);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If keep is true, leaves the metatable on the stack.
|
||||||
|
// Otherwise, the stack size remains unchanged.
|
||||||
|
void LUA_CreateAndSetMetatable(
|
||||||
|
lua_State *L,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len,
|
||||||
|
boolean keep
|
||||||
|
)
|
||||||
|
{
|
||||||
|
lua_newtable(L);
|
||||||
|
SetBasicMetamethods(L, get, set, len);
|
||||||
|
|
||||||
|
lua_pushvalue(L, -1);
|
||||||
|
lua_setmetatable(L, -3);
|
||||||
|
|
||||||
|
if (!keep)
|
||||||
|
lua_pop(L, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If keep is true, leaves the userdata and metatable on the stack.
|
||||||
|
// Otherwise, the stack size remains unchanged.
|
||||||
|
void LUA_CreateAndSetUserdataField(
|
||||||
|
lua_State *L,
|
||||||
|
int index,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len,
|
||||||
|
boolean keep
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (index < 0 && index > LUA_REGISTRYINDEX)
|
||||||
|
index -= 3;
|
||||||
|
|
||||||
|
lua_newuserdata(L, 0);
|
||||||
|
LUA_CreateAndSetMetatable(L, get, set, len, true);
|
||||||
|
|
||||||
|
lua_pushvalue(L, -2);
|
||||||
|
lua_setfield(L, index, name);
|
||||||
|
|
||||||
|
if (!keep)
|
||||||
|
lua_pop(L, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LUA_RegisterGlobalUserdata(
|
||||||
|
lua_State *L,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LUA_CreateAndSetUserdataField(L, LUA_GLOBALSINDEX, name, get, set, len, false);
|
||||||
|
}
|
||||||
|
|
|
@ -73,6 +73,42 @@ void LUA_PushTaggableObjectArray
|
||||||
size_t sizeof_element,
|
size_t sizeof_element,
|
||||||
const char *meta);
|
const char *meta);
|
||||||
|
|
||||||
|
void LUA_SetCFunctionField(lua_State *L, const char *name, lua_CFunction value);
|
||||||
|
|
||||||
|
void LUA_RegisterUserdataMetatable(
|
||||||
|
lua_State *L,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len
|
||||||
|
);
|
||||||
|
|
||||||
|
void LUA_CreateAndSetMetatable(
|
||||||
|
lua_State *L,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len,
|
||||||
|
boolean keep
|
||||||
|
);
|
||||||
|
|
||||||
|
void LUA_CreateAndSetUserdataField(
|
||||||
|
lua_State *L,
|
||||||
|
int index,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len,
|
||||||
|
boolean keep
|
||||||
|
);
|
||||||
|
|
||||||
|
void LUA_RegisterGlobalUserdata(
|
||||||
|
lua_State *L,
|
||||||
|
const char *name,
|
||||||
|
lua_CFunction get,
|
||||||
|
lua_CFunction set,
|
||||||
|
lua_CFunction len
|
||||||
|
);
|
||||||
|
|
||||||
void LUA_InsertTaggroupIterator
|
void LUA_InsertTaggroupIterator
|
||||||
( lua_State *L,
|
( lua_State *L,
|
||||||
taggroup_t *garray[],
|
taggroup_t *garray[],
|
||||||
|
|
|
@ -373,49 +373,14 @@ static int sprite_get(lua_State *L)
|
||||||
|
|
||||||
int LUA_SkinLib(lua_State *L)
|
int LUA_SkinLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_SKIN);
|
LUA_RegisterUserdataMetatable(L, META_SKIN, skin_get, skin_set, skin_num);
|
||||||
lua_pushcfunction(L, skin_get);
|
LUA_RegisterUserdataMetatable(L, META_SOUNDSID, soundsid_get, NULL, soundsid_num);
|
||||||
lua_setfield(L, -2, "__index");
|
LUA_RegisterUserdataMetatable(L, META_SKINSPRITES, lib_getSkinSprite, NULL, lib_numSkinsSprites);
|
||||||
|
LUA_RegisterUserdataMetatable(L, META_SKINSPRITESLIST, sprite_get, NULL, NULL);
|
||||||
lua_pushcfunction(L, skin_set);
|
|
||||||
lua_setfield(L, -2, "__newindex");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, skin_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
skin_fields_ref = Lua_CreateFieldTable(L, skin_opt);
|
skin_fields_ref = Lua_CreateFieldTable(L, skin_opt);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SOUNDSID);
|
LUA_RegisterGlobalUserdata(L, "skins", lib_getSkin, NULL, lib_numSkins);
|
||||||
lua_pushcfunction(L, soundsid_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, soundsid_num);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SKINSPRITES);
|
|
||||||
lua_pushcfunction(L, lib_getSkinSprite);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numSkinsSprites);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
luaL_newmetatable(L, META_SKINSPRITESLIST);
|
|
||||||
lua_pushcfunction(L, sprite_get);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
lua_pop(L,1);
|
|
||||||
|
|
||||||
lua_newuserdata(L, 0);
|
|
||||||
lua_createtable(L, 0, 2);
|
|
||||||
lua_pushcfunction(L, lib_getSkin);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numSkins);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "skins");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -372,8 +372,7 @@ void LUA_InsertTaggroupIterator
|
||||||
lua_pushcclosure(L, lib_numTaggroupElements, 2);
|
lua_pushcclosure(L, lib_numTaggroupElements, 2);
|
||||||
lua_setfield(L, -2, "__len");
|
lua_setfield(L, -2, "__len");
|
||||||
|
|
||||||
lua_pushcfunction(L, element_iterator);
|
LUA_SetCFunctionField(L, "__call", element_iterator);
|
||||||
lua_setfield(L, -2, "__call");
|
|
||||||
lua_pushcclosure(L, lib_getTaggroup, 1);
|
lua_pushcclosure(L, lib_getTaggroup, 1);
|
||||||
lua_setfield(L, -2, "tagged");
|
lua_setfield(L, -2, "tagged");
|
||||||
}
|
}
|
||||||
|
@ -414,11 +413,9 @@ set_taglist_metatable(lua_State *L, const char *meta)
|
||||||
lua_setfenv(L, -2);
|
lua_setfenv(L, -2);
|
||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
|
|
||||||
lua_pushcfunction(L, taglist_len);
|
LUA_SetCFunctionField(L, "__len", taglist_len);
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, taglist_equal);
|
LUA_SetCFunctionField(L, "__eq", taglist_equal);
|
||||||
lua_setfield(L, -2, "__eq");
|
|
||||||
#ifdef MUTABLE_TAGS
|
#ifdef MUTABLE_TAGS
|
||||||
return luaL_ref(L, LUA_REGISTRYINDEX);
|
return luaL_ref(L, LUA_REGISTRYINDEX);
|
||||||
#endif
|
#endif
|
||||||
|
@ -426,17 +423,11 @@ set_taglist_metatable(lua_State *L, const char *meta)
|
||||||
|
|
||||||
int LUA_TagLib(lua_State *L)
|
int LUA_TagLib(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_newuserdata(L, 0);
|
LUA_CreateAndSetUserdataField(L, LUA_GLOBALSINDEX, "tags", NULL, NULL, lib_numTags, true);
|
||||||
lua_createtable(L, 0, 2);
|
lua_createtable(L, 0, 1);
|
||||||
lua_createtable(L, 0, 1);
|
LUA_SetCFunctionField(L, "iterate", lib_iterateTags);
|
||||||
lua_pushcfunction(L, lib_iterateTags);
|
lua_setfield(L, -2, "__index");
|
||||||
lua_setfield(L, -2, "iterate");
|
lua_pop(L, 2);
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
|
|
||||||
lua_pushcfunction(L, lib_numTags);
|
|
||||||
lua_setfield(L, -2, "__len");
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
lua_setglobal(L, "tags");
|
|
||||||
|
|
||||||
open_taglist(L);
|
open_taglist(L);
|
||||||
|
|
||||||
|
|
|
@ -127,8 +127,7 @@ static int lib_startIterate(lua_State *L)
|
||||||
int LUA_ThinkerLib(lua_State *L)
|
int LUA_ThinkerLib(lua_State *L)
|
||||||
{
|
{
|
||||||
luaL_newmetatable(L, META_ITERATIONSTATE);
|
luaL_newmetatable(L, META_ITERATIONSTATE);
|
||||||
lua_pushcfunction(L, iterationState_gc);
|
LUA_SetCFunctionField(L, "__gc", iterationState_gc);
|
||||||
lua_setfield(L, -2, "__gc");
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
lua_createtable(L, 0, 1);
|
lua_createtable(L, 0, 1);
|
||||||
|
|
|
@ -462,7 +462,7 @@ static void GIF_headwrite(void)
|
||||||
// Image width/height
|
// Image width/height
|
||||||
if (gif_downscale)
|
if (gif_downscale)
|
||||||
{
|
{
|
||||||
scrbuf_downscaleamt = vid.dupx;
|
scrbuf_downscaleamt = vid.dup;
|
||||||
rwidth = (vid.width / scrbuf_downscaleamt);
|
rwidth = (vid.width / scrbuf_downscaleamt);
|
||||||
rheight = (vid.height / scrbuf_downscaleamt);
|
rheight = (vid.height / scrbuf_downscaleamt);
|
||||||
}
|
}
|
||||||
|
|
61
src/m_menu.c
61
src/m_menu.c
|
@ -214,7 +214,7 @@ static fixed_t lsoffs[2];
|
||||||
#define lshli levelselectselect[2]
|
#define lshli levelselectselect[2]
|
||||||
|
|
||||||
#define lshseperation 101
|
#define lshseperation 101
|
||||||
#define lsbasevseperation ((62*vid.height)/(BASEVIDHEIGHT*vid.dupy)) //62
|
#define lsbasevseperation ((62*vid.height)/(BASEVIDHEIGHT*vid.dup)) //62
|
||||||
#define lsheadingheight 16
|
#define lsheadingheight 16
|
||||||
#define getheadingoffset(row) (levelselect.rows[row].header[0] ? lsheadingheight : 0)
|
#define getheadingoffset(row) (levelselect.rows[row].header[0] ? lsheadingheight : 0)
|
||||||
#define lsvseperation(row) (lsbasevseperation + getheadingoffset(row))
|
#define lsvseperation(row) (lsbasevseperation + getheadingoffset(row))
|
||||||
|
@ -3574,16 +3574,16 @@ void M_Drawer(void)
|
||||||
{
|
{
|
||||||
if (customversionstring[0] != '\0')
|
if (customversionstring[0] != '\0')
|
||||||
{
|
{
|
||||||
V_DrawThinString(vid.dupx, vid.height - 17*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, "Mod version:");
|
V_DrawThinString(vid.dup, vid.height - 17*vid.dup, V_NOSCALESTART|V_TRANSLUCENT, "Mod version:");
|
||||||
V_DrawThinString(vid.dupx, vid.height - 9*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, customversionstring);
|
V_DrawThinString(vid.dup, vid.height - 9*vid.dup, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, customversionstring);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEVELOP // Development -- show revision / branch info
|
#ifdef DEVELOP // Development -- show revision / branch info
|
||||||
V_DrawThinString(vid.dupx, vid.height - 17*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, compbranch);
|
V_DrawThinString(vid.dup, vid.height - 17*vid.dup, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, compbranch);
|
||||||
V_DrawThinString(vid.dupx, vid.height - 9*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, comprevision);
|
V_DrawThinString(vid.dup, vid.height - 9*vid.dup, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, comprevision);
|
||||||
#else // Regular build
|
#else // Regular build
|
||||||
V_DrawThinString(vid.dupx, vid.height - 9*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, va("%s", VERSIONSTRING));
|
V_DrawThinString(vid.dup, vid.height - 9*vid.dup, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, va("%s", VERSIONSTRING));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5757,16 +5757,15 @@ static void M_DrawRecordAttackForeground(void)
|
||||||
|
|
||||||
INT32 i;
|
INT32 i;
|
||||||
INT32 height = (fg->height / 2);
|
INT32 height = (fg->height / 2);
|
||||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
|
|
||||||
for (i = -12; i < (BASEVIDHEIGHT/height) + 12; i++)
|
for (i = -12; i < (BASEVIDHEIGHT/height) + 12; i++)
|
||||||
{
|
{
|
||||||
INT32 y = ((i*height) - (height - ((FixedInt(recatkdrawtimer*2))%height)));
|
INT32 y = ((i*height) - (height - ((FixedInt(recatkdrawtimer*2))%height)));
|
||||||
// don't draw above the screen
|
// don't draw above the screen
|
||||||
{
|
{
|
||||||
INT32 sy = FixedMul(y, dupz<<FRACBITS) >> FRACBITS;
|
INT32 sy = FixedMul(y, vid.dup<<FRACBITS) >> FRACBITS;
|
||||||
if (vid.height != BASEVIDHEIGHT * dupz)
|
if (vid.height != BASEVIDHEIGHT * vid.dup)
|
||||||
sy += (vid.height - (BASEVIDHEIGHT * dupz)) / 2;
|
sy += (vid.height - (BASEVIDHEIGHT * vid.dup)) / 2;
|
||||||
if ((sy+height) < 0)
|
if ((sy+height) < 0)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -5790,13 +5789,12 @@ static void M_DrawRecordAttackForeground(void)
|
||||||
static void M_DrawNightsAttackMountains(void)
|
static void M_DrawNightsAttackMountains(void)
|
||||||
{
|
{
|
||||||
static fixed_t bgscrollx;
|
static fixed_t bgscrollx;
|
||||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
patch_t *background = W_CachePatchName(curbgname, PU_PATCH);
|
patch_t *background = W_CachePatchName(curbgname, PU_PATCH);
|
||||||
INT16 w = background->width;
|
INT16 w = background->width;
|
||||||
INT32 x = FixedInt(-bgscrollx) % w;
|
INT32 x = FixedInt(-bgscrollx) % w;
|
||||||
INT32 y = BASEVIDHEIGHT - (background->height * 2);
|
INT32 y = BASEVIDHEIGHT - (background->height * 2);
|
||||||
|
|
||||||
if (vid.height != BASEVIDHEIGHT * dupz)
|
if (vid.height != BASEVIDHEIGHT * vid.dup)
|
||||||
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 158);
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 158);
|
||||||
V_DrawFill(0, y+50, vid.width, BASEVIDHEIGHT, V_SNAPTOLEFT|31);
|
V_DrawFill(0, y+50, vid.width, BASEVIDHEIGHT, V_SNAPTOLEFT|31);
|
||||||
|
|
||||||
|
@ -5952,7 +5950,7 @@ static void M_DrawLevelPlatterMenu(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw from top to bottom
|
// draw from top to bottom
|
||||||
while (y < (vid.height/vid.dupy))
|
while (y < (vid.height/vid.dup))
|
||||||
{
|
{
|
||||||
M_DrawLevelPlatterRow(iter, y);
|
M_DrawLevelPlatterRow(iter, y);
|
||||||
y += lsvseperation(iter);
|
y += lsvseperation(iter);
|
||||||
|
@ -7799,9 +7797,9 @@ static void M_DrawSoundTest(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
y = (BASEVIDWIDTH-(vid.width/vid.dupx))/2;
|
y = (BASEVIDWIDTH-(vid.width/vid.dup))/2;
|
||||||
|
|
||||||
V_DrawFill(y, 20, vid.width/vid.dupx, 24, 159);
|
V_DrawFill(y, 20, vid.width/vid.dup, 24, 159);
|
||||||
{
|
{
|
||||||
static fixed_t st_scroll = -FRACUNIT;
|
static fixed_t st_scroll = -FRACUNIT;
|
||||||
const char* titl;
|
const char* titl;
|
||||||
|
@ -8371,8 +8369,8 @@ static void M_DrawLoadGameData(void)
|
||||||
INT32 i, prev_i = 1, savetodraw, x, y, hsep = 90;
|
INT32 i, prev_i = 1, savetodraw, x, y, hsep = 90;
|
||||||
skin_t *charskin = NULL;
|
skin_t *charskin = NULL;
|
||||||
|
|
||||||
if (vid.width != BASEVIDWIDTH*vid.dupx)
|
if (vid.width != BASEVIDWIDTH*vid.dup)
|
||||||
hsep = (hsep*vid.width)/(BASEVIDWIDTH*vid.dupx);
|
hsep = (hsep*vid.width)/(BASEVIDWIDTH*vid.dup);
|
||||||
|
|
||||||
for (i = 2; prev_i; i = -(i + ((UINT32)i >> 31))) // draws from outwards in; 2, -2, 1, -1, 0
|
for (i = 2; prev_i; i = -(i + ((UINT32)i >> 31))) // draws from outwards in; 2, -2, 1, -1, 0
|
||||||
{
|
{
|
||||||
|
@ -9357,7 +9355,7 @@ static void M_DrawSetupChoosePlayerMenu(void)
|
||||||
INT16 bgwidth = charbg->width;
|
INT16 bgwidth = charbg->width;
|
||||||
INT16 fgwidth = charfg->width;
|
INT16 fgwidth = charfg->width;
|
||||||
INT32 x, y;
|
INT32 x, y;
|
||||||
INT32 w = (vid.width/vid.dupx);
|
INT32 w = (vid.width/vid.dup);
|
||||||
|
|
||||||
if (abs(char_scroll) > FRACUNIT/4)
|
if (abs(char_scroll) > FRACUNIT/4)
|
||||||
char_scroll -= FixedMul((char_scroll>>2), renderdeltatics);
|
char_scroll -= FixedMul((char_scroll>>2), renderdeltatics);
|
||||||
|
@ -9393,7 +9391,7 @@ static void M_DrawSetupChoosePlayerMenu(void)
|
||||||
// Background and borders
|
// Background and borders
|
||||||
V_DrawFill(0, 0, bgwidth, vid.height, V_SNAPTOTOP|colormap[101]);
|
V_DrawFill(0, 0, bgwidth, vid.height, V_SNAPTOTOP|colormap[101]);
|
||||||
{
|
{
|
||||||
INT32 sw = (BASEVIDWIDTH * vid.dupx);
|
INT32 sw = (BASEVIDWIDTH * vid.dup);
|
||||||
INT32 bw = (vid.width - sw) / 2;
|
INT32 bw = (vid.width - sw) / 2;
|
||||||
col = colormap[106];
|
col = colormap[106];
|
||||||
if (bw)
|
if (bw)
|
||||||
|
@ -10815,7 +10813,7 @@ void M_DrawMarathon(void)
|
||||||
const char *cvstring;
|
const char *cvstring;
|
||||||
char *work;
|
char *work;
|
||||||
angle_t fa;
|
angle_t fa;
|
||||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy), xspan = (vid.width/dupz), yspan = (vid.height/dupz), diffx = (xspan - BASEVIDWIDTH)/2, diffy = (yspan - BASEVIDHEIGHT)/2, maxy = BASEVIDHEIGHT + diffy;
|
INT32 xspan = (vid.width/vid.dup), yspan = (vid.height/vid.dup), diffx = (xspan - BASEVIDWIDTH)/2, diffy = (yspan - BASEVIDHEIGHT)/2, maxy = BASEVIDHEIGHT + diffy;
|
||||||
|
|
||||||
curbgxspeed = 0;
|
curbgxspeed = 0;
|
||||||
curbgyspeed = 18;
|
curbgyspeed = 18;
|
||||||
|
@ -10888,16 +10886,17 @@ void M_DrawMarathon(void)
|
||||||
INT32 trans = V_60TRANS+((cnt&~3)<<(V_ALPHASHIFT-2));
|
INT32 trans = V_60TRANS+((cnt&~3)<<(V_ALPHASHIFT-2));
|
||||||
INT32 height = fg->height / 2;
|
INT32 height = fg->height / 2;
|
||||||
char patchname[7] = "CEMGx0";
|
char patchname[7] = "CEMGx0";
|
||||||
|
INT32 dup;
|
||||||
|
|
||||||
dupz = (w*7)/6; //(w*42*120)/(360*6); -- I don't know why this works but I'm not going to complain.
|
dup = (w*7)/6; //(w*42*120)/(360*6); -- I don't know why this works but I'm not going to complain.
|
||||||
dupz = ((dupz>>FRACBITS) % height);
|
dup = ((dup>>FRACBITS) % height);
|
||||||
y = height/2;
|
y = height/2;
|
||||||
while (y+dupz >= -diffy)
|
while (y+dup >= -diffy)
|
||||||
y -= height;
|
y -= height;
|
||||||
while (y-2-dupz < maxy)
|
while (y-2-dup < maxy)
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(((BASEVIDWIDTH-190)<<(FRACBITS-1)), (y-2-dupz)<<FRACBITS, FRACUNIT/2, trans, fg, NULL);
|
V_DrawFixedPatch(((BASEVIDWIDTH-190)<<(FRACBITS-1)), (y-2-dup)<<FRACBITS, FRACUNIT/2, trans, fg, NULL);
|
||||||
V_DrawFixedPatch(((BASEVIDWIDTH+190)<<(FRACBITS-1)), (y+dupz)<<FRACBITS, FRACUNIT/2, trans|V_FLIP, fg, NULL);
|
V_DrawFixedPatch(((BASEVIDWIDTH+190)<<(FRACBITS-1)), (y+dup)<<FRACBITS, FRACUNIT/2, trans|V_FLIP, fg, NULL);
|
||||||
y += height;
|
y += height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10915,16 +10914,16 @@ void M_DrawMarathon(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
height = 18; // prevents the need for the next line
|
height = 18; // prevents the need for the next line
|
||||||
//dupz = (w*height)/18;
|
//dup = (w*height)/18;
|
||||||
dupz = ((w>>FRACBITS) % height);
|
dup = ((w>>FRACBITS) % height);
|
||||||
y = dupz+(height/4);
|
y = dup+(height/4);
|
||||||
x = 105+dupz;
|
x = 105+dup;
|
||||||
while (y >= -diffy)
|
while (y >= -diffy)
|
||||||
{
|
{
|
||||||
x -= height;
|
x -= height;
|
||||||
y -= height;
|
y -= height;
|
||||||
}
|
}
|
||||||
while (y-dupz < maxy && x < (xspan/2))
|
while (y-dup < maxy && x < (xspan/2))
|
||||||
{
|
{
|
||||||
V_DrawFill((BASEVIDWIDTH/2)-x-height, -diffy, height, diffy+y+height, 153);
|
V_DrawFill((BASEVIDWIDTH/2)-x-height, -diffy, height, diffy+y+height, 153);
|
||||||
V_DrawFill((BASEVIDWIDTH/2)+x, (maxy-y)-height, height, height+y, 153);
|
V_DrawFill((BASEVIDWIDTH/2)+x, (maxy-y)-height, height, height+y, 153);
|
||||||
|
|
|
@ -989,7 +989,7 @@ static inline boolean M_PNGLib(void)
|
||||||
|
|
||||||
static void M_PNGFrame(png_structp png_ptr, png_infop png_info_ptr, png_bytep png_buf)
|
static void M_PNGFrame(png_structp png_ptr, png_infop png_info_ptr, png_bytep png_buf)
|
||||||
{
|
{
|
||||||
png_uint_16 downscale = apng_downscale ? vid.dupx : 1;
|
png_uint_16 downscale = apng_downscale ? vid.dup : 1;
|
||||||
|
|
||||||
png_uint_32 pitch = png_get_rowbytes(png_ptr, png_info_ptr);
|
png_uint_32 pitch = png_get_rowbytes(png_ptr, png_info_ptr);
|
||||||
PNG_CONST png_uint_32 width = vid.width / downscale;
|
PNG_CONST png_uint_32 width = vid.width / downscale;
|
||||||
|
@ -1055,7 +1055,7 @@ static boolean M_SetupaPNG(png_const_charp filename, png_bytep pal)
|
||||||
|
|
||||||
apng_downscale = (!!cv_apng_downscale.value);
|
apng_downscale = (!!cv_apng_downscale.value);
|
||||||
|
|
||||||
downscale = apng_downscale ? vid.dupx : 1;
|
downscale = apng_downscale ? vid.dup : 1;
|
||||||
|
|
||||||
apng_FILE = fopen(filename,"wb+"); // + mode for reading
|
apng_FILE = fopen(filename,"wb+"); // + mode for reading
|
||||||
if (!apng_FILE)
|
if (!apng_FILE)
|
||||||
|
|
|
@ -96,7 +96,7 @@ void Ban_Load_File(boolean warning)
|
||||||
|
|
||||||
Ban_Clear();
|
Ban_Clear();
|
||||||
|
|
||||||
for (size_t i=0; fgets(buffer, (int)sizeof(buffer), f); i++)
|
for (; fgets(buffer, (int)sizeof(buffer), f);)
|
||||||
{
|
{
|
||||||
address = strtok(buffer, " \t\r\n");
|
address = strtok(buffer, " \t\r\n");
|
||||||
mask = strtok(NULL, " \t\r\n");
|
mask = strtok(NULL, " \t\r\n");
|
||||||
|
|
|
@ -113,6 +113,7 @@ consvar_t cv_blamecfail = CVAR_INIT ("blamecfail", "Off", CV_SAVE|CV_NETVAR, CV_
|
||||||
static CV_PossibleValue_t playbackspeed_cons_t[] = {{1, "MIN"}, {10, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t playbackspeed_cons_t[] = {{1, "MIN"}, {10, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_playbackspeed = CVAR_INIT ("playbackspeed", "1", 0, playbackspeed_cons_t, NULL);
|
consvar_t cv_playbackspeed = CVAR_INIT ("playbackspeed", "1", 0, playbackspeed_cons_t, NULL);
|
||||||
|
|
||||||
|
consvar_t cv_idletime = CVAR_INIT ("idletime", "0", CV_SAVE, CV_Unsigned, NULL);
|
||||||
consvar_t cv_dedicatedidletime = CVAR_INIT ("dedicatedidletime", "10", CV_SAVE, CV_Unsigned, NULL);
|
consvar_t cv_dedicatedidletime = CVAR_INIT ("dedicatedidletime", "10", CV_SAVE, CV_Unsigned, NULL);
|
||||||
|
|
||||||
void ResetNode(INT32 node)
|
void ResetNode(INT32 node)
|
||||||
|
@ -226,6 +227,7 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
||||||
|
|
||||||
newplayer->jointime = 0;
|
newplayer->jointime = 0;
|
||||||
newplayer->quittime = 0;
|
newplayer->quittime = 0;
|
||||||
|
newplayer->lastinputtime = 0;
|
||||||
|
|
||||||
READSTRINGN(*p, player_names[newplayernum], MAXPLAYERNAME);
|
READSTRINGN(*p, player_names[newplayernum], MAXPLAYERNAME);
|
||||||
|
|
||||||
|
@ -492,6 +494,10 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
HU_AddChatText(va("\x82*%s has been banned (%s)", player_names[pnum], reason), false);
|
HU_AddChatText(va("\x82*%s has been banned (%s)", player_names[pnum], reason), false);
|
||||||
kickreason = KR_BAN;
|
kickreason = KR_BAN;
|
||||||
break;
|
break;
|
||||||
|
case KICK_MSG_IDLE:
|
||||||
|
HU_AddChatText(va("\x82*%s has left the game (Inactive for too long)", player_names[pnum]), false);
|
||||||
|
kickreason = KR_TIMEOUT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pnum == consoleplayer)
|
if (pnum == consoleplayer)
|
||||||
|
@ -507,6 +513,8 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
M_StartMessage(M_GetText("Server closed connection\n(synch failure)\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("Server closed connection\n(synch failure)\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
else if (msg == KICK_MSG_PING_HIGH)
|
else if (msg == KICK_MSG_PING_HIGH)
|
||||||
M_StartMessage(M_GetText("Server closed connection\n(Broke ping limit)\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("Server closed connection\n(Broke ping limit)\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
|
else if (msg == KICK_MSG_IDLE)
|
||||||
|
M_StartMessage(M_GetText("Server closed connection\n(Inactive for too long)\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
else if (msg == KICK_MSG_BANNED)
|
else if (msg == KICK_MSG_BANNED)
|
||||||
M_StartMessage(M_GetText("You have been banned by the server\n\nPress ESC\n"), NULL, MM_NOTHING);
|
M_StartMessage(M_GetText("You have been banned by the server\n\nPress ESC\n"), NULL, MM_NOTHING);
|
||||||
else if (msg == KICK_MSG_CUSTOM_KICK)
|
else if (msg == KICK_MSG_CUSTOM_KICK)
|
||||||
|
@ -1267,6 +1275,32 @@ static void UpdatePingTable(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void IdleUpdate(void)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
if (!server || !netgame)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 1; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (cv_idletime.value && playeringame[i] && playernode[i] != UINT8_MAX && !players[i].quittime && !players[i].spectator && !players[i].bot && !IsPlayerAdmin(i) && i != serverplayer)
|
||||||
|
{
|
||||||
|
if (players[i].cmd.forwardmove || players[i].cmd.sidemove || players[i].cmd.buttons)
|
||||||
|
players[i].lastinputtime = 0;
|
||||||
|
else
|
||||||
|
players[i].lastinputtime++;
|
||||||
|
|
||||||
|
if (players[i].lastinputtime > (tic_t)cv_idletime.value * TICRATE * 60)
|
||||||
|
{
|
||||||
|
players[i].lastinputtime = 0;
|
||||||
|
SendKick(i, KICK_MSG_IDLE | KICK_MSG_KEEP_BODY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
players[i].lastinputtime = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle timeouts to prevent definitive freezes from happenning
|
// Handle timeouts to prevent definitive freezes from happenning
|
||||||
static void HandleNodeTimeouts(void)
|
static void HandleNodeTimeouts(void)
|
||||||
{
|
{
|
||||||
|
@ -1299,6 +1333,8 @@ void NetKeepAlive(void)
|
||||||
|
|
||||||
GetPackets();
|
GetPackets();
|
||||||
|
|
||||||
|
IdleUpdate();
|
||||||
|
|
||||||
#ifdef MASTERSERVER
|
#ifdef MASTERSERVER
|
||||||
MasterClient_Ticker();
|
MasterClient_Ticker();
|
||||||
#endif
|
#endif
|
||||||
|
@ -1419,6 +1455,8 @@ void NetUpdate(void)
|
||||||
|
|
||||||
GetPackets(); // get packet from client or from server
|
GetPackets(); // get packet from client or from server
|
||||||
|
|
||||||
|
IdleUpdate();
|
||||||
|
|
||||||
// The client sends the command after receiving from the server
|
// The client sends the command after receiving from the server
|
||||||
// The server sends it before because this is better in single player
|
// The server sends it before because this is better in single player
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ typedef enum
|
||||||
KR_TIMEOUT = 4, //Connection Timeout
|
KR_TIMEOUT = 4, //Connection Timeout
|
||||||
KR_BAN = 5, //Banned by server
|
KR_BAN = 5, //Banned by server
|
||||||
KR_LEAVE = 6, //Quit the game
|
KR_LEAVE = 6, //Quit the game
|
||||||
|
KR_IDLE = 7, //Remained still for too long
|
||||||
} kickreason_t;
|
} kickreason_t;
|
||||||
|
|
||||||
/* the max number of name changes in some time period */
|
/* the max number of name changes in some time period */
|
||||||
|
@ -73,7 +73,7 @@ extern UINT32 realpingtable[MAXPLAYERS];
|
||||||
extern UINT32 playerpingtable[MAXPLAYERS];
|
extern UINT32 playerpingtable[MAXPLAYERS];
|
||||||
extern tic_t servermaxping;
|
extern tic_t servermaxping;
|
||||||
|
|
||||||
extern consvar_t cv_netticbuffer, cv_resynchattempts, cv_blamecfail, cv_playbackspeed, cv_dedicatedidletime;
|
extern consvar_t cv_netticbuffer, cv_resynchattempts, cv_blamecfail, cv_playbackspeed, cv_idletime, cv_dedicatedidletime;
|
||||||
|
|
||||||
// Used in d_net, the only dependence
|
// Used in d_net, the only dependence
|
||||||
void D_ClientServerInit(void);
|
void D_ClientServerInit(void);
|
||||||
|
|
|
@ -601,6 +601,7 @@ void D_RegisterServerCommands(void)
|
||||||
CV_RegisterVar(&cv_showjoinaddress);
|
CV_RegisterVar(&cv_showjoinaddress);
|
||||||
CV_RegisterVar(&cv_blamecfail);
|
CV_RegisterVar(&cv_blamecfail);
|
||||||
CV_RegisterVar(&cv_dedicatedidletime);
|
CV_RegisterVar(&cv_dedicatedidletime);
|
||||||
|
CV_RegisterVar(&cv_idletime);
|
||||||
|
|
||||||
COM_AddCommand("ping", Command_Ping_f, COM_LUA);
|
COM_AddCommand("ping", Command_Ping_f, COM_LUA);
|
||||||
CV_RegisterVar(&cv_nettimeout);
|
CV_RegisterVar(&cv_nettimeout);
|
||||||
|
@ -1241,7 +1242,7 @@ static void SetColorLocal(INT32 playernum, UINT16 color)
|
||||||
//
|
//
|
||||||
static void SendNameAndColor(void)
|
static void SendNameAndColor(void)
|
||||||
{
|
{
|
||||||
char buf[MAXPLAYERNAME+6];
|
char buf[MAXPLAYERNAME+7];
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = buf;
|
p = buf;
|
||||||
|
|
|
@ -331,6 +331,7 @@ typedef struct
|
||||||
#define KICK_MSG_PING_HIGH 6
|
#define KICK_MSG_PING_HIGH 6
|
||||||
#define KICK_MSG_CUSTOM_KICK 7
|
#define KICK_MSG_CUSTOM_KICK 7
|
||||||
#define KICK_MSG_CUSTOM_BAN 8
|
#define KICK_MSG_CUSTOM_BAN 8
|
||||||
|
#define KICK_MSG_IDLE 9
|
||||||
#define KICK_MSG_KEEP_BODY 0x80
|
#define KICK_MSG_KEEP_BODY 0x80
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -204,6 +204,7 @@ void P_Earthquake(mobj_t *inflictor, mobj_t *source, fixed_t radius);
|
||||||
boolean P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user
|
boolean P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user
|
||||||
boolean P_SuperReady(player_t *player);
|
boolean P_SuperReady(player_t *player);
|
||||||
void P_DoJump(player_t *player, boolean soundandstate);
|
void P_DoJump(player_t *player, boolean soundandstate);
|
||||||
|
void P_DoSpinDashDust(player_t *player);
|
||||||
#define P_AnalogMove(player) (P_ControlStyle(player) == CS_LMAOGALOG)
|
#define P_AnalogMove(player) (P_ControlStyle(player) == CS_LMAOGALOG)
|
||||||
boolean P_TransferToNextMare(player_t *player);
|
boolean P_TransferToNextMare(player_t *player);
|
||||||
UINT8 P_FindLowestMare(void);
|
UINT8 P_FindLowestMare(void);
|
||||||
|
@ -214,6 +215,10 @@ void P_SpawnThokMobj(player_t *player);
|
||||||
void P_SpawnSpinMobj(player_t *player, mobjtype_t type);
|
void P_SpawnSpinMobj(player_t *player, mobjtype_t type);
|
||||||
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
||||||
|
|
||||||
|
void P_DoTailsOverlay(player_t *player, mobj_t *tails);
|
||||||
|
void P_DoMetalJetFume(player_t *player, mobj_t *fume);
|
||||||
|
void P_DoFollowMobj(player_t *player, mobj_t *followmobj);
|
||||||
|
|
||||||
void P_PlayLivesJingle(player_t *player);
|
void P_PlayLivesJingle(player_t *player);
|
||||||
#define P_PlayRinglossSound(s) S_StartSound(s, (mariomode) ? sfx_mario8 : sfx_altow1 + P_RandomKey(4));
|
#define P_PlayRinglossSound(s) S_StartSound(s, (mariomode) ? sfx_mario8 : sfx_altow1 + P_RandomKey(4));
|
||||||
#define P_PlayDeathSound(s) S_StartSound(s, sfx_altdi1 + P_RandomKey(4));
|
#define P_PlayDeathSound(s) S_StartSound(s, sfx_altdi1 + P_RandomKey(4));
|
||||||
|
@ -298,6 +303,7 @@ void P_RunOverlays(void);
|
||||||
void P_HandleMinecartSegments(mobj_t *mobj);
|
void P_HandleMinecartSegments(mobj_t *mobj);
|
||||||
void P_MobjThinker(mobj_t *mobj);
|
void P_MobjThinker(mobj_t *mobj);
|
||||||
boolean P_RailThinker(mobj_t *mobj);
|
boolean P_RailThinker(mobj_t *mobj);
|
||||||
|
boolean P_CheckSkyHit(mobj_t *mo, line_t *line);
|
||||||
void P_PushableThinker(mobj_t *mobj);
|
void P_PushableThinker(mobj_t *mobj);
|
||||||
void P_SceneryThinker(mobj_t *mobj);
|
void P_SceneryThinker(mobj_t *mobj);
|
||||||
|
|
||||||
|
@ -535,6 +541,9 @@ boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle
|
||||||
boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state);
|
boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state);
|
||||||
boolean P_CheckMissileSpawn(mobj_t *th);
|
boolean P_CheckMissileSpawn(mobj_t *th);
|
||||||
void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move);
|
void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move);
|
||||||
|
void P_ThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move);
|
||||||
|
void P_VectorInstaThrust(fixed_t xa, fixed_t xb, fixed_t xc, fixed_t ya, fixed_t yb, fixed_t yc,
|
||||||
|
fixed_t za, fixed_t zb, fixed_t zc, fixed_t momentum, mobj_t *mo);
|
||||||
void P_DoSuperTransformation(player_t *player, boolean giverings);
|
void P_DoSuperTransformation(player_t *player, boolean giverings);
|
||||||
void P_ExplodeMissile(mobj_t *mo);
|
void P_ExplodeMissile(mobj_t *mo);
|
||||||
void P_CheckGravity(mobj_t *mo, boolean affect);
|
void P_CheckGravity(mobj_t *mo, boolean affect);
|
||||||
|
|
|
@ -3730,7 +3730,9 @@ void P_SlideMove(mobj_t *mo)
|
||||||
|
|
||||||
boolean papercol = false;
|
boolean papercol = false;
|
||||||
vertex_t v1, v2; // fake vertexes
|
vertex_t v1, v2; // fake vertexes
|
||||||
line_t junk; // fake linedef
|
static line_t junk; // fake linedef
|
||||||
|
|
||||||
|
memset(&junk, 0x00, sizeof(junk));
|
||||||
|
|
||||||
if (tmhitthing && mo->z + mo->height > tmhitthing->z && mo->z < tmhitthing->z + tmhitthing->height)
|
if (tmhitthing && mo->z + mo->height > tmhitthing->z && mo->z < tmhitthing->z + tmhitthing->height)
|
||||||
{
|
{
|
||||||
|
|
28
src/p_mobj.c
28
src/p_mobj.c
|
@ -1779,14 +1779,15 @@ bustupdone:
|
||||||
//
|
//
|
||||||
// P_CheckSkyHit
|
// P_CheckSkyHit
|
||||||
//
|
//
|
||||||
static boolean P_CheckSkyHit(mobj_t *mo)
|
boolean P_CheckSkyHit(mobj_t *mo, line_t *line)
|
||||||
{
|
{
|
||||||
if (ceilingline && ceilingline->backsector
|
if (line && (line->special == 41 ||
|
||||||
&& ceilingline->backsector->ceilingpic == skyflatnum
|
(line->backsector
|
||||||
&& ceilingline->frontsector
|
&& line->backsector->ceilingpic == skyflatnum
|
||||||
&& ceilingline->frontsector->ceilingpic == skyflatnum
|
&& line->frontsector
|
||||||
&& (mo->z >= ceilingline->frontsector->ceilingheight
|
&& line->frontsector->ceilingpic == skyflatnum
|
||||||
|| mo->z >= ceilingline->backsector->ceilingheight))
|
&& (mo->z >= line->frontsector->ceilingheight
|
||||||
|
|| mo->z >= line->backsector->ceilingheight))))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1893,7 +1894,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
mo->fuse += ((5 - mo->threshold) * TICRATE);
|
mo->fuse += ((5 - mo->threshold) * TICRATE);
|
||||||
|
|
||||||
// Check for hit against sky here
|
// Check for hit against sky here
|
||||||
if (P_CheckSkyHit(mo))
|
if (P_CheckSkyHit(mo, ceilingline))
|
||||||
{
|
{
|
||||||
// Hack to prevent missiles exploding
|
// Hack to prevent missiles exploding
|
||||||
// against the sky.
|
// against the sky.
|
||||||
|
@ -1913,7 +1914,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
mo->flags &= ~MF_STICKY; //Don't check again!
|
mo->flags &= ~MF_STICKY; //Don't check again!
|
||||||
|
|
||||||
// Check for hit against sky here
|
// Check for hit against sky here
|
||||||
if (P_CheckSkyHit(mo))
|
if (P_CheckSkyHit(mo, ceilingline))
|
||||||
{
|
{
|
||||||
// Hack to prevent missiles exploding
|
// Hack to prevent missiles exploding
|
||||||
// against the sky.
|
// against the sky.
|
||||||
|
@ -1972,7 +1973,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
else if (mo->flags & MF_MISSILE)
|
else if (mo->flags & MF_MISSILE)
|
||||||
{
|
{
|
||||||
// explode a missile
|
// explode a missile
|
||||||
if (P_CheckSkyHit(mo))
|
if (P_CheckSkyHit(mo, ceilingline))
|
||||||
{
|
{
|
||||||
// Hack to prevent missiles exploding
|
// Hack to prevent missiles exploding
|
||||||
// against the sky.
|
// against the sky.
|
||||||
|
@ -10544,6 +10545,7 @@ static fixed_t P_DefaultMobjShadowScale (mobj_t *thing)
|
||||||
case MT_SMALLGRABCHAIN:
|
case MT_SMALLGRABCHAIN:
|
||||||
case MT_BIGGRABCHAIN:
|
case MT_BIGGRABCHAIN:
|
||||||
|
|
||||||
|
case MT_BLUESPRINGBALL:
|
||||||
case MT_YELLOWSPRINGBALL:
|
case MT_YELLOWSPRINGBALL:
|
||||||
case MT_REDSPRINGBALL:
|
case MT_REDSPRINGBALL:
|
||||||
|
|
||||||
|
@ -10571,14 +10573,14 @@ static fixed_t P_DefaultMobjShadowScale (mobj_t *thing)
|
||||||
case MT_EXPLOSIONRING:
|
case MT_EXPLOSIONRING:
|
||||||
case MT_SCATTERRING:
|
case MT_SCATTERRING:
|
||||||
case MT_GRENADERING:
|
case MT_GRENADERING:
|
||||||
|
|
||||||
case MT_BOUNCEPICKUP:
|
case MT_BOUNCEPICKUP:
|
||||||
case MT_RAILPICKUP:
|
case MT_RAILPICKUP:
|
||||||
case MT_AUTOPICKUP:
|
case MT_AUTOPICKUP:
|
||||||
case MT_EXPLODEPICKUP:
|
case MT_EXPLODEPICKUP:
|
||||||
case MT_SCATTERPICKUP:
|
case MT_SCATTERPICKUP:
|
||||||
case MT_GRENADEPICKUP:
|
case MT_GRENADEPICKUP:
|
||||||
|
|
||||||
case MT_REDRING:
|
case MT_REDRING:
|
||||||
case MT_THROWNBOUNCE:
|
case MT_THROWNBOUNCE:
|
||||||
case MT_THROWNINFINITY:
|
case MT_THROWNINFINITY:
|
||||||
|
@ -13319,7 +13321,7 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre-UDMF backwards compatibility stuff. Remove for 2.3
|
// TODO: 2.3: Delete (Pre-UDMF backwards compatibility stuff)
|
||||||
static void P_SetAmbush(mapthing_t *mthing, mobj_t *mobj)
|
static void P_SetAmbush(mapthing_t *mthing, mobj_t *mobj)
|
||||||
{
|
{
|
||||||
if (mobj->type == MT_NIGHTSBUMPER
|
if (mobj->type == MT_NIGHTSBUMPER
|
||||||
|
|
|
@ -175,7 +175,7 @@ static void P_NetArchivePlayers(void)
|
||||||
WRITEUINT16(save_p, players[i].flashpal);
|
WRITEUINT16(save_p, players[i].flashpal);
|
||||||
WRITEUINT16(save_p, players[i].flashcount);
|
WRITEUINT16(save_p, players[i].flashcount);
|
||||||
|
|
||||||
WRITEUINT8(save_p, players[i].skincolor);
|
WRITEUINT16(save_p, players[i].skincolor);
|
||||||
WRITEINT32(save_p, players[i].skin);
|
WRITEINT32(save_p, players[i].skin);
|
||||||
WRITEUINT32(save_p, players[i].availabilities);
|
WRITEUINT32(save_p, players[i].availabilities);
|
||||||
WRITEUINT32(save_p, players[i].score);
|
WRITEUINT32(save_p, players[i].score);
|
||||||
|
@ -404,7 +404,7 @@ static void P_NetUnArchivePlayers(void)
|
||||||
players[i].flashpal = READUINT16(save_p);
|
players[i].flashpal = READUINT16(save_p);
|
||||||
players[i].flashcount = READUINT16(save_p);
|
players[i].flashcount = READUINT16(save_p);
|
||||||
|
|
||||||
players[i].skincolor = READUINT8(save_p);
|
players[i].skincolor = READUINT16(save_p);
|
||||||
players[i].skin = READINT32(save_p);
|
players[i].skin = READINT32(save_p);
|
||||||
players[i].availabilities = READUINT32(save_p);
|
players[i].availabilities = READUINT32(save_p);
|
||||||
players[i].score = READUINT32(save_p);
|
players[i].score = READUINT32(save_p);
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NEWSKINSAVES (INT16_MAX) // Purely for backwards compatibility, remove this for 2.3
|
#define NEWSKINSAVES (INT16_MAX) // TODO: 2.3: Delete (Purely for backwards compatibility)
|
||||||
|
|
||||||
// Persistent storage/archiving.
|
// Persistent storage/archiving.
|
||||||
// These are the load / save game routines.
|
// These are the load / save game routines.
|
||||||
|
|
|
@ -1633,7 +1633,7 @@ static void ParseTextmapSectorParameter(UINT32 i, const char *param, const char
|
||||||
if ((id = strchr(id, ' ')))
|
if ((id = strchr(id, ' ')))
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (fastcmp(param, "xpanningfloor"))
|
else if (fastcmp(param, "xpanningfloor"))
|
||||||
sectors[i].floorxoffset = FLOAT_TO_FIXED(atof(val));
|
sectors[i].floorxoffset = FLOAT_TO_FIXED(atof(val));
|
||||||
else if (fastcmp(param, "ypanningfloor"))
|
else if (fastcmp(param, "ypanningfloor"))
|
||||||
|
@ -6083,6 +6083,7 @@ static void P_ConvertBinarySectorTypes(void)
|
||||||
case 14: //Non-ramp sector
|
case 14: //Non-ramp sector
|
||||||
sectors[i].specialflags |= SSF_NOSTEPDOWN;
|
sectors[i].specialflags |= SSF_NOSTEPDOWN;
|
||||||
break;
|
break;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case 15: //Bouncy FOF
|
case 15: //Bouncy FOF
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Deprecated bouncy FOF sector type detected. Please use linedef type 76 instead.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Deprecated bouncy FOF sector type detected. Please use linedef type 76 instead.\n"));
|
||||||
break;
|
break;
|
||||||
|
@ -6117,12 +6118,14 @@ static void P_ConvertBinarySectorTypes(void)
|
||||||
sectors[i].flags |= MSF_TRIGGERLINE_PLANE;
|
sectors[i].flags |= MSF_TRIGGERLINE_PLANE;
|
||||||
sectors[i].triggerer = TO_PLAYER;
|
sectors[i].triggerer = TO_PLAYER;
|
||||||
break;
|
break;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case 6: //Trigger linedef executor (Emerald check)
|
case 6: //Trigger linedef executor (Emerald check)
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Deprecated emerald check sector type detected. Please use linedef types 337-339 instead.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Deprecated emerald check sector type detected. Please use linedef types 337-339 instead.\n"));
|
||||||
sectors[i].triggertag = tag;
|
sectors[i].triggertag = tag;
|
||||||
sectors[i].flags &= ~MSF_TRIGGERLINE_PLANE;
|
sectors[i].flags &= ~MSF_TRIGGERLINE_PLANE;
|
||||||
sectors[i].triggerer = TO_PLAYEREMERALDS;
|
sectors[i].triggerer = TO_PLAYEREMERALDS;
|
||||||
break;
|
break;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case 7: //Trigger linedef executor (NiGHTS mare)
|
case 7: //Trigger linedef executor (NiGHTS mare)
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Deprecated NiGHTS mare sector type detected. Please use linedef types 340-342 instead.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Deprecated NiGHTS mare sector type detected. Please use linedef types 340-342 instead.\n"));
|
||||||
sectors[i].triggertag = tag;
|
sectors[i].triggertag = tag;
|
||||||
|
@ -6132,9 +6135,11 @@ static void P_ConvertBinarySectorTypes(void)
|
||||||
case 8: //Check for linedef executor on FOFs
|
case 8: //Check for linedef executor on FOFs
|
||||||
sectors[i].flags |= MSF_TRIGGERLINE_MOBJ;
|
sectors[i].flags |= MSF_TRIGGERLINE_MOBJ;
|
||||||
break;
|
break;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case 10: //Special stage time/spheres requirements
|
case 10: //Special stage time/spheres requirements
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Deprecated sector type for special stage requirements detected. Please use the SpecialStageTime and SpecialStageSpheres level header options instead.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Deprecated sector type for special stage requirements detected. Please use the SpecialStageTime and SpecialStageSpheres level header options instead.\n"));
|
||||||
break;
|
break;
|
||||||
|
// TODO: 2.3: Delete
|
||||||
case 11: //Custom global gravity
|
case 11: //Custom global gravity
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Deprecated sector type for global gravity detected. Please use the Gravity level header option instead.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Deprecated sector type for global gravity detected. Please use the Gravity level header option instead.\n"));
|
||||||
break;
|
break;
|
||||||
|
@ -6773,7 +6778,7 @@ static void P_ConvertBinaryThingTypes(void)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear binary thing height hacks, to prevent interfering with UDMF-only flags
|
// Clear binary thing height hacks, to prevent interfering with UDMF-only flags
|
||||||
mapthings[i].options &= 0xF;
|
mapthings[i].options &= 0xF;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2591,7 +2591,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
titlemapcameraref = altview;
|
titlemapcameraref = altview;
|
||||||
else if (!mo->player->awayviewtics || mo->player->awayviewmobj != altview) {
|
else if (!mo->player->awayviewtics || mo->player->awayviewmobj != altview) {
|
||||||
P_SetTarget(&mo->player->awayviewmobj, altview);
|
P_SetTarget(&mo->player->awayviewmobj, altview);
|
||||||
|
|
||||||
if (mo->player == &players[displayplayer])
|
if (mo->player == &players[displayplayer])
|
||||||
P_ResetCamera(mo->player, &camera); // reset p1 camera on p1 getting an awayviewmobj
|
P_ResetCamera(mo->player, &camera); // reset p1 camera on p1 getting an awayviewmobj
|
||||||
else if (splitscreen && mo->player == &players[secondarydisplayplayer])
|
else if (splitscreen && mo->player == &players[secondarydisplayplayer])
|
||||||
|
@ -4108,6 +4108,7 @@ sector_t *P_MobjTouchingSectorSpecial(mobj_t *mo, INT32 section, INT32 number)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete
|
||||||
// Deprecated in favor of P_MobjTouchingSectorSpecial
|
// Deprecated in favor of P_MobjTouchingSectorSpecial
|
||||||
// Kept for Lua backwards compatibility only
|
// Kept for Lua backwards compatibility only
|
||||||
sector_t *P_ThingOnSpecial3DFloor(mobj_t *mo)
|
sector_t *P_ThingOnSpecial3DFloor(mobj_t *mo)
|
||||||
|
@ -6134,6 +6135,7 @@ void P_SpawnSpecials(boolean fromnetsave)
|
||||||
sector->flags |= MSF_TRIGGERSPECIAL_TOUCH;
|
sector->flags |= MSF_TRIGGERSPECIAL_TOUCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete everything below
|
||||||
// Process deprecated binary sector specials
|
// Process deprecated binary sector specials
|
||||||
if (udmf || !sector->special)
|
if (udmf || !sector->special)
|
||||||
continue;
|
continue;
|
||||||
|
|
71
src/p_user.c
71
src/p_user.c
|
@ -106,8 +106,7 @@ void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move)
|
||||||
mo->momy += FixedMul(move, FINESINE(angle));
|
mo->momy += FixedMul(move, FINESINE(angle));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
void P_ThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move)
|
||||||
static inline void P_ThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move)
|
|
||||||
{
|
{
|
||||||
angle >>= ANGLETOFINESHIFT;
|
angle >>= ANGLETOFINESHIFT;
|
||||||
|
|
||||||
|
@ -115,7 +114,7 @@ static inline void P_ThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move)
|
||||||
mo->momy += FixedMul(move, FINESINE(angle));
|
mo->momy += FixedMul(move, FINESINE(angle));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void P_VectorInstaThrust(fixed_t xa, fixed_t xb, fixed_t xc, fixed_t ya, fixed_t yb, fixed_t yc,
|
void P_VectorInstaThrust(fixed_t xa, fixed_t xb, fixed_t xc, fixed_t ya, fixed_t yb, fixed_t yc,
|
||||||
fixed_t za, fixed_t zb, fixed_t zc, fixed_t momentum, mobj_t *mo)
|
fixed_t za, fixed_t zb, fixed_t zc, fixed_t momentum, mobj_t *mo)
|
||||||
{
|
{
|
||||||
fixed_t a1, b1, c1, a2, b2, c2, i, j, k;
|
fixed_t a1, b1, c1, a2, b2, c2, i, j, k;
|
||||||
|
@ -145,7 +144,6 @@ static inline void P_VectorInstaThrust(fixed_t xa, fixed_t xb, fixed_t xc, fixed
|
||||||
mo->momy = j;
|
mo->momy = j;
|
||||||
mo->momz = k;
|
mo->momz = k;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_InstaThrust
|
// P_InstaThrust
|
||||||
|
@ -2775,6 +2773,7 @@ static void P_CheckBouncySectors(player_t *player)
|
||||||
if (!(rover->fofflags & FOF_EXISTS))
|
if (!(rover->fofflags & FOF_EXISTS))
|
||||||
continue; // FOFs should not be bouncy if they don't even "exist"
|
continue; // FOFs should not be bouncy if they don't even "exist"
|
||||||
|
|
||||||
|
// TODO: 2.3: Delete
|
||||||
// Handle deprecated bouncy FOF sector type
|
// Handle deprecated bouncy FOF sector type
|
||||||
if (!udmf && GETSECSPECIAL(rover->master->frontsector->special, 1) == 15)
|
if (!udmf && GETSECSPECIAL(rover->master->frontsector->special, 1) == 15)
|
||||||
{
|
{
|
||||||
|
@ -4603,7 +4602,7 @@ void P_DoJump(player_t *player, boolean soundandstate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void P_DoSpinDashDust(player_t *player)
|
void P_DoSpinDashDust(player_t *player)
|
||||||
{
|
{
|
||||||
UINT32 i;
|
UINT32 i;
|
||||||
mobj_t *particle;
|
mobj_t *particle;
|
||||||
|
@ -11193,7 +11192,7 @@ static void P_MinecartThink(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle Tails' fluff
|
// Handle Tails' fluff
|
||||||
static void P_DoTailsOverlay(player_t *player, mobj_t *tails)
|
void P_DoTailsOverlay(player_t *player, mobj_t *tails)
|
||||||
{
|
{
|
||||||
// init...
|
// init...
|
||||||
boolean smilesonground = P_IsObjectOnGround(player->mo);
|
boolean smilesonground = P_IsObjectOnGround(player->mo);
|
||||||
|
@ -11390,7 +11389,7 @@ static void P_DoTailsOverlay(player_t *player, mobj_t *tails)
|
||||||
tails->y = player->mo->y + P_ReturnThrustY(tails, tails->angle, FixedMul(backwards, tails->scale));
|
tails->y = player->mo->y + P_ReturnThrustY(tails, tails->angle, FixedMul(backwards, tails->scale));
|
||||||
tails->z = player->mo->z + zoffs;
|
tails->z = player->mo->z + zoffs;
|
||||||
P_SetThingPosition(tails);
|
P_SetThingPosition(tails);
|
||||||
|
|
||||||
if (player->mo->flags2 & MF2_SHADOW)
|
if (player->mo->flags2 & MF2_SHADOW)
|
||||||
tails->flags2 |= MF2_SHADOW;
|
tails->flags2 |= MF2_SHADOW;
|
||||||
else
|
else
|
||||||
|
@ -11398,7 +11397,7 @@ static void P_DoTailsOverlay(player_t *player, mobj_t *tails)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Metal Sonic's jet fume
|
// Metal Sonic's jet fume
|
||||||
static void P_DoMetalJetFume(player_t *player, mobj_t *fume)
|
void P_DoMetalJetFume(player_t *player, mobj_t *fume)
|
||||||
{
|
{
|
||||||
static const UINT8 FUME_SKINCOLORS[] =
|
static const UINT8 FUME_SKINCOLORS[] =
|
||||||
{
|
{
|
||||||
|
@ -11536,6 +11535,30 @@ static void P_DoMetalJetFume(player_t *player, mobj_t *fume)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle Followmobj behavior
|
||||||
|
void P_DoFollowMobj(player_t *player, mobj_t *followmobj)
|
||||||
|
{
|
||||||
|
if (LUA_HookFollowMobj(player, followmobj) || P_MobjWasRemoved(followmobj))
|
||||||
|
{;}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (followmobj->type)
|
||||||
|
{
|
||||||
|
case MT_TAILSOVERLAY: // c:
|
||||||
|
P_DoTailsOverlay(player, followmobj);
|
||||||
|
break;
|
||||||
|
case MT_METALJETFUME:
|
||||||
|
P_DoMetalJetFume(player, followmobj);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
var1 = 1;
|
||||||
|
var2 = 0;
|
||||||
|
A_CapeChase(followmobj);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_PlayerThink
|
// P_PlayerThink
|
||||||
//
|
//
|
||||||
|
@ -11606,7 +11629,7 @@ void P_PlayerThink(player_t *player)
|
||||||
P_SetTarget(&player->awayviewmobj, NULL); // remove awayviewmobj asap if invalid
|
P_SetTarget(&player->awayviewmobj, NULL); // remove awayviewmobj asap if invalid
|
||||||
player->awayviewtics = 1; // reset to one, the below code will immediately set it to zero
|
player->awayviewtics = 1; // reset to one, the below code will immediately set it to zero
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->awayviewtics && player->awayviewtics != -1)
|
if (player->awayviewtics && player->awayviewtics != -1)
|
||||||
{
|
{
|
||||||
player->awayviewtics--;
|
player->awayviewtics--;
|
||||||
|
@ -12278,11 +12301,11 @@ void P_PlayerThink(player_t *player)
|
||||||
if (!(player->stronganim))
|
if (!(player->stronganim))
|
||||||
player->stronganim = player->panim;
|
player->stronganim = player->panim;
|
||||||
else if (player->panim != player->stronganim)
|
else if (player->panim != player->stronganim)
|
||||||
player->powers[pw_strong] = STR_NONE;
|
player->powers[pw_strong] = STR_NONE;
|
||||||
}
|
}
|
||||||
else if (player->stronganim)
|
else if (player->stronganim)
|
||||||
player->stronganim = 0;
|
player->stronganim = 0;
|
||||||
|
|
||||||
//pw_super acts as a timer now
|
//pw_super acts as a timer now
|
||||||
if (player->powers[pw_super]
|
if (player->powers[pw_super]
|
||||||
&& (player->mo->state < &states[S_PLAY_SUPER_TRANS1]
|
&& (player->mo->state < &states[S_PLAY_SUPER_TRANS1]
|
||||||
|
@ -12389,7 +12412,7 @@ void P_PlayerThink(player_t *player)
|
||||||
if (player->jumpfactor < FixedMul(skins[player->skin].jumpfactor, 5*FRACUNIT/4)) // Boost jump height.
|
if (player->jumpfactor < FixedMul(skins[player->skin].jumpfactor, 5*FRACUNIT/4)) // Boost jump height.
|
||||||
player->jumpfactor += FRACUNIT/300;
|
player->jumpfactor += FRACUNIT/300;
|
||||||
|
|
||||||
if ((player->charflags & SF_MACHINE) && (!(player->powers[pw_strong] == STR_METAL)))
|
if ((player->charflags & SF_MACHINE) && (!(player->powers[pw_strong] == STR_METAL)))
|
||||||
player->powers[pw_strong] = STR_METAL;
|
player->powers[pw_strong] = STR_METAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13012,27 +13035,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->followmobj)
|
if (player->followmobj)
|
||||||
{
|
P_DoFollowMobj(player, player->followmobj);
|
||||||
if (LUA_HookFollowMobj(player, player->followmobj) || P_MobjWasRemoved(player->followmobj))
|
|
||||||
{;}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (player->followmobj->type)
|
|
||||||
{
|
|
||||||
case MT_TAILSOVERLAY: // c:
|
|
||||||
P_DoTailsOverlay(player, player->followmobj);
|
|
||||||
break;
|
|
||||||
case MT_METALJETFUME:
|
|
||||||
P_DoMetalJetFume(player, player->followmobj);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
var1 = 1;
|
|
||||||
var2 = 0;
|
|
||||||
A_CapeChase(player->followmobj);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
P_DoPlayerHeadSigns(player); // Spawn Tag/CTF signs over player's head
|
P_DoPlayerHeadSigns(player); // Spawn Tag/CTF signs over player's head
|
||||||
|
|
|
@ -249,7 +249,7 @@ static void FlipCam2_OnChange(void)
|
||||||
//
|
//
|
||||||
// killough 5/2/98: reformatted
|
// killough 5/2/98: reformatted
|
||||||
//
|
//
|
||||||
INT32 R_PointOnSide(fixed_t x, fixed_t y, node_t *node)
|
INT32 R_PointOnSide(fixed_t x, fixed_t y, node_t *restrict node)
|
||||||
{
|
{
|
||||||
if (!node->dx)
|
if (!node->dx)
|
||||||
return x <= node->x ? node->dy > 0 : node->dy < 0;
|
return x <= node->x ? node->dy > 0 : node->dy < 0;
|
||||||
|
@ -261,9 +261,10 @@ INT32 R_PointOnSide(fixed_t x, fixed_t y, node_t *node)
|
||||||
fixed_t dy = (y >> 1) - (node->y >> 1);
|
fixed_t dy = (y >> 1) - (node->y >> 1);
|
||||||
|
|
||||||
// Try to quickly decide by looking at sign bits.
|
// Try to quickly decide by looking at sign bits.
|
||||||
if ((node->dy ^ node->dx ^ dx ^ dy) < 0)
|
// also use a mask to avoid branch prediction
|
||||||
return (node->dy ^ dx) < 0; // (left is negative)
|
INT32 mask = (node->dy ^ node->dx ^ dx ^ dy) >> 31;
|
||||||
return FixedMul(dy, node->dx>>FRACBITS) >= FixedMul(node->dy>>FRACBITS, dx);
|
return (mask & ((node->dy ^ dx) < 0)) | // (left is negative)
|
||||||
|
(~mask & (FixedMul(dy, node->dx>>FRACBITS) >= FixedMul(node->dy>>FRACBITS, dx)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// killough 5/2/98: reformatted
|
// killough 5/2/98: reformatted
|
||||||
|
|
|
@ -75,6 +75,6 @@ void R_SetupSkyDraw(void)
|
||||||
*/
|
*/
|
||||||
void R_SetSkyScale(void)
|
void R_SetSkyScale(void)
|
||||||
{
|
{
|
||||||
fixed_t difference = vid.fdupx-(vid.dupx<<FRACBITS);
|
fixed_t difference = vid.fdup-(vid.dup<<FRACBITS);
|
||||||
skyscale = FixedDiv(fovtan, vid.fdupx+difference);
|
skyscale = FixedDiv(fovtan, vid.fdup+difference);
|
||||||
}
|
}
|
||||||
|
|
10
src/screen.c
10
src/screen.c
|
@ -494,7 +494,7 @@ void SCR_CalculateFPS(void)
|
||||||
void SCR_DisplayTicRate(void)
|
void SCR_DisplayTicRate(void)
|
||||||
{
|
{
|
||||||
INT32 ticcntcolor = 0;
|
INT32 ticcntcolor = 0;
|
||||||
const INT32 h = vid.height-(8*vid.dupy);
|
const INT32 h = vid.height-(8*vid.dup);
|
||||||
UINT32 cap = R_GetFramerateCap();
|
UINT32 cap = R_GetFramerateCap();
|
||||||
double fps = round(averageFPS);
|
double fps = round(averageFPS);
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ void SCR_DisplayTicRate(void)
|
||||||
|
|
||||||
width = V_StringWidth(drawnstr, V_NOSCALESTART);
|
width = V_StringWidth(drawnstr, V_NOSCALESTART);
|
||||||
|
|
||||||
V_DrawString(vid.width - ((7 * 8 * vid.dupx) + V_StringWidth("FPS: ", V_NOSCALESTART)), h,
|
V_DrawString(vid.width - ((7 * 8 * vid.dup) + V_StringWidth("FPS: ", V_NOSCALESTART)), h,
|
||||||
V_YELLOWMAP|V_NOSCALESTART|V_USERHUDTRANS, "FPS:");
|
V_YELLOWMAP|V_NOSCALESTART|V_USERHUDTRANS, "FPS:");
|
||||||
V_DrawString(vid.width - width, h,
|
V_DrawString(vid.width - width, h,
|
||||||
ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, drawnstr);
|
ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, drawnstr);
|
||||||
|
@ -589,7 +589,7 @@ void SCR_ClosedCaptions(void)
|
||||||
|
|
||||||
if (closedcaptions[i].b)
|
if (closedcaptions[i].b)
|
||||||
{
|
{
|
||||||
y -= closedcaptions[i].b * vid.dupy;
|
y -= closedcaptions[i].b * vid.dup;
|
||||||
if (renderisnewtic)
|
if (renderisnewtic)
|
||||||
{
|
{
|
||||||
closedcaptions[i].b--;
|
closedcaptions[i].b--;
|
||||||
|
@ -639,9 +639,9 @@ void SCR_DisplayMarathonInfo(void)
|
||||||
#define PRIMEV1 13
|
#define PRIMEV1 13
|
||||||
#define PRIMEV2 17 // I can't believe it! I'm on TV!
|
#define PRIMEV2 17 // I can't believe it! I'm on TV!
|
||||||
antisplice[0] += (entertic - oldentertics)*PRIMEV2;
|
antisplice[0] += (entertic - oldentertics)*PRIMEV2;
|
||||||
antisplice[0] %= PRIMEV1*((vid.width/vid.dupx)+1);
|
antisplice[0] %= PRIMEV1*((vid.width/vid.dup)+1);
|
||||||
antisplice[1] += (entertic - oldentertics)*PRIMEV1;
|
antisplice[1] += (entertic - oldentertics)*PRIMEV1;
|
||||||
antisplice[1] %= PRIMEV1*((vid.width/vid.dupx)+1);
|
antisplice[1] %= PRIMEV1*((vid.width/vid.dup)+1);
|
||||||
str = va("%i:%02i:%02i.%02i",
|
str = va("%i:%02i:%02i.%02i",
|
||||||
G_TicsToHours(marathontime),
|
G_TicsToHours(marathontime),
|
||||||
G_TicsToMinutes(marathontime, false),
|
G_TicsToMinutes(marathontime, false),
|
||||||
|
|
12
src/screen.h
12
src/screen.h
|
@ -59,19 +59,19 @@ typedef struct viddef_s
|
||||||
} u;
|
} u;
|
||||||
INT32 recalc; // if true, recalc vid-based stuff
|
INT32 recalc; // if true, recalc vid-based stuff
|
||||||
UINT8 *direct; // linear frame buffer, or vga base mem.
|
UINT8 *direct; // linear frame buffer, or vga base mem.
|
||||||
INT32 dupx, dupy; // scale 1, 2, 3 value for menus & overlays
|
INT32 dup; // scale 1, 2, 3 value for menus & overlays
|
||||||
INT32/*fixed_t*/ fdupx, fdupy; // same as dupx, dupy, but exact value when aspect ratio isn't 320/200
|
INT32/*fixed_t*/ fdup; // same as dup, but exact value when aspect ratio isn't 320/200
|
||||||
INT32 bpp; // BYTES per pixel: 1 = 256color, 2 = highcolor
|
INT32 bpp; // BYTES per pixel: 1 = 256color, 2 = highcolor
|
||||||
|
|
||||||
INT32 baseratio; // Used to get the correct value for lighting walls
|
INT32 baseratio; // Used to get the correct value for lighting walls
|
||||||
|
|
||||||
// for Win32 version
|
// for Win32 version
|
||||||
DNWH WndParent; // handle of the application's window
|
DNWH WndParent; // handle of the application's window
|
||||||
UINT8 smalldupx, smalldupy; // factor for a little bit of scaling
|
UINT8 smalldup; // factor for a little bit of scaling
|
||||||
UINT8 meddupx, meddupy; // factor for moderate, but not full, scaling
|
UINT8 meddup; // factor for moderate, but not full, scaling
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
INT32/*fixed_t*/ fsmalldupx, fsmalldupy;
|
INT32/*fixed_t*/ fsmalldup;
|
||||||
INT32/*fixed_t*/ fmeddupx, fmeddupy;
|
INT32/*fixed_t*/ fmeddup;
|
||||||
INT32 glstate;
|
INT32 glstate;
|
||||||
#endif
|
#endif
|
||||||
} viddef_t;
|
} viddef_t;
|
||||||
|
|
|
@ -2266,7 +2266,7 @@ void I_Sleep(UINT32 ms)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NEWSIGNALHANDLER
|
#ifdef NEWSIGNALHANDLER
|
||||||
static void newsignalhandler_Warn(const char *pr)
|
ATTRNORETURN static FUNCNORETURN void newsignalhandler_Warn(const char *pr)
|
||||||
{
|
{
|
||||||
char text[128];
|
char text[128];
|
||||||
|
|
||||||
|
@ -3035,11 +3035,11 @@ size_t I_GetFreeMem(size_t *total)
|
||||||
#ifdef FREEBSD
|
#ifdef FREEBSD
|
||||||
u_int v_free_count, v_page_size, v_page_count;
|
u_int v_free_count, v_page_size, v_page_count;
|
||||||
size_t size = sizeof(v_free_count);
|
size_t size = sizeof(v_free_count);
|
||||||
sysctlbyname("vm.stat.vm.v_free_count", &v_free_count, &size, NULL, 0);
|
sysctlbyname("vm.stats.vm.v_free_count", &v_free_count, &size, NULL, 0);
|
||||||
size_t size = sizeof(v_page_size);
|
size = sizeof(v_page_size);
|
||||||
sysctlbyname("vm.stat.vm.v_page_size", &v_page_size, &size, NULL, 0);
|
sysctlbyname("vm.stats.vm.v_page_size", &v_page_size, &size, NULL, 0);
|
||||||
size_t size = sizeof(v_page_count);
|
size = sizeof(v_page_count);
|
||||||
sysctlbyname("vm.stat.vm.v_page_count", &v_page_count, &size, NULL, 0);
|
sysctlbyname("vm.stats.vm.v_page_count", &v_page_count, &size, NULL, 0);
|
||||||
|
|
||||||
if (total)
|
if (total)
|
||||||
*total = v_page_count * v_page_size;
|
*total = v_page_count * v_page_size;
|
||||||
|
|
|
@ -513,10 +513,10 @@ static void ST_drawDebugInfo(void)
|
||||||
|
|
||||||
#define VFLAGS V_MONOSPACE|V_SNAPTOTOP|V_SNAPTORIGHT
|
#define VFLAGS V_MONOSPACE|V_SNAPTOTOP|V_SNAPTORIGHT
|
||||||
|
|
||||||
if ((moviemode == MM_GIF && cv_gif_downscale.value) || vid.dupx == 1)
|
if ((moviemode == MM_GIF && cv_gif_downscale.value) || vid.dup == 1)
|
||||||
{
|
{
|
||||||
textfunc = V_DrawRightAlignedString;
|
textfunc = V_DrawRightAlignedString;
|
||||||
lowh = ((vid.height/vid.dupy) - 16);
|
lowh = ((vid.height/vid.dup) - 16);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
552
src/v_video.c
552
src/v_video.c
File diff suppressed because it is too large
Load diff
|
@ -36,7 +36,7 @@ cv_rsaturation, cv_ysaturation, cv_gsaturation, cv_csaturation, cv_bsaturation,
|
||||||
// Allocates buffer screens, call before R_Init.
|
// Allocates buffer screens, call before R_Init.
|
||||||
void V_Init(void);
|
void V_Init(void);
|
||||||
|
|
||||||
// Recalculates the viddef (dupx, dupy, etc.) according to the current screen resolution.
|
// Recalculates the viddef (dup, fdup, etc.) according to the current screen resolution.
|
||||||
void V_Recalc(void);
|
void V_Recalc(void);
|
||||||
|
|
||||||
// Color look-up table
|
// Color look-up table
|
||||||
|
|
|
@ -536,7 +536,7 @@ void Y_IntermissionDrawer(void)
|
||||||
|
|
||||||
if (animatetic && (tic_t)intertic >= animatetic)
|
if (animatetic && (tic_t)intertic >= animatetic)
|
||||||
{
|
{
|
||||||
const INT32 scradjust = (vid.width/vid.dupx)>>3; // 40 for BASEVIDWIDTH
|
const INT32 scradjust = (vid.width/vid.dup)>>3; // 40 for BASEVIDWIDTH
|
||||||
INT32 animatetimer = (intertic - animatetic);
|
INT32 animatetimer = (intertic - animatetic);
|
||||||
if (animatetimer <= 16)
|
if (animatetimer <= 16)
|
||||||
{
|
{
|
||||||
|
@ -687,7 +687,7 @@ void Y_IntermissionDrawer(void)
|
||||||
|
|
||||||
if (intertic > 1)
|
if (intertic > 1)
|
||||||
{
|
{
|
||||||
if (stagefailed && data.spec.emeraldy < (vid.height/vid.dupy)+16)
|
if (stagefailed && data.spec.emeraldy < (vid.height/vid.dup)+16)
|
||||||
{
|
{
|
||||||
emeraldx += intertic - 6;
|
emeraldx += intertic - 6;
|
||||||
}
|
}
|
||||||
|
@ -1163,7 +1163,7 @@ void Y_Ticker(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (data.spec.emeraldy < (vid.height/vid.dupy)+16)
|
if (data.spec.emeraldy < (vid.height/vid.dup)+16)
|
||||||
{
|
{
|
||||||
data.spec.emeraldy += (++data.spec.emeraldmomy);
|
data.spec.emeraldy += (++data.spec.emeraldmomy);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue