mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-13 06:13:18 +00:00
Merge branch 'master' into musicplus-feature-dying-fp
This commit is contained in:
commit
1b59b224c0
154 changed files with 17061 additions and 1878 deletions
|
@ -3,7 +3,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
working_directory: /root/SRB2
|
working_directory: /root/SRB2
|
||||||
docker:
|
docker:
|
||||||
- image: debian:jessie
|
- image: debian:stretch
|
||||||
environment:
|
environment:
|
||||||
CC: ccache gcc -m32
|
CC: ccache gcc -m32
|
||||||
PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
@ -25,6 +25,13 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Add i386 arch
|
name: Add i386 arch
|
||||||
command: dpkg --add-architecture i386
|
command: dpkg --add-architecture i386
|
||||||
|
- run:
|
||||||
|
name: Add STJr PPA
|
||||||
|
command: |
|
||||||
|
apt-get -qq update
|
||||||
|
apt-get -qq -y install dirmngr
|
||||||
|
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0B1702D71499D9C25F986507F240F4449D3B0EC6
|
||||||
|
echo "deb http://ppa.launchpad.net/stjr/srb2/ubuntu trusty main" >> /etc/apt/sources.list
|
||||||
- run:
|
- run:
|
||||||
name: Update APT listing
|
name: Update APT listing
|
||||||
command: apt-get -qq update
|
command: apt-get -qq update
|
||||||
|
@ -36,17 +43,21 @@ jobs:
|
||||||
- v1-SRB2-APT
|
- v1-SRB2-APT
|
||||||
- run:
|
- run:
|
||||||
name: Install SDK
|
name: Install SDK
|
||||||
command: apt-get -qq -y --no-install-recommends install git build-essential nasm libpng12-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 gettext ccache wget gcc-multilib upx openssh-client
|
command: apt-get -qq -y --no-install-recommends install git build-essential nasm libpng-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 libopenmpt-dev:i386 gettext ccache wget gcc-multilib upx openssh-client
|
||||||
|
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: v1-SRB2-APT
|
key: v1-SRB2-APT
|
||||||
paths:
|
paths:
|
||||||
- /var/cache/apt/archives
|
- /var/cache/apt/archives
|
||||||
- checkout
|
- checkout
|
||||||
- run:
|
- run:
|
||||||
name: Compile without network support
|
name: Compile without network support and BLUA
|
||||||
command: make -C src LINUX=1 ERRORMODE=1 -k NONET=1
|
command: make -C src LINUX=1 ERRORMODE=1 -k NONET=1 NO_LUA=1
|
||||||
- run:
|
- run:
|
||||||
name: Clean build
|
name: wipe build
|
||||||
|
command: make -C src LINUX=1 cleandep
|
||||||
|
- run:
|
||||||
|
name: rebuild depend
|
||||||
command: make -C src LINUX=1 clean
|
command: make -C src LINUX=1 clean
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
keys:
|
keys:
|
||||||
|
@ -60,4 +71,4 @@ jobs:
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
key: v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
||||||
paths:
|
paths:
|
||||||
- /root/.ccache
|
- /root/.ccache
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -19,3 +19,5 @@ Win32_LIB_ASM_Release
|
||||||
*.db
|
*.db
|
||||||
*.opendb
|
*.opendb
|
||||||
/.vs
|
/.vs
|
||||||
|
/debian
|
||||||
|
/assets/debian
|
||||||
|
|
740
.travis.yml
740
.travis.yml
|
@ -1,57 +1,323 @@
|
||||||
|
# Travis-CI Config
|
||||||
|
#
|
||||||
|
# You may use the Deployer to upload packages and builds to external servers.
|
||||||
|
# See deployer/travis/deployer_defaults.sh for environment variables to configure.
|
||||||
|
|
||||||
language: c
|
language: c
|
||||||
sudo: required
|
sudo: required
|
||||||
dist: trusty
|
dist: trusty
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
|
################################
|
||||||
|
# Test Buildbots
|
||||||
|
# Deployer does not operate on these. See Deployer Buildbots, below.
|
||||||
|
# These bots are disabled when a deployment is triggered by 'deployer' branch name AND DPL_TERMINATE_TESTS=1.
|
||||||
|
# These bots remain enabled when a deployment is triggered by release tag.
|
||||||
|
################################
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.4
|
- gcc-4.4
|
||||||
compiler: gcc-4.4
|
compiler: gcc-4.4
|
||||||
env: GCC44=1
|
env: GCC44=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
#gcc-4.4 (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7
|
#gcc-4.4 (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.6
|
- gcc-4.6
|
||||||
compiler: gcc-4.6
|
compiler: gcc-4.6
|
||||||
env: GCC46=1
|
env: GCC46=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
#gcc-4.6 (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4
|
#gcc-4.6 (Ubuntu/Linaro 4.6.4-6ubuntu2) 4.6.4
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.7
|
- gcc-4.7
|
||||||
compiler: gcc-4.7
|
compiler: gcc-4.7
|
||||||
env: GCC47=1
|
env: GCC47=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
#gcc-4.7
|
#gcc-4.7
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
env: GCC48=1
|
env: GCC48=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
#gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
|
#gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- gcc-4.8
|
||||||
|
compiler: gcc-4.8
|
||||||
|
env: GCC48=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- gcc-7
|
||||||
|
compiler: gcc-7
|
||||||
|
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough" GCC72=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#gcc-7 (Ubuntu 7.2.0-1ubuntu1~14.04) 7.2.0 20170802
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- gcc-8
|
||||||
|
compiler: gcc-8
|
||||||
|
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough -Wno-error=format-overflow -Wno-error=format-truncation" GCC81=1
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#gcc-8 (Ubuntu 7.2.0-1ubuntu1~14.04) 8.1.0
|
||||||
|
- os: linux
|
||||||
|
compiler: clang
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#clang version 3.5.0 (tags/RELEASE_350/final)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.5
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.5
|
||||||
|
compiler: clang-3.5
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.6
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.6
|
||||||
|
compiler: clang-3.6
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#Ubuntu clang version 3.6.2-svn240577-1~exp1 (branches/release_36) (based on LLVM 3.6.2)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.7
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.7
|
||||||
|
compiler: clang-3.7
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#Ubuntu clang version 3.7.1-svn253571-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.8
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.8
|
||||||
|
compiler: clang-3.8
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#clang version 3.8.1-svn271127-1~exp1 (branches/release_38)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- libopenmpt-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.9
|
||||||
|
compiler: clang-3.9
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#clang version 3.9.X
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# sources:
|
||||||
|
# - llvm-toolchain-precise-4.0
|
||||||
|
# - ubuntu-toolchain-r-test
|
||||||
|
# - sourceline: 'ppa:stjr/srb2'
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - libopenmpt-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - clang-4.0
|
||||||
|
# compiler: clang-4.0
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #clang version 4.0.X
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# sources:
|
||||||
|
# - llvm-toolchain-precise-5.0
|
||||||
|
# - ubuntu-toolchain-r-test
|
||||||
|
# - sourceline: 'ppa:stjr/srb2'
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - libopenmpt-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - clang-5.0
|
||||||
|
# compiler: clang-5.0
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #clang version 5.0.X
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: beta-xcode6.1
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: beta-xcode6.2
|
||||||
|
# compiler: gcc
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
|
||||||
|
## - os: osx
|
||||||
|
## osx_image: beta-xcode6.3
|
||||||
|
## if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
## #I think xcode.6.3 VM is broken, it does not boot
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode6.4
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode7
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 7.0.0 (clang-700.0.72)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode7.1
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 7.0.0 (clang-700.1.76)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode7.2
|
||||||
|
# if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
# #Apple LLVM version 7.0.2 (clang-700.1.81)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode7.3
|
||||||
|
# #Apple LLVM version 7.3.0 (clang-703.0.31)
|
||||||
|
# - os: osx
|
||||||
|
# osx_image: xcode7.3
|
||||||
|
# #Apple LLVM version 7.3.0 (clang-703.0.31)
|
||||||
|
- os: osx
|
||||||
|
if: env(DPL_ENABLED) != "1" OR env(DPL_TERMINATE_TESTS) != "1" OR NOT branch =~ /^.*deployer.*$/
|
||||||
|
#Default: macOS 10.13 and Xcode 9.4.1
|
||||||
|
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Deployer Buildbots - OSX
|
||||||
|
################################
|
||||||
|
- os: osx
|
||||||
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=osx
|
||||||
|
- _DPL_FTP_TARGET=1
|
||||||
|
- _DPL_PACKAGE_BINARY=1
|
||||||
|
#Apple LLVM version 7.3.0 (clang-703.0.31)
|
||||||
|
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Deployer Buildbots - Linux assets
|
||||||
|
# Set DPL_TERMINATE_ASSETS to disable all of these
|
||||||
|
# List Ubuntu LTS next, newest to oldest
|
||||||
|
# Then list non-LTS, newest to oldest
|
||||||
|
################################
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
|
@ -60,170 +326,251 @@ matrix:
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.8
|
- gcc-4.8
|
||||||
compiler: gcc-4.8
|
compiler: gcc-4.8
|
||||||
env: GCC48=1
|
dist: xenial
|
||||||
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_ASSETS) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=bionic-asset
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- _DPL_PACKAGE_MAIN=0
|
||||||
|
- _DPL_PACKAGE_ASSET=1
|
||||||
|
- PACKAGE_DISTRO=bionic
|
||||||
|
#- PACKAGE_SUBVERSION=~18.04bionic
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
|
||||||
|
################################
|
||||||
|
# The below asset bots produce packages that occupy too much space.
|
||||||
|
# It would be nice if the asset files were not included in the source package itself,
|
||||||
|
# so these can deploy to each Ubuntu target without manual intervention.
|
||||||
|
#
|
||||||
|
# Currently, to get around Launchpad's space limitation,
|
||||||
|
# copy the packages from *one* bot and the space usage is not increased.
|
||||||
|
################################
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - gcc-4.8
|
||||||
|
# compiler: gcc-4.8
|
||||||
|
# dist: trusty
|
||||||
|
# if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
# AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
# AND env(DPL_TERMINATE_ASSETS) != "1"
|
||||||
|
# env:
|
||||||
|
# - _DPL_JOB_ENABLED=1
|
||||||
|
# - _DPL_JOB_NAME=trusty-asset
|
||||||
|
# - _DPL_DPUT_TARGET=1
|
||||||
|
# - _DPL_PACKAGE_SOURCE=1
|
||||||
|
# - _DPL_PACKAGE_MAIN=0
|
||||||
|
# - _DPL_PACKAGE_ASSET=1
|
||||||
|
# - PACKAGE_DISTRO=trusty
|
||||||
|
# #- PACKAGE_SUBVERSION=~14.04trusty
|
||||||
|
# #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - gcc-4.8
|
||||||
|
# compiler: gcc-4.8
|
||||||
|
# dist: xenial
|
||||||
|
# if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
# AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
# AND env(DPL_TERMINATE_ASSETS) != "1"
|
||||||
|
# env:
|
||||||
|
# - _DPL_JOB_ENABLED=1
|
||||||
|
# - _DPL_JOB_NAME=disco-asset
|
||||||
|
# - _DPL_DPUT_TARGET=1
|
||||||
|
# - _DPL_PACKAGE_SOURCE=1
|
||||||
|
# - _DPL_PACKAGE_MAIN=0
|
||||||
|
# - _DPL_PACKAGE_ASSET=1
|
||||||
|
# - PACKAGE_DISTRO=disco
|
||||||
|
# #- PACKAGE_SUBVERSION=~19.04disco
|
||||||
|
# #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - gcc-4.8
|
||||||
|
# compiler: gcc-4.8
|
||||||
|
# dist: xenial
|
||||||
|
# if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
# AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
# AND env(DPL_TERMINATE_ASSETS) != "1"
|
||||||
|
# env:
|
||||||
|
# - _DPL_JOB_ENABLED=1
|
||||||
|
# - _DPL_JOB_NAME=cosmic-asset
|
||||||
|
# - _DPL_DPUT_TARGET=1
|
||||||
|
# - _DPL_PACKAGE_SOURCE=1
|
||||||
|
# - _DPL_PACKAGE_MAIN=0
|
||||||
|
# - _DPL_PACKAGE_ASSET=1
|
||||||
|
# - PACKAGE_DISTRO=cosmic
|
||||||
|
# #- PACKAGE_SUBVERSION=~18.10cosmic
|
||||||
|
# #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - gcc-4.8
|
||||||
|
# compiler: gcc-4.8
|
||||||
|
# dist: xenial
|
||||||
|
# if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
# AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
# AND env(DPL_TERMINATE_ASSETS) != "1"
|
||||||
|
# env:
|
||||||
|
# - _DPL_JOB_ENABLED=1
|
||||||
|
# - _DPL_JOB_NAME=xenial-asset
|
||||||
|
# - _DPL_DPUT_TARGET=1
|
||||||
|
# - _DPL_PACKAGE_SOURCE=1
|
||||||
|
# - _DPL_PACKAGE_MAIN=0
|
||||||
|
# - _DPL_PACKAGE_ASSET=1
|
||||||
|
# - PACKAGE_DISTRO=xenial
|
||||||
|
# #- PACKAGE_SUBVERSION=~16.04xenial
|
||||||
|
# #gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
|
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Deployer Buildbots - Linux binaries
|
||||||
|
# List Ubuntu LTS, newest to oldest
|
||||||
|
# Then list non-LTS, newest to oldest
|
||||||
|
################################
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- p7zip-full
|
||||||
|
- gcc-4.8
|
||||||
|
compiler: gcc-4.8
|
||||||
|
dist: xenial
|
||||||
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=bionic
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- PACKAGE_DISTRO=bionic
|
||||||
|
- PACKAGE_SUBVERSION=~18.04bionic
|
||||||
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-7
|
- gcc-4.8
|
||||||
compiler: gcc-7
|
compiler: gcc-4.8
|
||||||
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough" GCC72=1
|
dist: trusty
|
||||||
#gcc-7 (Ubuntu 7.2.0-1ubuntu1~14.04) 7.2.0 20170802
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=trusty
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- PACKAGE_DISTRO=trusty
|
||||||
|
- PACKAGE_SUBVERSION=~14.04trusty
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-8
|
- gcc-4.8
|
||||||
compiler: gcc-8
|
compiler: gcc-4.8
|
||||||
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough -Wno-error=format-overflow" GCC81=1
|
dist: xenial
|
||||||
#gcc-8 (Ubuntu 7.2.0-1ubuntu1~14.04) 8.1.0
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
- os: linux
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
compiler: clang
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
#clang version 3.5.0 (tags/RELEASE_350/final)
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=disco
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- PACKAGE_DISTRO=disco
|
||||||
|
- PACKAGE_SUBVERSION=~19.04disco
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.5
|
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- clang-3.5
|
- gcc-4.8
|
||||||
compiler: clang-3.5
|
compiler: gcc-4.8
|
||||||
#Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
|
dist: xenial
|
||||||
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
|
env:
|
||||||
|
- _DPL_JOB_ENABLED=1
|
||||||
|
- _DPL_JOB_NAME=cosmic
|
||||||
|
- _DPL_DPUT_TARGET=1
|
||||||
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
|
- PACKAGE_DISTRO=cosmic
|
||||||
|
- PACKAGE_SUBVERSION=~18.10cosmic
|
||||||
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.6
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- clang-3.6
|
- gcc-4.8
|
||||||
compiler: clang-3.6
|
compiler: gcc-4.8
|
||||||
#Ubuntu clang version 3.6.2-svn240577-1~exp1 (branches/release_36) (based on LLVM 3.6.2)
|
dist: xenial
|
||||||
- os: linux
|
if: env(DPL_ENABLED) = "1" AND (env(_DPL_JOB_ENABLED) = "1" OR env(DPL_JOB_ENABLE_ALL) = "1")
|
||||||
addons:
|
AND (branch =~ /^.*deployer.*$/ OR (tag IS present AND env(DPL_TAG_ENABLED) = "1"))
|
||||||
apt:
|
AND env(DPL_TERMINATE_MAIN) != "1"
|
||||||
sources:
|
env:
|
||||||
- llvm-toolchain-precise-3.7
|
- _DPL_JOB_ENABLED=1
|
||||||
- ubuntu-toolchain-r-test
|
- _DPL_JOB_NAME=xenial
|
||||||
packages:
|
- _DPL_DPUT_TARGET=1
|
||||||
- libsdl2-mixer-dev
|
- _DPL_PACKAGE_SOURCE=1
|
||||||
- libpng-dev
|
- PACKAGE_DISTRO=xenial
|
||||||
- libgl1-mesa-dev
|
- PACKAGE_SUBVERSION=~16.04xenial
|
||||||
- libgme-dev
|
#gcc-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
|
||||||
- p7zip-full
|
|
||||||
- clang-3.7
|
|
||||||
compiler: clang-3.7
|
|
||||||
#Ubuntu clang version 3.7.1-svn253571-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
|
|
||||||
- os: linux
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.8
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- libsdl2-mixer-dev
|
|
||||||
- libpng-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- libgme-dev
|
|
||||||
- p7zip-full
|
|
||||||
- clang-3.8
|
|
||||||
compiler: clang-3.8
|
|
||||||
#clang version 3.8.1-svn271127-1~exp1 (branches/release_38)
|
|
||||||
- os: linux
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.9
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- libsdl2-mixer-dev
|
|
||||||
- libpng-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- libgme-dev
|
|
||||||
- p7zip-full
|
|
||||||
- clang-3.9
|
|
||||||
compiler: clang-3.9
|
|
||||||
#clang version 3.9.X
|
|
||||||
# - os: linux
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# sources:
|
|
||||||
# - llvm-toolchain-precise-4.0
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# packages:
|
|
||||||
# - libsdl2-mixer-dev
|
|
||||||
# - libpng-dev
|
|
||||||
# - libgl1-mesa-dev
|
|
||||||
# - libgme-dev
|
|
||||||
# - p7zip-full
|
|
||||||
# - clang-4.0
|
|
||||||
# compiler: clang-4.0
|
|
||||||
# #clang version 4.0.X
|
|
||||||
# - os: linux
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# sources:
|
|
||||||
# - llvm-toolchain-precise-5.0
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# packages:
|
|
||||||
# - libsdl2-mixer-dev
|
|
||||||
# - libpng-dev
|
|
||||||
# - libgl1-mesa-dev
|
|
||||||
# - libgme-dev
|
|
||||||
# - p7zip-full
|
|
||||||
# - clang-5.0
|
|
||||||
# compiler: clang-5.0
|
|
||||||
# #clang version 5.0.X
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: beta-xcode6.1
|
|
||||||
# #Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: beta-xcode6.2
|
|
||||||
# compiler: gcc
|
|
||||||
# #Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
|
|
||||||
## - os: osx
|
|
||||||
## osx_image: beta-xcode6.3
|
|
||||||
## #I think xcode.6.3 VM is broken, it does not boot
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: xcode6.4
|
|
||||||
# #Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: xcode7
|
|
||||||
# #Apple LLVM version 7.0.0 (clang-700.0.72)
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: xcode7.1
|
|
||||||
# #Apple LLVM version 7.0.0 (clang-700.1.76)
|
|
||||||
# - os: osx
|
|
||||||
# osx_image: xcode7.2
|
|
||||||
# #Apple LLVM version 7.0.2 (clang-700.1.81)
|
|
||||||
- os: osx
|
|
||||||
osx_image: xcode7.3
|
|
||||||
#Apple LLVM version 7.3.0 (clang-703.0.31)
|
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- compiler: clang-3.5
|
- compiler: clang-3.5
|
||||||
- compiler: clang-3.6
|
- compiler: clang-3.6
|
||||||
|
@ -233,36 +580,147 @@ matrix:
|
||||||
- compiler: clang-4.0
|
- compiler: clang-4.0
|
||||||
- compiler: clang-5.0
|
- compiler: clang-5.0
|
||||||
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
ccache: true
|
ccache: true
|
||||||
directories:
|
directories:
|
||||||
- $HOME/srb2_cache
|
- $HOME/srb2_cache
|
||||||
|
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'ppa:stjr/srb2'
|
||||||
packages:
|
packages:
|
||||||
- libsdl2-mixer-dev
|
- libsdl2-mixer-dev
|
||||||
- libpng-dev
|
- libpng-dev
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
|
- zlib1g-dev
|
||||||
|
- libopenmpt-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
|
homebrew:
|
||||||
|
taps:
|
||||||
|
- mazmazz/srb2
|
||||||
|
packages:
|
||||||
|
- sdl2_mixer
|
||||||
|
- game-music-emu
|
||||||
|
- p7zip
|
||||||
|
- libopenmpt
|
||||||
|
- cmake
|
||||||
|
update: true
|
||||||
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- wget --verbose --server-response -c http://rosenthalcastle.org/srb2/SRB2-v2115-assets-2.7z -O $HOME/srb2_cache/SRB2-v2115-assets-2.7z
|
|
||||||
- 7z x $HOME/srb2_cache/SRB2-v2115-assets-2.7z -oassets
|
|
||||||
- mkdir build
|
|
||||||
- cd build
|
|
||||||
- export CFLAGS="-Wall -W -Werror $WFLAGS"
|
|
||||||
- export CCACHE_COMPRESS=true
|
|
||||||
- cmake .. -DCMAKE_BUILD_TYPE=Release
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
|
# Initialize Deployer defaults
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install sdl2 sdl2_mixer game-music-emu p7zip; fi
|
- . ./deployer/travis/deployer_defaults.sh
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cmake||true; fi
|
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/release/SDL2-2.0.6.dmg; hdiutil attach SDL2-2.0.6.dmg; sudo cp -a /Volumes/SDL2/SDL2.framework /Library/Frameworks/; fi
|
# Initialize Deployer; check if Deployer is enabled
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg; hdiutil attach SDL2_mixer-2.0.1.dmg; sudo cp -a /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks/; fi
|
# This needs to be run in the current shell so that $__DPL_ACTIVE is set for this session
|
||||||
|
- . ./deployer/travis/deployer.sh
|
||||||
|
|
||||||
|
# Also check if we should now terminate -- see `deployer.sh` for conditions.
|
||||||
|
# This should never happen on non-release buildbots when Deployer is not triggered.
|
||||||
|
- if [[ "$__DPL_TRY_TERMINATE_EARLY" == "1" ]]; then
|
||||||
|
if [[ "$__DPL_ACTIVE" != "1" ]]; then
|
||||||
|
echo "Exiting early because this job is not deploying.";
|
||||||
|
exit;
|
||||||
|
fi;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we're triggered by release tag, force ASSET_FILES_OPTIONAL_GET=1
|
||||||
|
- if [[ "$__DPL_TAG_ELIGIBLE" = "1" ]]; then
|
||||||
|
ASSET_FILES_OPTIONAL_GET=1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
|
||||||
|
install:
|
||||||
|
# Install OS X library dependencies via Homebrew
|
||||||
|
# Do this differently for release buildbots:
|
||||||
|
# * `brew install --build-bottle` builds libraries for x86_64's lowest common denominator CPU, core2
|
||||||
|
# * `sdl2_mixer` requires options from the formula tap https://github.com/mazmazz/homebrew-srb2
|
||||||
|
# * `brew postinstall` runs post-install scripts after building a bottle
|
||||||
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||||
|
if [[ "$__DPL_ACTIVE" == "1" ]]; then
|
||||||
|
brew install --build-bottle sdl2 game-music-emu;
|
||||||
|
brew install --build-bottle mazmazz/srb2/sdl2_mixer --with-flac --with-mpg123;
|
||||||
|
brew postinstall sdl2 game-music-emu mazmazz/srb2/sdl2_mixer;
|
||||||
|
fi;
|
||||||
|
fi
|
||||||
- mkdir -p $HOME/srb2_cache
|
- mkdir -p $HOME/srb2_cache
|
||||||
|
|
||||||
script: make -k
|
|
||||||
|
before_script:
|
||||||
|
# OLDPWD is root repo folder
|
||||||
|
- OLDPWD=$PWD
|
||||||
|
- __ASSET_DIRECTORY="$OLDPWD/assets/installer"
|
||||||
|
- mkdir -p "$__ASSET_DIRECTORY"
|
||||||
|
- cd "$HOME/srb2_cache"
|
||||||
|
|
||||||
|
# Get stat command so we know what the cached archive date is.
|
||||||
|
# stat is different for OSX
|
||||||
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||||
|
STATCMD="stat -f %m";
|
||||||
|
else
|
||||||
|
STATCMD="stat -c %y";
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get asset files (required for MD5)
|
||||||
|
# See `deployer_defaults.sh` for asset download path
|
||||||
|
- if [[ "$ASSET_ARCHIVE_PATH" != "" ]]; then
|
||||||
|
if [ -f "$(basename $ASSET_ARCHIVE_PATH)" ]; then
|
||||||
|
echo "$(basename $ASSET_ARCHIVE_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_PATH))";
|
||||||
|
fi;
|
||||||
|
wget --verbose --server-response -N "$ASSET_ARCHIVE_PATH";
|
||||||
|
7z x "$(basename $ASSET_ARCHIVE_PATH)" -o"$__ASSET_DIRECTORY" -aos;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Get optional files too
|
||||||
|
- if [[ "$__DPL_ACTIVE" == "1" ]] && [[ "$ASSET_FILES_OPTIONAL_GET" == "1" ]] && [[ "$ASSET_ARCHIVE_OPTIONAL_PATH" != "" ]]; then
|
||||||
|
if [ -f "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" ]; then
|
||||||
|
echo "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH) cache date -- $($STATCMD $(basename $ASSET_ARCHIVE_OPTIONAL_PATH))";
|
||||||
|
fi;
|
||||||
|
wget --verbose --server-response -N "$ASSET_ARCHIVE_OPTIONAL_PATH";
|
||||||
|
7z x "$(basename $ASSET_ARCHIVE_OPTIONAL_PATH)" -o"$__ASSET_DIRECTORY" -aos;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Go back to root repo folder
|
||||||
|
- cd "$OLDPWD"
|
||||||
|
|
||||||
|
# Prepare CMake asset lists
|
||||||
|
- SRB2_ASSET_HASHED=$(echo ${ASSET_FILES_HASHED// /\;})
|
||||||
|
- SRB2_ASSET_DOCS=$(echo ${ASSET_FILES_DOCS// /\;})
|
||||||
|
- SRB2_ASSET_DIRECTORY="$__ASSET_DIRECTORY"
|
||||||
|
|
||||||
|
# Prepare CMake
|
||||||
|
- mkdir build
|
||||||
|
- cd build
|
||||||
|
- mkdir package
|
||||||
|
- export CFLAGS="-Wall -W -Werror $WFLAGS"
|
||||||
|
- export CCACHE_COMPRESS=true
|
||||||
|
# If OS X, set -march=core2 to build compatible binaries with old Macs
|
||||||
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||||
|
export CFLAGS="${CFLAGS} -march=core2";
|
||||||
|
fi;
|
||||||
|
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/bin -DCPACK_PACKAGE_DIRECTORY=$PWD/package
|
||||||
|
-DSRB2_ASSET_HASHED="${SRB2_ASSET_HASHED}" -DSRB2_ASSET_DOCS="${SRB2_ASSET_DOCS}"
|
||||||
|
-DSRB2_ASSET_DIRECTORY="${SRB2_ASSET_DIRECTORY}"
|
||||||
|
-DCPACK_PACKAGE_DESCRIPTION_SUMMARY="${PROGRAM_NAME}"
|
||||||
|
-DCPACK_PACKAGE_VENDOR="${PROGRAM_VENDOR}"
|
||||||
|
-DSRB2_SDL2_EXE_NAME="${PROGRAM_FILENAME}"
|
||||||
|
|
||||||
|
script:
|
||||||
|
# Build our Makefile from Cmake!
|
||||||
|
- if [[ "$__DPL_ACTIVE" == "1" ]]; then
|
||||||
|
. ../deployer/travis/deployer_build.sh;
|
||||||
|
else
|
||||||
|
make -k;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
# Run the upload scripts
|
||||||
|
# These do nothing if Deployer is not triggered
|
||||||
|
- . ../deployer/travis/deployer_ftp.sh
|
||||||
|
- . ../deployer/travis/deployer_dput.sh
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
# DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string.
|
||||||
|
# Version change is fine.
|
||||||
project(SRB2
|
project(SRB2
|
||||||
VERSION 2.1.23
|
VERSION 2.1.24
|
||||||
LANGUAGES C)
|
LANGUAGES C)
|
||||||
|
|
||||||
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
||||||
|
@ -54,13 +56,19 @@ macro(copy_files_to_build_dir target dlllist_var)
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# 64-bit check
|
# bitness check
|
||||||
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
set(SRB2_SYSTEM_BITS 0)
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
message(STATUS "Target is 64-bit")
|
message(STATUS "Target is 64-bit")
|
||||||
set(SRB2_SYSTEM_BITS 64)
|
set(SRB2_SYSTEM_BITS 64)
|
||||||
else()
|
endif()
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
|
message(STATUS "Target is 32-bit")
|
||||||
set(SRB2_SYSTEM_BITS 32)
|
set(SRB2_SYSTEM_BITS 32)
|
||||||
endif()
|
endif()
|
||||||
|
if(${SRB2_SYSTEM_BITS} EQUAL 0)
|
||||||
|
message(STATUS "Target bitness is unknown")
|
||||||
|
endif()
|
||||||
|
|
||||||
# OS macros
|
# OS macros
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -86,8 +94,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
# Set EXE names so the assets CMakeLists can refer to its target
|
# Set EXE names so the assets CMakeLists can refer to its target
|
||||||
set(SRB2_SDL2_EXE_NAME srb2)
|
set(SRB2_SDL2_EXE_NAME srb2 CACHE STRING "Executable binary output name")
|
||||||
set(SRB2_WIN_EXE_NAME srb2dd)
|
set(SRB2_WIN_EXE_NAME srb2dd CACHE STRING "Executable binary output name for DirectDraw build")
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
|
||||||
|
|
||||||
|
@ -116,8 +124,8 @@ if(${CMAKE_SYSTEM} MATCHES "Darwin")
|
||||||
set(CPACK_GENERATOR "DragNDrop")
|
set(CPACK_GENERATOR "DragNDrop")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2")
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sonic Robo Blast 2" CACHE STRING "Program name for display purposes")
|
||||||
set(CPACK_PACKAGE_VENDOR "Sonic Team Jr.")
|
set(CPACK_PACKAGE_VENDOR "Sonic Team Jr." CACHE STRING "Vendor name for display purposes")
|
||||||
#set(CPACK_PACKAGE_DESCRIPTION_FILE )
|
#set(CPACK_PACKAGE_DESCRIPTION_FILE )
|
||||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
||||||
set(CPACK_PACKAGE_VERSION_MAJOR ${SRB2_VERSION_MAJOR})
|
set(CPACK_PACKAGE_VERSION_MAJOR ${SRB2_VERSION_MAJOR})
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
- SDL2-Mixer (Linux/OS X only)
|
- SDL2-Mixer (Linux/OS X only)
|
||||||
- libupnp (Linux/OS X only)
|
- libupnp (Linux/OS X only)
|
||||||
- libgme (Linux/OS X only)
|
- libgme (Linux/OS X only)
|
||||||
|
- libopenmpt (Linux/OS X only)
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
version: 2.1.23.{branch}-{build}
|
version: 2.1.24.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
11
assets/.gitignore
vendored
11
assets/.gitignore
vendored
|
@ -1,5 +1,10 @@
|
||||||
*
|
*.srb
|
||||||
*.*
|
*.pk3
|
||||||
|
*.dta
|
||||||
|
*.wad
|
||||||
|
*.txt
|
||||||
!README.txt
|
!README.txt
|
||||||
!LICENSE.txt
|
!LICENSE.txt
|
||||||
!LICENSE-3RD-PARTY.txt
|
!LICENSE-3RD-PARTY.txt
|
||||||
|
!CMakeLists.txt
|
||||||
|
!debian-template/*
|
||||||
|
|
|
@ -1,40 +1,58 @@
|
||||||
## Assets Target Configuration ##
|
## Assets Target Configuration ##
|
||||||
|
|
||||||
# MD5 generation
|
# For prepending the current source path, later
|
||||||
set(SRB2_ASSET_ALL
|
FUNCTION(PREPEND var prefix)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/srb2.srb
|
SET(listVar "")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/player.dta
|
FOREACH(f ${ARGN})
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/rings.dta
|
LIST(APPEND listVar "${prefix}/${f}")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/zones.dta
|
ENDFOREACH(f)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/patch.dta
|
SET(${var} "${listVar}" PARENT_SCOPE)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/music.dta
|
ENDFUNCTION(PREPEND)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/README.txt
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt
|
set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-3RD-PARTY.txt
|
CACHE STRING "Path to directory that contains all asset files for the installer.")
|
||||||
)
|
|
||||||
|
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSET_HASHED
|
||||||
srb2.srb
|
"srb2.srb;\
|
||||||
player.dta
|
player.dta;\
|
||||||
rings.dta
|
rings.dta;\
|
||||||
zones.dta
|
zones.dta;\
|
||||||
patch.dta
|
patch.dta"
|
||||||
|
CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(SRB2_ASSET_DOCS
|
||||||
|
"README.txt;\
|
||||||
|
LICENSE.txt;\
|
||||||
|
LICENSE-3RD-PARTY.txt"
|
||||||
|
CACHE STRING "Documentation filenames. In OS X, these are packaged separately from other assets. No spaces between entries!"
|
||||||
|
)
|
||||||
|
|
||||||
|
PREPEND(SRB2_ASSET_DOCS ${SRB2_ASSET_DIRECTORY} ${SRB2_ASSET_DOCS})
|
||||||
|
|
||||||
foreach(SRB2_ASSET ${SRB2_ASSET_HASHED})
|
foreach(SRB2_ASSET ${SRB2_ASSET_HASHED})
|
||||||
file(MD5 ${CMAKE_CURRENT_SOURCE_DIR}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH")
|
file(MD5 ${SRB2_ASSET_DIRECTORY}/${SRB2_ASSET} "SRB2_ASSET_${SRB2_ASSET}_HASH")
|
||||||
set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE)
|
set(SRB2_ASSET_${SRB2_ASSET}_HASH ${SRB2_ASSET_${SRB2_ASSET}_HASH} PARENT_SCOPE)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
if(CLANG)
|
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
||||||
get_target_property(outname SRB2SDL2 OUTPUT_NAME)
|
get_target_property(outname SRB2SDL2 OUTPUT_NAME)
|
||||||
install(FILES ${SRB2_ASSET_ALL}
|
install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
|
||||||
DESTINATION "${outname}.app/Contents/Resources"
|
DESTINATION "${outname}.app/Contents/Resources"
|
||||||
)
|
)
|
||||||
|
install(FILES ${SRB2_ASSET_DOCS}
|
||||||
|
DESTINATION .
|
||||||
|
OPTIONAL
|
||||||
|
)
|
||||||
else()
|
else()
|
||||||
install(FILES ${SRB2_ASSET_ALL}
|
install(DIRECTORY "${SRB2_ASSET_DIRECTORY}/"
|
||||||
DESTINATION .
|
DESTINATION .
|
||||||
)
|
)
|
||||||
|
# Docs are assumed to be located in SRB2_ASSET_DIRECTORY, so don't install again
|
||||||
|
#install(FILES ${SRB2_ASSET_DOCS}
|
||||||
|
# DESTINATION .
|
||||||
|
# OPTIONAL
|
||||||
|
#)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -12,9 +12,39 @@ with apt-key add. Thanks!
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
||||||
|
|
||||||
|
|
||||||
|
---------------
|
||||||
|
|
||||||
|
|
||||||
|
Templating
|
||||||
|
|
||||||
|
Note that you MUST run [repo-root]/debian_template.sh before running debuild
|
||||||
|
on these scripts! debian_template.sh fills these template files with working values.
|
||||||
|
|
||||||
|
You should also set PACKAGE_NAME_EMAIL="John Doe <jdoe@example.com>" to match
|
||||||
|
the identity of the key you will use to sign the package.
|
||||||
|
|
||||||
|
|
||||||
|
Building for Launchpad PPA
|
||||||
|
|
||||||
|
Run this step first:
|
||||||
|
|
||||||
|
1. source [repo-root]/debian_template.sh
|
||||||
|
* Initializes defaults for the package variables and fills in templates.
|
||||||
|
|
||||||
|
Use these steps to prepare building a source package for Launchpad:
|
||||||
|
|
||||||
|
1. cd [repo-root]/assets/
|
||||||
|
2. debuild -T clean-all (optional; if you already have asset files, this clears them)
|
||||||
|
|
||||||
|
Build the source package:
|
||||||
|
|
||||||
|
1. debuild -T build (this downloads the asset files from srb2.org if necessary)
|
||||||
|
2. debuild -S (builds the source package for Launchpad, including the asset files)
|
||||||
|
|
||||||
|
|
||||||
Signing for Launchpad PPA
|
Signing for Launchpad PPA
|
||||||
|
|
||||||
First, follow the above instructions to generate a GnuPG key with your identity. You will need
|
First, follow Callum's instructions to generate a GnuPG key with your identity. You will need
|
||||||
to publish the fingerprint of that key to Ubuntu's key server.
|
to publish the fingerprint of that key to Ubuntu's key server.
|
||||||
|
|
||||||
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
||||||
|
@ -26,22 +56,18 @@ upload signed source packages and publish them onto your PPA.
|
||||||
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
||||||
means your key is not set up correctly with your Launchpad account.
|
means your key is not set up correctly with your Launchpad account.
|
||||||
|
|
||||||
|
Finally, if your packages have not already been signed, follow these steps:
|
||||||
|
|
||||||
Building for Launchpad PPA
|
1. cd ..
|
||||||
|
* Packages are located in the parent folder of where debuild was called
|
||||||
|
2. debsign "srb2-data_[version]_source.changes"
|
||||||
|
* You may need to specify -k [key-fingerprint]
|
||||||
|
|
||||||
Use these steps to prepare building a source package for Launchpad:
|
|
||||||
|
|
||||||
1. Highly recommend copying the assets/ folder to outside your repo folder, or else the asset
|
Uploading for Launchpad PPA
|
||||||
files may be included in the main source package, when you build that.
|
|
||||||
2. cd [wherever-your-assets-folder-is]/assets/
|
|
||||||
3. debuild -T clean (optional, if you already have asset files)
|
|
||||||
|
|
||||||
Building the source package is a two-step process:
|
Follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
||||||
|
|
||||||
1. debuild -T build (this downloads the asset files from srb2.org if necessary)
|
|
||||||
2. debuild -S (builds the source package for Launchpad, including the asset files)
|
|
||||||
|
|
||||||
Then follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
|
||||||
to your PPA and have Launchpad build your binary deb packages.
|
to your PPA and have Launchpad build your binary deb packages.
|
||||||
|
|
||||||
|
|
||||||
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
5
assets/debian-template/changelog
Normal file
5
assets/debian-template/changelog
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
${PACKAGE_NAME}-data (${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}) ${PACKAGE_DISTRO}; urgency=${PACKAGE_URGENCY}
|
||||||
|
|
||||||
|
* ${PROGRAM_NAME} v${PROGRAM_VERSION} asset data
|
||||||
|
|
||||||
|
-- ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME}
|
|
@ -1,15 +1,15 @@
|
||||||
# SRB2-data Debian package control file.
|
# SRB2-data Debian package control file.
|
||||||
|
|
||||||
Source: srb2-data
|
Source: ${PACKAGE_NAME}-data
|
||||||
Section: games
|
Section: games
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Maintainer: Sonic Team Junior <stjr@srb2.org>
|
Maintainer: ${PACKAGE_GROUP_NAME_EMAIL}
|
||||||
Build-Depends: debhelper (>= 7.0.50~),
|
Build-Depends: debhelper (>= 7.0.50~),
|
||||||
wget
|
wget
|
||||||
Standards-Version: 3.8.4
|
Standards-Version: 3.8.4
|
||||||
Homepage: http://www.srb2.org
|
Homepage: ${PACKAGE_WEBSITE}
|
||||||
|
|
||||||
Package: srb2-data
|
Package: ${PACKAGE_NAME}-data
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
|
@ -1,18 +1,18 @@
|
||||||
This work was packaged for Debian by:
|
This work was packaged for Debian by:
|
||||||
|
|
||||||
Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME}
|
||||||
|
|
||||||
It was downloaded from:
|
It was downloaded from:
|
||||||
|
|
||||||
<http://srb2.org>
|
${PACKAGE_WEBSITE}
|
||||||
|
|
||||||
Upstream Author(s):
|
Upstream Author(s):
|
||||||
|
|
||||||
Sonic Team Junior <stjr@srb2.org>
|
${PACKAGE_GROUP_NAME_EMAIL}
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Copyright (C) 1998-2018 Sonic Team Junior
|
Copyright (C) 1998-2018 by Sonic Team Junior
|
||||||
|
|
||||||
License:
|
License:
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ License:
|
||||||
The Debian packaging is:
|
The Debian packaging is:
|
||||||
|
|
||||||
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
||||||
Copyright (C) 2010-2018 Sonic Team Junior <stjr@srb2.org>
|
Copyright (C) 2010-2018 by Sonic Team Junior <stjr@srb2.org>
|
||||||
|
|
||||||
and is licensed under the GPL version 2,
|
and is licensed under the GPL version 2,
|
||||||
see "/usr/share/common-licenses/GPL-2".
|
see "/usr/share/common-licenses/GPL-2".
|
42
assets/debian/rules → assets/debian-template/rules
Executable file → Normal file
42
assets/debian/rules → assets/debian-template/rules
Executable file → Normal file
|
@ -23,6 +23,16 @@
|
||||||
#
|
#
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# !!!!!!!!!! DEPLOYER NOTE !!!!!!!!!!
|
||||||
|
#
|
||||||
|
# Variables to be templated are curly-braced ${PACKAGE_INSTALL_PATH}
|
||||||
|
# Variables used by the rules script are parenthese'd $(DATADIR)
|
||||||
|
# See [repo-root]/debian_template.sh
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
# Uncomment this to turn on verbose mode.
|
||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
|
@ -37,30 +47,32 @@ RM := rm -rf
|
||||||
DIR := $(shell pwd)
|
DIR := $(shell pwd)
|
||||||
|
|
||||||
PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g')
|
PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g')
|
||||||
DATAFILES := srb2.srb zones.dta player.dta rings.dta music.dta patch.dta README.txt LICENSE.txt LICENSE-3RD-PARTY.txt
|
ARCHIVEPATH := ${ASSET_ARCHIVE_PATH}
|
||||||
|
ARCHIVEOPTIONALPATH := ${ASSET_ARCHIVE_OPTIONAL_PATH}
|
||||||
|
GETOPTIONALFILES := ${ASSET_FILES_OPTIONAL_GET}
|
||||||
|
|
||||||
DATADIR := usr/games/SRB2
|
DATADIR := $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///')
|
||||||
RESOURCEDIR := .
|
RESOURCEDIR := .
|
||||||
|
STAGINGDIR := $(RESOURCEDIR)/installer
|
||||||
WGET := wget -P $(RESOURCEDIR) -c -nc
|
WGET := wget -P $(RESOURCEDIR) -c -nc
|
||||||
|
|
||||||
build:
|
build:
|
||||||
$(MKDIR) $(DIR)/debian/tmp/$(DATADIR)
|
$(MKDIR) $(DIR)/debian/tmp/$(DATADIR)
|
||||||
> $(DIR)/debian/source/include-binaries
|
> $(DIR)/debian/source/include-binaries
|
||||||
# This will need to be updated every time SRB2 official version is
|
|
||||||
# Copy data files to their install locations, and add data files to include-binaries
|
# Copy data files to their install locations, and add data files to include-binaries
|
||||||
for file in $(DATAFILES); do \
|
if [ ! -d $(STAGINGDIR) ]; then \
|
||||||
if [ ! -f $(RESOURCEDIR)/$$file ]; then \
|
mkdir -p "$(STAGINGDIR)"; \
|
||||||
$(WGET) http://alam.srb2.org/SRB2/2.1.21-Final/Resources/$$file; \
|
$(WGET) $(ARCHIVEPATH); \
|
||||||
|
7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEPATH))" -aos; \
|
||||||
|
if [ "$(GETOPTIONALFILES)" = "1" ]; then \
|
||||||
|
$(WGET) $(ARCHIVEOPTIONALPATH); \
|
||||||
|
7z x "$(RESOURCEDIR)/$(shell basename $(ARCHIVEOPTIONALPATH))" -aos; \
|
||||||
fi; \
|
fi; \
|
||||||
if [ -f $(RESOURCEDIR)/$$file ]; then \
|
fi
|
||||||
$(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/$$file; \
|
# Install asset directory and add asset file to include-binaries
|
||||||
echo $(RESOURCEDIR)/$$file >> $(DIR)/debian/source/include-binaries; \
|
cp -vr "$(STAGINGDIR)/." "$(DIR)/debian/tmp/$(DATADIR)"
|
||||||
fi; \
|
find "$(STAGINGDIR)" >> $(DIR)/debian/source/include-binaries
|
||||||
if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/$$file ]; then \
|
|
||||||
echo $(DIR)/debian/tmp/$(DATADIR)/$$file not found and could not be downloaded!; \
|
|
||||||
return 1; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
binary-indep:
|
binary-indep:
|
||||||
# Generate install folder file
|
# Generate install folder file
|
|
@ -1,19 +0,0 @@
|
||||||
srb2-data (2.1.21~7) trusty; urgency=high
|
|
||||||
|
|
||||||
* Updated for SRB2 v2.1.21
|
|
||||||
|
|
||||||
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
|
||||||
|
|
||||||
|
|
||||||
srb2-data (2.1.14~1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Updated for SRB2 v2.1.14
|
|
||||||
|
|
||||||
-- Alam Arias <alam+debian@srb2.org> Sat, 6 Jan 2016 11:00:00 -0500
|
|
||||||
|
|
||||||
|
|
||||||
srb2-data (2.0.6-2) maverick; urgency=high
|
|
||||||
|
|
||||||
* Initial proper release..
|
|
||||||
|
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Sat, 29 Jan 2011 01:18:42 +1300
|
|
23
cmake/Modules/FindOPENMPT.cmake
Normal file
23
cmake/Modules/FindOPENMPT.cmake
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
include(LibFindMacros)
|
||||||
|
|
||||||
|
libfind_pkg_check_modules(OPENMPT_PKGCONF OPENMPT)
|
||||||
|
|
||||||
|
find_path(OPENMPT_INCLUDE_DIR
|
||||||
|
NAMES libopenmpt.h
|
||||||
|
PATHS
|
||||||
|
${OPENMPT_PKGCONF_INCLUDE_DIRS}
|
||||||
|
"/usr/include/libopenmpt"
|
||||||
|
"/usr/local/include/libopenmpt"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(OPENMPT_LIBRARY
|
||||||
|
NAMES openmpt
|
||||||
|
PATHS
|
||||||
|
${OPENMPT_PKGCONF_LIBRARY_DIRS}
|
||||||
|
"/usr/lib"
|
||||||
|
"/usr/local/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(OPENMPT_PROCESS_INCLUDES OPENMPT_INCLUDE_DIR)
|
||||||
|
set(OPENMPT_PROCESS_LIBS OPENMPT_LIBRARY)
|
||||||
|
libfind_process(OPENMPT)
|
|
@ -10,10 +10,38 @@ and give them to your users to install with apt-key add. Thanks!
|
||||||
|
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
||||||
|
|
||||||
|
---------------
|
||||||
|
|
||||||
|
|
||||||
|
Templating
|
||||||
|
|
||||||
|
Note that you MUST run [repo-root]/debian_template.sh before running debuild
|
||||||
|
on these scripts! debian_template.sh fills these template files with working values.
|
||||||
|
|
||||||
|
You should also set PACKAGE_NAME_EMAIL="John Doe <jdoe@example.com>" to match
|
||||||
|
the identity of the key you will use to sign the package.
|
||||||
|
|
||||||
|
|
||||||
|
Building for Launchpad PPA
|
||||||
|
|
||||||
|
Use these steps to prepare building a source package for Launchpad:
|
||||||
|
|
||||||
|
1. cd [repo-root]
|
||||||
|
2. git reset --hard; git clean -fd; git clean -fx;
|
||||||
|
* Resets your repo folder to a committed state and removes untracked files
|
||||||
|
* If you built srb2-data in the assets/ folder, MAKE SURE THAT FOLDER DOES NOT HAVE ASSETS,
|
||||||
|
OR THEY MAY BE INCLUDED IN THE MAIN SOURCE PACKAGE!
|
||||||
|
|
||||||
|
Build the source package:
|
||||||
|
|
||||||
|
1. source [repo-root]/debian_template.sh
|
||||||
|
* Initializes defaults for the package variables and fills in templates.
|
||||||
|
2. debuild -S (builds the source package for Launchpad)
|
||||||
|
|
||||||
|
|
||||||
Signing for Launchpad PPA
|
Signing for Launchpad PPA
|
||||||
|
|
||||||
First, follow the above instructions to generate a GnuPG key with your identity. You will need
|
First, follow Callum's instructions to generate a GnuPG key with your identity. You will need
|
||||||
to publish the fingerprint of that key to Ubuntu's key server.
|
to publish the fingerprint of that key to Ubuntu's key server.
|
||||||
|
|
||||||
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
||||||
|
@ -25,22 +53,18 @@ upload signed source packages and publish them onto your PPA.
|
||||||
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
||||||
means your key is not set up correctly with your Launchpad account.
|
means your key is not set up correctly with your Launchpad account.
|
||||||
|
|
||||||
|
Finally, if your packages have not already been signed, follow these steps:
|
||||||
|
|
||||||
Building for Launchpad PPA
|
1. cd ..
|
||||||
|
* Packages are located in the parent folder of where debuild was called
|
||||||
|
2. debsign "srb2_[version]_source.changes"
|
||||||
|
* You may need to specify -k [key-fingerprint]
|
||||||
|
|
||||||
Use these steps to prepare building a source package for Launchpad:
|
|
||||||
|
|
||||||
1. cd [srb2repo]
|
Uploading for Launchpad PPA
|
||||||
2. git reset --hard; git clean -fd; git clean -fx;
|
|
||||||
* Resets your repo folder to a committed state and removes untracked files
|
|
||||||
* If you built srb2-data in the assets/ folder, MAKE SURE THAT FOLDER DOES NOT HAVE ASSETS,
|
|
||||||
OR THEY MAY BE INCLUDED IN THE MAIN SOURCE PACKAGE!
|
|
||||||
|
|
||||||
Building the source package takes just one step:
|
Follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
||||||
|
|
||||||
1. debuild -S (builds the source package for Launchpad)
|
|
||||||
|
|
||||||
Then follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
|
||||||
to your PPA and have Launchpad build your binary deb packages.
|
to your PPA and have Launchpad build your binary deb packages.
|
||||||
|
|
||||||
|
|
||||||
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
5
debian-template/changelog
Normal file
5
debian-template/changelog
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
${PACKAGE_NAME} (${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION}) ${PACKAGE_DISTRO}; urgency=${PACKAGE_URGENCY}
|
||||||
|
|
||||||
|
* ${PROGRAM_NAME} v${PROGRAM_VERSION} program build
|
||||||
|
|
||||||
|
-- ${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME}
|
|
@ -1,24 +1,30 @@
|
||||||
# SRB2 Debian package control file.
|
# SRB2 Debian package control file.
|
||||||
|
|
||||||
Source: srb2
|
Source: ${PACKAGE_NAME}
|
||||||
Section: games
|
Section: games
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Maintainer: Sonic Team Junior <stjr@srb2.org>
|
Maintainer: ${PACKAGE_GROUP_NAME_EMAIL}
|
||||||
Build-Depends: debhelper (>= 7.0.50~),
|
Build-Depends: debhelper (>= 7.0.50~),
|
||||||
libsdl2-dev,
|
libsdl2-dev,
|
||||||
libsdl2-mixer-dev,
|
libsdl2-mixer-dev,
|
||||||
libpng12-dev (>= 1.2.7) | libpng-dev,
|
libpng-dev | libpng16-dev | libpng12-dev (>= 1.2.7),
|
||||||
zlib1g-dev,
|
zlib1g-dev,
|
||||||
libgme-dev,
|
libgme-dev,
|
||||||
libglu1-dev | libglu-dev,
|
libglu1-dev | libglu-dev,
|
||||||
libosmesa6-dev | libgl-dev,
|
libosmesa6-dev | libgl-dev,
|
||||||
nasm [i386]
|
nasm [i386]
|
||||||
Standards-Version: 3.8.4
|
Standards-Version: 3.8.4
|
||||||
Homepage: http://www.srb2.org
|
Homepage: ${PACKAGE_WEBSITE}
|
||||||
|
|
||||||
Package: srb2
|
Package: ${PACKAGE_NAME}
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.23)
|
Depends: ${SHLIBS_DEPENDS}, ${MISC_DEPENDS},
|
||||||
|
${PACKAGE_NAME}-data (>> ${PACKAGE_ASSET_MINVERSION}), ${PACKAGE_NAME}-data (<< ${PACKAGE_ASSET_MAXVERSION}),
|
||||||
|
libsdl2-2.0-0,
|
||||||
|
libsdl2-mixer-2.0-0,
|
||||||
|
zlib1g,
|
||||||
|
libgme0,
|
||||||
|
libpng | libpng16-16 | libpng12-0
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
||||||
fangame built using a modified version of the Doom Legacy
|
fangame built using a modified version of the Doom Legacy
|
||||||
|
@ -28,10 +34,10 @@ Description: A cross-platform 3D Sonic fangame
|
||||||
and quite a lot of the fun that the original Sonic games provided.
|
and quite a lot of the fun that the original Sonic games provided.
|
||||||
|
|
||||||
|
|
||||||
Package: srb2-dbg
|
Package: ${PACKAGE_NAME}-dbg
|
||||||
Architecture: any
|
Architecture: any
|
||||||
# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat
|
# FIXME: should be Depends: ${SHLIBS_DEPENDS}, ${MISC_DEPENDS}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat
|
||||||
Depends: libc6, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.23), srb2
|
Depends: libc6, ${MISC_DEPENDS}, ${PACKAGE_NAME}-data (>> ${PACKAGE_ASSET_MINVERSION}), ${PACKAGE_NAME}-data (<< ${PACKAGE_ASSET_MAXVERSION}), ${PACKAGE_NAME}
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
||||||
fangame built using a modified version of the Doom Legacy
|
fangame built using a modified version of the Doom Legacy
|
|
@ -1,18 +1,18 @@
|
||||||
This work was packaged for Debian by:
|
This work was packaged for Debian by:
|
||||||
|
|
||||||
Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
${PACKAGE_NAME_EMAIL} ${__PACKAGE_DATETIME}
|
||||||
|
|
||||||
It was downloaded from:
|
It was downloaded from:
|
||||||
|
|
||||||
<http://srb2.org>
|
${PACKAGE_WEBSITE}
|
||||||
|
|
||||||
Upstream Author(s):
|
Upstream Author(s):
|
||||||
|
|
||||||
Sonic Team Junior <stjr@srb2.org>
|
${PACKAGE_GROUP_NAME_EMAIL}
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Copyright (C) 1998-2018 Sonic Team Junior
|
Copyright (C) 1998-2018 by Sonic Team Junior
|
||||||
|
|
||||||
License:
|
License:
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ License:
|
||||||
The Debian packaging is:
|
The Debian packaging is:
|
||||||
|
|
||||||
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
||||||
Copyright (C) 2010-2018 Sonic Team Junior <stjr@srb2.org>
|
Copyright (C) 2010-2018 by Sonic Team Junior <stjr@srb2.org>
|
||||||
|
|
||||||
and is licensed under the GPL version 2,
|
and is licensed under the GPL version 2,
|
||||||
see "/usr/share/common-licenses/GPL-2".
|
see "/usr/share/common-licenses/GPL-2".
|
26
debian/rules → debian-template/rules
Executable file → Normal file
26
debian/rules → debian-template/rules
Executable file → Normal file
|
@ -23,6 +23,16 @@
|
||||||
#
|
#
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# !!!!!!!!!! DEPLOYER NOTE !!!!!!!!!!
|
||||||
|
#
|
||||||
|
# Variables to be templated are curly-braced ${PACKAGE_INSTALL_PATH}
|
||||||
|
# Variables used by the rules script are parenthese'd $(PKGDIR)
|
||||||
|
# See [repo-root]/debian_template.sh
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
# Uncomment this to turn on verbose mode.
|
||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
|
@ -50,16 +60,16 @@ DIR := $(shell pwd)
|
||||||
|
|
||||||
# FIXME: hate hate hate head/tail hack :(
|
# FIXME: hate hate hate head/tail hack :(
|
||||||
CONTROLF = $(DIR)/debian/control
|
CONTROLF = $(DIR)/debian/control
|
||||||
PACKAGE = srb2
|
PACKAGE = ${PACKAGE_NAME}
|
||||||
DBGPKG = $(PACKAGE)-dbg
|
DBGPKG = ${PACKAGE}-dbg
|
||||||
TITLE = Sonic Robo Blast 2
|
TITLE = ${PROGRAM_NAME}
|
||||||
SECTION = Games/Action
|
SECTION = Games/Action
|
||||||
EXENAME = srb2
|
EXENAME = ${PROGRAM_FILENAME}
|
||||||
DBGNAME = debug/$(EXENAME)
|
DBGNAME = debug/$(EXENAME)
|
||||||
|
|
||||||
PKGDIR = usr/games/SRB2
|
PKGDIR = $(shell echo "${PACKAGE_INSTALL_PATH}" | sed -e 's/^\///')
|
||||||
DBGDIR = usr/lib/debug/$(PKGDIR)
|
DBGDIR = usr/lib/debug/$(PKGDIR)
|
||||||
LINKDIR = usr/games
|
LINKDIR = $(shell echo "${PACKAGE_LINK_PATH}" | sed -e 's/^\///')
|
||||||
PIXMAPS_DIR = usr/share/pixmaps
|
PIXMAPS_DIR = usr/share/pixmaps
|
||||||
DESKTOP_DIR = usr/share/applications
|
DESKTOP_DIR = usr/share/applications
|
||||||
PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)")
|
PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)")
|
||||||
|
@ -102,8 +112,8 @@ binary-arch:
|
||||||
$(INSTALL) $(BINDIR)/$(EXENAME) $(DIR)/debian/tmp/$(PKGDIR)/$(PACKAGE)
|
$(INSTALL) $(BINDIR)/$(EXENAME) $(DIR)/debian/tmp/$(PKGDIR)/$(PACKAGE)
|
||||||
$(INSTALL) $(BINDIR)/$(DBGNAME) $(DIR)/debian/tmp/$(DBGDIR)/$(PACKAGE)
|
$(INSTALL) $(BINDIR)/$(DBGNAME) $(DIR)/debian/tmp/$(DBGDIR)/$(PACKAGE)
|
||||||
# Install desktop file and banner image
|
# Install desktop file and banner image
|
||||||
$(INSTALL) $(DIR)/srb2.png $(DIR)/debian/tmp/usr/share/pixmaps
|
$(INSTALL) $(DIR)/srb2.png $(DIR)/debian/tmp/usr/share/pixmaps/${PROGRAM_FILENAME}.png
|
||||||
$(INSTALL) $(DIR)/debian/srb2.desktop $(DIR)/debian/tmp/usr/share/applications
|
$(INSTALL) $(DIR)/debian/srb2.desktop $(DIR)/debian/tmp/usr/share/applications/${PROGRAM_FILENAME}.desktop
|
||||||
# add compiled binaries to include-binaries
|
# add compiled binaries to include-binaries
|
||||||
echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries
|
echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries
|
||||||
echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries
|
echo $(BINDIR)/$(EXENAME) >> $(DIR)/debian/source/include-binaries
|
|
@ -2,7 +2,7 @@ tar-ignore = "assets/*.srb"
|
||||||
tar-ignore = "assets/*.pk3"
|
tar-ignore = "assets/*.pk3"
|
||||||
tar-ignore = "assets/*.dta"
|
tar-ignore = "assets/*.dta"
|
||||||
tar-ignore = "assets/*.wad"
|
tar-ignore = "assets/*.wad"
|
||||||
tar-ignore = "assets/debian/srb2-data/*"
|
tar-ignore = "assets/debian/${PACKAGE_NAME}-data/*"
|
||||||
tar-ignore = "assets/debian/tmp/*"
|
tar-ignore = "assets/debian/tmp/*"
|
||||||
tar-ignore = "*.obj"
|
tar-ignore = "*.obj"
|
||||||
tar-ignore = "*.dep"
|
tar-ignore = "*.dep"
|
10
debian-template/srb2.desktop
Normal file
10
debian-template/srb2.desktop
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=${PROGRAM_NAME}
|
||||||
|
Comment=${PROGRAM_DESCRIPTION}
|
||||||
|
Encoding=UTF-8
|
||||||
|
Exec=${PACKAGE_INSTALL_PATH}/${PROGRAM_FILENAME}
|
||||||
|
Icon=/usr/share/pixmaps/${PROGRAM_FILENAME}.png
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
StartupNotify=false
|
||||||
|
Categories=Application;Game;
|
12
debian/changelog
vendored
12
debian/changelog
vendored
|
@ -1,12 +0,0 @@
|
||||||
srb2 (2.1.23~9) trusty; urgency=high
|
|
||||||
|
|
||||||
* SRB2 v2.1.23 release
|
|
||||||
|
|
||||||
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 27 Nov 2018 16:45:00 -0500
|
|
||||||
|
|
||||||
|
|
||||||
srb2 (2.0.6-5) maverick; urgency=high
|
|
||||||
|
|
||||||
* Initial proper release..
|
|
||||||
|
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Sat, 29 Jan 2011 01:18:42 +1300
|
|
10
debian/srb2.desktop
vendored
10
debian/srb2.desktop
vendored
|
@ -1,10 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=Sonic Robo Blast 2
|
|
||||||
Comment=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.
|
|
||||||
Encoding=UTF-8
|
|
||||||
Exec=/usr/games/SRB2/srb2
|
|
||||||
Icon=/usr/share/pixmaps/srb2.png
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
StartupNotify=false
|
|
||||||
Categories=Application;Game;
|
|
166
debian_template.sh
Normal file
166
debian_template.sh
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# Debian package templating
|
||||||
|
#
|
||||||
|
# Call this script BEFORE running debuild!
|
||||||
|
# source ./debian_template.sh [clean] [main/asset]
|
||||||
|
#
|
||||||
|
# Before running this script,
|
||||||
|
# you should also set PACKAGE_NAME_EMAIL="John Doe <jdoe@example.com>" to match
|
||||||
|
# the identity of the key you will use to sign the package.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Get script's actual path
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||||
|
|
||||||
|
# Recursive function for directory crawling
|
||||||
|
# $1 = Directory root to crawl
|
||||||
|
# $2 = Code to eval on file
|
||||||
|
# $3 = Code to eval on directory
|
||||||
|
# Exposes $dirtails, $dirlevel, and $dirtailname
|
||||||
|
dirlevel=0 # initialize
|
||||||
|
dirtails=()
|
||||||
|
|
||||||
|
# Utility function to make dira/dirb/dirc string
|
||||||
|
makedirtailname () {
|
||||||
|
dirtailname=""
|
||||||
|
for tail in $dirtails; do
|
||||||
|
if [[ "$dirtailname" == "" ]]; then
|
||||||
|
dirtailname="/$tail";
|
||||||
|
else
|
||||||
|
dirtailname="$dirtailname/$tail";
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
}
|
||||||
|
|
||||||
|
evaldirectory () {
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
# Set contextual variables
|
||||||
|
# dirtails is an array of directory basenames after the crawl root
|
||||||
|
if (( $dirlevel > 0 )); then
|
||||||
|
dirtails+=( "$(basename $1)" );
|
||||||
|
else
|
||||||
|
dirtails=();
|
||||||
|
fi;
|
||||||
|
dirlevel=$((dirlevel+1));
|
||||||
|
|
||||||
|
# Generate directory path after the crawl root
|
||||||
|
makedirtailname;
|
||||||
|
|
||||||
|
# Eval our directory with the latest contextual info
|
||||||
|
# Don't eval on root
|
||||||
|
if (( $dirlevel > 1 )) && [[ "$3" != "" ]]; then
|
||||||
|
eval "$3";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Iterate entries
|
||||||
|
for name in $1/*; do
|
||||||
|
if [ -d "$name" ]; then
|
||||||
|
# Name is a directory, but don't eval yet
|
||||||
|
# Recurse so our vars are updated
|
||||||
|
evaldirectory "$name" "$2" "$3";
|
||||||
|
|
||||||
|
# Decrement our directory level and remove a dirtail
|
||||||
|
unset 'dirtails[ ${#dirtails[@]}-1 ]';
|
||||||
|
dirlevel=$((dirlevel-1));
|
||||||
|
makedirtailname;
|
||||||
|
else
|
||||||
|
# Name is a file
|
||||||
|
if [ -f "$name" ] && [[ "$2" != "" ]]; then
|
||||||
|
eval "$2";
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
|
||||||
|
# Reset our variables; we're done iterating
|
||||||
|
if (( $dirlevel == 1 )); then
|
||||||
|
dirlevel=0;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Initialize package parameter defaults
|
||||||
|
#
|
||||||
|
if [[ "$__DEBIAN_PARAMETERS_INITIALIZED" != "1" ]]; then
|
||||||
|
. ${DIR}/deployer/travis/deployer_defaults.sh;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Clean up after ourselves; we only expect to run this script once
|
||||||
|
# during buildboting
|
||||||
|
__DEBIAN_PARAMETERS_INITIALIZED=0
|
||||||
|
|
||||||
|
# for envsubst
|
||||||
|
export __PACKAGE_DATETIME="$(date '+%a, %d %b %Y %H:%M:%S %z')"
|
||||||
|
export __PACKAGE_DATETIME_DIGIT="$(date -u '+%Y%m%d%H%M%S')"
|
||||||
|
|
||||||
|
if [[ "$PACKAGE_REVISION" == "" ]]; then
|
||||||
|
PACKAGE_REVISION="-$__PACKAGE_DATETIME_DIGIT";
|
||||||
|
__PACKAGE_REVISION_BY_DATE=1;
|
||||||
|
export PACKAGE_REVISION=${PACKAGE_REVISION}; # for envsubst
|
||||||
|
fi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Clean the old debian/ directories
|
||||||
|
#
|
||||||
|
if [[ "$1" == "clean" ]]; then
|
||||||
|
toclean=$2;
|
||||||
|
else
|
||||||
|
toclean=$1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$toclean" == "" ]] || [[ "$toclean" == "main" ]]; then
|
||||||
|
echo "Cleaning main package scripts";
|
||||||
|
if [[ ! -f ${DIR}/debian ]]; then
|
||||||
|
rm -rf ${DIR}/debian;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
if [[ "$toclean" == "" ]] || [[ "$toclean" == "asset" ]]; then
|
||||||
|
echo "Cleaning asset package scripts";
|
||||||
|
if [[ ! -f ${DIR}/assets/debian ]]; then
|
||||||
|
rm -rf ${DIR}/assets/debian;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Make new templates
|
||||||
|
#
|
||||||
|
if [[ "$1" != "clean" ]]; then
|
||||||
|
totemplate=$1;
|
||||||
|
|
||||||
|
# HACK: ${shlibs:Depends} in the templates make the templating fail
|
||||||
|
# So just define replacemment variables
|
||||||
|
export SHLIBS_DEPENDS=${SHLIBS_DEPENDS};
|
||||||
|
export MISC_DEPENDS=${MISC_DEPENDS};
|
||||||
|
export DEBFILEVAR='$$file'; # used in assets/debian/rules
|
||||||
|
|
||||||
|
# Package parameters are exported for envsubst in deployer_defaults.sh
|
||||||
|
|
||||||
|
if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "main" ]]; then
|
||||||
|
echo "Generating main package scripts";
|
||||||
|
fromroot=${DIR}/debian-template;
|
||||||
|
toroot=${DIR}/debian;
|
||||||
|
mkdir ${toroot};
|
||||||
|
|
||||||
|
evaldirectory ${fromroot} \
|
||||||
|
"cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \
|
||||||
|
"mkdir \"${toroot}\${dirtailname}\"";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "asset" ]]; then
|
||||||
|
echo "Generating asset package scripts";
|
||||||
|
fromroot=${DIR}/assets/debian-template;
|
||||||
|
toroot=${DIR}/assets/debian;
|
||||||
|
mkdir ${toroot};
|
||||||
|
|
||||||
|
# Root dir to crawl; file eval; directory eval
|
||||||
|
evaldirectory ${fromroot} \
|
||||||
|
"cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \
|
||||||
|
"mkdir \"${toroot}\${dirtailname}\"";
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$__DPL_ACTIVE" != "1" ]] && [[ "$__PACKAGE_REVISION_BY_DATE" == "1" ]]; then
|
||||||
|
unset PACKAGE_REVISION; # so we can reset the date on subsequent runs
|
||||||
|
fi;
|
157
deployer/travis/deployer.sh
Normal file
157
deployer/travis/deployer.sh
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# Initialization
|
||||||
|
#
|
||||||
|
# Performs validity checks to ensure that Deployer is allowed to run
|
||||||
|
# e.g., is an FTP hostname specified? Are we whitelisted by OSNAMES and BRANCHES?
|
||||||
|
#
|
||||||
|
# Set these environment variables in your Travis-CI settings, where they are stored securely.
|
||||||
|
# See other shell scripts for more options.
|
||||||
|
#
|
||||||
|
# DPL_ENABLED = 1 (leave blank to disable)
|
||||||
|
# DPL_TAG_ENABLED = 1 (run Deployer on all tags)
|
||||||
|
# DPL_JOB_ENABLE_ALL = 1 (run Deployer on all jobs; leave blank to act on specific jobs, see below)
|
||||||
|
# DPL_JOBNAMES = name1,name2 (whitelist of job names to allow uploading; leave blank to upload from all jobs)
|
||||||
|
# DPL_OSNAMES = osx (whitelist of OS names to allow uploading; leave blank to upload from all OSes)
|
||||||
|
# DPL_BRANCHES = master,branch1,branch2 (whitelist of branches to upload; leave blank to upload all branches)
|
||||||
|
#
|
||||||
|
# To enable Deployer on specific jobs, set _DPL_JOB_ENABLED=1 for that job. Example:
|
||||||
|
# - matrix:
|
||||||
|
# - os: osx
|
||||||
|
# env:
|
||||||
|
# - _DPL_JOB_ENABLED=1
|
||||||
|
#
|
||||||
|
# DO NOT set __DPL_ACTIVE, because that would bypass these validity checks.
|
||||||
|
|
||||||
|
# Validate Deployer state
|
||||||
|
if [[ "$DPL_ENABLED" == "1" ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then
|
||||||
|
# Test for base eligibility:
|
||||||
|
# Are we in a deployer branch? Or
|
||||||
|
# Are we in a release tag AND DPL_TAG_ENABLED=1?
|
||||||
|
if [[ $TRAVIS_BRANCH == *"deployer"* ]]; then
|
||||||
|
__DPL_BASE_ELIGIBLE=1;
|
||||||
|
__DPL_TERMINATE_EARLY_ELIGIBLE=1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$TRAVIS_TAG" != "" ]] && [[ "$DPL_TAG_ENABLED" == "1" ]]; then
|
||||||
|
__DPL_BASE_ELIGIBLE=1;
|
||||||
|
__DPL_TAG_ELIGIBLE=1;
|
||||||
|
__DPL_TERMINATE_EARLY_ELIGIBLE=1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Logging message for trigger word
|
||||||
|
if [[ "$__DPL_TAG_ELIGIBLE" != "1" ]] && [[ "$DPL_TRIGGER" != "" ]]; then
|
||||||
|
echo "Testing for trigger $DPL_TRIGGER, commit message: $TRAVIS_COMMIT_MESSAGE";
|
||||||
|
echo "[${DPL_TRIGGER}]";
|
||||||
|
echo "[${DPL_TRIGGER}-${_DPL_JOB_NAME}]";
|
||||||
|
echo "[${DPL_TRIGGER}-${TRAVIS_OS_NAME}]";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Search for the trigger word
|
||||||
|
# Force enable if release tags are eligible
|
||||||
|
#
|
||||||
|
if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_TRIGGER" == "" ]] \
|
||||||
|
|| [[ $TRAVIS_COMMIT_MESSAGE == *"[$DPL_TRIGGER]"* ]] \
|
||||||
|
|| [[ $TRAVIS_COMMIT_MESSAGE == *"[${DPL_TRIGGER}-${_DPL_JOB_NAME}]"* ]] \
|
||||||
|
|| [[ $TRAVIS_COMMIT_MESSAGE == *"[${DPL_TRIGGER}-${TRAVIS_OS_NAME}]"* ]]; then
|
||||||
|
#
|
||||||
|
# Whitelist by branch name
|
||||||
|
# Force enable if release tags are eligible
|
||||||
|
#
|
||||||
|
if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_BRANCHES" == "" ]] || [[ $DPL_BRANCHES == *"$TRAVIS_BRANCH"* ]]; then
|
||||||
|
# Set this so we only early-terminate builds when we are specifically deploying
|
||||||
|
# Trigger string and branch are encompassing conditions; the rest are job-specific
|
||||||
|
# This check only matters for deployer branches and when DPL_TERMINATE_TESTS=1,
|
||||||
|
# because we're filtering non-deployer jobs.
|
||||||
|
#
|
||||||
|
# __DPL_TRY_TERMINATE_EARLY is invalidated in .travis.yml if __DPL_ACTIVE=1
|
||||||
|
if [[ "$__DPL_TERMINATE_EARLY_ELIGIBLE" == "1" ]] && [[ "$DPL_TERMINATE_TESTS" == "1" ]]; then
|
||||||
|
__DPL_TRY_TERMINATE_EARLY=1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Is the job enabled for deployment?
|
||||||
|
#
|
||||||
|
if [[ "$DPL_JOB_ENABLE_ALL" == "1" ]] || [[ "$_DPL_JOB_ENABLED" == "1" ]]; then
|
||||||
|
#
|
||||||
|
# Whitelist by job names
|
||||||
|
#
|
||||||
|
if [[ "$DPL_JOBNAMES" == "" ]] || [[ "$_DPL_JOB_NAME" == "" ]] || [[ $DPL_JOBNAMES == *"$_DPL_JOB_NAME"* ]]; then
|
||||||
|
#
|
||||||
|
# Whitelist by OS names
|
||||||
|
#
|
||||||
|
if [[ "$DPL_OSNAMES" == "" ]] || [[ $DPL_OSNAMES == *"$TRAVIS_OS_NAME"* ]]; then
|
||||||
|
# Base Deployer is eligible for becoming active
|
||||||
|
|
||||||
|
# Are we building for Linux?
|
||||||
|
if [[ "$_DPL_PACKAGE_BINARY" == "1" ]] || [[ "$_DPL_PACKAGE_SOURCE" == "1" ]]; then
|
||||||
|
if [[ "$_DPL_PACKAGE_MAIN" == "1" ]] || [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then
|
||||||
|
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
|
||||||
|
__DPL_DEBIAN_ACTIVE=1;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Now check for deployment targets
|
||||||
|
if [[ "$_DPL_FTP_TARGET" == "1" ]] && [[ "$DPL_FTP_HOSTNAME" != "" ]]; then
|
||||||
|
if [[ "$TRAVIS_OS_HOST" == "linux" ]] && [[ "$DPL_FTP_PROTOCOL" == "ftp" ]]; then
|
||||||
|
echo "Non-secure FTP will not work on Linux Travis-CI jobs!";
|
||||||
|
echo "Try SFTP or another target. Details:";
|
||||||
|
echo "https://blog.travis-ci.com/2018-07-23-the-tale-of-ftp-at-travis-ci";
|
||||||
|
else
|
||||||
|
if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]] || [[ "$_DPL_PACKAGE_BINARY" == "1" ]] || [[ "$_DPL_BINARY" == "1" ]]; then
|
||||||
|
echo "Deployer FTP target is enabled";
|
||||||
|
__DPL_FTP_ACTIVE=1;
|
||||||
|
else
|
||||||
|
echo "Deployer FTP target cannot be enabled: You must specify _DPL_PACKAGE_BINARY=1,";
|
||||||
|
echo "and/or _DPL_BINARY=1 in your job's environment variables.";
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_DPUT_TARGET" == "1" ]] && [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]] \
|
||||||
|
&& [[ "$DPL_DPUT_INCOMING" != "" ]]; then
|
||||||
|
if [[ "$DPL_DPUT_METHOD" == "ftp" ]]; then
|
||||||
|
echo "DPUT will not work with non-secure FTP on Linux Travis-CI jobs!";
|
||||||
|
echo "Try SFTP or another method for DPUT. Details:";
|
||||||
|
echo "https://blog.travis-ci.com/2018-07-23-the-tale-of-ftp-at-travis-ci";
|
||||||
|
else
|
||||||
|
echo "Deployer DPUT target is enabled";
|
||||||
|
__DPL_DPUT_ACTIVE=1;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# If any deployment targets are active, then so is the Deployer at large
|
||||||
|
if [[ "$__DPL_FTP_ACTIVE" == "1" ]] || [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then
|
||||||
|
__DPL_ACTIVE=1;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
else
|
||||||
|
if [[ "$DPL_TRIGGER" != "" ]]; then
|
||||||
|
echo "Testing for global trigger [$DPL_TRIGGER, commit message: $TRAVIS_COMMIT_MESSAGE";
|
||||||
|
fi;
|
||||||
|
if [[ "$DPL_TRIGGER" != "" ]] && [[ $TRAVIS_COMMIT_MESSAGE == *"[$DPL_TRIGGER"* ]]; then
|
||||||
|
if [[ "$__DPL_TAG_ELIGIBLE" == "1" ]] || [[ "$DPL_BRANCHES" == "" ]] || [[ $DPL_BRANCHES == *"$TRAVIS_BRANCH"* ]]; then
|
||||||
|
# This check only matters for deployer branches and when DPL_TERMINATE_TESTS=1,
|
||||||
|
# because we're filtering non-deployer jobs.
|
||||||
|
if [[ "$__DPL_TERMINATE_EARLY_ELIGIBLE" == "1" ]] && [[ "$DPL_TERMINATE_TESTS" == "1" ]]; then
|
||||||
|
# Assume that some job received the trigger, so mark this for early termination
|
||||||
|
__DPL_TRY_TERMINATE_EARLY=1;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$__DPL_TRY_TERMINATE_EARLY" == "1" ]] && [[ "$__DPL_ACTIVE" != "1" ]]; then
|
||||||
|
echo "Deployer is active in another job";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$__DPL_TRY_TERMINATE_EARLY" != "1" ]] && [[ "$__DPL_ACTIVE" != "1" ]]; then
|
||||||
|
echo "Deployer is not active";
|
||||||
|
fi;
|
190
deployer/travis/deployer_build.sh
Normal file
190
deployer/travis/deployer_build.sh
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# Build Script
|
||||||
|
#
|
||||||
|
# Builds the required targets depending on which sub-modules are enabled
|
||||||
|
|
||||||
|
if [[ "$__DPL_FTP_ACTIVE" == "1" ]] || [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then
|
||||||
|
if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]]; then
|
||||||
|
echo "Building Debian package(s)"
|
||||||
|
|
||||||
|
sudo apt-get install devscripts debhelper fakeroot secure-delete expect;
|
||||||
|
|
||||||
|
# Build source packages first, since they zip up the entire source folder,
|
||||||
|
# binaries and all
|
||||||
|
if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then
|
||||||
|
. ../debian_template.sh main;
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ..; # repo root
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" == "1" ]]; then
|
||||||
|
echo "Building main source Debian package";
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn debuild -S -us -uc;
|
||||||
|
expect "continue anyway? (y/n)"
|
||||||
|
send "y\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then
|
||||||
|
echo "Building main binary Debian package";
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn debuild -us -uc;
|
||||||
|
expect "continue anyway? (y/n)"
|
||||||
|
send "y\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
fi;
|
||||||
|
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Also an asset package
|
||||||
|
if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then
|
||||||
|
. ../debian_template.sh asset;
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ../assets;
|
||||||
|
|
||||||
|
# make sure the asset files exist, download them if they don't
|
||||||
|
#echo "Checking asset files for asset Debian package";
|
||||||
|
#debuild -T build;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" == "1" ]]; then
|
||||||
|
echo "Building asset source Debian package";
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn debuild -S -us -uc;
|
||||||
|
expect "continue anyway? (y/n)"
|
||||||
|
send "y\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then
|
||||||
|
echo "Building asset binary Debian package";
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn debuild -us -uc;
|
||||||
|
expect "continue anyway? (y/n)"
|
||||||
|
send "y\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
fi;
|
||||||
|
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Now sign our packages
|
||||||
|
if [[ "$DPL_PGP_KEY_PRIVATE" != "" ]] && [[ "$DPL_PGP_KEY_PASSPHRASE" != "" ]]; then
|
||||||
|
# Get the key to sign
|
||||||
|
# Do this AFTER debuild so that we can specify the passphrase in command line
|
||||||
|
echo "$DPL_PGP_KEY_PRIVATE" | base64 --decode > key.asc;
|
||||||
|
echo "$DPL_PGP_KEY_PASSPHRASE" > phrase.txt;
|
||||||
|
gpg --import key.asc;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then
|
||||||
|
echo "Signing main package(s)";
|
||||||
|
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
$PACKAGEDBGFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGENIGHTLYDBGFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHDBGFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYDBGFILENAME
|
||||||
|
);
|
||||||
|
|
||||||
|
# Main packages are in parent of root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ../..; # parent of repo root
|
||||||
|
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in ./$n*.changes; do
|
||||||
|
debsign --no-re-sign -p"gpg --passphrase-file $OLDPWD/phrase.txt --batch" "$f";
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then
|
||||||
|
echo "Signing asset package(s)";
|
||||||
|
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
)
|
||||||
|
|
||||||
|
# Asset packages are in root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ..; # repo root
|
||||||
|
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in ./$n*.changes; do
|
||||||
|
debsign --no-re-sign -p"gpg --passphrase-file $OLDPWD/phrase.txt --batch" "$f";
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Delete the keys :eyes:
|
||||||
|
srm key.asc;
|
||||||
|
srm phrase.txt;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# all other OSes
|
||||||
|
if [[ "$TRAVIS_OS_NAME" != "linux" ]]; then
|
||||||
|
#
|
||||||
|
# Check for binary building
|
||||||
|
#
|
||||||
|
if [[ "$_DPL_BINARY" == "1" ]]; then
|
||||||
|
echo "Building a Binary";
|
||||||
|
make -k;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for package building
|
||||||
|
#
|
||||||
|
if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then
|
||||||
|
echo "Building a Package";
|
||||||
|
|
||||||
|
# Make an OSX package; superuser is required for library bundling
|
||||||
|
#
|
||||||
|
# HACK: OSX packaging can't write libraries to .app package unless we're superuser
|
||||||
|
# because the original library files don't have WRITE permission
|
||||||
|
# Bug may be sidestepped by using CHMOD_BUNDLE_ITEMS=TRUE
|
||||||
|
# But I don't know where this is set. Not `cmake -D...` because this var is ignored.
|
||||||
|
# https://cmake.org/Bug/view.php?id=9284
|
||||||
|
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||||
|
sudo make -k package;
|
||||||
|
else
|
||||||
|
# Some day, when Windows is supported, we'll just make a standard package
|
||||||
|
make -k package;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
105
deployer/travis/deployer_defaults.sh
Normal file
105
deployer/travis/deployer_defaults.sh
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# Default Variables
|
||||||
|
#
|
||||||
|
# Here are all of the user-set variables used by Deployer.
|
||||||
|
# See the "Cross-platform deployment" page on SRB2 Wiki for documentation.
|
||||||
|
|
||||||
|
# Core Parameters
|
||||||
|
: ${DPL_ENABLED} # Enable Deployer behavior; must be set for any deployment activity
|
||||||
|
: ${DPL_TAG_ENABLED} # Trigger Deployer for all tag releases
|
||||||
|
: ${DPL_JOB_ENABLE_ALL} # Enable all jobs for deployment
|
||||||
|
: ${DPL_TERMINATE_TESTS} # Terminate all build test jobs (used in .travis.yml)
|
||||||
|
: ${DPL_TRIGGER} # Use a [word] in the commit message to trigger Deployer
|
||||||
|
: ${DPL_JOBNAMES} # Trigger Deployer by job name
|
||||||
|
: ${DPL_OSNAMES} # Trigger Deployer by OS name (osx,linux)
|
||||||
|
: ${DPL_BRANCHES} # Trigger Deployer by git branch name
|
||||||
|
|
||||||
|
# Job Parameters
|
||||||
|
: ${_DPL_JOB_ENABLED} # Enable Deployer for this specific job. DPL_ENABLED must be set too.
|
||||||
|
: ${_DPL_JOB_NAME} # Identifier for the job, used for logging and trigger word matching
|
||||||
|
: ${_DPL_FTP_TARGET} # Deploy to FTP
|
||||||
|
: ${_DPL_DPUT_TARGET} # Deploy to DPUT
|
||||||
|
: ${_DPL_PACKAGE_SOURCE} # Build packages into a Source distribution. Linux only.
|
||||||
|
: ${_DPL_PACKAGE_BINARY} # Build packages into a Binary distribution.
|
||||||
|
: ${_DPL_PACKAGE_MAIN:=1} # Build main installation package. Linux only; OS X assumes this.
|
||||||
|
: ${_DPL_PACKAGE_ASSET} # Build asset installation package. Linux only.
|
||||||
|
|
||||||
|
# Asset File Parameters
|
||||||
|
: ${ASSET_ARCHIVE_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-assets.7z}
|
||||||
|
: ${ASSET_ARCHIVE_OPTIONAL_PATH:=https://github.com/mazmazz/SRB2/releases/download/SRB2_assets/SRB2-v2122-optional-assets.7z}
|
||||||
|
: ${ASSET_FILES_HASHED:=srb2.srb zones.dta player.dta rings.dta patch.dta}
|
||||||
|
: ${ASSET_FILES_DOCS:=README.txt LICENSE.txt LICENSE-3RD-PARTY.txt}
|
||||||
|
: ${ASSET_FILES_OPTIONAL_GET:=0}
|
||||||
|
|
||||||
|
# FTP Parameters
|
||||||
|
: ${DPL_FTP_PROTOCOL}
|
||||||
|
: ${DPL_FTP_USER}
|
||||||
|
: ${DPL_FTP_PASS}
|
||||||
|
: ${DPL_FTP_HOSTNAME}
|
||||||
|
: ${DPL_FTP_PORT}
|
||||||
|
: ${DPL_FTP_PATH}
|
||||||
|
|
||||||
|
# DPUT Parameters
|
||||||
|
: ${DPL_DPUT_DOMAIN:=ppa.launchpad.net}
|
||||||
|
: ${DPL_DPUT_METHOD:=sftp}
|
||||||
|
: ${DPL_DPUT_INCOMING}
|
||||||
|
: ${DPL_DPUT_LOGIN:=anonymous}
|
||||||
|
: ${DPL_SSH_KEY_PRIVATE} # Base64-encoded private key file. Used to sign repository uploads
|
||||||
|
: ${DPL_SSH_KEY_PASSPHRASE} # Decodes the private key file.
|
||||||
|
|
||||||
|
# Package Parameters
|
||||||
|
: ${PACKAGE_NAME:=srb2}
|
||||||
|
: ${PACKAGE_VERSION:=2.1.23}
|
||||||
|
: ${PACKAGE_SUBVERSION} # Highly recommended to set this to reflect the distro series target (e.g., ~18.04bionic)
|
||||||
|
: ${PACKAGE_REVISION} # Defaults to UTC timestamp
|
||||||
|
: ${PACKAGE_INSTALL_PATH:=/usr/games/SRB2}
|
||||||
|
: ${PACKAGE_LINK_PATH:=/usr/games}
|
||||||
|
: ${PACKAGE_DISTRO:=trusty}
|
||||||
|
: ${PACKAGE_URGENCY:=high}
|
||||||
|
: ${PACKAGE_NAME_EMAIL:=Sonic Team Junior <stjr@srb2.org>}
|
||||||
|
: ${PACKAGE_GROUP_NAME_EMAIL:=Sonic Team Junior <stjr@srb2.org>}
|
||||||
|
: ${PACKAGE_WEBSITE:=<http://www.srb2.org>}
|
||||||
|
|
||||||
|
: ${PACKAGE_ASSET_MINVERSION:=2.1.21} # Number this the version BEFORE the actual required version, because we do a > check
|
||||||
|
: ${PACKAGE_ASSET_MAXVERSION:=2.1.24} # Number this the version AFTER the actual required version, because we do a < check
|
||||||
|
|
||||||
|
: ${PROGRAM_NAME:=Sonic Robo Blast 2}
|
||||||
|
: ${PROGRAM_VENDOR:=Sonic Team Junior}
|
||||||
|
: ${PROGRAM_VERSION:=2.1.23}
|
||||||
|
: ${PROGRAM_DESCRIPTION:=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.}
|
||||||
|
: ${PROGRAM_FILENAME:=srb2}
|
||||||
|
|
||||||
|
: ${DPL_PGP_KEY_PRIVATE} # Base64-encoded private key file. Used to sign Debian packages
|
||||||
|
: ${DPL_PGP_KEY_PASSPHRASE} # Decodes the private key file.
|
||||||
|
|
||||||
|
# Export Asset and Package Parameters for envsubst templating
|
||||||
|
|
||||||
|
export ASSET_ARCHIVE_PATH="${ASSET_ARCHIVE_PATH}"
|
||||||
|
export ASSET_ARCHIVE_OPTIONAL_PATH="${ASSET_ARCHIVE_OPTIONAL_PATH}"
|
||||||
|
export ASSET_FILES_HASHED="${ASSET_FILES_HASHED}"
|
||||||
|
export ASSET_FILES_DOCS="${ASSET_FILES_DOCS}"
|
||||||
|
export ASSET_FILES_OPTIONAL_GET="${ASSET_FILES_OPTIONAL_GET}"
|
||||||
|
|
||||||
|
export PACKAGE_NAME="${PACKAGE_NAME}"
|
||||||
|
export PACKAGE_VERSION="${PACKAGE_VERSION}"
|
||||||
|
export PACKAGE_SUBVERSION="${PACKAGE_SUBVERSION}" # in case we have this
|
||||||
|
export PACKAGE_REVISION="${PACKAGE_REVISION}"
|
||||||
|
export PACKAGE_ASSET_MINVERSION="${PACKAGE_ASSET_MINVERSION}"
|
||||||
|
export PACKAGE_ASSET_MAXVERSION="${PACKAGE_ASSET_MAXVERSION}"
|
||||||
|
export PACKAGE_INSTALL_PATH="${PACKAGE_INSTALL_PATH}"
|
||||||
|
export PACKAGE_LINK_PATH="${PACKAGE_LINK_PATH}"
|
||||||
|
export PACKAGE_DISTRO="${PACKAGE_DISTRO}"
|
||||||
|
export PACKAGE_URGENCY="${PACKAGE_URGENCY}"
|
||||||
|
export PACKAGE_NAME_EMAIL="${PACKAGE_NAME_EMAIL}"
|
||||||
|
export PACKAGE_GROUP_NAME_EMAIL="${PACKAGE_GROUP_NAME_EMAIL}"
|
||||||
|
export PACKAGE_WEBSITE="${PACKAGE_WEBSITE}"
|
||||||
|
|
||||||
|
export PROGRAM_NAME="${PROGRAM_NAME}"
|
||||||
|
export PROGRAM_VERSION="${PROGRAM_VERSION}"
|
||||||
|
export PROGRAM_DESCRIPTION="${PROGRAM_DESCRIPTION}"
|
||||||
|
export PROGRAM_FILENAME="${PROGRAM_FILENAME}"
|
||||||
|
|
||||||
|
# This file is called in debian_template.sh, so mark our completion so we don't run it again
|
||||||
|
__DEBIAN_PARAMETERS_INITIALIZED=1
|
133
deployer/travis/deployer_dput.sh
Normal file
133
deployer/travis/deployer_dput.sh
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# DPUT uploader (e.g., Launchpad PPA)
|
||||||
|
#
|
||||||
|
|
||||||
|
if [[ "$__DPL_DPUT_ACTIVE" == "1" ]]; then
|
||||||
|
# Install APT dependencies
|
||||||
|
# paramiko required for ssh
|
||||||
|
sudo apt-get install python-paramiko expect dput; # python-pip
|
||||||
|
#pip install paramiko;
|
||||||
|
|
||||||
|
# Output the DPUT config
|
||||||
|
# Dput only works if you're using secure FTP, so that's what we default to.
|
||||||
|
cat > "./dput.cf" << EOM
|
||||||
|
[deployer]
|
||||||
|
fqdn = ${DPL_DPUT_DOMAIN}
|
||||||
|
method = ${DPL_DPUT_METHOD}
|
||||||
|
incoming = ${DPL_DPUT_INCOMING}
|
||||||
|
login = ${DPL_DPUT_LOGIN}
|
||||||
|
allow_unsigned_uploads = 0
|
||||||
|
EOM
|
||||||
|
|
||||||
|
# Output SSH config
|
||||||
|
# Don't let SSH prompt us for untrusted hosts
|
||||||
|
cat >> "./ssh_config" << EOM
|
||||||
|
|
||||||
|
Host *
|
||||||
|
StrictHostKeyChecking no
|
||||||
|
UserKnownHostsFile=/dev/null
|
||||||
|
PubKeyAuthentication yes
|
||||||
|
IdentityFile ${PWD}/key.private
|
||||||
|
IdentitiesOnly yes
|
||||||
|
EOM
|
||||||
|
sudo sh -c "cat < ${PWD}/ssh_config >> /etc/ssh/ssh_config";
|
||||||
|
|
||||||
|
# Get the private key
|
||||||
|
echo "$DPL_SSH_KEY_PRIVATE" | base64 --decode > key.private;
|
||||||
|
chmod 700 ./key.private;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
$PACKAGEDBGFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGENIGHTLYDBGFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHDBGFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYDBGFILENAME
|
||||||
|
);
|
||||||
|
|
||||||
|
# Main packages are in parent of root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ../..;
|
||||||
|
|
||||||
|
# Enter passphrase if required
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in $n*.changes; do
|
||||||
|
# Binary builds also generate source builds, so exclude the source
|
||||||
|
# builds if desired
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then
|
||||||
|
if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then
|
||||||
|
continue;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn dput -c "${OLDPWD}/dput.cf" deployer "$f";
|
||||||
|
expect "Enter passphrase for key"
|
||||||
|
send "${DPL_SSH_KEY_PASSPHRASE}\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
# Go back to [repo]/build folder
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
)
|
||||||
|
|
||||||
|
# Asset packages are in root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ..;
|
||||||
|
|
||||||
|
# Enter passphrase if required
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in $n*.changes; do
|
||||||
|
# Binary builds also generate source builds, so exclude the source
|
||||||
|
# builds if desired
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then
|
||||||
|
if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then
|
||||||
|
continue;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
expect <(cat <<EOD
|
||||||
|
spawn dput -c "${OLDPWD}/dput.cf" deployer "$f";
|
||||||
|
expect "Enter passphrase for key"
|
||||||
|
send "${DPL_SSH_KEY_PASSPHRASE}\r"
|
||||||
|
interact
|
||||||
|
EOD
|
||||||
|
);
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
# Go back to [repo]/build folder
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
srm ./key.private;
|
||||||
|
fi;
|
137
deployer/travis/deployer_ftp.sh
Normal file
137
deployer/travis/deployer_ftp.sh
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Deployer for Travis-CI
|
||||||
|
# FTP Uploader
|
||||||
|
#
|
||||||
|
# Package files are uploaded to, e.g., ftp://username:password@example.com:21/path/to/upload/STJr/SRB2/master/460873812-151.1
|
||||||
|
# With file `commit.txt` and folder(s) `bin` and `package`
|
||||||
|
#
|
||||||
|
# Set these environment variables in your Travis-CI settings, where they are stored securely.
|
||||||
|
# See other shell scripts for more options.
|
||||||
|
#
|
||||||
|
# DPL_FTP_PROTOCOL = ftp (ftp or sftp or ftps or however your FTP URI begins)
|
||||||
|
# DPL_FTP_USER = username
|
||||||
|
# DPL_FTP_PASS = password
|
||||||
|
# DPL_FTP_HOSTNAME = example.com
|
||||||
|
# DPL_FTP_PORT = 21
|
||||||
|
# DPL_FTP_PATH = path/to/upload (do not add trailing slash)
|
||||||
|
|
||||||
|
if [[ "$__DPL_FTP_ACTIVE" == "1" ]]; then
|
||||||
|
if [[ "$TRAVIS_JOB_NAME" != "" ]]; then
|
||||||
|
JOBNAME=$TRAVIS_JOB_NAME;
|
||||||
|
else
|
||||||
|
if [[ "$_DPL_JOB_NAME" != "" ]]; then
|
||||||
|
JOBNAME=$_DPL_JOB_NAME;
|
||||||
|
else
|
||||||
|
JOBNAME=$TRAVIS_OS_NAME;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# Generate commit.txt file
|
||||||
|
echo "Travis-CI Build $TRAVIS_OS_NAME - $TRAVIS_REPO_SLUG/$TRAVIS_BRANCH - $TRAVIS_JOB_NUMBER - $JOBNAME" > "commit.txt";
|
||||||
|
echo "Job ID $TRAVIS_JOB_ID" >> "commit.txt";
|
||||||
|
echo "" >> "commit.txt";
|
||||||
|
echo "Commit $TRAVIS_COMMIT" >> "commit.txt";
|
||||||
|
echo "$TRAVIS_COMMIT_MESSAGE" >> "commit.txt";
|
||||||
|
echo "" >> "commit.txt";
|
||||||
|
|
||||||
|
# Initialize FTP parameters
|
||||||
|
if [[ "$DPL_FTP_PORT" == "" ]]; then
|
||||||
|
DPL_FTP_PORT=21;
|
||||||
|
fi;
|
||||||
|
if [[ "$DPL_FTP_PROTOCOL" == "" ]]; then
|
||||||
|
DPL_FTP_PROTOCOL=ftp;
|
||||||
|
fi;
|
||||||
|
__DPL_FTP_LOCATION=$DPL_FTP_PROTOCOL://$DPL_FTP_HOSTNAME:$DPL_FTP_PORT/$DPL_FTP_PATH/$TRAVIS_REPO_SLUG/$TRAVIS_BRANCH/$TRAVIS_JOB_ID-$TRAVIS_JOB_NUMBER-$JOBNAME;
|
||||||
|
|
||||||
|
# Upload to FTP!
|
||||||
|
echo "Uploading to FTP...";
|
||||||
|
curl --ftp-create-dirs -T "commit.txt" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/commit.txt";
|
||||||
|
|
||||||
|
if [[ "$__DPL_DEBIAN_ACTIVE" == "1" ]]; then
|
||||||
|
if [[ "$_DPL_PACKAGE_MAIN" == "1" ]]; then
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
PACKAGEDBGFILENAME=${PACKAGE_NAME}-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYDBGFILENAME=${PACKAGE_NAME}-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHDBGFILENAME=${PACKAGE_NAME}-patch-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYDBGFILENAME=${PACKAGE_NAME}-patch-nightly-dbg_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
$PACKAGEDBGFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGENIGHTLYDBGFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHDBGFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYDBGFILENAME
|
||||||
|
);
|
||||||
|
|
||||||
|
# Main packages are in parent of root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ../..;
|
||||||
|
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in ./$n*; do
|
||||||
|
# Binary builds also generate source builds, so exclude the source
|
||||||
|
# builds if desired
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then
|
||||||
|
if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then
|
||||||
|
continue;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
curl --ftp-create-dirs -T "$f" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/package/main/$f";
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
# Go back to [repo]/build folder
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_ASSET" == "1" ]]; then
|
||||||
|
PACKAGEFILENAME=${PACKAGE_NAME}-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGENIGHTLYFILENAME=${PACKAGE_NAME}-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHFILENAME=${PACKAGE_NAME}-patch-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
#PACKAGEPATCHNIGHTLYFILENAME=${PACKAGE_NAME}-patch-nightly-data_${PACKAGE_VERSION}${PACKAGE_SUBVERSION}${PACKAGE_REVISION};
|
||||||
|
|
||||||
|
PACKAGEFILENAMES=(
|
||||||
|
$PACKAGEFILENAME
|
||||||
|
#$PACKAGENIGHTLYFILENAME
|
||||||
|
#$PACKAGEPATCHFILENAME
|
||||||
|
#$PACKAGEPATCHNIGHTLYFILENAME
|
||||||
|
)
|
||||||
|
|
||||||
|
# Asset packages are in root repo folder
|
||||||
|
OLDPWD=$PWD; # [repo]/build
|
||||||
|
cd ..;
|
||||||
|
|
||||||
|
for n in ${PACKAGEFILENAMES}; do
|
||||||
|
for f in ./$n*; do
|
||||||
|
# Binary builds also generate source builds, so exclude the source
|
||||||
|
# builds if desired
|
||||||
|
if [[ "$_DPL_PACKAGE_SOURCE" != "1" ]]; then
|
||||||
|
if [[ "$f" == *"_source"* ]] || [[ "$f" == *".tar.xz"* ]]; then
|
||||||
|
continue;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
curl --ftp-create-dirs -T "$f" -u $DPL_FTP_USER:$DPL_FTP_PASS "$__DPL_FTP_LOCATION/package/asset/$f";
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
# Go back to [repo]/build folder
|
||||||
|
cd $OLDPWD;
|
||||||
|
fi;
|
||||||
|
else
|
||||||
|
if [[ "$_DPL_BINARY" == "1" ]]; then
|
||||||
|
find bin -type f -exec curl -u $DPL_FTP_USER:$DPL_FTP_PASS --ftp-create-dirs -T {} $__DPL_FTP_LOCATION/{} \;;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [[ "$_DPL_PACKAGE_BINARY" == "1" ]]; then
|
||||||
|
sudo rm -r package/_CPack_Packages
|
||||||
|
find package -type f -exec curl -u $DPL_FTP_USER:$DPL_FTP_PASS --ftp-create-dirs -T {} $__DPL_FTP_LOCATION/{} \;;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi
|
|
@ -7,6 +7,7 @@ Here are the required DLLs, per build. For each architecture, copy all the binar
|
||||||
* libs\dll-binaries\[i686/x86_64]
|
* libs\dll-binaries\[i686/x86_64]
|
||||||
* libs\SDL2\[i686/x86_64]...\bin
|
* libs\SDL2\[i686/x86_64]...\bin
|
||||||
* libs\SDL2_mixer\[i686/x86_64]...\bin
|
* libs\SDL2_mixer\[i686/x86_64]...\bin
|
||||||
|
* libs\libopenmpt\[x86/x86_64]...\bin\mingw
|
||||||
|
|
||||||
and don't forget to build r_opengl.dll for srb2dd.
|
and don't forget to build r_opengl.dll for srb2dd.
|
||||||
|
|
||||||
|
@ -17,6 +18,7 @@ and don't forget to build r_opengl.dll for srb2dd.
|
||||||
* libs\dll-binaries\i686\mgwhelp.dll (depend for exchndl.dll)
|
* libs\dll-binaries\i686\mgwhelp.dll (depend for exchndl.dll)
|
||||||
* libs\SDL2\i686-w64-mingw32\bin\SDL2.dll
|
* libs\SDL2\i686-w64-mingw32\bin\SDL2.dll
|
||||||
* libs\SDL2_mixer\i686-w64-mingw32\bin\*.dll (get everything)
|
* libs\SDL2_mixer\i686-w64-mingw32\bin\*.dll (get everything)
|
||||||
|
* libs\libopenmpt\x86\bin\mingw\libopenmpt.dll
|
||||||
|
|
||||||
## srb2win, 64-bit
|
## srb2win, 64-bit
|
||||||
|
|
||||||
|
@ -25,6 +27,7 @@ and don't forget to build r_opengl.dll for srb2dd.
|
||||||
* libs\dll-binaries\x86_64\mgwhelp.dll (depend for exchndl.dll)
|
* libs\dll-binaries\x86_64\mgwhelp.dll (depend for exchndl.dll)
|
||||||
* libs\SDL2\x86_64-w64-mingw32\bin\SDL2.dll
|
* libs\SDL2\x86_64-w64-mingw32\bin\SDL2.dll
|
||||||
* libs\SDL2_mixer\x86_64-w64-mingw32\bin\*.dll (get everything)
|
* libs\SDL2_mixer\x86_64-w64-mingw32\bin\*.dll (get everything)
|
||||||
|
* libs\libopenmpt\x86_64\bin\mingw\libopenmpt.dll
|
||||||
|
|
||||||
## srb2dd, 32-bit
|
## srb2dd, 32-bit
|
||||||
|
|
||||||
|
|
16
libs/libgme.props
Normal file
16
libs/libgme.props
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Platform)' == 'Win32' OR '$(Platform)' == 'x64'">
|
||||||
|
<IncludePath>$(SolutionDir)libs\gme\include;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath Condition="'$(Platform)' == 'Win32'">$(SolutionDir)libs\gme\win32;$(LibraryPath)</LibraryPath>
|
||||||
|
<LibraryPath Condition="'$(Platform)' == 'x64'">$(SolutionDir)libs\gme\win64;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Platform)' == 'Win32' OR '$(Platform)' == 'x64'">
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>libgme.dll.a;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
16
libs/libopenmpt.props
Normal file
16
libs/libopenmpt.props
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<IncludePath>$(SolutionDir)libs\libopenmpt\inc;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath Condition="'$(Platform)' == 'Win32'">$(SolutionDir)libs\libopenmpt\lib\x86;$(LibraryPath)</LibraryPath>
|
||||||
|
<LibraryPath Condition="'$(Platform)' == 'x64'">$(SolutionDir)libs\libopenmpt\lib\x86_64;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>libopenmpt.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
26
libs/libopenmpt/LICENSE.txt
Normal file
26
libs/libopenmpt/LICENSE.txt
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Copyright (c) 2004-2019, OpenMPT contributors
|
||||||
|
Copyright (c) 1997-2003, Olivier Lapicque
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the OpenMPT project nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
28
libs/libopenmpt/Licenses/License.Vorbis.txt
Normal file
28
libs/libopenmpt/Licenses/License.Vorbis.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Copyright (c) 2002-2018 Xiph.org Foundation
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of the Xiph.org Foundation nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
175
libs/libopenmpt/Licenses/License.mpg123.Authors.txt
Normal file
175
libs/libopenmpt/Licenses/License.mpg123.Authors.txt
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
This is an attempt to give credit to the people who contributed in some way to the mpg123 project.
|
||||||
|
There are names and email addresses listed. Please use these addresses only to contact contributors with some question about their mpg123 contribution.
|
||||||
|
You are explicitly not allowed to send them unwanted business offers or to question the quality of their sex life.
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Being on the list of contributing authors not necessarily means that there
|
||||||
|
is significant copyright in parts of the source code. There are obviously
|
||||||
|
contributions of differing complexity. I try to mention people who motivated
|
||||||
|
changes at least by suggesting some definite code changes, even if their
|
||||||
|
code did not enter the mpg123 source verbatim. Trivial changes like pointing
|
||||||
|
out ovbious syntax errors that make compilers cry do not land here.
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Current maintainers with various sorts of contributions:
|
||||||
|
Thomas Orgis <thomas@orgis.org>
|
||||||
|
Patrick Dehne <patrick@steidle.net>
|
||||||
|
Jonathan Yong <10walls@gmail.com>
|
||||||
|
Taihei Momma <tmkk@mac.com>
|
||||||
|
|
||||||
|
Co-initiator of the revived mpg123 project, but not that involved anymore:
|
||||||
|
Nicholas J Humfrey <njh@ecs.soton.ac.uk>
|
||||||
|
|
||||||
|
Special thanks go to Taihei, the person who keeps the assembly optimisations alive
|
||||||
|
and takes care of portability to OSX/iOS platforms.
|
||||||
|
|
||||||
|
Generic address pointing to the current maintainer (hopefully still works in future in case maintainership will change again): <maintainer@mpg123.org>
|
||||||
|
|
||||||
|
The creator: Michael Hipp (email: hippm@informatik.uni-tuebingen.de - please bother maintainers first)
|
||||||
|
|
||||||
|
Contributions/ideas Thomas Orgis era (includes backports from mhipp trunk):
|
||||||
|
|
||||||
|
Won-Kyu Park <wkpark@gmail.com>: patch to get rid of asm textrels (x86 PIC)
|
||||||
|
Michael Weiser <michaelweiser@users.sf.net>: update of coreaudio output to AudioComponents API
|
||||||
|
Bent Bisballe Nyeng <bbn@dynastrom.com>: patch for MPG123_NO_PEEK_END and MPG123_FORCE_SEEKABLE
|
||||||
|
Eric S. Raymond <esr@thyrsus.com>: man page fixes
|
||||||
|
Tobias Weber <tobiw@suprafluid.com>: patch for --disable-equalizer
|
||||||
|
Hans de Goede <j.w.r.degoede@gmail.com>: patch to skip APE tags
|
||||||
|
Stephan Vedder <stephan.vedder@gmail.com>: MSVC++ 2013 port update
|
||||||
|
Rajeev V. Pillai <rajeevvp@users.sf.net>: pointing out/patching issues in HTTP code and behaviour of mpg123 remote/terminal control
|
||||||
|
Jarno Lehtinen <lehtinen@sci.fi>: tinyalsa output
|
||||||
|
Anthony Wells <borgboyone@yahoo.com>: initial version of ID3v2 APIC patch
|
||||||
|
David Wohlferd <limegreensocks@yahoo.com>: Win32 WaveOut buffer destructor fix.
|
||||||
|
Mike Gorchak <mike.gorchak.qnx@gmail.com>: QNX native audio output (QSA)
|
||||||
|
Dan McGee <dpmcgee@gmail.com>: various patches (also for test suite)
|
||||||
|
Jonathan Yong (jon_y) <10walls@gmail.com>: win32 hacking, win32 wasapi audio.
|
||||||
|
Malcolm Boczek <MBoczek@terraindustries.com>: Common language runtime wrapper
|
||||||
|
Elbert Pol (TeLLie) <elbert.pol@gmail.com>: OS/2 port fixup
|
||||||
|
Jeroen Valkonet <jvalkon@xs4all.nl>: motivate pitch control, suggestive patch for pitch command in generic control interface
|
||||||
|
Andy Hefner <ahefner@gmail.com>: patch for that second UTF16 issue
|
||||||
|
Taihei Monma <tmkk@mac.com>: A whole lot of new/improved assembler code, including Altivec!
|
||||||
|
Christian Weisgerber <naddy@openbsd.org>, Brad Smith: sndio output
|
||||||
|
Patrick Dehne (P4tr3ck) <patrick@steidle.net>: more MSVC++ porting, patch to handle missing bit reservoirs
|
||||||
|
Thorsten Glaser <tg@mirbsd.de>: icy2utf8, suggest utf8 locale stuff
|
||||||
|
Dan Smith <dan@algenta.com>: ABI fixes for ensuring stack alignment (esp. for MinGW-built DLL with MSVC)
|
||||||
|
Michael Ryzhykh <mclroy@gmail.com>: mpg123.spec.in
|
||||||
|
Stefan Lenselink <Stefan@lenselink.org>: initial aRts output
|
||||||
|
Sergej Kvachonok <ravenexp@gmail.com>: win32 audio rewrite
|
||||||
|
Winston: SunOS-4.1.4/gcc-2.7.0 testing and suggestions for fixes (legacy Makefile, integer type headers)
|
||||||
|
Mika Tiainen: pointing out the fix for the UTF to ASCII filtering of tags to actually work
|
||||||
|
Nick Kurshev <nickols_k@mail.ru>: extended 3dnow (from mplayer)
|
||||||
|
Zuxy Meng <zuxy.meng@gmail.com>: SSE (from mplayer)
|
||||||
|
Honza <cundrak@quick.cz>: idea and prototype patch for ICY meta data support
|
||||||
|
Petr Baudis <pasky@ucw.cz>: patches: term sigcont, id3 display unicode fallback and condensed output
|
||||||
|
Petr Salinger <Petr.Salinger@seznam.cz>: i486 enhancement
|
||||||
|
mpdavig@users.sourceforge.net: linux-ppc-nas Makefile.legacy entry
|
||||||
|
Adrian Bacon <adrian.bacon@xs4all.nl>: patched decode_i586_dither (noise shaped float/int rounding)
|
||||||
|
Cool Feet Audio project <nutcase@dtfm.org>: realtime equalizer control
|
||||||
|
Steve Grundell <www@grundell.u-net.com>: clean stdout in control mode with stdout decoding
|
||||||
|
Romain Dolbeau <romain@dolbeau.org>: Altivec support (taken from mplayer)
|
||||||
|
higway <higway@mednet.md>: MMX Patch
|
||||||
|
Clemens Ladisch <clemens@ladisch.de>: ALSA 0.9/1.0 support
|
||||||
|
|
||||||
|
Debian Daniel Kobras <kobras@debian.org> era:
|
||||||
|
|
||||||
|
Steve Kemp <skx@debian.org>
|
||||||
|
Dan Olson <theoddone33@icculus.org>
|
||||||
|
Syuuhei Kashiyama <squash@mb.kcom.ne.jp>
|
||||||
|
Rupert Levene <rupert.debian@hotpop.com>
|
||||||
|
Andreas Dilger <adilger@turbolinux.com>
|
||||||
|
Erik B. Andersen <andersee@debian.org>
|
||||||
|
Chris Butler <chrisb@debian.org>
|
||||||
|
Martin Sjogren <md9ms@mdstud.chalmers.se>
|
||||||
|
Chet Hosey <chosey@budapress.com>
|
||||||
|
Roland Rosenfeld <roland@spinnaker.de>
|
||||||
|
|
||||||
|
|
||||||
|
Debian Colin Watson <cjwatson@debian.org> era:
|
||||||
|
|
||||||
|
Helge Deller <deller@gmx.de>
|
||||||
|
Chet Hosey <chosey@budapress.com>
|
||||||
|
Christopher C. Chimelis <chris@debian.org>
|
||||||
|
Roland Rosenfeld <roland@spinnaker.de>
|
||||||
|
Marcelo E. Magallon <mmagallo@debian.org>
|
||||||
|
|
||||||
|
|
||||||
|
Initial Debianers:
|
||||||
|
|
||||||
|
Tommi Virtanen <tv@debian.org>
|
||||||
|
Paul Haggart <phaggart@debian.org>
|
||||||
|
|
||||||
|
|
||||||
|
Contributions/ideas Michael Hipp era:
|
||||||
|
|
||||||
|
Mikko Tommila: DCT9
|
||||||
|
Oliver Fromme <oliver.fromme@heim3.tu-clausthal.de>
|
||||||
|
MPEG Software Simulation Group: reference decoder package
|
||||||
|
Tobias Bading: idea for DCT64 in subband synthesis from maplay package
|
||||||
|
Jeff Tsay and Mikko Tommila: MDCT36 from maplay package
|
||||||
|
Philipp Knirsch <phil@mpik-tueb.mpg.de>: DCT36/manual unroll idea
|
||||||
|
Thomas Woerner: SGI Audio
|
||||||
|
Damien Clermonte: HP-UX audio fixes
|
||||||
|
Niclas Lindstrom <nil@wineasy.se>: OS2 port
|
||||||
|
Stefan Bieschewski <stb@acm.org>: Pentium optimizations, decode_i586.s
|
||||||
|
Martin Denn <mdenn@unix-ag.uni-kl.de>: NAS port
|
||||||
|
Niklas Beisert <nbeisert@physik.tu-muenchen.de>: MPEG 2.5 tables
|
||||||
|
<mycroft@NetBSD.ORG> and <augustss@cs.chalmers.se>: NetBSD Patch(es)
|
||||||
|
Kevin Brintnall <kbrint@visi.com>: BSD patch
|
||||||
|
Tony Million: win32 port
|
||||||
|
Steven Tiger Lang: advanced shuffle
|
||||||
|
Eric B. Mitchell: esd port
|
||||||
|
Ryan R. Prosser <prosser@geocities.com>: esd port for Solaris
|
||||||
|
Andreas Neuhaus: initial generic control interface
|
||||||
|
|
||||||
|
(additionally fetched from changelog:)
|
||||||
|
|
||||||
|
Ralf Hildebrandt <R.Hildebrandt@TU-BS.DE>: audio_alib changes
|
||||||
|
<sms@moe.2bsd.com>: BSDOS 4.0 with gcc added to Makefile
|
||||||
|
Bertrand Petit <elrond@phoe.netdev.net>: frontend changes
|
||||||
|
Erik Mouw <J.A.K.Mouw@its.tudelft.nl>: SGI audio fix for non RAD machines
|
||||||
|
Daniel O'Connor <darius@guppy.dons.net.au>: freebsd-esd make-entry
|
||||||
|
D. Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>: enhanced head_check
|
||||||
|
Wilson, Jeff D <jeff.wilson@wilcom.com>: xterm-title
|
||||||
|
Robert Bihlmeyer <robbe@orcus.priv.at>: esd changes
|
||||||
|
Hannu Napari's <Hannu.Napari@hut.fi>: SGI audio patches
|
||||||
|
<Juergen.Schoew@unix-ag.uni-siegen.de>: native AIX support
|
||||||
|
<psst@euskalnet.net>: playlist patch
|
||||||
|
Gilles Zunino <Gilles.Zunino@hei.fupl.asso.fr>: SGI audio patches
|
||||||
|
Matthew Parslow <roy@alpha.alphalink.com.au>: esdserver patch
|
||||||
|
<dlux@dlux.sch.bme.hu>: equalizer patch (equalfile setting)
|
||||||
|
Ducroquet Erwan <ducroque@ufr-info-p7.ibp.fr>: HPUX/ALib support
|
||||||
|
Shane Wegner <shane@CM.NU>: genrepatch
|
||||||
|
Samuel Audet <guardia@step.polymtl.ca>: wav-File patch
|
||||||
|
"J. Dean Brederson" <jdb@cs.utah.edu>: SGI-RAD support
|
||||||
|
Chou Ye-chi <is84002@cis.nctu.edu.tw>: sajberplay/FreeBSD patch
|
||||||
|
Fabrice Bellard <bellard@email.enst.fr>: 486 optimizations
|
||||||
|
A. Hermansen <ahermans@vf.telia.no> and J. Kysela <perex@jcu.cz>: ALSA output
|
||||||
|
KIMURA Takuhiro <kim@hannah.ipc.miyakyo-u.ac.jp>: K6-3DNow
|
||||||
|
Petr Stehlik <stehlik@cas3.zlin.vutbr.cz>: MINT
|
||||||
|
Andy <andy@snoogie.demon.co.uk>: float2int speed up proposal
|
||||||
|
Brian Foutz <foutz@anise.ee.cornell.edu>: TK3Play
|
||||||
|
Thomas Niederreiter <tn@tarantel.rz.fh-muenchen.de>: RIFF header fix
|
||||||
|
Stefan Gybas <cab@studbox.uni-stuttgart.de>: m68k patch
|
||||||
|
Grant Erickson <eric0139@tc.umn.edu>: Linux PPC patch
|
||||||
|
Peter Berger <peterb@hoopoe.psc.edu>: BSDi patch
|
||||||
|
Henrik P Johnson <king@one.se>: HTTP auth
|
||||||
|
Steven Tiger Lang <tiger@tyger.org>: advanced shuffle
|
||||||
|
"Brian J. Swetland" <swetland@uiuc.edu>: front-end (remote) patch
|
||||||
|
<leo@zycad.com>
|
||||||
|
Tillmann Steinbrecher <tst@gmx.de>: shuffle patch
|
||||||
|
M.Stekelenburg <m.stekelenburg@student.utwente.nl>: i386-getbits
|
||||||
|
Antti Andreimann <anttix@cyberix.edu.ee>: outburst patch
|
||||||
|
Hur TaeSung <saturn@arari.snu.ac.kr>: 'http accept' patch
|
||||||
|
|
||||||
|
(from post-0.59 changes that yet have to go into new trunk:)
|
||||||
|
|
||||||
|
Hans Schwengeler <schweng@astro.unibas.ch>: audio_dec additions
|
||||||
|
Wojciech Barañski's Mp3Play (check the tools folder): Mp3Play frontend
|
||||||
|
Daniel Koukola: audio_oss.c patch
|
||||||
|
Munechika SUMIKAWA <sumikawa@ebina.hitachi.co.jp>: IPv6
|
||||||
|
TEMNOTA <temnota@kmv.ru>: HTTP,FTP patch/playlist fix
|
||||||
|
Peter Surda <shurdeek@panorama.sth.ac.at>: VBR patch
|
||||||
|
Ben <ben@blaukopf.com>: ARM startup time improvements
|
||||||
|
Dave MacKenzie <djm@pix.net>: init_output() patch
|
||||||
|
pasky's <pasky@ju.cz>: close-on-stop patch
|
772
libs/libopenmpt/Licenses/License.mpg123.txt
Normal file
772
libs/libopenmpt/Licenses/License.mpg123.txt
Normal file
|
@ -0,0 +1,772 @@
|
||||||
|
This is the file that contains the terms of use, copying, etc. for the mpg123 distribution package.
|
||||||
|
|
||||||
|
Main message, to include in "About ..." boxes, etc:
|
||||||
|
|
||||||
|
Copyright (c) 1995-2013 by Michael Hipp and others,
|
||||||
|
free software under the terms of the LGPL v2.1
|
||||||
|
|
||||||
|
There is an attempt to cover the actual list of authors in the AUTHORS file.
|
||||||
|
Project maintainer since 2006 is Thomas Orgis and many people have contributed
|
||||||
|
since the Michael Hipp era, but he stays the initial source and it would
|
||||||
|
be impractical to count them all individually, so it's "and others".
|
||||||
|
Source files contain the phrase "the mpg123 project" to the same effect
|
||||||
|
in their license boilerplate; especially those that were added after
|
||||||
|
maintainership changed. The person mainly responsible for the first version
|
||||||
|
is usually named in the phrase "initially written by ...".
|
||||||
|
|
||||||
|
All files in the distribution that don't carry a license note on their own are
|
||||||
|
licensed under the terms of the LGPL 2.1; exceptions may apply, especially to
|
||||||
|
files not in the official distribution but in the revision control repository.
|
||||||
|
|
||||||
|
The formal license text follows.
|
||||||
|
|
||||||
|
=======================
|
||||||
|
1. The LGPL version 2.1
|
||||||
|
=======================
|
||||||
|
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 2.1, February 1999
|
||||||
|
|
||||||
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the Lesser GPL. It also counts
|
||||||
|
as the successor of the GNU Library Public License, version 2, hence
|
||||||
|
the version number 2.1.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Lesser General Public License, applies to some
|
||||||
|
specially designated software packages--typically libraries--of the
|
||||||
|
Free Software Foundation and other authors who decide to use it. You
|
||||||
|
can use it too, but we suggest you first think carefully about whether
|
||||||
|
this license or the ordinary General Public License is the better
|
||||||
|
strategy to use in any particular case, based on the explanations below.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom of use,
|
||||||
|
not price. Our General Public Licenses are designed to make sure that
|
||||||
|
you have the freedom to distribute copies of free software (and charge
|
||||||
|
for this service if you wish); that you receive source code or can get
|
||||||
|
it if you want it; that you can change the software and use pieces of
|
||||||
|
it in new free programs; and that you are informed that you can do
|
||||||
|
these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
distributors to deny you these rights or to ask you to surrender these
|
||||||
|
rights. These restrictions translate to certain responsibilities for
|
||||||
|
you if you distribute copies of the library or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link other code with the library, you must provide
|
||||||
|
complete object files to the recipients, so that they can relink them
|
||||||
|
with the library after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with a two-step method: (1) we copyright the
|
||||||
|
library, and (2) we offer you this license, which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
To protect each distributor, we want to make it very clear that
|
||||||
|
there is no warranty for the free library. Also, if the library is
|
||||||
|
modified by someone else and passed on, the recipients should know
|
||||||
|
that what they have is not the original version, so that the original
|
||||||
|
author's reputation will not be affected by problems that might be
|
||||||
|
introduced by others.
|
||||||
|
|
||||||
|
Finally, software patents pose a constant threat to the existence of
|
||||||
|
any free program. We wish to make sure that a company cannot
|
||||||
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
restrictive license from a patent holder. Therefore, we insist that
|
||||||
|
any patent license obtained for a version of the library must be
|
||||||
|
consistent with the full freedom of use specified in this license.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the
|
||||||
|
ordinary GNU General Public License. This license, the GNU Lesser
|
||||||
|
General Public License, applies to certain designated libraries, and
|
||||||
|
is quite different from the ordinary General Public License. We use
|
||||||
|
this license for certain libraries in order to permit linking those
|
||||||
|
libraries into non-free programs.
|
||||||
|
|
||||||
|
When a program is linked with a library, whether statically or using
|
||||||
|
a shared library, the combination of the two is legally speaking a
|
||||||
|
combined work, a derivative of the original library. The ordinary
|
||||||
|
General Public License therefore permits such linking only if the
|
||||||
|
entire combination fits its criteria of freedom. The Lesser General
|
||||||
|
Public License permits more lax criteria for linking other code with
|
||||||
|
the library.
|
||||||
|
|
||||||
|
We call this license the "Lesser" General Public License because it
|
||||||
|
does Less to protect the user's freedom than the ordinary General
|
||||||
|
Public License. It also provides other free software developers Less
|
||||||
|
of an advantage over competing non-free programs. These disadvantages
|
||||||
|
are the reason we use the ordinary General Public License for many
|
||||||
|
libraries. However, the Lesser license provides advantages in certain
|
||||||
|
special circumstances.
|
||||||
|
|
||||||
|
For example, on rare occasions, there may be a special need to
|
||||||
|
encourage the widest possible use of a certain library, so that it becomes
|
||||||
|
a de-facto standard. To achieve this, non-free programs must be
|
||||||
|
allowed to use the library. A more frequent case is that a free
|
||||||
|
library does the same job as widely used non-free libraries. In this
|
||||||
|
case, there is little to gain by limiting the free library to free
|
||||||
|
software only, so we use the Lesser General Public License.
|
||||||
|
|
||||||
|
In other cases, permission to use a particular library in non-free
|
||||||
|
programs enables a greater number of people to use a large body of
|
||||||
|
free software. For example, permission to use the GNU C Library in
|
||||||
|
non-free programs enables many more people to use the whole GNU
|
||||||
|
operating system, as well as its variant, the GNU/Linux operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Although the Lesser General Public License is Less protective of the
|
||||||
|
users' freedom, it does ensure that the user of a program that is
|
||||||
|
linked with the Library has the freedom and the wherewithal to run
|
||||||
|
that program using a modified version of the Library.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, whereas the latter must
|
||||||
|
be combined with the library in order to run.
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library or other
|
||||||
|
program which contains a notice placed by the copyright holder or
|
||||||
|
other authorized party saying it may be distributed under the terms of
|
||||||
|
this Lesser General Public License (also called "this License").
|
||||||
|
Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also combine or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (1) uses at run time a
|
||||||
|
copy of the library already present on the user's computer system,
|
||||||
|
rather than copying library functions into the executable, and (2)
|
||||||
|
will operate properly with a modified version of the library, if
|
||||||
|
the user installs one, as long as the modified version is
|
||||||
|
interface-compatible with the version that the work was made with.
|
||||||
|
|
||||||
|
c) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
d) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
e) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the materials to be distributed need not include anything that is
|
||||||
|
normally distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties with
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Lesser General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
|
====================
|
||||||
|
2. The GPL version 2
|
||||||
|
====================
|
||||||
|
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
28
libs/libopenmpt/Licenses/License.ogg.txt
Normal file
28
libs/libopenmpt/Licenses/License.ogg.txt
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Copyright (c) 2002, Xiph.org Foundation
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of the Xiph.org Foundation nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
115
libs/libopenmpt/Licenses/License.zlib.txt
Normal file
115
libs/libopenmpt/Licenses/License.zlib.txt
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
ZLIB DATA COMPRESSION LIBRARY
|
||||||
|
|
||||||
|
zlib 1.2.11 is a general purpose data compression library. All the code is
|
||||||
|
thread safe. The data format used by the zlib library is described by RFCs
|
||||||
|
(Request for Comments) 1950 to 1952 in the files
|
||||||
|
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
|
||||||
|
rfc1952 (gzip format).
|
||||||
|
|
||||||
|
All functions of the compression library are documented in the file zlib.h
|
||||||
|
(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
|
||||||
|
of the library is given in the file test/example.c which also tests that
|
||||||
|
the library is working correctly. Another example is given in the file
|
||||||
|
test/minigzip.c. The compression library itself is composed of all source
|
||||||
|
files in the root directory.
|
||||||
|
|
||||||
|
To compile all files and run the test program, follow the instructions given at
|
||||||
|
the top of Makefile.in. In short "./configure; make test", and if that goes
|
||||||
|
well, "make install" should work for most flavors of Unix. For Windows, use
|
||||||
|
one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
|
||||||
|
make_vms.com.
|
||||||
|
|
||||||
|
Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
|
||||||
|
<info@winimage.com> for the Windows DLL version. The zlib home page is
|
||||||
|
http://zlib.net/ . Before reporting a problem, please check this site to
|
||||||
|
verify that you have the latest version of zlib; otherwise get the latest
|
||||||
|
version and check whether the problem still exists or not.
|
||||||
|
|
||||||
|
PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
|
||||||
|
|
||||||
|
Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
|
||||||
|
issue of Dr. Dobb's Journal; a copy of the article is available at
|
||||||
|
http://marknelson.us/1997/01/01/zlib-engine/ .
|
||||||
|
|
||||||
|
The changes made in version 1.2.11 are documented in the file ChangeLog.
|
||||||
|
|
||||||
|
Unsupported third party contributions are provided in directory contrib/ .
|
||||||
|
|
||||||
|
zlib is available in Java using the java.util.zip package, documented at
|
||||||
|
http://java.sun.com/developer/technicalArticles/Programming/compression/ .
|
||||||
|
|
||||||
|
A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
|
||||||
|
at CPAN (Comprehensive Perl Archive Network) sites, including
|
||||||
|
http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
|
||||||
|
|
||||||
|
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
|
||||||
|
available in Python 1.5 and later versions, see
|
||||||
|
http://docs.python.org/library/zlib.html .
|
||||||
|
|
||||||
|
zlib is built into tcl: http://wiki.tcl.tk/4610 .
|
||||||
|
|
||||||
|
An experimental package to read and write files in .zip format, written on top
|
||||||
|
of zlib by Gilles Vollant <info@winimage.com>, is available in the
|
||||||
|
contrib/minizip directory of zlib.
|
||||||
|
|
||||||
|
|
||||||
|
Notes for some targets:
|
||||||
|
|
||||||
|
- For Windows DLL versions, please see win32/DLL_FAQ.txt
|
||||||
|
|
||||||
|
- For 64-bit Irix, deflate.c must be compiled without any optimization. With
|
||||||
|
-O, one libpng test fails. The test works in 32 bit mode (with the -n32
|
||||||
|
compiler flag). The compiler bug has been reported to SGI.
|
||||||
|
|
||||||
|
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
|
||||||
|
when compiled with cc.
|
||||||
|
|
||||||
|
- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
|
||||||
|
necessary to get gzprintf working correctly. This is done by configure.
|
||||||
|
|
||||||
|
- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
|
||||||
|
other compilers. Use "make test" to check your compiler.
|
||||||
|
|
||||||
|
- gzdopen is not supported on RISCOS or BEOS.
|
||||||
|
|
||||||
|
- For PalmOs, see http://palmzlib.sourceforge.net/
|
||||||
|
|
||||||
|
|
||||||
|
Acknowledgments:
|
||||||
|
|
||||||
|
The deflate format used by zlib was defined by Phil Katz. The deflate and
|
||||||
|
zlib specifications were written by L. Peter Deutsch. Thanks to all the
|
||||||
|
people who reported problems and suggested various improvements in zlib; they
|
||||||
|
are too numerous to cite here.
|
||||||
|
|
||||||
|
Copyright notice:
|
||||||
|
|
||||||
|
(C) 1995-2017 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
Jean-loup Gailly Mark Adler
|
||||||
|
jloup@gzip.org madler@alumni.caltech.edu
|
||||||
|
|
||||||
|
If you use the zlib library in a product, we would appreciate *not* receiving
|
||||||
|
lengthy legal documents to sign. The sources are provided for free but without
|
||||||
|
warranty of any kind. The library has been entirely written by Jean-loup
|
||||||
|
Gailly and Mark Adler; it does not include third-party code.
|
||||||
|
|
||||||
|
If you redistribute modified sources, we would appreciate that you include in
|
||||||
|
the file ChangeLog history information documenting your changes. Please read
|
||||||
|
the FAQ for more information on the distribution of modified source versions.
|
90
libs/libopenmpt/SRB2NOTE-DEBIAN.md
Normal file
90
libs/libopenmpt/SRB2NOTE-DEBIAN.md
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
# libopenmpt Debian backport info
|
||||||
|
|
||||||
|
Backported libopenmpt 0.4.0 packages are available at ppa:stjr/srb2
|
||||||
|
for Ubuntu Disco, Cosmic, Bionic, Xenial, and Trusty as of 2019/01/04.
|
||||||
|
|
||||||
|
Debian Jessie users should use the Trusty package. Later Debian versions
|
||||||
|
may use Disco or another working version.
|
||||||
|
|
||||||
|
* libopenmpt 0.4.0 source package: http://archive.ubuntu.com/ubuntu/pool/universe/libo/libopenmpt/libopenmpt_0.4.0-1.dsc
|
||||||
|
|
||||||
|
# Backporting from Disco to Cosmic and Bionic
|
||||||
|
|
||||||
|
Cosmic and Bionic require no changes to the source package. They have
|
||||||
|
the prerequisite `debhelper` and `dpkg-dev` versions, a matching
|
||||||
|
`automake` version (1.15), as well as G++ > 5.
|
||||||
|
|
||||||
|
Use the `backportpackage` script to automatically tag the package to
|
||||||
|
Cosmic and Bionic, then upload to PPA:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt install ubuntu-dev-tools
|
||||||
|
export UBUMAIL="John Doe <email@com.com>" # Name and email associated with your PGP sign key
|
||||||
|
backportpackage -d [cosmic/bionic] -u [path-to-ppa] --key=[key-fingerprint] http://archive.ubuntu.com/ubuntu/pool/universe/libo/libopenmpt/libopenmpt_0.4.0-1.dsc
|
||||||
|
```
|
||||||
|
|
||||||
|
# Backporting from Disco to Xenial
|
||||||
|
|
||||||
|
Download the package:
|
||||||
|
|
||||||
|
```
|
||||||
|
dget http://archive.ubuntu.com/ubuntu/pool/universe/libo/libopenmpt/libopenmpt_0.4.0-1.dsc
|
||||||
|
```
|
||||||
|
|
||||||
|
Xenial has an earlier `debhelper` version, but the rest of the prerequisites
|
||||||
|
are available.
|
||||||
|
|
||||||
|
The required changes (see patch `debian/libopenmpt-0.4.0-xenial-backport.diff` in this directory):
|
||||||
|
|
||||||
|
* `debian/control`
|
||||||
|
* Add `automake` to Build-Depends
|
||||||
|
* Change `debhelper` version to `(>= 9.0~)`
|
||||||
|
* `debian/compat`
|
||||||
|
* Change to `10`
|
||||||
|
|
||||||
|
Then run these commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
dch -i # Edit the changelog; make sure the Name and email match the PGP sign key and that the changelog targets xenial
|
||||||
|
debuild -s -d -k0x[key-fingerprint] # Build the updated package
|
||||||
|
dput [path-to-ppa] [path-to-changes-file] # Upload to PPA
|
||||||
|
```
|
||||||
|
|
||||||
|
# Backporting from Disco to Trusty
|
||||||
|
|
||||||
|
Download the package:
|
||||||
|
|
||||||
|
```
|
||||||
|
dget http://archive.ubuntu.com/ubuntu/pool/universe/libo/libopenmpt/libopenmpt_0.4.0-1.dsc
|
||||||
|
```
|
||||||
|
|
||||||
|
Trusty requires more changes because it uses G++ 4.8 whereas the source
|
||||||
|
package expects G++ >= 5. Automake is an earlier version as well --
|
||||||
|
1.14 vs 1.15 -- so `autoreconf` needs to be run at build time.
|
||||||
|
|
||||||
|
The required changes (see patch `debian/libopenmpt-0.4.0-trusty-backport.diff` in this directory):
|
||||||
|
|
||||||
|
* `debian/control`
|
||||||
|
* Add `automake` and `libtool` to Build-Depends
|
||||||
|
* Change `debhelper` version to `(>= 9.0~)`
|
||||||
|
* Change `dpkg-dev` version to `(>= 1.17.0)`
|
||||||
|
* `debian/compat`
|
||||||
|
* Change to `10`
|
||||||
|
* `debian/rules`
|
||||||
|
* Under `override_dh_auto_configure`, input this line as the first command:
|
||||||
|
`autoreconf --force --install`
|
||||||
|
* This re-configures the package for Automake 1.14
|
||||||
|
* `debian/libopenmpt-modplug1.symbols` and `debian/libopenmpt0.symbols`
|
||||||
|
* Delete these files
|
||||||
|
* The C++ ABI for G++ 4.8 is incompatible with G++ >= 5, so the
|
||||||
|
generated symbols will be different than the expected symbols
|
||||||
|
in the `*.symbols` files. Deleting these files will skip the
|
||||||
|
symbol check.
|
||||||
|
|
||||||
|
Then run these commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
dch -i # Edit the changelog; make sure the Name and email match the PGP sign key and that the changelog targets trusty
|
||||||
|
debuild -s -d -k0x[key-fingerprint] # Build the updated package
|
||||||
|
dput [path-to-ppa] [path-to-changes-file] # Upload to PPA
|
||||||
|
```
|
54
libs/libopenmpt/SRB2NOTE.md
Normal file
54
libs/libopenmpt/SRB2NOTE.md
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# libopenmpt mingw-w64 binary info
|
||||||
|
|
||||||
|
Current built version as of 2019/05/23 is 0.4.4+r11531.pkg
|
||||||
|
|
||||||
|
* mingw binaries (.dll): `bin/[x86 or x86_64]/mingw`
|
||||||
|
* mingw import libraries (.dll.a): `lib/[x86 or x86_64]/mingw`
|
||||||
|
|
||||||
|
# Building libopenmpt with mingw-w64
|
||||||
|
|
||||||
|
libopenmpt must be built from the Makefile / Android dev package in the
|
||||||
|
[Downloads page](https://lib.openmpt.org/libopenmpt/download/#all-downloads)
|
||||||
|
|
||||||
|
Use the mingw-w64 distributions from
|
||||||
|
[SourceForge](https://sourceforge.net/projects/mingw-w64/files/#readme).
|
||||||
|
|
||||||
|
You can download the appropriate 7-zip archive, extract to a folder of
|
||||||
|
your choice, remove any existing mingw directories from your PATH,
|
||||||
|
then call `mingw32-make.exe` from its direct location.
|
||||||
|
|
||||||
|
FOR LIBOPENMPT, YOU MUST USE A MINGW PACKAGE THAT SUPPORTS THE POSIX
|
||||||
|
THREADING MODEL! DO NOT COMPILE WITH A WIN32 THREADING MODEL!
|
||||||
|
|
||||||
|
I use GCC 7.3.0:
|
||||||
|
|
||||||
|
* [x86_64-posix-seh](https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.3.0/threads-posix/seh/x86_64-7.3.0-release-posix-seh-rt_v5-rev0.7z)
|
||||||
|
* [i686-posix-dwarf](https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-posix/dwarf/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.7z)
|
||||||
|
|
||||||
|
## x86 build instructions
|
||||||
|
|
||||||
|
```
|
||||||
|
set CFLAGS=-march=pentium -static-libgcc
|
||||||
|
set CXXFLAGS=-march=pentium -static-libgcc -static-libstdc++
|
||||||
|
set LDFLAGS=-Wl,--out-implib,bin/libopenmpt.dll.a -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,-Bdynamic,--no-whole-archive
|
||||||
|
|
||||||
|
cd [libopenmpt-make-src]
|
||||||
|
[x86-mingw-w64-bin]/mingw32-make.exe CONFIG=mingw64-win32
|
||||||
|
```
|
||||||
|
|
||||||
|
`libopenmpt.dll` and `libopenmpt.dll.a` will be built in the
|
||||||
|
`bin/` folder.
|
||||||
|
|
||||||
|
## x86_64 build instructions
|
||||||
|
|
||||||
|
```
|
||||||
|
set CFLAGS=-march=nocona -static-libgcc
|
||||||
|
set CXXFLAGS=-march=nocona -static-libgcc -static-libstdc++
|
||||||
|
set LDFLAGS=-Wl,--out-implib,bin/libopenmpt.dll.a -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,-Bdynamic,--no-whole-archive
|
||||||
|
|
||||||
|
cd [libopenmpt-make-src]
|
||||||
|
[x86_64-mingw-w64-bin]/mingw32-make.exe CONFIG=mingw64-win64
|
||||||
|
```
|
||||||
|
|
||||||
|
`libopenmpt.dll` and `libopenmpt.dll.a` will be built in the
|
||||||
|
`bin/` folder.
|
BIN
libs/libopenmpt/bin/x86/libopenmpt.dll
Normal file
BIN
libs/libopenmpt/bin/x86/libopenmpt.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86/mingw/libopenmpt.dll
Normal file
BIN
libs/libopenmpt/bin/x86/mingw/libopenmpt.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86/openmpt-mpg123.dll
Normal file
BIN
libs/libopenmpt/bin/x86/openmpt-mpg123.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86/openmpt-ogg.dll
Normal file
BIN
libs/libopenmpt/bin/x86/openmpt-ogg.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86/openmpt-vorbis.dll
Normal file
BIN
libs/libopenmpt/bin/x86/openmpt-vorbis.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86/openmpt-zlib.dll
Normal file
BIN
libs/libopenmpt/bin/x86/openmpt-zlib.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/libopenmpt.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/libopenmpt.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/mingw/libopenmpt.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/openmpt-mpg123.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/openmpt-ogg.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/openmpt-ogg.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/openmpt-vorbis.dll
Normal file
Binary file not shown.
BIN
libs/libopenmpt/bin/x86_64/openmpt-zlib.dll
Normal file
BIN
libs/libopenmpt/bin/x86_64/openmpt-zlib.dll
Normal file
Binary file not shown.
791
libs/libopenmpt/changelog.md
Normal file
791
libs/libopenmpt/changelog.md
Normal file
|
@ -0,0 +1,791 @@
|
||||||
|
|
||||||
|
Changelog {#changelog}
|
||||||
|
=========
|
||||||
|
|
||||||
|
For fully detailed change log, please see the source repository directly. This
|
||||||
|
is just a high-level summary.
|
||||||
|
|
||||||
|
### libopenmpt 0.4.4 (2019-04-07)
|
||||||
|
|
||||||
|
* [**Bug**] Channel VU meters were swapped.
|
||||||
|
|
||||||
|
* Startrekker: Clamp speed to 31 ticks per row.
|
||||||
|
* MTM: Ignore unused Exy commands on import. Command E5x (Set Finetune) is now
|
||||||
|
applied correctly.
|
||||||
|
* MOD: Sample swapping was always enabled since it has been separated from the
|
||||||
|
ProTracker 1/2 compatibility flag. Now it is always enabled for Amiga-style
|
||||||
|
modules and otherwise the old heuristic is used again.
|
||||||
|
|
||||||
|
* stb_vorbis: Update to v1.16 (2019-03-05).
|
||||||
|
|
||||||
|
### libopenmpt 0.4.3 (2019-02-11)
|
||||||
|
|
||||||
|
* [**Sec**] Possible crash due to null-pointer access when doing a portamento
|
||||||
|
from an OPL instrument to an empty instrument note map slot (r11348).
|
||||||
|
|
||||||
|
* [**Bug**] libopenmpt did not compile on Apple platforms in C++17 mode.
|
||||||
|
|
||||||
|
* IT: Various fixes for note-off + instrument number in Old Effects mode.
|
||||||
|
* MO3: Import IT row highlights as written by MO3 2.4.1.2 or newer. Required
|
||||||
|
for modules using modern tempo mode.
|
||||||
|
|
||||||
|
* miniz: Update to v2.0.8 (2018-09-19).
|
||||||
|
* stb_vorbis: Update to v1.15 (2019-02-07).
|
||||||
|
|
||||||
|
### libopenmpt 0.4.2 (2019-01-22)
|
||||||
|
|
||||||
|
* [**Sec**] DSM: Assertion failure during file parsing with debug STLs
|
||||||
|
(r11209).
|
||||||
|
* [**Sec**] J2B: Assertion failure during file parsing with debug STLs
|
||||||
|
(r11216).
|
||||||
|
|
||||||
|
* S3M: Allow volume change of OPL instruments after Note Cut.
|
||||||
|
|
||||||
|
### libopenmpt 0.4.1 (2019-01-06)
|
||||||
|
|
||||||
|
* [**Bug**] Binaries compiled for winold (Windows XP, Vista, 7, for CPUs
|
||||||
|
without SSE2 support) did not actually work on CPUs without SSE2 support.
|
||||||
|
* [**Bug**] libmodplug: Public symbols of the C++ API had `visibility=hidden`
|
||||||
|
set on non-MSVC systems, which made them not publicly accessible.
|
||||||
|
* [**Bug**] Project files for Windows 10 desktop builds on ARM and ARM64
|
||||||
|
(`build/vs2017win10`) were missing from Windows source package.
|
||||||
|
* [**Bug**] MSVC project files in Windows source package lacked additional
|
||||||
|
files required to build DLLs.
|
||||||
|
|
||||||
|
* MO3: Apply playback changes based on "ModPlug-made" header flag.
|
||||||
|
|
||||||
|
* minimp3: Update to commit e9df0760e94044caded36a55d70ab4152134adc5
|
||||||
|
(2018-12-23).
|
||||||
|
|
||||||
|
### libopenmpt 0.4.0 (2018-12-23)
|
||||||
|
|
||||||
|
* [**New**] libopenmpt now includes emulation of the OPL chip and thus plays
|
||||||
|
OPL instruments in S3M, C67 and MPTM files. OPL chip emulation volume can be
|
||||||
|
changed with the new ctl `render.opl.volume_factor`.
|
||||||
|
* [**New**] libopenmpt now supports CDFM / Composer 670 module files.
|
||||||
|
* [**New**] Autotools `configure` and plain `Makefile` now honor the variable
|
||||||
|
`CXXSTDLIB_PCLIBSPRIVATE` which serves the sole purpose of listing the
|
||||||
|
standard library (or libraries) required for static linking. The contents of
|
||||||
|
this variable will be put in `libopenmpt.pc` `Libs.private` and used for
|
||||||
|
nothing else. See \ref libopenmpt_c_staticlinking .
|
||||||
|
* [**New**] foo_openmpt: foo_openmpt now also works on Windows XP.
|
||||||
|
* [**New**] libopenmpt Emscripten builds now ship with MP3 support by
|
||||||
|
default, based on minimp3 by Lion (github.com/lieff).
|
||||||
|
* [**New**] libopenmpt: New ctl `play.at_end` can be used to change what
|
||||||
|
happens when the song end is reached:
|
||||||
|
* "fadeout": Fades the module out for a short while. Subsequent reads
|
||||||
|
after the fadeout will return 0 rendered frames. This is the default and
|
||||||
|
identical to the behaviour in previous libopenmpt versions.
|
||||||
|
* "continue": Returns 0 rendered frames when the song end is reached.
|
||||||
|
Subsequent reads will continue playing from the song start or loop
|
||||||
|
start. This can be used for custom loop logic, such as loop
|
||||||
|
auto-detection and longer fadeouts.
|
||||||
|
* "stop": Returns 0 rendered frames when the song end is reached.
|
||||||
|
Subsequent reads will return 0 rendered frames.
|
||||||
|
* [**New**] Add new metadata fields `"originaltype"` and `"originaltype_long"`
|
||||||
|
which allow more clearly reflecting what is going on with converted formats
|
||||||
|
like MO3 and GDM.
|
||||||
|
* [**New**] `Makefile` `CONFIG=emscripten` now can generate WebAssembly via
|
||||||
|
the additional option `EMSCRIPTEN_TARGET=wasm`.
|
||||||
|
* [**New**] Compiling for DOS is now experimentally supported via DJGPP GCC
|
||||||
|
7.2 or later.
|
||||||
|
|
||||||
|
* [**Change**] minimp3: Instead of the LGPL-2.1-licensed minimp3 by KeyJ,
|
||||||
|
libopenmpt now uses the CC0-1.0-licensed minimp3 by Lion (github.com/lieff)
|
||||||
|
as a fallback if libmpg123 is unavailable. The `USE_MINIMP3` `Makefile`
|
||||||
|
option is gone and minimp3 will be used automatically in the `Makefile`
|
||||||
|
build system if libmpg123 is not available.
|
||||||
|
* [**Change**] openmpt123: openmpt123 now rejects `--output-type` in `--ui`
|
||||||
|
and `--batch` modes and also rejects `--output` in `--render` mode. These
|
||||||
|
combinations of options really made no sense and were rather confusing.
|
||||||
|
* [**Change**] Android NDK build system now uses libc++ (`c++_shared`) instead
|
||||||
|
of GNU libstdc++ (`gnustl_shared`), as recommended by Android NDK r16b.
|
||||||
|
* [**Change**] xmp-openmpt: `openmpt-mpg123.dll` is no longer optional and
|
||||||
|
must be placed into the same directory as `xmp-openmpt.dll`.
|
||||||
|
* [**Change**] in_openmpt: `openmpt-mpg123.dll` is no longer optional and must
|
||||||
|
be placed either into the directory of the player itself or into the same
|
||||||
|
directory as `in_openmpt.dll`. This is dependent on how the player loads its
|
||||||
|
plugins. For WinAMP 5, `openmpt-mpg123.dll` needs to be in the directory
|
||||||
|
which contains `winamp.exe`. `in_openmpt.dll` needs to be in the `Plugins`
|
||||||
|
directory.
|
||||||
|
* [**Change**] foo_openmpt: foo_openmpt is now packaged as a fb2k-component
|
||||||
|
package for easier installation.
|
||||||
|
* [**Change**] When building libopenmpt with MinGW-w64, it is now recommended
|
||||||
|
to use the posix thread model (as opposed to the win32 threading model),
|
||||||
|
because the former does support std::mutex while the latter does not. When
|
||||||
|
building with win32 threading model with the Autotools build system, it is
|
||||||
|
recommended to provide the `mingw-std-threads` package. Building libopenmpt
|
||||||
|
with MinGW-w64 without any `std::thread`/`std::mutex` support is deprecated
|
||||||
|
and support for such configurations will be removed in libopenmpt 0.5.
|
||||||
|
* [**Change**] `Makefile` `CONFIG=emscripten` now has 4 `EMSCRIPTEN_TARGET=`
|
||||||
|
settings: `wasm` generates WebAssembly, `asmjs128m` generates asm.js with a
|
||||||
|
fixed size 128MB heap, `asmjs` generates asm.js with a fixed default size
|
||||||
|
heap (as of Emscripten 1.38.11, this amounts to 16MB), `js` generates
|
||||||
|
JavaScript with dynamic heap growth and with compatibility for older VMs.
|
||||||
|
* [**Change**] libmodplug: Update public headers to libmodplug 0.8.8.5. This
|
||||||
|
adds support for kind-of automatic MODPLUG_EXPORT decoration on Windows.
|
||||||
|
|
||||||
|
* [**Regression**] Support for Clang 3.4, 3.5 has been removed.
|
||||||
|
* [**Regression**] Building with Android NDK older than NDK r16b is not
|
||||||
|
supported any more.
|
||||||
|
* [**Regression**] Support for Emscripten versions older than 1.38.5 has been
|
||||||
|
removed.
|
||||||
|
* [**Regression**] Support for libmpg123 older than 1.14.0 has been removed.
|
||||||
|
* [**Regression**] Using MediaFoundation to decode MP3 samples is no longer
|
||||||
|
supported. Use libmpg123 or minimp3 instead.
|
||||||
|
* [**Regression**] libmodplug: Support for emulating libmodplug 0.8.7 API/ABI
|
||||||
|
has been removed.
|
||||||
|
|
||||||
|
* [**Bug**] xmp-openmpt: Sample rate and number of output channels were not
|
||||||
|
applied correctly when using per-file settings.
|
||||||
|
* [**Bug**] Internal mixer state was not initialized properly when initially
|
||||||
|
rendering in 44100kHz stereo format.
|
||||||
|
* [**Bug**] openmpt123: Prevent libsdl2 and libsdl from being enabled at the
|
||||||
|
same time because they conflict with each other.
|
||||||
|
* [**Bug**] libmodplug: Setting `SNDMIX_NORESAMPLING` in the C++ API always
|
||||||
|
resulted in linear interpolation instead of nearest neighbour
|
||||||
|
|
||||||
|
* IT: In Compatible Gxx mode, allow sample changes next to a tone portamento
|
||||||
|
effect if a previous sample has already stopped playing.
|
||||||
|
* IT: Fix broken volume envelopes with negative values as found in breakdwn.it
|
||||||
|
by Elysis.
|
||||||
|
* MOD: Slides and delayed notes are executed on every repetition of a row with
|
||||||
|
row delay (fixes "ode to protracker").
|
||||||
|
* XM: If the sustain point of the panning envelope is reached before key-off,
|
||||||
|
it is never released.
|
||||||
|
* XM: Do not default recall volume / panning for delayed instrument-less notes
|
||||||
|
* XM :E60 loop bug was not considered in song length calucation.
|
||||||
|
* S3M: Notes without instrument number use previous note's sample offset.
|
||||||
|
* Tighten M15 and MOD file rejection heuristics.
|
||||||
|
* J2B: Ignore frequency limits from file header. Fixes Medivo.j2b, broken
|
||||||
|
since libopenmpt-0.2.6401-beta17.
|
||||||
|
* STM: More accurate tempo calculation.
|
||||||
|
* STM: Better support for early format revisions (no such files have been
|
||||||
|
found in the wild, though).
|
||||||
|
* STM: Last character of sample name was missing.
|
||||||
|
* SFX: Work around bad conversions of the "Operation Stealth" soundtrack by
|
||||||
|
turning pattern breaks into note stops.
|
||||||
|
* IMF: Filter cutoff was upside down and the cutoff range was too small.
|
||||||
|
* ParamEq plugin center frequency was not limited correctly.
|
||||||
|
* Keep track of active SFx macro during seeking.
|
||||||
|
* The "note cut" duplicate note action did not volume-ramp the previously
|
||||||
|
playing sample.
|
||||||
|
* A song starting with non-existing patterns could not be played.
|
||||||
|
* DSM: Support restart position and 16-bit samples.
|
||||||
|
* DTM: Import global volume.
|
||||||
|
* MOD: Support notes in octave 2, like in FastTracker 2 (fixes DOPE.MOD).
|
||||||
|
* Do not apply Amiga playback heuristics to MOD files that have clearly been
|
||||||
|
written with a PC tracker.
|
||||||
|
* MPTM: More logical release node behaviour.
|
||||||
|
* Subsong search is now less thorough. It could previously find many subsongs
|
||||||
|
that are technically correct (unplayed rows at the beginning of patterns
|
||||||
|
that have been jumped over due to pattern breaks), but so far no real-world
|
||||||
|
module that would require such a thorough subsong detection was found. The
|
||||||
|
old mechanism caused way more false positives than intended with real-world
|
||||||
|
modules, though.
|
||||||
|
* Restrict the unpacked size of compressed DMF, IT, MDL and MO3 samples to
|
||||||
|
avoid huge allocations with malformed small files.
|
||||||
|
|
||||||
|
### libopenmpt 0.3 (2017-09-27)
|
||||||
|
|
||||||
|
* [**New**] New error handling functionality in the C API, which in particular
|
||||||
|
allows distinguishing potentially transient out-of-memory errors from parse
|
||||||
|
errors during module loading.
|
||||||
|
* [**New**] New API `openmpt::module::get_selected_subsong()` (C++) and
|
||||||
|
`openmpt_module_get_selected_subsong()` (C).
|
||||||
|
* [**New**] Faster file header probing API `openmpt::probe_file_header()` and
|
||||||
|
`openmpt::probe_file_header_get_recommended_size` (C++), and
|
||||||
|
`openmpt_probe_file_header()`,
|
||||||
|
`openmpt_probe_file_header_without_filesize()`,
|
||||||
|
`openmpt_probe_file_header_from_stream()` and
|
||||||
|
`openmpt_probe_file_header_get_recommended_size()` (C).
|
||||||
|
* [**New**] New API `openmpt::could_open_probability()` (C++) and
|
||||||
|
`openmpt_could_open_probability()` (C). This fixes a spelling error in the
|
||||||
|
old 0.2 API.
|
||||||
|
* [**New**] openmpt123: openmpt123 can now open M3U, M3U8, M3UEXT, M3U8EXT and
|
||||||
|
PLSv2 playlists via the `--playlist` option.
|
||||||
|
* [**New**] openmpt123: openmpt123 now supports very fast file header probing
|
||||||
|
via the `--probe` option.
|
||||||
|
* [**New**] Libopenmpt now supports building for Windows 10 Universal (Windows
|
||||||
|
Store 8.2) APIs with MSVC, and also for the older Windows Runtime APIs with
|
||||||
|
MinGW-w64.
|
||||||
|
* [**New**] New API header `libopenmpt_ext.h` which implements the libopenmpt
|
||||||
|
extension APIs also for the C interface.
|
||||||
|
* [**New**] The Reverb effect (S99 in S3M/IT/MPTM, and X99 in XM) is now
|
||||||
|
implemented in libopenmpt.
|
||||||
|
* [**New**] For Amiga modules, a new resampler based on the Amiga's sound
|
||||||
|
characteristics has been added. It can be activated by passing the
|
||||||
|
`render.resampler.emulate_amiga` ctl with a value of `1`. Non-Amiga modules
|
||||||
|
are not affected by this, and setting the ctl overrides the resampler choice
|
||||||
|
specified by `OPENMPT_MODULE_RENDER_INTERPOLATIONFILTER_LENGTH` or
|
||||||
|
`openmpt::module::RENDER_INTERPOLATIONFILTER_LENGTH`. Support for the MOD
|
||||||
|
command E0x (Set LED Filter) is also available when the Amiga resampler is
|
||||||
|
enabled.
|
||||||
|
|
||||||
|
* [**Change**] libopenmpt versioning changed and follows the more conventional
|
||||||
|
major.minor.patch as well as the recommendations of the
|
||||||
|
[SemVer](http://semver.org/) scheme now. In addition to the SemVer
|
||||||
|
requirements, pre-1.0.0 versions will also honor API and ABI stability in
|
||||||
|
libopenmpt (i.e. libopenmpt ignores SemVer Clause 4).
|
||||||
|
* [**Change**] The output directories of the MSVC build system were changed to
|
||||||
|
`bin/vs2015-shared/x86-64-win7/` (and similar) layout which allows building
|
||||||
|
in the same tree with different compiler versions without overwriting other
|
||||||
|
outputs.
|
||||||
|
* [**Change**] The emscripten build now exports libopenmpt as 'libopenmpt'
|
||||||
|
instead of the default 'Module'.
|
||||||
|
* [**Change**] Android: The build system changed. The various Android.mk files
|
||||||
|
have been merged into a single one which can be controlled using command
|
||||||
|
line options.
|
||||||
|
* [**Change**] The `Makefile` build system now passes `std=c++11` to the
|
||||||
|
compiler by default. Older compilers may still work if you pass
|
||||||
|
`STDCXX=c++0x` to the `make` invocation.
|
||||||
|
* [**Change**] The `Makefile` option `ANCIENT=1` is gone.
|
||||||
|
* [**Change**] The optional dependencies on `libltdl` or `libdl` are gone.
|
||||||
|
They are no longer needed for any functionality.
|
||||||
|
|
||||||
|
* [**Regression**] Compiling client code using the C++ API now requires a
|
||||||
|
compiler running in C++11 mode.
|
||||||
|
* [**Regression**] Support for GCC 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7 has been
|
||||||
|
removed.
|
||||||
|
* [**Regression**] Support for Clang 3.0, 3.1, 3.2, 3.3 has been removed.
|
||||||
|
* [**Regression**] Support for Emscripten versions older than 1.31.0 has been
|
||||||
|
removed.
|
||||||
|
* [**Regression**] Support for Android NDK versions older than 11 has been
|
||||||
|
removed.
|
||||||
|
* [**Regression**] Visual Studio 2008, 2010, 2012, 2013 support has been
|
||||||
|
removed.
|
||||||
|
* [**Regression**] Dynamic run-time loading of libmpg123 is no longer
|
||||||
|
supported. Libmpg123 must be linked at link-time now.
|
||||||
|
* [**Regression**] xmp-openmpt: xmp-openmpt now requires XMPlay 3.8 or later
|
||||||
|
and compiling xmp-openmpt requires an appropriate XMPlay SDK with
|
||||||
|
`XMPIN_FACE` >= `4`.
|
||||||
|
* [**Regression**] Support for libmpg123 older than 1.13.0 has been removed.
|
||||||
|
* [**Regression**] Un4seen unmo3 support has been removed.
|
||||||
|
|
||||||
|
* [**Bug**] C++ API: `openmpt::exception` did not define copy and move
|
||||||
|
constructors or copy and move assignment operators in libopenmpt 0.2. The
|
||||||
|
compiler-generated ones were not adequate though. libopenmpt 0.3 adds the
|
||||||
|
appropriate special member functions. This adds the respective symbol names
|
||||||
|
to the exported ABI, which, depending on the compiler, might or might not
|
||||||
|
have been there in libopenmpt 0.2. The possibly resulting possible ODR
|
||||||
|
violation only affects cases that did crash in the libopenmpt 0.2 API anyway
|
||||||
|
due to memory double-free, and does not cause any further problems in
|
||||||
|
practice for all known platforms and compilers.
|
||||||
|
* [**Bug**] The C API could crash instead of failing gracefully in
|
||||||
|
out-of-memory situations.
|
||||||
|
* [**Bug**] The test suite could fail on MacOSX or FreeBSD in non-fatal ways
|
||||||
|
when no locale was active.
|
||||||
|
* [**Bug**] `libopenmpt_stream_callbacks_fd.h` and
|
||||||
|
`libopenmpt_stream_callbacks_file.h` were missing in Windows development
|
||||||
|
packages.
|
||||||
|
* [**Bug**] libopenmpt on Windows did not properly guard against current
|
||||||
|
working directory DLL injection attacks.
|
||||||
|
* [**Bug**] localtime() was used to determine the version of Schism Tracker
|
||||||
|
used to save IT and S3M files. This function is not guaranteed to be
|
||||||
|
thread-safe by the standard and is now no longer used.
|
||||||
|
* [**Bug**] Possible crashes with malformed IT, ITP, AMS, MDL, MED, MPTM, PSM
|
||||||
|
and Startrekker files.
|
||||||
|
* [**Bug**] Possible hangs with malformed DBM, MPTM and PSM files.
|
||||||
|
* [**Bug**] Possible hangs with malformed files containing cyclic plugin
|
||||||
|
routings.
|
||||||
|
* [**Bug**] Excessive loading times with malformed ITP / truncated AMS files.
|
||||||
|
* [**Bug**] Plugins did not work correctly when changing the sample rate
|
||||||
|
between two render calls.
|
||||||
|
* [**Bug**] Possible NULL-pointer dereference read during obscure
|
||||||
|
out-of-memory situations while handling exceptions in the C API.
|
||||||
|
* [**Bug**] libmodplug: `libmodplug.pc` was wrong.
|
||||||
|
* [**Bug**] Cross-compiling libopenmpt with autotools for Windows now properly
|
||||||
|
sets `-municode` and `-mconsole` as well as all required Windows system
|
||||||
|
libraries.
|
||||||
|
* [**Bug**] foo_openmpt: Interpolation filter and volume ramping settings were
|
||||||
|
confused in previous versions. This version resets both to the defaults.
|
||||||
|
* [**Bug**] libmodplug: The CSoundFile::Read function in the emulated
|
||||||
|
libmodplug C++ API returned the wrong value, causing qmmp (and possibly
|
||||||
|
other software) to crash.
|
||||||
|
|
||||||
|
* Support for SoundTracker Pro II (STP) and Digital Tracker (DTM) modules.
|
||||||
|
* Increased accuracy of the sample position and sample rate to drift less when
|
||||||
|
playing very long samples.
|
||||||
|
* Various playback improvements for IT and XM files.
|
||||||
|
* Channel frequency could wrap around after some excessive portamento / down
|
||||||
|
in some formats since libopenmpt 0.2-beta17.
|
||||||
|
* Playback improvements for S3M files made with Impulse Tracker and
|
||||||
|
Schism Tracker.
|
||||||
|
* ParamEq plugin emulation didn't do anything at full gain (+15dB).
|
||||||
|
* All standard DMO effects are now also emulated on non-Windows and non-MSVC
|
||||||
|
systems.
|
||||||
|
* Added `libopenmpt_stream_callbacks_buffer.h` which adds
|
||||||
|
`openmpt_stream_callbacks` support for in-memory buffers, possibly even only
|
||||||
|
using a truncated prefix view into a bigger file which is useful for
|
||||||
|
probing.
|
||||||
|
* Avoid enabling some ProTracker-specific quirks for MOD files most likely
|
||||||
|
created with ScreamTracker 3.
|
||||||
|
* Tremolo effect only had half the intended strength in MOD files.
|
||||||
|
* Pattern loops ending on the last row a pattern were not executed correctly
|
||||||
|
in S3M files.
|
||||||
|
* Work-around for reading MIDI macros and plugin settings in some malformed IT
|
||||||
|
files written by old UNMO3 versions.
|
||||||
|
* Improve tracker detection in IT format.
|
||||||
|
* Playback fixes for 8-channel MED files
|
||||||
|
* Do not set note volume to 0 on out-of-range offset in XM files.
|
||||||
|
* Better import of some slide commands in SFX files.
|
||||||
|
* Sample 15 in "Crew Generation" by Necros requires short loops at the
|
||||||
|
beginning of the sample to not be ignored. Since we need to ignore them in
|
||||||
|
some (non-ProTracker) modules, we heuristically disable the old loop
|
||||||
|
sanitization behaviour based on the module channel count.
|
||||||
|
* Both normal and percentage offset in PLM files were handled as percentage
|
||||||
|
offset.
|
||||||
|
* MT2 files with instruments that had both sample and plugin assignments were
|
||||||
|
not read correctly.
|
||||||
|
* Some valid FAR files were rejected erroneously.
|
||||||
|
* Support for VBlank timing flag and comment field in PT36 files.
|
||||||
|
* Improved accuracy of vibrato command in DIGI / DBM files.
|
||||||
|
* STM: Add support for "WUZAMOD!" magic bytes and allow some slightly
|
||||||
|
malformed STM files to load which were previously rejected.
|
||||||
|
* Detect whether "hidden" patterns in the order list of SoundTracker modules
|
||||||
|
should be taken into account or not.
|
||||||
|
* Tighten heuristics for rejecting invalid 669, M15, MOD and ICE files and
|
||||||
|
loosen them in other places to allow some valid MOD files to load.
|
||||||
|
* Improvements to seeking: Channel panning was not always updated from
|
||||||
|
instruments / samples when seeking, and out-of-range global volume was not
|
||||||
|
applied correctly in some formats.
|
||||||
|
* seek.sync_samples=1 did not apply PTM reverse offset effect and the volume
|
||||||
|
slide part of combined volume slide + vibrato commands.
|
||||||
|
* If the order list was longer than 256 items and there was a pattern break
|
||||||
|
effect without a position jump on the last pattern of the sequence, it did
|
||||||
|
not jump to the correct restart order.
|
||||||
|
* `Makefile` has now explicit support for FreeBSD with no special option or
|
||||||
|
configuration required.
|
||||||
|
* openmpt123: Improved section layout in man page.
|
||||||
|
* libmodplug: Added all missing C++ API symbols that are accessible via the
|
||||||
|
public libmodplug header file.
|
||||||
|
* Autotools build system now has options `--disable-openmpt123`,
|
||||||
|
`--disable-tests` and `--disable-examples` which may be desireable when
|
||||||
|
cross-compiling.
|
||||||
|
* Windows binary packages now ship with libmpg123 included.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta20 (2016-08-07)
|
||||||
|
|
||||||
|
* [**Bug**] PSM loader was broken on big-endian platforms since forever.
|
||||||
|
* [**Bug**] `load.skip_samples` ctl did not work for PSM16 modules.
|
||||||
|
|
||||||
|
* There is a new `subsong` ctl, which can return the currently selected
|
||||||
|
subsong.
|
||||||
|
* More accurate ProTracker arpeggio wrap-around emulation.
|
||||||
|
* More accurate sample tuning in PSM16 files.
|
||||||
|
* Samples in DSM files were sometimes detuned and some pattern commands were
|
||||||
|
not imported correctly.
|
||||||
|
* More accurate import of MDL 7-bit panning command.
|
||||||
|
* Only import pattern commands supported by the UltraTracker version that was
|
||||||
|
used to save ULT files. Add support for command 5-C (end loop).
|
||||||
|
* DMF sample loop lengths were off by one.
|
||||||
|
* Unis 669 pan slide effect was too deep.
|
||||||
|
* Several valid (but slightly corrupted possibly due to disk failures or data
|
||||||
|
transfer errors) SoundTracker files were no longer loading since libopenmpt
|
||||||
|
0.2-beta18.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta19 (2016-07-23)
|
||||||
|
|
||||||
|
* [**Change**] libopenmpt now uses C++14 `[[deprecated]]` attribute instead
|
||||||
|
of compiler-specific solutions when appropriate.
|
||||||
|
* [**Change**] libopenmpt C++ header now uses C++11 `noexcept` instead of
|
||||||
|
C++98 `throw()` exception specification when supported. `throw()` is
|
||||||
|
deprecated since C++11. This does not change API or ABI as they are
|
||||||
|
equivalent. Use `LIBOPENMPT_ASSUME_CPLUSPLUS_NOEXCEPT` to override the
|
||||||
|
default.
|
||||||
|
* [**Change**] The preprocessor macro `LIBOPENMPT_ANCIENT_COMPILER_STDINT` is
|
||||||
|
gone. Please use `LIBOPENMPT_ASSUME_CPLUSPLUS_CSTDINT instead`.
|
||||||
|
Additionally, the typedefs moved from illegal namespace ::std into somewhat
|
||||||
|
less dangerous namespace ::openmpt::std. You can test
|
||||||
|
`#ifdef LIBOPENMPT_QUIRK_NO_CSTDINT` client-side to check whether
|
||||||
|
`libopenmpt.hpp` used the non-standard types. (Note: Of all supported
|
||||||
|
compilers, this change only affects the 3 compilers with only limited
|
||||||
|
support: MSVC 2008, GCC 4.1, GCC 4.2.)
|
||||||
|
|
||||||
|
* [**Bug**] xmp-openmpt: Crash when viewing sample texts.
|
||||||
|
|
||||||
|
* The public libopenmpt C++ header has auto-detection logic for the used C++
|
||||||
|
standard now. In case your client code compiler misreports the standard
|
||||||
|
version or you want to override it for other reasons,
|
||||||
|
`#define LIBOPENMPT_ASSUME_CPLUSPLUS` to the value of the standard version
|
||||||
|
you desire to be used. There is also a macro for each individual aspect,
|
||||||
|
like `LIBOPENMPT_ASSUME_CPLUSPLUS_CSTDINT`,
|
||||||
|
`LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED`,
|
||||||
|
`LIBOPENMPT_ASSUME_CPLUSPLUS_NOEXCEPT` which take precedence over the
|
||||||
|
general macro.
|
||||||
|
* Portamento with sample swap behaviour was wrong for ProTracker MODs.
|
||||||
|
* Rewritten loader and various playback fixes for MDL files.
|
||||||
|
* libopenmpt 0.2-beta18 broke import of many pattern commands in DBM, DMF and
|
||||||
|
ULT files.
|
||||||
|
* ADPCM samples in MOD files were broken since libopenmpt 0.2-beta17.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta18 (2016-07-11)
|
||||||
|
|
||||||
|
* [**Change**] openmpt123: Add PulseAudio output support. Autotools and
|
||||||
|
`Makefile` build systems now depend on `libpulse` and `libpulse-simple` by
|
||||||
|
default. Disable with `--without-pulseaudio` or `NO_PULSEAUDIO=1`
|
||||||
|
respectively. When enabled, PulseAudio will be the default output driver,
|
||||||
|
* [**Change**] xmp-openmpt: Settings are now stored in xmplay.ini like with
|
||||||
|
every other plugin.
|
||||||
|
|
||||||
|
* [**Regression**] openmpt123: Support for FLAC < 1.3.0 has been removed. FLAC
|
||||||
|
before 1.3.0 is broken beyond repair as it provides `assert.h` in the
|
||||||
|
include path.
|
||||||
|
|
||||||
|
* [**Bug**] Generated pkg-config file libopenmpt.pc by both `Makefile` and
|
||||||
|
Autotools build systems was totally broken.
|
||||||
|
* [**Bug**] libopenmpt no longer uses the non-thread-safe global std::rand()
|
||||||
|
function.
|
||||||
|
* [**Bug**] Sample loops in GDM modules did not work when using Emscripten.
|
||||||
|
* [**Bug**] XM and MO3 loaders could crash due to unaligned memory accesses.
|
||||||
|
* [**Bug**] Fixed incorrect handling of custom MPTM tunings on big endian
|
||||||
|
platforms.
|
||||||
|
* [**Bug**] Fixed various problems found with clang 3.8 static analyzer,
|
||||||
|
address sanitizer and undefined behaviour sanitizer.
|
||||||
|
* [**Bug**] File header probing functionality was broken for most formats.
|
||||||
|
* [**Bug**] With non-seekable streams, the entire file was almost always
|
||||||
|
cached even if it was not of any supported module type.
|
||||||
|
|
||||||
|
* Seeking in allsubsongs-mode now works correctly.
|
||||||
|
* openmpt123: Added subsong support.
|
||||||
|
* Various playback fixes for 669, IT, MT2 and MTM files.
|
||||||
|
* Some MOD files with more than 128 patterns (e.g. NIETNU.MOD) were not loaded
|
||||||
|
correctly.
|
||||||
|
* A new example `libopenmpt_example_c_probe` has been added which demonstrates
|
||||||
|
the usage and flexibility of openmpt_could_open_propability() in the C API
|
||||||
|
under various constraints.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta17 (2016-05-21)
|
||||||
|
|
||||||
|
* [**Change**] The Makefile and Autotools build systems now require to
|
||||||
|
explicitly specify `NO_LTDL=1` or `--without-ltdl` respectively if no
|
||||||
|
support for dynamic loading of third party libraries via libtool libltdl is
|
||||||
|
desired.
|
||||||
|
* [**Change**] In the Makefile build system option `USE_MO3` and the Autotools
|
||||||
|
build system option `--enable-mo3` are gone. Dynamic loading of un4seen
|
||||||
|
unmo3 is now always enabled when dynamic loading is possible and built-in
|
||||||
|
MO3 support is not possible because either a MP3 or a Vorbis decoder is
|
||||||
|
missing.
|
||||||
|
* [**Change**] The MSVC build system changed. The `libopenmptDLL` project is
|
||||||
|
gone. Use the new `ReleaseShared` configuration of the `libopenmpt` project
|
||||||
|
instead. libopenmpt now links against zlib by default. A separate project
|
||||||
|
with smaller footprint linking against miniz is still available as
|
||||||
|
`libopenmpt-small`.
|
||||||
|
* [**Change**] The constants used to query library information from
|
||||||
|
`openmpt_get_string()` and `openmpt::string::get()` (i.e. OPENMPT_STRING_FOO
|
||||||
|
and openmpt::string::FOO) have been deprecated because having syntactic
|
||||||
|
constants for theses keys makes extending the API in a backwards and
|
||||||
|
forwards compatible way harder than it should be. Please just use the string
|
||||||
|
literals directly.
|
||||||
|
* [**Change**] Deprecated API identifiers will now cause deprecation warnings
|
||||||
|
with MSVC, GCC and clang. `#define LIBOPENMPT_NO_DEPRECATE` to disable the
|
||||||
|
warnings.
|
||||||
|
* [**Change**] openmpt123: `--[no-]shuffle` option has been renamed to
|
||||||
|
`--[no-]randomize`. A new `--[no-]shuffle` option has been added which
|
||||||
|
shuffles randomly through the playlist as opposed to randomizing the
|
||||||
|
playlist upfront.
|
||||||
|
* [**Change**] Support for Un4seen unmo3 has generally been deprecated in
|
||||||
|
favour of the new internal mo3 decoder. Un4seen unmo3 support will be
|
||||||
|
removed on 2018-01-01.
|
||||||
|
|
||||||
|
* [**Bug**] Memory consumption during loading has been reduced by about 1/3 in
|
||||||
|
case a seekable input stream is provided (either via C API callback open
|
||||||
|
functions or via C++ API iostream constructors).
|
||||||
|
* [**Bug**] Some samples in AMS modules were detuned when using Emscripten.
|
||||||
|
* [**Bug**] Possible crash with excessive portamento down in some formats.
|
||||||
|
* [**Bug**] Possible crashes with malformed AMF, AMS, DBM, IT, MDL, MED, MPTM,
|
||||||
|
MT2, PSM and MMCMP-, XPK- and PP20-compressed files.
|
||||||
|
* [**Bug**] `openmpt::module::format_pattern_row_channel` with `width == 0`
|
||||||
|
was returning an empty string instead of an string with unconstrained
|
||||||
|
length.
|
||||||
|
|
||||||
|
* Support for ProTracker 3.6 IFF-style modules and SoundFX / MultiMedia Sound
|
||||||
|
(SFX / MMS) modules.
|
||||||
|
* libopenmpt now has support for DMO plugins on Windows when built with MSVC.
|
||||||
|
Additionally, the DMO Compression, Distortion, Echo, Gargle, ParamEQ and
|
||||||
|
WavesReverb DSPs are emulated on on all other platforms.
|
||||||
|
* libopenmpt now supports the DigiBooster Echo DSP.
|
||||||
|
* To avoid any of the aforementioned plugins to be used, the load.skip_plugins
|
||||||
|
ctl can be passed when loading a module.
|
||||||
|
* libopenmpt got native MO3 support with MP3 decoding either via libmpg123 or
|
||||||
|
MediaFoundation (on Windows 7 and up) and Vorbis decoding via libogg,
|
||||||
|
libvorbis, libvorbisfile or stb_vorbis.
|
||||||
|
* libopenmpt MSVC builds with Visual Studio 2010 or later on Windows 7 or
|
||||||
|
later now use an internal MO3 decoder with libogg, libvorbis, libvorbisfile,
|
||||||
|
and libmpg123 or minimp3 or MediaFoundation suppport by default. Visual
|
||||||
|
Studio 2008 builds still use unmo3.dll by default but also support the
|
||||||
|
built-in decoder in which case libmpg123 is required.
|
||||||
|
* libopenmpt with Makefile or Autotools build system can now also use
|
||||||
|
glibc/libdl instead of libtool/libltdl for dynamic loading of third-party
|
||||||
|
libraries. Options `NO_DL=1` and `--without-dl` have been added
|
||||||
|
respectively.
|
||||||
|
* The `Makefile` build system got 4 new options NO_MPG123, NO_OGG, NO_VORBIS,
|
||||||
|
NO_VORBISFILE. The default is to use the new dependencies automatically.
|
||||||
|
* The `Autotools` build system got 4 new options --without-mpg123,
|
||||||
|
--without-ogg, --without-vorbis, --without-vorbisfile. The default is to use
|
||||||
|
the new dependencies automatically.
|
||||||
|
* Makefile and Android builds got support for using minimp3 instead of
|
||||||
|
libmpg123. For Android, use `Android-minimp3-stbvorbis.mk`, for Makefile use
|
||||||
|
`USE_MINIMP3=1`. You have to download
|
||||||
|
[minimp3](http://keyj.emphy.de/minimp3/) yourself and put its contents into
|
||||||
|
`include/minimp3/`.
|
||||||
|
* `"source_url"`, `"source_date"` and `"build_compiler"` keys have been added
|
||||||
|
to `openmpt_string_get()` and `openmpt::string::get()`.
|
||||||
|
* openmpt123: Add new `--[no-]restart]` option which restarts the playlist
|
||||||
|
when finished.
|
||||||
|
* Improved Ultimate SoundTracker version detection heuristics.
|
||||||
|
* Playing a sample at a sample rate close to the mix rate could lead to small
|
||||||
|
clicks when using vibrato.
|
||||||
|
* More fine-grained internal legacy module compatibility settings to correctly
|
||||||
|
play back modules made with older versions of OpenMPT and a few other
|
||||||
|
trackers.
|
||||||
|
* The tail of compressed MDL samples was slightly off.
|
||||||
|
* Some probably hex-edited XM files (e.g. cybernostra weekend.xm) were not
|
||||||
|
loaded correctly.
|
||||||
|
* Countless other playback fixes for MOD, XM, S3M, IT and MT2 files.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta16 (2015-11-22)
|
||||||
|
|
||||||
|
* [**Change**] The Autotools build system does strict checking of all
|
||||||
|
dependencies now. Instead of best effort auto-magic detection of all
|
||||||
|
potentially optional dependencies, the default set of dependencies is now
|
||||||
|
enforced unless each individual dependency gets explicitely disabled via
|
||||||
|
`--without-foo` or `--disable-foo` `./configure` switches. Run
|
||||||
|
`./configure --help` for the full list of options.
|
||||||
|
|
||||||
|
* [**Bug**] Some MOD files were erroneously detected as 669 files.
|
||||||
|
* [**Bug**] Some malformed AMF files could result in very long loading times.
|
||||||
|
* [**Bug**] Fixed crashes in IMF and MT2 loaders.
|
||||||
|
* [**Bug**] MTM files generated by UNMO3 were not loaded properly.
|
||||||
|
|
||||||
|
* Improved MTM playback.
|
||||||
|
* `make CONFIG=haiku` for Haiku has been added.
|
||||||
|
* Language bindings for FreeBASIC have been added (see
|
||||||
|
`libopenmpt/bindings/`).
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta15 (2015-10-31)
|
||||||
|
|
||||||
|
* [**Change**] openmpt123: SDL2 is now supported and preferred to SDL1 if
|
||||||
|
available with the `Makefile` build system.
|
||||||
|
|
||||||
|
* [**Bug**] Emscripten support for older emscripten versions broke in -beta14.
|
||||||
|
These are now supported again when using `make CONFIG=emscripten-old`.
|
||||||
|
* [**Bug**] Fixed crashes in MED loader.
|
||||||
|
|
||||||
|
* Playback improvements and loader fixes for MOD, MT2 and MED.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta14 (2015-09-13)
|
||||||
|
|
||||||
|
* [**Change**] The C++ API example now uses the PortAudio C++ bindings
|
||||||
|
instead of the C API.
|
||||||
|
* [**Change**] Default compiler options for Emscripten have been changed to
|
||||||
|
more closely match the Emscripten recommendations.
|
||||||
|
|
||||||
|
* [**Bug**] Client code compilation with C89 compilers was broken in beta13.
|
||||||
|
* [**Bug**] Test suite failed on certain Emscripten/node.js combinations.
|
||||||
|
* [**Bug**] Fixed various crashes or hangs in DMF, OKT, PLM, IT and MPTM
|
||||||
|
loaders.
|
||||||
|
|
||||||
|
* Implemented error handling in the libopenmpt API examples.
|
||||||
|
* Various playback improvements and fixes for OKT, IT and MOD.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta13 (2015-08-16)
|
||||||
|
|
||||||
|
* [**Change**] The MSVC build system has been redone. Solutions are now
|
||||||
|
located in `build/vsVERSION/`.
|
||||||
|
|
||||||
|
* [**Bug**] get_current_channel_vu_left and get_current_channel_vu_right only
|
||||||
|
return the volume of the front left and right channels now.
|
||||||
|
get_current_channel_vu_rear_left and get_current_channel_vu_rear_right
|
||||||
|
do now actually work and return non-zero values.
|
||||||
|
* [**Bug**] Fix crashes and hangs in MED and MDL loaders and with some
|
||||||
|
truncated compressed IT samples.
|
||||||
|
* [**Bug**] Fix crash when playing extremely high-pitched samples.
|
||||||
|
|
||||||
|
* Completed C and C++ documentation
|
||||||
|
* Added new key for openmpt::module::get_metadata, "message_raw", which
|
||||||
|
returns an empty string if there is no song message rather than a list of
|
||||||
|
instrument names.
|
||||||
|
* in_openmpt: Support for compiling with VS2008.
|
||||||
|
* xmp-openmpt: Support for compiling with VS2008.
|
||||||
|
* in_openmpt: Add a more readable file information window.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta12 (2015-04-19)
|
||||||
|
|
||||||
|
* Playback fix when row delay effect is used together with offset command.
|
||||||
|
* A couple of fixes for the seek.sync_samples=1 case.
|
||||||
|
* IT compatibility fix for IT note delay.
|
||||||
|
* ProTracker MOD playback compatibility improvement.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta11 (2015-04-18)
|
||||||
|
|
||||||
|
* [**Change**] openmpt_stream_seek_func() now gets called with
|
||||||
|
OPENMPT_STREAM_SEEK_SET, OPENMPT_STREAM_SEEK_CUR and
|
||||||
|
OPENMPT_STREAM_SEEK_END whence parameter instead of SEEK_SET, SEEK_CUR and
|
||||||
|
SEEK_END. These are defined to 0, 1 and 2 respectively which corresponds to
|
||||||
|
the definition in all common C libraries. If your C library uses different
|
||||||
|
constants, this theoretically breaks binary compatibility. The old
|
||||||
|
libopenmpt code, however, never actually called the seek function, thus,
|
||||||
|
there will be no problem in practice.
|
||||||
|
* [**Change**] openmpt123: When both SDL1.2 and PortAudio are available,
|
||||||
|
SDL is now the preferred backend because SDL is more widespread and better
|
||||||
|
tested on all kinds of different platforms, and in general, SDL is just
|
||||||
|
more reliable.
|
||||||
|
|
||||||
|
* [**Bug**] libopenmpt now also compiles with GCC 4.3.
|
||||||
|
|
||||||
|
* libopenmpt now supports PLM (Disorder Tracker 2) files.
|
||||||
|
* Various playback improvements and fixes for IT, S3M, XM, MOD, PTM and 669
|
||||||
|
files.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta10 (2015-02-17)
|
||||||
|
|
||||||
|
* [**Change**] Makefile configuration filenames changed from
|
||||||
|
`build/make/Makefile.config.*` to `build/make/config-*.mk`.
|
||||||
|
* [**Change**] libopenmpt for Android now supports unmo3 from un4seen. See
|
||||||
|
`build/android_ndk/README.AndroidNDK.txt` for details.
|
||||||
|
|
||||||
|
* [**Bug**] Fix out-of-bounds read in mixer code for ProTracker-compatible
|
||||||
|
MOD files which was introduced back in r4223 / beta6.
|
||||||
|
|
||||||
|
* Vibrato effect was too weak in beta8 and beta9 in IT linear slide mode.
|
||||||
|
* Very small fine portamento was wrong in beta8 and beta9 in IT linear slide
|
||||||
|
mode.
|
||||||
|
* Tiny IT playback compatibility improvements.
|
||||||
|
* STM playback improvements.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta9 (2014-12-21)
|
||||||
|
|
||||||
|
* [**Bug**] libopenmpt_ext.hpp was missing from the Windows binary zip files.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta8 (2014-12-21)
|
||||||
|
|
||||||
|
* [**Change**] foo_openmpt: Settings are now accessible via foobar2000
|
||||||
|
advanced settings.
|
||||||
|
* [**Change**] Autotools based build now supports libunmo3. Specify
|
||||||
|
--enable-unmo3.
|
||||||
|
* [**Change**] Support for dynamic loading of libunmo3 on MacOS X.
|
||||||
|
* [**Change**] libopenmpt now uses libltld (from libtool) for dynamic loading
|
||||||
|
of libunmo3 on all non-Windows platforms.
|
||||||
|
* [**Change**] Support for older compilers:
|
||||||
|
* GCC 4.1.x to 4.3.x (use `make ANCIENT=1`)
|
||||||
|
* Microsoft Visual Studio 2008 (with latest Service Pack)
|
||||||
|
(see `build/vs2008`)
|
||||||
|
* [**Change**] libopenmpt_ext.hpp is now distributed by default. The API is
|
||||||
|
still considered experimental and not guaranteed to stay API or ABI
|
||||||
|
compatible.
|
||||||
|
* [**Change**] xmp-openmpt / in_openmpt: No more libopenmpt_settings.dll.
|
||||||
|
The settings dialog now uses a statically linked copy of MFC.
|
||||||
|
|
||||||
|
* [**Bug**] The -autotools tarballs were not working at all.
|
||||||
|
|
||||||
|
* Vastly improved MT2 loader.
|
||||||
|
* Improved S3M playback compatibility.
|
||||||
|
* Added openmpt::ext::interactive, an extension which adds a whole bunch of
|
||||||
|
new functionality to change playback in some way or another.
|
||||||
|
* Added possibility to sync sample playback when using
|
||||||
|
openmpt::module::set_position_* by setting the ctl value
|
||||||
|
seek.sync_samples=1
|
||||||
|
* Support for "hidden" subsongs has been added.
|
||||||
|
They are accessible through the same interface as ordinary subsongs, i.e.
|
||||||
|
use openmpt::module::select_subsong to switch between any kind of subsongs.
|
||||||
|
* All subsongs can now be played consecutively by passing -1 as the subsong
|
||||||
|
index in openmpt::module::select_subsong.
|
||||||
|
* Added documentation for a couple of more functions.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta7 (2014-09-07)
|
||||||
|
|
||||||
|
* [**Change**] libopenmpt now has an GNU Autotools based build system (in
|
||||||
|
addition to all previously supported ways of building libopenmpt).
|
||||||
|
Autotools support is packaged separately as tarballs ending in
|
||||||
|
`-autotools.tar.gz`.
|
||||||
|
|
||||||
|
* [**Bug**] The distributed windows .zip file did not include pugixml.
|
||||||
|
|
||||||
|
* [**Regression**] openmpt123: Support for writing WavPack (.wv) files has
|
||||||
|
been removed.
|
||||||
|
|
||||||
|
Reasoning:
|
||||||
|
1. WavPack support was incomplete and did not include support for writing
|
||||||
|
WavPack metadata at all.
|
||||||
|
2. openmpt123 already supports libSndFile which can be used to write
|
||||||
|
uncompressed lossless WAV files which can then be encoded to whatever
|
||||||
|
format the user desires with other tools.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta6 (2014-09-06)
|
||||||
|
|
||||||
|
* [**Change**] openmpt123: SDL is now also used by default if availble, in
|
||||||
|
addition to PortAudio.
|
||||||
|
* [**Change**] Support for emscripten is no longer experimental.
|
||||||
|
* [**Change**] libopenmpt itself can now also be compiled with VS2008.
|
||||||
|
|
||||||
|
* [**Bug**] Fix all known crashes on platforms that do not support unaligned
|
||||||
|
memory access.
|
||||||
|
* [**Bug**] openmpt123: Effect column was always missing in pattern display.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta5 (2014-06-15)
|
||||||
|
|
||||||
|
* [**Change**] Add unmo3 support for non-Windows builds.
|
||||||
|
* [**Change**] Namespace all internal functions in order to allow statically
|
||||||
|
linking against libopenmpt without risking duplicate symbols.
|
||||||
|
* [**Change**] Iconv is now completely optional and only used on Linux
|
||||||
|
systems by default.
|
||||||
|
* [**Change**] Added libopenmpt_example_c_stdout.c, an example without
|
||||||
|
requiring PortAudio.
|
||||||
|
* [**Change**] Add experimental support for building libopenmpt with
|
||||||
|
emscripten.
|
||||||
|
|
||||||
|
* [**Bug**] Fix ping-pong loop behaviour which broke in 0.2-beta3.
|
||||||
|
* [**Bug**] Fix crashes when accessing invalid patterns through libopenmpt
|
||||||
|
API.
|
||||||
|
* [**Bug**] Makefile: Support building with missing optional dependencies
|
||||||
|
without them being stated explicitely.
|
||||||
|
* [**Bug**] openmpt123: Crash when quitting while playback is stopped.
|
||||||
|
* [**Bug**] openmpt123: Crash when writing output to a file in interactive UI
|
||||||
|
mode.
|
||||||
|
* [**Bug**] openmpt123: Wrong FLAC output filename in --render mode.
|
||||||
|
|
||||||
|
* Various smaller playback accuracy improvements.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta4 (2014-02-25)
|
||||||
|
|
||||||
|
* [**Bug**] Makefile: Dependency tracking for the test suite did not work.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta3 (2014-02-21)
|
||||||
|
|
||||||
|
* [**Change**] The test suite is now built by default with Makefile based
|
||||||
|
builds. Use `TEST=0` to skip building the tests. `make check` runs the test
|
||||||
|
suite.
|
||||||
|
|
||||||
|
* [**Bug**] Crash in MOD and XM loaders on architectures not supporting
|
||||||
|
unaligned memory access.
|
||||||
|
* [**Bug**] MMCMP, PP20 and XPK unpackers should now work on non-x86 hardware
|
||||||
|
and implement proper bounds checking.
|
||||||
|
* [**Bug**] openmpt_module_get_num_samples() returned the wrong value.
|
||||||
|
* [**Bug**] in_openmpt: DSP plugins did not work properly.
|
||||||
|
* [**Bug**] in_openmpt/xmp-openmpt: Setting name for stereo separation was
|
||||||
|
misspelled. This version will revert your stereo separation settings to
|
||||||
|
default.
|
||||||
|
* [**Bug**] Crash when loading some corrupted modules with stereo samples.
|
||||||
|
|
||||||
|
* Support building on Android NDK.
|
||||||
|
* Avoid clicks in sample loops when using interpolation.
|
||||||
|
* IT filters are now done in integer instead of floating point. This improves
|
||||||
|
performance, especially on architectures with no or a slow FPU.
|
||||||
|
* MOD pattern break handling fixes.
|
||||||
|
* Various XM playback improvements.
|
||||||
|
* Improved and switchable dithering when using 16bit integer API.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta2 (2014-01-12)
|
||||||
|
|
||||||
|
* [**Bug**] MT2 loader crash.
|
||||||
|
* [**Bug**] Saving settings in in_openmpt and xmp-openmpt did not work.
|
||||||
|
* [**Bug**] Load libopenmpt_settings.dll also from below Plugins directory in
|
||||||
|
Winamp.
|
||||||
|
|
||||||
|
* DBM playback improvements.
|
||||||
|
|
||||||
|
### libopenmpt 0.2-beta1 (2013-12-31)
|
||||||
|
|
||||||
|
* First release.
|
||||||
|
|
550
libs/libopenmpt/debian/libopenmpt-0.4.0-trusty-backport.diff
Normal file
550
libs/libopenmpt/debian/libopenmpt-0.4.0-trusty-backport.diff
Normal file
|
@ -0,0 +1,550 @@
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/changelog ./debian/changelog
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/changelog 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/changelog 2019-01-04 17:56:35.024725537 -0500
|
||||||
|
@@ -1,3 +1,38 @@
|
||||||
|
+libopenmpt (0.4.0-ubuntu14.04.1~ppa14) trusty; urgency=medium
|
||||||
|
+
|
||||||
|
+ * Remove debian symbols files due to gcc 4.8 - 5 C++ abi incompatibility
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 17:56:01 -0500
|
||||||
|
+
|
||||||
|
+libopenmpt (0.4.0-ubuntu14.04.1~ppa13) trusty; urgency=medium
|
||||||
|
+
|
||||||
|
+ * autoreconf libtool
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 17:10:45 -0500
|
||||||
|
+
|
||||||
|
+libopenmpt (0.4.0-ubuntu14.04.1~ppa12) trusty; urgency=medium
|
||||||
|
+
|
||||||
|
+ * debian/rules autoreconf
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 17:03:19 -0500
|
||||||
|
+
|
||||||
|
+libopenmpt (0.4.0-ubuntu14.04.1~ppa11) trusty; urgency=medium
|
||||||
|
+
|
||||||
|
+ * debian/rules autoreconf
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 16:59:08 -0500
|
||||||
|
+
|
||||||
|
+libopenmpt (0.4.0-ubuntu14.04.1~ppa10) trusty; urgency=medium
|
||||||
|
+
|
||||||
|
+ * Backport to trusty
|
||||||
|
+ * Added automake build depend
|
||||||
|
+ * Adjusted debhelper depend to >= 9.0~
|
||||||
|
+ * Adjusted dpkg-dev depend to >= 1.17.0
|
||||||
|
+ * Adjusted debian/compat to 10
|
||||||
|
+ * autoreconf --force --install
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 16:54:04 -0500
|
||||||
|
+
|
||||||
|
libopenmpt (0.4.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/compat ./debian/compat
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/compat 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/compat 2019-01-04 16:39:17.613976357 -0500
|
||||||
|
@@ -1 +1 @@
|
||||||
|
-11
|
||||||
|
+10
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/control ./debian/control
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/control 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/control 2019-01-04 17:10:42.008523333 -0500
|
||||||
|
@@ -4,10 +4,12 @@
|
||||||
|
Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
|
||||||
|
Uploaders: James Cowgill <jcowgill@debian.org>
|
||||||
|
Build-Depends:
|
||||||
|
- debhelper (>= 11.1~),
|
||||||
|
+ automake,
|
||||||
|
+ libtool,
|
||||||
|
+ debhelper (>= 9.0~),
|
||||||
|
dh-exec,
|
||||||
|
doxygen,
|
||||||
|
- dpkg-dev (>= 1.18.0),
|
||||||
|
+ dpkg-dev (>= 1.17.0),
|
||||||
|
libflac-dev,
|
||||||
|
libmpg123-dev,
|
||||||
|
libogg-dev,
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/files ./debian/files
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/files 1969-12-31 19:00:00.000000000 -0500
|
||||||
|
+++ ./debian/files 2019-01-04 17:56:47.813250880 -0500
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+libopenmpt_0.4.0-ubuntu14.04.1~ppa14_source.buildinfo libs optional
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/libopenmpt0.symbols ./debian/libopenmpt0.symbols
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/libopenmpt0.symbols 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/libopenmpt0.symbols 1969-12-31 19:00:00.000000000 -0500
|
||||||
|
@@ -1,256 +0,0 @@
|
||||||
|
-libopenmpt.so.0 libopenmpt0 #MINVER#
|
||||||
|
-* Build-Depends-Package: libopenmpt-dev
|
||||||
|
-# Ignore std:: template instantiations
|
||||||
|
- (regex|optional)"^_ZN?K?S" 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_ext13get_interfaceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt10module_extC1EPKcjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt10module_extC1EPKcmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt10module_extC1EPKvjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt10module_extC1EPKvmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC1ERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC1ERKSt6vectorIcSaIcEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcES2_EESC_St4lessISC_ESaISt4pairIKSC_SC_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC1ERSiRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_St4lessIS9_ESaISt4pairIKS9_S9_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt10module_extC2EPKcjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt10module_extC2EPKcmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt10module_extC2EPKvjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt10module_extC2EPKvmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC2ERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC2ERKSt6vectorIcSaIcEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcES2_EESC_St4lessISC_ESaISt4pairIKSC_SC_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extC2ERSiRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_St4lessIS9_ESaISt4pairIKS9_S9_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extD0Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extD1Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extD2Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt10module_extaSERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt16get_core_versionEv@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt17probe_file_headerEyPKhj@Base 0.3.0
|
||||||
|
- (arch-bits=64)_ZN7openmpt17probe_file_headerEmPKhm@Base 0.3.0
|
||||||
|
- (arch-bits=32)_ZN7openmpt17probe_file_headerEyPKhjy@Base 0.3.0
|
||||||
|
- (arch-bits=64)_ZN7openmpt17probe_file_headerEmPKhmm@Base 0.3.0
|
||||||
|
- (arch-bits=32)_ZN7openmpt17probe_file_headerEyRSi@Base 0.3.0
|
||||||
|
- (arch-bits=64)_ZN7openmpt17probe_file_headerEmRSi@Base 0.3.0
|
||||||
|
- _ZN7openmpt19get_library_versionEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt22could_open_probabilityERSidRSo@Base 0.3.0
|
||||||
|
- _ZN7openmpt22could_open_propabilityERSidRSo@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt22is_extension_supportedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt24get_supported_extensionsB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt38probe_file_header_get_recommended_sizeEv@Base 0.3.0
|
||||||
|
- _ZN7openmpt6module14select_subsongEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module16set_render_paramEii@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module16set_repeat_countEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module20set_position_secondsEd@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module21read_interleaved_quadEijPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module21read_interleaved_quadEimPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module21read_interleaved_quadEijPs@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module21read_interleaved_quadEimPs@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module22set_position_order_rowEii@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module23read_interleaved_stereoEijPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module23read_interleaved_stereoEimPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module23read_interleaved_stereoEijPs@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module23read_interleaved_stereoEimPs@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPf@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPfS1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPfS1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPfS1_S1_S1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPfS1_S1_S1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPs@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPs@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPsS1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPsS1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6module4readEijPsS1_S1_S1_@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6module4readEimPsS1_S1_S1_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module7ctl_setERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6module8set_implEPNS_11module_implE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1EPKcS2_RSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC1EPKcjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC1EPKcmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1EPKhS2_RSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC1EPKhjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC1EPKhmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC1EPKvjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC1EPKvmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1ERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1ERKSt6vectorIcSaIcEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcES2_EESC_St4lessISC_ESaISt4pairIKSC_SC_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1ERKSt6vectorIhSaIhEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESD_St4lessISD_ESaISt4pairIKSD_SD_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1ERSiRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_St4lessIS9_ESaISt4pairIKS9_S9_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC1Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2EPKcS2_RSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC2EPKcjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC2EPKcmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2EPKhS2_RSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC2EPKhjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC2EPKhmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZN7openmpt6moduleC2EPKvjRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZN7openmpt6moduleC2EPKvmRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_St4lessISA_ESaISt4pairIKSA_SA_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2ERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2ERKSt6vectorIcSaIcEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcES2_EESC_St4lessISC_ESaISt4pairIKSC_SC_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2ERKSt6vectorIhSaIhEERSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESD_St4lessISD_ESaISt4pairIKSD_SD_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2ERSiRSoRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_St4lessIS9_ESaISt4pairIKS9_S9_EEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleC2Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleD0Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleD1Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleD2Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6moduleaSERKS0_@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt6string3getERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionC1EOS0_@Base 0.3.0
|
||||||
|
- _ZN7openmpt9exceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionC1ERKS0_@Base 0.3.0
|
||||||
|
- _ZN7openmpt9exceptionC2EOS0_@Base 0.3.0
|
||||||
|
- _ZN7openmpt9exceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionC2ERKS0_@Base 0.3.0
|
||||||
|
- _ZN7openmpt9exceptionD0Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionD1Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionD2Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZN7openmpt9exceptionaSEOS0_@Base 0.3.0
|
||||||
|
- _ZN7openmpt9exceptionaSERKS0_@Base 0.3.0
|
||||||
|
- _ZNK7openmpt6module12get_metadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module14get_num_ordersEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module15get_current_rowEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module15get_num_samplesEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module15get_order_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_num_channelsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_num_patternsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_num_subsongsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_render_paramEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_repeat_countEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module16get_sample_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_channel_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_current_orderEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_current_speedEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_current_tempoEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_metadata_keysB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_order_patternEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_pattern_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module17get_subsong_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module19get_current_patternEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module19get_num_instrumentsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module20get_duration_secondsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module20get_instrument_namesB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module20get_pattern_num_rowsEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module20get_position_secondsEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module20get_selected_subsongEv@Base 0.3.0
|
||||||
|
- (arch-bits=32)_ZNK7openmpt6module26format_pattern_row_channelB5cxx11Eiiijb@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZNK7openmpt6module26format_pattern_row_channelB5cxx11Eiiimb@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module27get_current_channel_vu_leftEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module27get_current_channel_vu_monoEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module28get_current_channel_vu_rightEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module28get_current_playing_channelsEv@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=32)_ZNK7openmpt6module29highlight_pattern_row_channelB5cxx11Eiiijb@Base 0.2.7025~beta20.1
|
||||||
|
- (arch-bits=64)_ZNK7openmpt6module29highlight_pattern_row_channelB5cxx11Eiiimb@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module31get_pattern_row_channel_commandEiiii@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module32get_current_channel_vu_rear_leftEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module33get_current_channel_vu_rear_rightEi@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module34format_pattern_row_channel_commandB5cxx11Eiiii@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module37highlight_pattern_row_channel_commandB5cxx11Eiiii@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module7ctl_getERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt6module8get_ctlsB5cxx11Ev@Base 0.2.7025~beta20.1
|
||||||
|
- _ZNK7openmpt9exception4whatEv@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTIN7openmpt10module_extE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTIN7openmpt6moduleE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTIN7openmpt9exceptionE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTSN7openmpt10module_extE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTSN7openmpt6moduleE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTSN7openmpt9exceptionE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZTSSt19_Sp_make_shared_tag@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTVN7openmpt10module_extE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTVN7openmpt6moduleE@Base 0.2.7025~beta20.1
|
||||||
|
- _ZTVN7openmpt9exceptionE@Base 0.2.7025~beta20.1
|
||||||
|
- (optional=weak)_ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag@Base 0.4.0
|
||||||
|
- openmpt_could_open_probability2@Base 0.3.0
|
||||||
|
- openmpt_could_open_probability@Base 0.3.0
|
||||||
|
- openmpt_could_open_propability@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_error_func_default@Base 0.3.0
|
||||||
|
- openmpt_error_func_errno@Base 0.3.0
|
||||||
|
- openmpt_error_func_errno_userdata@Base 0.3.0
|
||||||
|
- openmpt_error_func_ignore@Base 0.3.0
|
||||||
|
- openmpt_error_func_log@Base 0.3.0
|
||||||
|
- openmpt_error_func_store@Base 0.3.0
|
||||||
|
- openmpt_error_is_transient@Base 0.3.0
|
||||||
|
- openmpt_error_string@Base 0.3.0
|
||||||
|
- openmpt_free_string@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_get_core_version@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_get_library_version@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_get_string@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_get_supported_extensions@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_is_extension_supported@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_log_func_default@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_log_func_silent@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_create2@Base 0.3.0
|
||||||
|
- openmpt_module_create@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_create_from_memory2@Base 0.3.0
|
||||||
|
- openmpt_module_create_from_memory@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_ctl_get@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_ctl_set@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_destroy@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_error_clear@Base 0.3.0
|
||||||
|
- openmpt_module_error_get_last@Base 0.3.0
|
||||||
|
- openmpt_module_error_get_last_message@Base 0.3.0
|
||||||
|
- openmpt_module_error_set_last@Base 0.3.0
|
||||||
|
- openmpt_module_ext_create@Base 0.3.0
|
||||||
|
- openmpt_module_ext_create_from_memory@Base 0.3.0
|
||||||
|
- openmpt_module_ext_destroy@Base 0.3.0
|
||||||
|
- openmpt_module_ext_get_interface@Base 0.3.0
|
||||||
|
- openmpt_module_ext_get_module@Base 0.3.0
|
||||||
|
- openmpt_module_format_pattern_row_channel@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_format_pattern_row_channel_command@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_channel_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_ctls@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_channel_vu_left@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_channel_vu_mono@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_channel_vu_rear_left@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_channel_vu_rear_right@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_channel_vu_right@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_order@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_pattern@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_playing_channels@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_row@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_speed@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_current_tempo@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_duration_seconds@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_instrument_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_metadata@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_metadata_keys@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_channels@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_instruments@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_orders@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_patterns@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_samples@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_num_subsongs@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_order_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_order_pattern@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_pattern_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_pattern_num_rows@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_pattern_row_channel_command@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_position_seconds@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_render_param@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_repeat_count@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_sample_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_get_selected_subsong@Base 0.3.0
|
||||||
|
- openmpt_module_get_subsong_name@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_highlight_pattern_row_channel@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_highlight_pattern_row_channel_command@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_float_mono@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_float_quad@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_float_stereo@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_interleaved_float_quad@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_interleaved_float_stereo@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_interleaved_quad@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_interleaved_stereo@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_mono@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_quad@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_read_stereo@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_select_subsong@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_set_error_func@Base 0.3.0
|
||||||
|
- openmpt_module_set_log_func@Base 0.3.0
|
||||||
|
- openmpt_module_set_position_order_row@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_set_position_seconds@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_set_render_param@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_module_set_repeat_count@Base 0.2.7025~beta20.1
|
||||||
|
- openmpt_probe_file_header@Base 0.3.0
|
||||||
|
- openmpt_probe_file_header_from_stream@Base 0.3.0
|
||||||
|
- openmpt_probe_file_header_get_recommended_size@Base 0.3.0
|
||||||
|
- openmpt_probe_file_header_without_filesize@Base 0.3.0
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/libopenmpt-modplug1.symbols ./debian/libopenmpt-modplug1.symbols
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/libopenmpt-modplug1.symbols 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/libopenmpt-modplug1.symbols 1969-12-31 19:00:00.000000000 -0500
|
||||||
|
@@ -1,200 +0,0 @@
|
||||||
|
-libopenmpt_modplug.so.1 libopenmpt-modplug1 #MINVER#
|
||||||
|
-* Build-Depends-Package: libopenmpt-modplug-dev
|
||||||
|
- LIBOPENMPT_MODPLUG1@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_ExportIT@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_ExportMOD@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_ExportS3M@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_ExportXM@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetCurrentOrder@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetCurrentPattern@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetCurrentRow@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetCurrentSpeed@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetCurrentTempo@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetLength@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetMasterVolume@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetMessage@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetModuleType@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetName@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetPattern@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetPlayingChannels@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_GetSettings@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_InitMixerCallback@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_InstrumentName@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_Load@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_NumChannels@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_NumInstruments@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_NumPatterns@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_NumSamples@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_Read@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_SampleName@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_Seek@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_SeekOrder@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_SetMasterVolume@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_SetSettings@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_Unload@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- ModPlug_UnloadMixerCallback@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile10FreeSampleEPv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10InitPlayerEb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10NoteChangeEjibb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10PackSampleERii@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10ProcessAGCEi@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10ProcessRowEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10ReadSampleEP14_MODINSTRUMENTjPKcj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10RetrigNoteEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile10gdwSysInfoE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile10gnCPUUsageE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile10gnChannelsE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile11DoFreqSlideEP11_MODCHANNELi@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11FineVibratoEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11FreePatternEPv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11InitSysInfoEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11LoopPatternEii@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11PatternLoopEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile11VolumeSlideEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12FineVolumeUpEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12ITInstrToMPTEPKvP17_INSTRUMENTHEADERj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12IsSampleUsedEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12PanningSlideEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12PortamentoUpEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12ResetMidiCfgEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12SetMixConfigEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile12gnReverbTypeE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile12gpSndMixHookE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13CanPackSampleEPcjjPh@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile13CheckCPUUsageEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile13DestroySampleEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile13ResetChannelsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile13SetCurrentPosEj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13SetWaveConfigEjjjb@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13gdwMixingFreqE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13gdwSoundSetupE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13m_nXBassDepthE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile13m_nXBassRangeE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile14AllocateSampleEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14FineVolumeDownEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14GlobalFadeSongEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14GlobalVolSlideEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14LoadMixPluginsEPKvj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14PortamentoDownEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14ProcessEffectsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14SaveMixPluginsEP8_IO_FILEb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14SetPatternNameEjPKc@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14TonePortamentoEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile14m_nReverbDelayE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile14m_nReverbDepthE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile15AllocatePatternEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile15ChannelVolSlideEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile15CreateStereoMixEi@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile15GetSongCommentsEPcjj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile15SetCurrentOrderEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile15SetMasterVolumeEjb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile15SetWaveConfigExEbbbbbbb@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile15gnBitsPerSampleE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile15m_nStreamVolumeE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile16AdjustSampleLoopEP14_MODINSTRUMENT@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile16FinePortamentoUpEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile16InstrumentChangeEP11_MODCHANNELjbbb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile16IsInstrumentUsedEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile16ProcessMidiMacroEjPKcj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile16m_nProLogicDelayE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile16m_nProLogicDepthE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile17DestroyInstrumentEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile17MapMidiInstrumentEjjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile17SetResamplingModeEj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile17m_nMaxMixChannelsE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile18FinePortamentoDownEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile18GetRawSongCommentsEPcjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile18ReadSampleFromSongEjPS_j@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile18SetXBassParametersEjj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile19DetectUnusedSamplesEPb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile19ExtendedMODCommandsEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile19ExtendedS3MCommandsEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile19SetReverbParametersEjj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile19gnVolumeRampSamplesE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile19m_nStereoSeparationE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile20FrequencyToTransposeEP14_MODINSTRUMENT@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile20FrequencyToTransposeEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile20Normalize24BitBufferEPhjjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile20TransposeToFrequencyEii@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile21ExtendedChannelEffectEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile21ExtraFinePortamentoUpEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile21RemoveSelectedSamplesEPb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile21SetSurroundParametersEjj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile21gpMixPluginCreateProcE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile22ReadInstrumentFromSongEjPS_j@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile23ExtraFinePortamentoDownEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile23RemoveInstrumentSamplesEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile4ReadEPvj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile5gnAGCE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile6CreateEPKhj@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile6KeyOffEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile6ReadITEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile6ReadXMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile6SetAGCEb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7DestroyEv@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile7NoteCutEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7Read669EPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadABCEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadAMFEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadAMSEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadDBMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadDMFEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadDSMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadFAREPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadJ2BEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadMDLEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadMIDEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadMT2EPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadMTMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadMedEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadModEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadOKTEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadPATEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadPSMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadPTMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadS3MEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadSTMEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadUMXEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadUltEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7ReadWavEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7TestABCEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7TestMIDEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7TestPATEPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7TremoloEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile7VibratoEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8CheckNNAEjjib@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8FadeSongEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8ReadAMS2EPKhj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8ReadNoteEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8ResetAGCEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8SetSpeedEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile8SetTempoEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile9GetLengthEbb@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFile9PanbrelloEP11_MODCHANNELj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZN10CSoundFile9gnVUMeterE@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFileC1Ev@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFileC2Ev@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFileD1Ev@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZN10CSoundFileD2Ev@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZNK10CSoundFile10S3MConvertEP11_MODCOMMANDb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile13GetCurrentPosEv@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZNK10CSoundFile13GetNNAChannelEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile13GetSampleNameEjPc@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14GetMaxPositionEv@LIBOPENMPT_MODPLUG1 0.2.7386~beta20.3
|
||||||
|
- _ZNK10CSoundFile14GetNumChannelsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14GetNumPatternsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14GetPatternNameEjPcj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14GetSaveFormatsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14IsSongFinishedEjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14ModSaveCommandEPK11_MODCOMMANDb@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile14S3MSaveConvertEPjS0_b@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17ConvertModCommandEP11_MODCOMMAND@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17CutOffToFrequencyEji@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetBestSaveFormatEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetFreqFromPeriodEjji@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetInstrumentNameEjPc@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetNoteFromPeriodEj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetNumInstrumentsEv@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile17GetPeriodFromNoteEjij@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile18SetupChannelFilterEP11_MODCHANNELbi@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
- _ZNK10CSoundFile19IsValidBackwardJumpEjjjj@LIBOPENMPT_MODPLUG1 0.2.7561~beta20.5
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/rules ./debian/rules
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/rules 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/rules 2019-01-04 17:03:16.206691071 -0500
|
||||||
|
@@ -11,9 +11,10 @@
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_autoreconf:
|
||||||
|
- dh_autoreconf --as-needed
|
||||||
|
+ autoreconf --force --install
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
+ debian/rules override_dh_autoreconf
|
||||||
|
dh_auto_configure -- --disable-static --enable-libopenmpt_modplug
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
40
libs/libopenmpt/debian/libopenmpt-0.4.0-xenial-backport.diff
Normal file
40
libs/libopenmpt/debian/libopenmpt-0.4.0-xenial-backport.diff
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/changelog ./debian/changelog
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/changelog 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/changelog 2019-01-04 16:37:08.788775423 -0500
|
||||||
|
@@ -1,3 +1,12 @@
|
||||||
|
+libopenmpt (0.4.0-ubuntu16.04.1~ppa10) xenial; urgency=medium
|
||||||
|
+
|
||||||
|
+ * Backport to Xenial
|
||||||
|
+ * automake build depend added
|
||||||
|
+ * debhelper depend adjusted to >= 9.0~
|
||||||
|
+ * deb compat level adjusted to 10
|
||||||
|
+
|
||||||
|
+ -- Sonic Team Junior <stjr@srb2.org> Fri, 04 Jan 2019 16:35:08 -0500
|
||||||
|
+
|
||||||
|
libopenmpt (0.4.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/compat ./debian/compat
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/compat 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/compat 2019-01-04 16:34:31.830370437 -0500
|
||||||
|
@@ -1 +1 @@
|
||||||
|
-11
|
||||||
|
+10
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/control ./debian/control
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/control 2018-12-24 16:43:58.000000000 -0500
|
||||||
|
+++ ./debian/control 2019-01-04 16:34:59.339499384 -0500
|
||||||
|
@@ -4,7 +4,8 @@
|
||||||
|
Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
|
||||||
|
Uploaders: James Cowgill <jcowgill@debian.org>
|
||||||
|
Build-Depends:
|
||||||
|
- debhelper (>= 11.1~),
|
||||||
|
+ automake,
|
||||||
|
+ debhelper (>= 9.0~),
|
||||||
|
dh-exec,
|
||||||
|
doxygen,
|
||||||
|
dpkg-dev (>= 1.18.0),
|
||||||
|
diff -uraN ../../orig/libopenmpt-0.4.0/debian/files ./debian/files
|
||||||
|
--- ../../orig/libopenmpt-0.4.0/debian/files 1969-12-31 19:00:00.000000000 -0500
|
||||||
|
+++ ./debian/files 2019-01-04 16:37:20.001229883 -0500
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+libopenmpt_0.4.0-ubuntu16.04.1~ppa10_source.buildinfo libs optional
|
1449
libs/libopenmpt/inc/libopenmpt/libopenmpt.h
Normal file
1449
libs/libopenmpt/inc/libopenmpt/libopenmpt.h
Normal file
File diff suppressed because it is too large
Load diff
1015
libs/libopenmpt/inc/libopenmpt/libopenmpt.hpp
Normal file
1015
libs/libopenmpt/inc/libopenmpt/libopenmpt.hpp
Normal file
File diff suppressed because it is too large
Load diff
204
libs/libopenmpt/inc/libopenmpt/libopenmpt_config.h
Normal file
204
libs/libopenmpt/inc/libopenmpt/libopenmpt_config.h
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_config.h
|
||||||
|
* -------------------
|
||||||
|
* Purpose: libopenmpt public interface configuration
|
||||||
|
* Notes : (currently none)
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_CONFIG_H
|
||||||
|
#define LIBOPENMPT_CONFIG_H
|
||||||
|
|
||||||
|
/*! \defgroup libopenmpt libopenmpt */
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* provoke warnings if already defined */
|
||||||
|
#define LIBOPENMPT_API
|
||||||
|
#undef LIBOPENMPT_API
|
||||||
|
#define LIBOPENMPT_CXX_API
|
||||||
|
#undef LIBOPENMPT_CXX_API
|
||||||
|
|
||||||
|
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_buffer.h exists. */
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_BUFFER
|
||||||
|
|
||||||
|
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_fd.h exists.
|
||||||
|
* \since 0.3
|
||||||
|
* \remarks
|
||||||
|
* Use the following to check for availability:
|
||||||
|
* \code
|
||||||
|
* #include <libopenmpt/libopenmpt.h>
|
||||||
|
* #if defined(LIBOPENMPT_STREAM_CALLBACKS_FD) || ((OPENMPT_API_VERSION_MAJOR == 0) && ((OPENMPT_API_VERSION_MINOR == 2) || (OPENMPT_API_VERSION_MINOR == 1)))
|
||||||
|
* #include <libopenmpt/libopenmpt_stream_callbacks_fd.h>
|
||||||
|
* #endif
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_FD
|
||||||
|
|
||||||
|
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_file.h exists.
|
||||||
|
* \since 0.3
|
||||||
|
* \remarks
|
||||||
|
* Use the following to check for availability:
|
||||||
|
* \code
|
||||||
|
* #include <libopenmpt/libopenmpt.h>
|
||||||
|
* #if defined(LIBOPENMPT_STREAM_CALLBACKS_FILE) || ((OPENMPT_API_VERSION_MAJOR == 0) && ((OPENMPT_API_VERSION_MINOR == 2) || (OPENMPT_API_VERSION_MINOR == 1)))
|
||||||
|
* #include <libopenmpt/libopenmpt_stream_callbacks_file.h>
|
||||||
|
* #endif
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_FILE
|
||||||
|
|
||||||
|
#if defined(__DOXYGEN__)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
|
||||||
|
#elif defined(__EMSCRIPTEN__)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT __attribute__((visibility("default"))) __attribute__((used))
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT __attribute__((visibility("default"))) __attribute__((used))
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default"))) __attribute__((used))
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#elif (defined(__GNUC__) || defined(__clang__)) && defined(_WIN32)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default")))
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#elif defined(__GNUC__) || defined(__clang__)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT __attribute__((visibility("default")))
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT __attribute__((visibility("default")))
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default")))
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define LIBOPENMPT_API_HELPER_EXPORT
|
||||||
|
#define LIBOPENMPT_API_HELPER_IMPORT
|
||||||
|
#define LIBOPENMPT_API_HELPER_PUBLIC
|
||||||
|
#define LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(LIBOPENMPT_BUILD_DLL)
|
||||||
|
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_EXPORT
|
||||||
|
#elif defined(LIBOPENMPT_USE_DLL)
|
||||||
|
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_IMPORT
|
||||||
|
#else
|
||||||
|
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_PUBLIC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#define LIBOPENMPT_CXX_API LIBOPENMPT_API
|
||||||
|
|
||||||
|
#if defined(LIBOPENMPT_USE_DLL)
|
||||||
|
#if defined(_MSC_VER) && !defined(_DLL)
|
||||||
|
#error "C++ interface is disabled if libopenmpt is built as a DLL and the runtime is statically linked. This is not supported by microsoft and cannot possibly work. Ever."
|
||||||
|
#undef LIBOPENMPT_CXX_API
|
||||||
|
#define LIBOPENMPT_CXX_API LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__EMSCRIPTEN__)
|
||||||
|
|
||||||
|
/* Only the C API is supported for emscripten. Disable the C++ API. */
|
||||||
|
#undef LIBOPENMPT_CXX_API
|
||||||
|
#define LIBOPENMPT_CXX_API LIBOPENMPT_API_HELPER_LOCAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* C */
|
||||||
|
|
||||||
|
#if !defined(LIBOPENMPT_NO_DEPRECATE)
|
||||||
|
#if defined(__clang__)
|
||||||
|
#define LIBOPENMPT_DEPRECATED __attribute__((deprecated))
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
#define LIBOPENMPT_DEPRECATED __attribute__((deprecated))
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define LIBOPENMPT_DEPRECATED __declspec(deprecated)
|
||||||
|
#else
|
||||||
|
#define LIBOPENMPT_DEPRECATED
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#if !defined(LIBOPENMPT_NO_DEPRECATE)
|
||||||
|
LIBOPENMPT_DEPRECATED static const int LIBOPENMPT_DEPRECATED_STRING_CONSTANT = 0;
|
||||||
|
#define LIBOPENMPT_DEPRECATED_STRING( str ) ( LIBOPENMPT_DEPRECATED_STRING_CONSTANT ? ( str ) : ( str ) )
|
||||||
|
#else
|
||||||
|
#define LIBOPENMPT_DEPRECATED_STRING( str ) str
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* C++ */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED
|
||||||
|
/* handle known broken compilers here by defining LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED appropriately */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(LIBOPENMPT_ASSUME_CPLUSPLUS)
|
||||||
|
#ifndef LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED
|
||||||
|
#define LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED LIBOPENMPT_ASSUME_CPLUSPLUS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(LIBOPENMPT_NO_DEPRECATE)
|
||||||
|
#if defined(LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED)
|
||||||
|
#if (LIBOPENMPT_ASSUME_CPLUSPLUS_DEPRECATED >= 201402L)
|
||||||
|
#define LIBOPENMPT_ATTR_DEPRECATED [[deprecated]]
|
||||||
|
#undef LIBOPENMPT_DEPRECATED
|
||||||
|
#define LIBOPENMPT_DEPRECATED
|
||||||
|
#else
|
||||||
|
#define LIBOPENMPT_ATTR_DEPRECATED
|
||||||
|
#endif
|
||||||
|
#elif (__cplusplus >= 201402L)
|
||||||
|
#define LIBOPENMPT_ATTR_DEPRECATED [[deprecated]]
|
||||||
|
#undef LIBOPENMPT_DEPRECATED
|
||||||
|
#define LIBOPENMPT_DEPRECATED
|
||||||
|
#else
|
||||||
|
#define LIBOPENMPT_ATTR_DEPRECATED
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#undef LIBOPENMPT_DEPRECATED
|
||||||
|
#define LIBOPENMPT_DEPRECATED
|
||||||
|
#define LIBOPENMPT_ATTR_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include "libopenmpt_version.h"
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_CONFIG_H */
|
318
libs/libopenmpt/inc/libopenmpt/libopenmpt_ext.h
Normal file
318
libs/libopenmpt/inc/libopenmpt/libopenmpt_ext.h
Normal file
|
@ -0,0 +1,318 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_ext.h
|
||||||
|
* ----------------
|
||||||
|
* Purpose: libopenmpt public c interface for libopenmpt extensions
|
||||||
|
* Notes :
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_H
|
||||||
|
#define LIBOPENMPT_EXT_H
|
||||||
|
|
||||||
|
#include "libopenmpt_config.h"
|
||||||
|
#include "libopenmpt.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \page libopenmpt_ext_c_overview libopenmpt_ext C API
|
||||||
|
*
|
||||||
|
* libopenmpt_ext is included in all builds by default.
|
||||||
|
*
|
||||||
|
* \section libopenmpt-ext-c-detailed Detailed documentation
|
||||||
|
*
|
||||||
|
* \ref libopenmpt_ext_c
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \defgroup libopenmpt_ext_c libopenmpt_ext C */
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt_ext_c
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \brief Opaque type representing a libopenmpt extension module
|
||||||
|
*/
|
||||||
|
typedef struct openmpt_module_ext openmpt_module_ext;
|
||||||
|
|
||||||
|
/*! \brief Construct an openmpt_module_ext
|
||||||
|
*
|
||||||
|
* \param stream_callbacks Input stream callback operations.
|
||||||
|
* \param stream Input stream to load the module from.
|
||||||
|
* \param logfunc Logging function where warning and errors are written. The logging function may be called throughout the lifetime of openmpt_module_ext. May be NULL.
|
||||||
|
* \param loguser User-defined data associated with this module. This value will be passed to the logging callback function (logfunc)
|
||||||
|
* \param errfunc Error function to define error behaviour. May be NULL.
|
||||||
|
* \param erruser Error function user context. Used to pass any user-defined data associated with this module to the logging function.
|
||||||
|
* \param error Pointer to an integer where an error may get stored. May be NULL.
|
||||||
|
* \param error_message Pointer to a string pointer where an error message may get stored. May be NULL.
|
||||||
|
* \param ctls A map of initial ctl values, see openmpt_module_get_ctls.
|
||||||
|
* \return A pointer to the constructed openmpt_module_ext, or NULL on failure.
|
||||||
|
* \remarks The input data can be discarded after an openmpt_module_ext has been constructed successfully.
|
||||||
|
* \sa openmpt_stream_callbacks
|
||||||
|
* \sa \ref libopenmpt_c_fileio
|
||||||
|
* \since 0.3.0
|
||||||
|
*/
|
||||||
|
LIBOPENMPT_API openmpt_module_ext * openmpt_module_ext_create( openmpt_stream_callbacks stream_callbacks, void * stream, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
|
||||||
|
|
||||||
|
/*! \brief Construct an openmpt_module_ext
|
||||||
|
*
|
||||||
|
* \param filedata Data to load the module from.
|
||||||
|
* \param filesize Amount of data available.
|
||||||
|
* \param logfunc Logging function where warning and errors are written. The logging function may be called throughout the lifetime of openmpt_module_ext.
|
||||||
|
* \param loguser User-defined data associated with this module. This value will be passed to the logging callback function (logfunc)
|
||||||
|
* \param errfunc Error function to define error behaviour. May be NULL.
|
||||||
|
* \param erruser Error function user context. Used to pass any user-defined data associated with this module to the logging function.
|
||||||
|
* \param error Pointer to an integer where an error may get stored. May be NULL.
|
||||||
|
* \param error_message Pointer to a string pointer where an error message may get stored. May be NULL.
|
||||||
|
* \param ctls A map of initial ctl values, see openmpt_module_get_ctls.
|
||||||
|
* \return A pointer to the constructed openmpt_module_ext, or NULL on failure.
|
||||||
|
* \remarks The input data can be discarded after an openmpt_module_ext has been constructed successfully.
|
||||||
|
* \sa \ref libopenmpt_c_fileio
|
||||||
|
* \since 0.3.0
|
||||||
|
*/
|
||||||
|
LIBOPENMPT_API openmpt_module_ext * openmpt_module_ext_create_from_memory( const void * filedata, size_t filesize, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
|
||||||
|
|
||||||
|
/*! \brief Unload a previously created openmpt_module_ext from memory.
|
||||||
|
*
|
||||||
|
* \param mod_ext The module to unload.
|
||||||
|
*/
|
||||||
|
LIBOPENMPT_API void openmpt_module_ext_destroy( openmpt_module_ext * mod_ext );
|
||||||
|
|
||||||
|
/*! \brief Retrieve the openmpt_module handle from an openmpt_module_ext handle.
|
||||||
|
*
|
||||||
|
* \param mod_ext The extension module handle to convert
|
||||||
|
* \return An equivalent openmpt_module handle to pass to standard libopenmpt functions
|
||||||
|
* \since 0.3.0
|
||||||
|
*/
|
||||||
|
LIBOPENMPT_API openmpt_module * openmpt_module_ext_get_module( openmpt_module_ext * mod_ext );
|
||||||
|
|
||||||
|
/*! Retrieve a libopenmpt extension.
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param interface_id The name of the extension interface to retrieve (e.g. LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS).
|
||||||
|
* \param interface Appropriate structure of interface function pointers which is to be filled by this function (e.g. a pointer to a openmpt_module_ext_interface_pattern_vis structure).
|
||||||
|
* \param interface_size Size of the interface's structure of function pointers (e.g. sizeof(openmpt_module_ext_interface_pattern_vis)).
|
||||||
|
* \return 1 on success, 0 if the interface was not found.
|
||||||
|
* \since 0.3.0
|
||||||
|
*/
|
||||||
|
LIBOPENMPT_API int openmpt_module_ext_get_interface( openmpt_module_ext * mod_ext, const char * interface_id, void * interface, size_t interface_size );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS
|
||||||
|
#define LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS "pattern_vis"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*! Pattern command type */
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_UNKNOWN 0
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_GENERAL 1
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_GLOBAL 2
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_VOLUME 3
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_PANNING 4
|
||||||
|
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_PITCH 5
|
||||||
|
|
||||||
|
typedef struct openmpt_module_ext_interface_pattern_vis {
|
||||||
|
/*! Get pattern command type for pattern highlighting
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param pattern The pattern whose data should be retrieved.
|
||||||
|
* \param row The row from which the data should be retrieved.
|
||||||
|
* \param channel The channel from which the data should be retrieved.
|
||||||
|
* \return The command type in the effect column at the given pattern position (see OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_*)
|
||||||
|
* \sa openmpt_module_ext_interface_pattern_vis::get_pattern_row_channel_volume_effect_type
|
||||||
|
*/
|
||||||
|
int ( * get_pattern_row_channel_volume_effect_type ) ( openmpt_module_ext * mod_ext, int32_t pattern, int32_t row, int32_t channel );
|
||||||
|
|
||||||
|
/*! Get pattern command type for pattern highlighting
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param pattern The pattern whose data should be retrieved.
|
||||||
|
* \param row The row from which the data should be retrieved.
|
||||||
|
* \param channel The channel from which the data should be retrieved.
|
||||||
|
* \return The command type in the effect column at the given pattern position (see OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_*)
|
||||||
|
* \sa openmpt_module_ext_interface_pattern_vis::get_pattern_row_channel_volume_effect_type
|
||||||
|
*/
|
||||||
|
int ( * get_pattern_row_channel_effect_type ) ( openmpt_module_ext * mod_ext, int32_t pattern, int32_t row, int32_t channel );
|
||||||
|
} openmpt_module_ext_interface_pattern_vis;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE
|
||||||
|
#define LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE "interactive"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct openmpt_module_ext_interface_interactive {
|
||||||
|
/*! Set the current ticks per row (speed)
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param speed The new tick count in range [1, 65535].
|
||||||
|
* \return 1 on success, 0 on failure.
|
||||||
|
* \remarks The tick count may be reset by pattern commands at any time.
|
||||||
|
* \sa openmpt_module_get_current_speed
|
||||||
|
*/
|
||||||
|
int ( * set_current_speed ) ( openmpt_module_ext * mod_ext, int32_t speed );
|
||||||
|
|
||||||
|
/*! Set the current module tempo
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param tempo The new tempo in range [32, 512]. The exact meaning of the value depends on the tempo mode used by the module.
|
||||||
|
* \return 1 on success, 0 on failure.
|
||||||
|
* \remarks The tempo may be reset by pattern commands at any time. Use openmpt_module_ext_interface_interactive::set_tempo_factor to apply a tempo factor that is independent of pattern commands.
|
||||||
|
* \sa openmpt_module_get_current_tempo
|
||||||
|
*/
|
||||||
|
int ( * set_current_tempo ) ( openmpt_module_ext * mod_ext, int32_t tempo );
|
||||||
|
|
||||||
|
/*! Set the current module tempo factor without affecting playback pitch
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param factor The new tempo factor in range ]0.0, 4.0] - 1.0 means unmodified tempo.
|
||||||
|
* \return 1 on success, 0 on failure.
|
||||||
|
* \remarks Modifying the tempo without applying the same pitch factor using openmpt_module_ext_interface_interactive::set_pitch_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_tempo_factor
|
||||||
|
*/
|
||||||
|
int ( * set_tempo_factor ) ( openmpt_module_ext * mod_ext, double factor );
|
||||||
|
|
||||||
|
/*! Gets the current module tempo factor
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \return The current tempo factor.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_tempo_factor
|
||||||
|
*/
|
||||||
|
double ( * get_tempo_factor ) ( openmpt_module_ext * mod_ext );
|
||||||
|
|
||||||
|
/*! Set the current module pitch factor without affecting playback speed
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param factor The new pitch factor in range ]0.0, 4.0] - 1.0 means unmodified pitch.
|
||||||
|
* \return 1 on success, 0 on failure.
|
||||||
|
* \remarks Modifying the pitch without applying the the same tempo factor using openmpt_module_ext_interface_interactive::set_tempo_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
|
||||||
|
* \remarks To shift the pich by `n` semitones, the parameter can be calculated as follows: `pow( 2.0, n / 12.0 )`
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_pitch_factor
|
||||||
|
*/
|
||||||
|
int ( * set_pitch_factor ) ( openmpt_module_ext * mod_ext, double factor );
|
||||||
|
|
||||||
|
/*! Gets the current module pitch factor
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \return The current pitch factor.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_pitch_factor
|
||||||
|
*/
|
||||||
|
double ( * get_pitch_factor ) ( openmpt_module_ext * mod_ext );
|
||||||
|
|
||||||
|
/*! Set the current global volume
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param volume The new global volume in range [0.0, 1.0]
|
||||||
|
* \return 1 on success, 0 on failure.
|
||||||
|
* \remarks The global volume may be reset by pattern commands at any time. Use openmpt_module_set_render_param to apply a global overall volume factor that is independent of pattern commands.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_global_volume
|
||||||
|
*/
|
||||||
|
int ( * set_global_volume ) ( openmpt_module_ext * mod_ext, double volume );
|
||||||
|
|
||||||
|
/*! Get the current global volume
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \return The current global volume in range [0.0, 1.0]
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_global_volume
|
||||||
|
*/
|
||||||
|
double ( * get_global_volume ) ( openmpt_module_ext * mod_ext );
|
||||||
|
|
||||||
|
/*! Set the current channel volume for a channel
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param channel The channel whose volume should be set, in range [0, openmpt_module_get_num_channels()[
|
||||||
|
* \param volume The new channel volume in range [0.0, 1.0]
|
||||||
|
* \return 1 on success, 0 on failure (channel out of range).
|
||||||
|
* \remarks The channel volume may be reset by pattern commands at any time.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_channel_volume
|
||||||
|
*/
|
||||||
|
int ( * set_channel_volume ) ( openmpt_module_ext * mod_ext, int32_t channel, double volume );
|
||||||
|
|
||||||
|
/*! Get the current channel volume for a channel
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param channel The channel whose volume should be retrieved, in range [0, openmpt_module_get_num_channels()[
|
||||||
|
* \return The current channel volume in range [0.0, 1.0]
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_channel_volume
|
||||||
|
*/
|
||||||
|
double ( * get_channel_volume ) ( openmpt_module_ext * mod_ext, int32_t channel );
|
||||||
|
|
||||||
|
/*! Set the current mute status for a channel
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param channel The channel whose mute status should be set, in range [0, openmpt_module_get_num_channels()[
|
||||||
|
* \param mute The new mute status. true is muted, false is unmuted.
|
||||||
|
* \return 1 on success, 0 on failure (channel out of range).
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_channel_mute_status
|
||||||
|
*/
|
||||||
|
int ( * set_channel_mute_status ) ( openmpt_module_ext * mod_ext, int32_t channel, int mute );
|
||||||
|
|
||||||
|
/*! Get the current mute status for a channel
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param channel The channel whose mute status should be retrieved, in range [0, openmpt_module_get_num_channels()[
|
||||||
|
* \return The current channel mute status. 1 is muted, 0 is unmuted, -1 means the instrument was out of range
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_channel_mute_status
|
||||||
|
*/
|
||||||
|
int ( * get_channel_mute_status ) ( openmpt_module_ext * mod_ext, int32_t channel );
|
||||||
|
|
||||||
|
/*! Set the current mute status for an instrument
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param instrument The instrument whose mute status should be set, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
|
||||||
|
* \param mute The new mute status. true is muted, false is unmuted.
|
||||||
|
* \return 1 on success, 0 on failure (instrument out of range).
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::get_instrument_mute_status
|
||||||
|
*/
|
||||||
|
int ( * set_instrument_mute_status ) ( openmpt_module_ext * mod_ext, int32_t instrument, int mute );
|
||||||
|
|
||||||
|
/*! Get the current mute status for an instrument
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param instrument The instrument whose mute status should be retrieved, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
|
||||||
|
* \return The current instrument mute status. 1 is muted, 0 is unmuted, -1 means the instrument was out of range
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::set_instrument_mute_status
|
||||||
|
*/
|
||||||
|
int ( * get_instrument_mute_status ) ( openmpt_module_ext * mod_ext, int32_t instrument );
|
||||||
|
|
||||||
|
/*! Play a note using the specified instrument
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param instrument The instrument that should be played, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
|
||||||
|
* \param note The note to play, in rage [0, 119]. 60 is the middle C.
|
||||||
|
* \param volume The volume at which the note should be triggered, in range [0.0, 1.0]
|
||||||
|
* \param panning The panning position at which the note should be triggered, in range [-1.0, 1.0], 0.0 is center.
|
||||||
|
* \return The channel on which the note is played. This can pe be passed to openmpt_module_ext_interface_interactive::stop_note to stop the note. -1 means that no channel could be allocated and the note is not played.
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::stop_note
|
||||||
|
*/
|
||||||
|
int32_t ( * play_note ) ( openmpt_module_ext * mod_ext, int32_t instrument, int32_t note, double volume, double panning );
|
||||||
|
|
||||||
|
/*! Stop the note playing on the specified channel
|
||||||
|
*
|
||||||
|
* \param mod_ext The module handle to work on.
|
||||||
|
* \param channel The channel on which the note should be stopped.
|
||||||
|
* \return 1 on success, 0 on failure (channel out of range).
|
||||||
|
* \sa openmpt_module_ext_interface_interactive::play_note
|
||||||
|
*/
|
||||||
|
int ( * stop_note ) ( openmpt_module_ext * mod_ext, int32_t channel );
|
||||||
|
} openmpt_module_ext_interface_interactive;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* add stuff here */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_EXT_H */
|
||||||
|
|
306
libs/libopenmpt/inc/libopenmpt/libopenmpt_ext.hpp
Normal file
306
libs/libopenmpt/inc/libopenmpt/libopenmpt_ext.hpp
Normal file
|
@ -0,0 +1,306 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_ext.hpp
|
||||||
|
* ------------------
|
||||||
|
* Purpose: libopenmpt public c++ interface for libopenmpt extensions
|
||||||
|
* Notes :
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_HPP
|
||||||
|
#define LIBOPENMPT_EXT_HPP
|
||||||
|
|
||||||
|
#include "libopenmpt_config.h"
|
||||||
|
#include "libopenmpt.hpp"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \page libopenmpt_ext_cpp_overview libopenmpt_ext C++ API
|
||||||
|
*
|
||||||
|
* libopenmpt_ext is now included in all builds by default.
|
||||||
|
*
|
||||||
|
* \section libopenmpt-ext-cpp-detailed Detailed documentation
|
||||||
|
*
|
||||||
|
* \ref libopenmpt_ext_cpp
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \defgroup libopenmpt_ext_cpp libopenmpt_ext C++ */
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt_ext_cpp
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace openmpt {
|
||||||
|
|
||||||
|
class module_ext_impl;
|
||||||
|
|
||||||
|
class LIBOPENMPT_CXX_API module_ext : public module {
|
||||||
|
|
||||||
|
private:
|
||||||
|
module_ext_impl * ext_impl;
|
||||||
|
private:
|
||||||
|
// non-copyable
|
||||||
|
module_ext( const module_ext & );
|
||||||
|
void operator = ( const module_ext & );
|
||||||
|
public:
|
||||||
|
module_ext( std::istream & stream, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
|
||||||
|
module_ext( const std::vector<char> & data, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
|
||||||
|
module_ext( const char * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
|
||||||
|
module_ext( const void * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
|
||||||
|
virtual ~module_ext();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Retrieve a libopenmpt extension.
|
||||||
|
/*! Example: Retrieving the interactive extension to change the tempo of a module:
|
||||||
|
\code{.cpp}
|
||||||
|
openmpt::module_ext *mod = new openmpt::module_ext( stream );
|
||||||
|
#ifdef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
|
||||||
|
openmpt::ext::interactive *interactive = static_cast<openmpt::ext::interactive *>( self->mod->get_interface( openmpt::ext::interactive_id ) );
|
||||||
|
if ( interactive ) {
|
||||||
|
interactive->set_tempo_factor( 2.0 ); // play module at double speed
|
||||||
|
} else {
|
||||||
|
// interface not available
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// interfae not available
|
||||||
|
#endif
|
||||||
|
\endcode
|
||||||
|
\param interface_id The name of the extension interface to retrieve.
|
||||||
|
\return The interface object. This may be a nullptr if the extension was not found.
|
||||||
|
*/
|
||||||
|
void * get_interface( const std::string & interface_id );
|
||||||
|
|
||||||
|
}; // class module_ext
|
||||||
|
|
||||||
|
namespace ext {
|
||||||
|
|
||||||
|
#define LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(name) \
|
||||||
|
static const char name ## _id [] = # name ; \
|
||||||
|
class name; \
|
||||||
|
/**/
|
||||||
|
|
||||||
|
#define LIBOPENMPT_EXT_CXX_INTERFACE(name) \
|
||||||
|
protected: \
|
||||||
|
name () {} \
|
||||||
|
virtual ~ name () {} \
|
||||||
|
public: \
|
||||||
|
/**/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_INTERFACE_PATTERN_VIS
|
||||||
|
#define LIBOPENMPT_EXT_INTERFACE_PATTERN_VIS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(pattern_vis)
|
||||||
|
|
||||||
|
class pattern_vis {
|
||||||
|
|
||||||
|
LIBOPENMPT_EXT_CXX_INTERFACE(pattern_vis)
|
||||||
|
|
||||||
|
//! Pattern command type
|
||||||
|
enum effect_type {
|
||||||
|
|
||||||
|
effect_unknown = 0,
|
||||||
|
effect_general = 1,
|
||||||
|
effect_global = 2,
|
||||||
|
effect_volume = 3,
|
||||||
|
effect_panning = 4,
|
||||||
|
effect_pitch = 5
|
||||||
|
|
||||||
|
}; // enum effect_type
|
||||||
|
|
||||||
|
//! Get pattern command type for pattern highlighting
|
||||||
|
/*!
|
||||||
|
\param pattern The pattern whose data should be retrieved.
|
||||||
|
\param row The row from which the data should be retrieved.
|
||||||
|
\param channel The channel from which the data should be retrieved.
|
||||||
|
\return The command type in the effect column at the given pattern position (see openmpt::ext::pattern_vis::effect_type)
|
||||||
|
\sa openmpt::ext::pattern_vis::get_pattern_row_channel_effect_type
|
||||||
|
*/
|
||||||
|
virtual effect_type get_pattern_row_channel_volume_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
|
||||||
|
|
||||||
|
//! Get pattern command type for pattern highlighting
|
||||||
|
/*!
|
||||||
|
\param pattern The pattern whose data should be retrieved.
|
||||||
|
\param row The row from which the data should be retrieved.
|
||||||
|
\param channel The channel from which the data should be retrieved.
|
||||||
|
\return The command type in the volume column at the given pattern position (see openmpt::ext::pattern_vis::effect_type)
|
||||||
|
\sa openmpt::ext::pattern_vis::get_pattern_row_channel_volume_effect_type
|
||||||
|
*/
|
||||||
|
virtual effect_type get_pattern_row_channel_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
|
||||||
|
|
||||||
|
}; // class pattern_vis
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
|
||||||
|
#define LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(interactive)
|
||||||
|
|
||||||
|
class interactive {
|
||||||
|
|
||||||
|
LIBOPENMPT_EXT_CXX_INTERFACE(interactive)
|
||||||
|
|
||||||
|
//! Set the current ticks per row (speed)
|
||||||
|
/*!
|
||||||
|
\param speed The new tick count in range [1, 65535].
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the speed is outside the specified range.
|
||||||
|
\remarks The tick count may be reset by pattern commands at any time.
|
||||||
|
\sa openmpt::module::get_current_speed
|
||||||
|
*/
|
||||||
|
virtual void set_current_speed( std::int32_t speed ) = 0;
|
||||||
|
|
||||||
|
//! Set the current module tempo
|
||||||
|
/*!
|
||||||
|
\param tempo The new tempo in range [32, 512]. The exact meaning of the value depends on the tempo mode used by the module.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the tempo is outside the specified range.
|
||||||
|
\remarks The tempo may be reset by pattern commands at any time. Use openmpt::ext:interactive::set_tempo_factor to apply a tempo factor that is independent of pattern commands.
|
||||||
|
\sa openmpt::module::get_current_tempo
|
||||||
|
*/
|
||||||
|
virtual void set_current_tempo( std::int32_t tempo ) = 0;
|
||||||
|
|
||||||
|
//! Set the current module tempo factor without affecting playback pitch
|
||||||
|
/*!
|
||||||
|
\param factor The new tempo factor in range ]0.0, 4.0] - 1.0 means unmodified tempo.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the factor is outside the specified range.
|
||||||
|
\remarks Modifying the tempo without applying the same pitch factor using openmpt::ext::interactive::set_pitch_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
|
||||||
|
\sa openmpt::ext::interactive::get_tempo_factor
|
||||||
|
*/
|
||||||
|
virtual void set_tempo_factor( double factor ) = 0;
|
||||||
|
|
||||||
|
//! Gets the current module tempo factor
|
||||||
|
/*!
|
||||||
|
\return The current tempo factor.
|
||||||
|
\sa openmpt::ext::interactive::set_tempo_factor
|
||||||
|
*/
|
||||||
|
virtual double get_tempo_factor( ) const = 0;
|
||||||
|
|
||||||
|
//! Set the current module pitch factor without affecting playback speed
|
||||||
|
/*!
|
||||||
|
\param factor The new pitch factor in range ]0.0, 4.0] - 1.0 means unmodified pitch.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the factor is outside the specified range.
|
||||||
|
\remarks Modifying the pitch without applying the the same tempo factor using openmpt::ext::interactive::set_tempo_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
|
||||||
|
\remarks To shift the pich by `n` semitones, the parameter can be calculated as follows: `pow( 2.0, n / 12.0 )`
|
||||||
|
\sa openmpt::ext::interactive::get_pitch_factor
|
||||||
|
*/
|
||||||
|
virtual void set_pitch_factor( double factor ) = 0;
|
||||||
|
|
||||||
|
//! Gets the current module pitch factor
|
||||||
|
/*!
|
||||||
|
\return The current pitch factor.
|
||||||
|
\sa openmpt::ext::interactive::set_pitch_factor
|
||||||
|
*/
|
||||||
|
virtual double get_pitch_factor( ) const = 0;
|
||||||
|
|
||||||
|
//! Set the current global volume
|
||||||
|
/*!
|
||||||
|
\param volume The new global volume in range [0.0, 1.0]
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the volume is outside the specified range.
|
||||||
|
\remarks The global volume may be reset by pattern commands at any time. Use openmpt::module::set_render_param to apply a global overall volume factor that is independent of pattern commands.
|
||||||
|
\sa openmpt::ext::interactive::get_global_volume
|
||||||
|
*/
|
||||||
|
virtual void set_global_volume( double volume ) = 0;
|
||||||
|
|
||||||
|
//! Get the current global volume
|
||||||
|
/*!
|
||||||
|
\return The current global volume in range [0.0, 1.0]
|
||||||
|
\sa openmpt::ext::interactive::set_global_volume
|
||||||
|
*/
|
||||||
|
virtual double get_global_volume( ) const = 0;
|
||||||
|
|
||||||
|
//! Set the current channel volume for a channel
|
||||||
|
/*!
|
||||||
|
\param channel The channel whose volume should be set, in range [0, openmpt::module::get_num_channels()[
|
||||||
|
\param volume The new channel volume in range [0.0, 1.0]
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel or volume is outside the specified range.
|
||||||
|
\remarks The channel volume may be reset by pattern commands at any time.
|
||||||
|
\sa openmpt::ext::interactive::get_channel_volume
|
||||||
|
*/
|
||||||
|
virtual void set_channel_volume( std::int32_t channel, double volume ) = 0;
|
||||||
|
|
||||||
|
//! Get the current channel volume for a channel
|
||||||
|
/*!
|
||||||
|
\param channel The channel whose volume should be retrieved, in range [0, openmpt::module::get_num_channels()[
|
||||||
|
\return The current channel volume in range [0.0, 1.0]
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::set_channel_volume
|
||||||
|
*/
|
||||||
|
virtual double get_channel_volume( std::int32_t channel ) const = 0;
|
||||||
|
|
||||||
|
//! Set the current mute status for a channel
|
||||||
|
/*!
|
||||||
|
\param channel The channel whose mute status should be set, in range [0, openmpt::module::get_num_channels()[
|
||||||
|
\param mute The new mute status. true is muted, false is unmuted.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::get_channel_mute_status
|
||||||
|
*/
|
||||||
|
virtual void set_channel_mute_status( std::int32_t channel, bool mute ) = 0;
|
||||||
|
|
||||||
|
//! Get the current mute status for a channel
|
||||||
|
/*!
|
||||||
|
\param channel The channel whose mute status should be retrieved, in range [0, openmpt::module::get_num_channels()[
|
||||||
|
\return The current channel mute status. true is muted, false is unmuted.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::set_channel_mute_status
|
||||||
|
*/
|
||||||
|
virtual bool get_channel_mute_status( std::int32_t channel ) const = 0;
|
||||||
|
|
||||||
|
//! Set the current mute status for an instrument
|
||||||
|
/*!
|
||||||
|
\param instrument The instrument whose mute status should be set, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
|
||||||
|
\param mute The new mute status. true is muted, false is unmuted.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::get_instrument_mute_status
|
||||||
|
*/
|
||||||
|
virtual void set_instrument_mute_status( std::int32_t instrument, bool mute ) = 0;
|
||||||
|
|
||||||
|
//! Get the current mute status for an instrument
|
||||||
|
/*!
|
||||||
|
\param instrument The instrument whose mute status should be retrieved, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
|
||||||
|
\return The current instrument mute status. true is muted, false is unmuted.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::set_instrument_mute_status
|
||||||
|
*/
|
||||||
|
virtual bool get_instrument_mute_status( std::int32_t instrument ) const = 0;
|
||||||
|
|
||||||
|
//! Play a note using the specified instrument
|
||||||
|
/*!
|
||||||
|
\param instrument The instrument that should be played, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
|
||||||
|
\param note The note to play, in rage [0, 119]. 60 is the middle C.
|
||||||
|
\param volume The volume at which the note should be triggered, in range [0.0, 1.0]
|
||||||
|
\param panning The panning position at which the note should be triggered, in range [-1.0, 1.0], 0.0 is center.
|
||||||
|
\return The channel on which the note is played. This can pe be passed to openmpt::ext::interactive::stop_note to stop the note.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument or note is outside the specified range.
|
||||||
|
\sa openmpt::ext::interactive::stop_note
|
||||||
|
*/
|
||||||
|
virtual std::int32_t play_note( std::int32_t instrument, std::int32_t note, double volume, double panning ) = 0;
|
||||||
|
|
||||||
|
//! Stop the note playing on the specified channel
|
||||||
|
/*!
|
||||||
|
\param channel The channel on which the note should be stopped.
|
||||||
|
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel index is invalid.
|
||||||
|
\sa openmpt::ext::interactive::play_note
|
||||||
|
*/
|
||||||
|
virtual void stop_note( std::int32_t channel ) = 0;
|
||||||
|
|
||||||
|
}; // class interactive
|
||||||
|
|
||||||
|
|
||||||
|
/* add stuff here */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#undef LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE
|
||||||
|
#undef LIBOPENMPT_EXT_CXX_INTERFACE
|
||||||
|
|
||||||
|
} // namespace ext
|
||||||
|
|
||||||
|
} // namespace openmpt
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif // LIBOPENMPT_EXT_HPP
|
|
@ -0,0 +1,198 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_stream_callbacks_buffer.h
|
||||||
|
* ------------------------------------
|
||||||
|
* Purpose: libopenmpt public c interface
|
||||||
|
* Notes : (currently none)
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H
|
||||||
|
|
||||||
|
#include "libopenmpt.h"
|
||||||
|
|
||||||
|
/* The use of this header requires:
|
||||||
|
|
||||||
|
#include <libopenmpt/libopenmpt.h>
|
||||||
|
#if defined( LIBOPENMPT_STREAM_CALLBACKS_BUFFER )
|
||||||
|
#include <libopenmpt/libopenmpt_stream_callbacks_buffer.h>
|
||||||
|
#else
|
||||||
|
#error "libopenmpt too old."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt_c
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct openmpt_stream_buffer {
|
||||||
|
const void * file_data; /* or prefix data IFF prefix_size < file_size */
|
||||||
|
int64_t file_size;
|
||||||
|
int64_t file_pos;
|
||||||
|
int64_t prefix_size;
|
||||||
|
int overflow;
|
||||||
|
} openmpt_stream_buffer;
|
||||||
|
|
||||||
|
static size_t openmpt_stream_buffer_read_func( void * stream, void * dst, size_t bytes ) {
|
||||||
|
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
|
||||||
|
int64_t offset = 0;
|
||||||
|
int64_t begpos = 0;
|
||||||
|
int64_t endpos = 0;
|
||||||
|
size_t valid_bytes = 0;
|
||||||
|
if ( !s ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
offset = bytes;
|
||||||
|
begpos = s->file_pos;
|
||||||
|
endpos = s->file_pos;
|
||||||
|
valid_bytes = 0;
|
||||||
|
endpos = (uint64_t)endpos + (uint64_t)offset;
|
||||||
|
if ( ( offset > 0 ) && !( (uint64_t)endpos > (uint64_t)begpos ) ) {
|
||||||
|
/* integer wrapped */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( bytes == 0 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( begpos >= s->file_size ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( endpos > s->file_size ) {
|
||||||
|
/* clip to eof */
|
||||||
|
bytes = bytes - (size_t)( endpos - s->file_size );
|
||||||
|
endpos = endpos - ( endpos - s->file_size );
|
||||||
|
}
|
||||||
|
memset( dst, 0, bytes );
|
||||||
|
if ( begpos >= s->prefix_size ) {
|
||||||
|
s->overflow = 1;
|
||||||
|
valid_bytes = 0;
|
||||||
|
} else if ( endpos > s->prefix_size ) {
|
||||||
|
s->overflow = 1;
|
||||||
|
valid_bytes = bytes - (size_t)( endpos - s->prefix_size );
|
||||||
|
} else {
|
||||||
|
valid_bytes = bytes;
|
||||||
|
}
|
||||||
|
memcpy( dst, (const char*)s->file_data + s->file_pos, valid_bytes );
|
||||||
|
s->file_pos = s->file_pos + bytes;
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int openmpt_stream_buffer_seek_func( void * stream, int64_t offset, int whence ) {
|
||||||
|
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
|
||||||
|
int result = -1;
|
||||||
|
if ( !s ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
switch ( whence ) {
|
||||||
|
case OPENMPT_STREAM_SEEK_SET:
|
||||||
|
if ( offset < 0 ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ( offset > s->file_size ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
s->file_pos = offset;
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
case OPENMPT_STREAM_SEEK_CUR:
|
||||||
|
do {
|
||||||
|
int64_t oldpos = s->file_pos;
|
||||||
|
int64_t pos = s->file_pos;
|
||||||
|
pos = (uint64_t)pos + (uint64_t)offset;
|
||||||
|
if ( ( offset > 0 ) && !( (uint64_t)pos > (uint64_t)oldpos ) ) {
|
||||||
|
/* integer wrapped */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ( ( offset < 0 ) && !( (uint64_t)pos < (uint64_t)oldpos ) ) {
|
||||||
|
/* integer wrapped */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
s->file_pos = pos;
|
||||||
|
} while(0);
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
case OPENMPT_STREAM_SEEK_END:
|
||||||
|
if ( offset > 0 ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
int64_t oldpos = s->file_pos;
|
||||||
|
int64_t pos = s->file_pos;
|
||||||
|
pos = s->file_size;
|
||||||
|
pos = (uint64_t)pos + (uint64_t)offset;
|
||||||
|
if ( ( offset < 0 ) && !( (uint64_t)pos < (uint64_t)oldpos ) ) {
|
||||||
|
/* integer wrapped */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
s->file_pos = pos;
|
||||||
|
} while(0);
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int64_t openmpt_stream_buffer_tell_func( void * stream ) {
|
||||||
|
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
|
||||||
|
if ( !s ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return s->file_pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void openmpt_stream_buffer_init( openmpt_stream_buffer * buffer, const void * file_data, int64_t file_size ) {
|
||||||
|
memset( buffer, 0, sizeof( openmpt_stream_buffer ) );
|
||||||
|
buffer->file_data = file_data;
|
||||||
|
buffer->file_size = file_size;
|
||||||
|
buffer->file_pos = 0;
|
||||||
|
buffer->prefix_size = file_size;
|
||||||
|
buffer->overflow = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define openmpt_stream_buffer_init_prefix_only( buffer_, prefix_data_, prefix_size_, file_size_ ) do { \
|
||||||
|
openmpt_stream_buffer_init( (buffer_), (prefix_data_), (file_size_) ); \
|
||||||
|
(buffer_)->prefix_size = (prefix_size_); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
#define openmpt_stream_buffer_overflowed( buffer_ ) ( (buffer_)->overflow )
|
||||||
|
|
||||||
|
/*! \brief Provide openmpt_stream_callbacks for in-memoy buffers
|
||||||
|
*
|
||||||
|
* Fills openmpt_stream_callbacks suitable for passing an in-memory buffer as a stream parameter to functions doing file input/output.
|
||||||
|
*
|
||||||
|
* \remarks The stream argument must be passed as `(void*)(openmpt_stream_buffer*)stream_buffer`.
|
||||||
|
* \sa \ref libopenmpt_c_fileio
|
||||||
|
* \sa openmpt_stream_callbacks
|
||||||
|
* \sa openmpt_could_open_probability2
|
||||||
|
* \sa openmpt_probe_file_header_from_stream
|
||||||
|
* \sa openmpt_module_create2
|
||||||
|
*/
|
||||||
|
static openmpt_stream_callbacks openmpt_stream_get_buffer_callbacks(void) {
|
||||||
|
openmpt_stream_callbacks retval;
|
||||||
|
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
|
||||||
|
retval.read = openmpt_stream_buffer_read_func;
|
||||||
|
retval.seek = openmpt_stream_buffer_seek_func;
|
||||||
|
retval.tell = openmpt_stream_buffer_tell_func;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H */
|
||||||
|
|
101
libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h
Normal file
101
libs/libopenmpt/inc/libopenmpt/libopenmpt_stream_callbacks_fd.h
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_stream_callbacks_fd.h
|
||||||
|
* --------------------------------
|
||||||
|
* Purpose: libopenmpt public c interface
|
||||||
|
* Notes : (currently none)
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_STREAM_CALLBACKS_FD_H
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_FD_H
|
||||||
|
|
||||||
|
#include "libopenmpt.h"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <io.h>
|
||||||
|
#endif
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt_c
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This stuff has to be in a header file because of possibly different MSVC CRTs which cause problems for fd crossing CRT boundaries. */
|
||||||
|
|
||||||
|
static size_t openmpt_stream_fd_read_func( void * stream, void * dst, size_t bytes ) {
|
||||||
|
int fd = 0;
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
size_t retval = 0;
|
||||||
|
int to_read = 0;
|
||||||
|
int ret_read = 0;
|
||||||
|
#else
|
||||||
|
ssize_t retval = 0;
|
||||||
|
#endif
|
||||||
|
fd = (int)(uintptr_t)stream;
|
||||||
|
if ( fd < 0 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
retval = 0;
|
||||||
|
while ( bytes > 0 ) {
|
||||||
|
to_read = 0;
|
||||||
|
if ( bytes < (size_t)INT_MAX ) {
|
||||||
|
to_read = (int)bytes;
|
||||||
|
} else {
|
||||||
|
to_read = INT_MAX;
|
||||||
|
}
|
||||||
|
ret_read = _read( fd, dst, to_read );
|
||||||
|
if ( ret_read <= 0 ) {
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
bytes -= ret_read;
|
||||||
|
retval += ret_read;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
retval = read( fd, dst, bytes );
|
||||||
|
#endif
|
||||||
|
if ( retval <= 0 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! \brief Provide openmpt_stream_callbacks for standard POSIX file descriptors
|
||||||
|
*
|
||||||
|
* Fills openmpt_stream_callbacks suitable for passing a POSIX filer descriptor as a stream parameter to functions doing file input/output.
|
||||||
|
*
|
||||||
|
* \remarks The stream argument must be passed as `(void*)(uintptr_t)(int)fd`.
|
||||||
|
* \sa \ref libopenmpt_c_fileio
|
||||||
|
* \sa openmpt_stream_callbacks
|
||||||
|
* \sa openmpt_could_open_probability2
|
||||||
|
* \sa openmpt_probe_file_header_from_stream
|
||||||
|
* \sa openmpt_module_create2
|
||||||
|
*/
|
||||||
|
static openmpt_stream_callbacks openmpt_stream_get_fd_callbacks(void) {
|
||||||
|
openmpt_stream_callbacks retval;
|
||||||
|
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
|
||||||
|
retval.read = openmpt_stream_fd_read_func;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_STREAM_CALLBACKS_FD_H */
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_stream_callbacks_file.h
|
||||||
|
* ----------------------------------
|
||||||
|
* Purpose: libopenmpt public c interface
|
||||||
|
* Notes : (currently none)
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_STREAM_CALLBACKS_FILE_H
|
||||||
|
#define LIBOPENMPT_STREAM_CALLBACKS_FILE_H
|
||||||
|
|
||||||
|
#include "libopenmpt.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <wchar.h> /* off_t */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt_c
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This stuff has to be in a header file because of possibly different MSVC CRTs which cause problems for FILE * crossing CRT boundaries. */
|
||||||
|
|
||||||
|
static size_t openmpt_stream_file_read_func( void * stream, void * dst, size_t bytes ) {
|
||||||
|
FILE * f = 0;
|
||||||
|
size_t retval = 0;
|
||||||
|
f = (FILE*)stream;
|
||||||
|
if ( !f ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
retval = fread( dst, 1, bytes, f );
|
||||||
|
if ( retval <= 0 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int openmpt_stream_file_seek_func( void * stream, int64_t offset, int whence ) {
|
||||||
|
FILE * f = 0;
|
||||||
|
int fwhence = 0;
|
||||||
|
f = (FILE*)stream;
|
||||||
|
if ( !f ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
switch ( whence ) {
|
||||||
|
#if defined(SEEK_SET)
|
||||||
|
case OPENMPT_STREAM_SEEK_SET:
|
||||||
|
fwhence = SEEK_SET;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined(SEEK_CUR)
|
||||||
|
case OPENMPT_STREAM_SEEK_CUR:
|
||||||
|
fwhence = SEEK_CUR;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined(SEEK_END)
|
||||||
|
case OPENMPT_STREAM_SEEK_END:
|
||||||
|
fwhence = SEEK_END;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
return _fseeki64( f, offset, fwhence ) ? -1 : 0;
|
||||||
|
#elif defined(_POSIX_SOURCE) && (_POSIX_SOURCE == 1)
|
||||||
|
return fseeko( f, offset, fwhence ) ? -1 : 0;
|
||||||
|
#else
|
||||||
|
return fseek( f, offset, fwhence ) ? -1 : 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static int64_t openmpt_stream_file_tell_func( void * stream ) {
|
||||||
|
FILE * f = 0;
|
||||||
|
int64_t retval = 0;
|
||||||
|
f = (FILE*)stream;
|
||||||
|
if ( !f ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
retval = _ftelli64( f );
|
||||||
|
#elif defined(_POSIX_SOURCE) && (_POSIX_SOURCE == 1)
|
||||||
|
retval = ftello( f );
|
||||||
|
#else
|
||||||
|
retval = ftell( f );
|
||||||
|
#endif
|
||||||
|
if ( retval < 0 ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! \brief Provide openmpt_stream_callbacks for standard C FILE objects
|
||||||
|
*
|
||||||
|
* Fills openmpt_stream_callbacks suitable for passing a standard C FILE object as a stream parameter to functions doing file input/output.
|
||||||
|
*
|
||||||
|
* \remarks The stream argument must be passed as `(void*)(FILE*)file`.
|
||||||
|
* \sa \ref libopenmpt_c_fileio
|
||||||
|
* \sa openmpt_stream_callbacks
|
||||||
|
* \sa openmpt_could_open_probability2
|
||||||
|
* \sa openmpt_probe_file_header_from_stream
|
||||||
|
* \sa openmpt_module_create2
|
||||||
|
*/
|
||||||
|
static openmpt_stream_callbacks openmpt_stream_get_file_callbacks(void) {
|
||||||
|
openmpt_stream_callbacks retval;
|
||||||
|
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
|
||||||
|
retval.read = openmpt_stream_file_read_func;
|
||||||
|
retval.seek = openmpt_stream_file_seek_func;
|
||||||
|
retval.tell = openmpt_stream_file_tell_func;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_STREAM_CALLBACKS_FILE_H */
|
||||||
|
|
75
libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h
Normal file
75
libs/libopenmpt/inc/libopenmpt/libopenmpt_version.h
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* libopenmpt_version.h
|
||||||
|
* --------------------
|
||||||
|
* Purpose: libopenmpt public interface version
|
||||||
|
* Notes : (currently none)
|
||||||
|
* Authors: OpenMPT Devs
|
||||||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBOPENMPT_VERSION_H
|
||||||
|
#define LIBOPENMPT_VERSION_H
|
||||||
|
|
||||||
|
/*! \addtogroup libopenmpt
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \brief libopenmpt major version number */
|
||||||
|
#define OPENMPT_API_VERSION_MAJOR 0
|
||||||
|
/*! \brief libopenmpt minor version number */
|
||||||
|
#define OPENMPT_API_VERSION_MINOR 4
|
||||||
|
/*! \brief libopenmpt patch version number */
|
||||||
|
#define OPENMPT_API_VERSION_PATCH 4
|
||||||
|
/*! \brief libopenmpt pre-release tag */
|
||||||
|
#define OPENMPT_API_VERSION_PREREL ""
|
||||||
|
/*! \brief libopenmpt pre-release flag */
|
||||||
|
#define OPENMPT_API_VERSION_IS_PREREL 0
|
||||||
|
|
||||||
|
/*! \brief libopenmpt version number as a single integer value
|
||||||
|
* \since 0.3
|
||||||
|
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
|
||||||
|
* \code
|
||||||
|
* #include <libopenmpt/libopenmpt_version.h>
|
||||||
|
* #if !defined(OPENMPT_API_VERSION_MAKE)
|
||||||
|
* #define OPENMPT_API_VERSION_MAKE(major, minor, patch) (((major)<<24)|((minor)<<16)|((patch)<<0))
|
||||||
|
* #endif
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
#define OPENMPT_API_VERSION_MAKE(major, minor, patch) (((major)<<24)|((minor)<<16)|((patch)<<0))
|
||||||
|
|
||||||
|
/*! \brief libopenmpt API version number */
|
||||||
|
#define OPENMPT_API_VERSION OPENMPT_API_VERSION_MAKE(OPENMPT_API_VERSION_MAJOR, OPENMPT_API_VERSION_MINOR, OPENMPT_API_VERSION_PATCH)
|
||||||
|
|
||||||
|
/*! \brief Check whether the libopenmpt API is at least the provided version
|
||||||
|
* \since 0.3
|
||||||
|
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
|
||||||
|
* \code
|
||||||
|
* #include <libopenmpt/libopenmpt_version.h>
|
||||||
|
* #if !defined(OPENMPT_API_VERSION_AT_LEAST)
|
||||||
|
* #define OPENMPT_API_VERSION_AT_LEAST(major, minor, patch) (OPENMPT_API_VERSION >= OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
|
||||||
|
* #endif
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
#define OPENMPT_API_VERSION_AT_LEAST(major, minor, patch) (OPENMPT_API_VERSION >= OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
|
||||||
|
|
||||||
|
/*! \brief Check whether the libopenmpt API is before the provided version
|
||||||
|
* \since 0.3
|
||||||
|
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
|
||||||
|
* \code
|
||||||
|
* #include <libopenmpt/libopenmpt_version.h>
|
||||||
|
* #if !defined(OPENMPT_API_VERSION_BEFORE)
|
||||||
|
* #define OPENMPT_API_VERSION_BEFORE(major, minor, patch) (OPENMPT_API_VERSION < OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
|
||||||
|
* #endif
|
||||||
|
* \endcode
|
||||||
|
*/
|
||||||
|
#define OPENMPT_API_VERSION_BEFORE(major, minor, patch) (OPENMPT_API_VERSION < OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
|
||||||
|
|
||||||
|
#define OPENMPT_API_VERSION_HELPER_STRINGIZE(x) #x
|
||||||
|
#define OPENMPT_API_VERSION_STRINGIZE(x) OPENMPT_API_VERSION_HELPER_STRINGIZE(x)
|
||||||
|
#define OPENMPT_API_VERSION_STRING OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_MAJOR) "." OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_MINOR) "." OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_PATCH) OPENMPT_API_VERSION_PREREL
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* LIBOPENMPT_VERSION_H */
|
BIN
libs/libopenmpt/lib/x86/libopenmpt.lib
Normal file
BIN
libs/libopenmpt/lib/x86/libopenmpt.lib
Normal file
Binary file not shown.
BIN
libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a
Normal file
BIN
libs/libopenmpt/lib/x86/mingw/libopenmpt.dll.a
Normal file
Binary file not shown.
BIN
libs/libopenmpt/lib/x86_64/libopenmpt.lib
Normal file
BIN
libs/libopenmpt/lib/x86_64/libopenmpt.lib
Normal file
Binary file not shown.
BIN
libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a
Normal file
BIN
libs/libopenmpt/lib/x86_64/mingw/libopenmpt.dll.a
Normal file
Binary file not shown.
|
@ -123,6 +123,7 @@ set(SRB2_CORE_RENDER_SOURCES
|
||||||
r_sky.c
|
r_sky.c
|
||||||
r_splats.c
|
r_splats.c
|
||||||
r_things.c
|
r_things.c
|
||||||
|
r_portal.c
|
||||||
|
|
||||||
r_bsp.h
|
r_bsp.h
|
||||||
r_data.h
|
r_data.h
|
||||||
|
@ -136,6 +137,7 @@ set(SRB2_CORE_RENDER_SOURCES
|
||||||
r_splats.h
|
r_splats.h
|
||||||
r_state.h
|
r_state.h
|
||||||
r_things.h
|
r_things.h
|
||||||
|
r_portal.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SRB2_CORE_GAME_SOURCES
|
set(SRB2_CORE_GAME_SOURCES
|
||||||
|
@ -218,6 +220,8 @@ set(SRB2_CONFIG_HAVE_ZLIB ON CACHE BOOL
|
||||||
"Enable zlib support.")
|
"Enable zlib support.")
|
||||||
set(SRB2_CONFIG_HAVE_GME ON CACHE BOOL
|
set(SRB2_CONFIG_HAVE_GME ON CACHE BOOL
|
||||||
"Enable GME support.")
|
"Enable GME support.")
|
||||||
|
set(SRB2_CONFIG_HAVE_OPENMPT ON CACHE BOOL
|
||||||
|
"Enable OpenMPT support.")
|
||||||
set(SRB2_CONFIG_HWRENDER ON CACHE BOOL
|
set(SRB2_CONFIG_HWRENDER ON CACHE BOOL
|
||||||
"Enable hardware rendering through OpenGL.")
|
"Enable hardware rendering through OpenGL.")
|
||||||
set(SRB2_CONFIG_USEASM OFF CACHE BOOL
|
set(SRB2_CONFIG_USEASM OFF CACHE BOOL
|
||||||
|
@ -230,7 +234,7 @@ set(SRB2_CONFIG_STATIC_OPENGL OFF CACHE BOOL
|
||||||
### use internal libraries?
|
### use internal libraries?
|
||||||
if(${CMAKE_SYSTEM} MATCHES "Windows") ###set on Windows only
|
if(${CMAKE_SYSTEM} MATCHES "Windows") ###set on Windows only
|
||||||
set(SRB2_CONFIG_USE_INTERNAL_LIBRARIES OFF CACHE BOOL
|
set(SRB2_CONFIG_USE_INTERNAL_LIBRARIES OFF CACHE BOOL
|
||||||
"Use SRB2's internal copies of required dependencies (SDL2, PNG, zlib, GME).")
|
"Use SRB2's internal copies of required dependencies (SDL2, PNG, zlib, GME, OpenMPT).")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HAVE_BLUA})
|
if(${SRB2_CONFIG_HAVE_BLUA})
|
||||||
|
@ -340,6 +344,26 @@ if(${SRB2_CONFIG_HAVE_GME})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(${SRB2_CONFIG_HAVE_OPENMPT})
|
||||||
|
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
|
||||||
|
set(OPENMPT_FOUND ON)
|
||||||
|
set(OPENMPT_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/libopenmpt/inc)
|
||||||
|
if(${SRB2_SYSTEM_BITS} EQUAL 64)
|
||||||
|
set(OPENMPT_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libopenmpt/lib/x86_64/mingw -lopenmpt")
|
||||||
|
else() # 32-bit
|
||||||
|
set(OPENMPT_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libopenmpt/lib/x86/mingw -lopenmpt")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_package(OPENMPT)
|
||||||
|
endif()
|
||||||
|
if(${OPENMPT_FOUND})
|
||||||
|
set(SRB2_HAVE_OPENMPT ON)
|
||||||
|
add_definitions(-DHAVE_OPENMPT)
|
||||||
|
else()
|
||||||
|
message(WARNING "You have specified that OpenMPT is available but it was not found.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_HAVE_ZLIB})
|
if(${SRB2_CONFIG_HAVE_ZLIB})
|
||||||
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
|
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
|
||||||
set(ZLIB_FOUND ON)
|
set(ZLIB_FOUND ON)
|
||||||
|
|
17
src/Makefile
17
src/Makefile
|
@ -72,6 +72,7 @@
|
||||||
# Compile without BSD API, add 'NONET=1'
|
# Compile without BSD API, add 'NONET=1'
|
||||||
# Compile without IPX/SPX, add 'NOIPX=1'
|
# Compile without IPX/SPX, add 'NOIPX=1'
|
||||||
# Compile Mingw/SDL with S_DS3S, add 'DS3D=1'
|
# Compile Mingw/SDL with S_DS3S, add 'DS3D=1'
|
||||||
|
# Compile without libopenmpt, add 'NOOPENMPT=1'
|
||||||
# Compile with S_FMOD3D, add 'FMOD=1' (WIP)
|
# Compile with S_FMOD3D, add 'FMOD=1' (WIP)
|
||||||
# Compile with S_OPENAL, add 'OPENAL=1' (WIP)
|
# Compile with S_OPENAL, add 'OPENAL=1' (WIP)
|
||||||
# To link with the whole SDL_Image lib to load Icons, add 'SDL_IMAGE=1' but it isn't not realy needed
|
# To link with the whole SDL_Image lib to load Icons, add 'SDL_IMAGE=1' but it isn't not realy needed
|
||||||
|
@ -150,6 +151,10 @@ ifdef DJGPPDOS
|
||||||
include djgppdos/Makefile.cfg
|
include djgppdos/Makefile.cfg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifndef NOOPENMPT
|
||||||
|
HAVE_OPENMPT=1
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef MINGW
|
ifdef MINGW
|
||||||
include win32/Makefile.cfg
|
include win32/Makefile.cfg
|
||||||
endif #ifdef MINGW
|
endif #ifdef MINGW
|
||||||
|
@ -296,6 +301,17 @@ LIBS+=$(LIBGME_LDFLAGS)
|
||||||
CFLAGS+=$(LIBGME_CFLAGS)
|
CFLAGS+=$(LIBGME_CFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef HAVE_OPENMPT
|
||||||
|
OPTS+=-DHAVE_OPENMPT
|
||||||
|
|
||||||
|
LIBOPENMPT_PKGCONFIG?=libopenmpt
|
||||||
|
LIBOPENMPT_CFLAGS?=$(shell $(PKG_CONFIG) $(LIBOPENMPT_PKGCONFIG) --cflags)
|
||||||
|
LIBOPENMPT_LDFLAGS?=$(shell $(PKG_CONFIG) $(LIBOPENMPT_PKGCONFIG) --libs)
|
||||||
|
|
||||||
|
LIBS+=$(LIBOPENMPT_LDFLAGS)
|
||||||
|
CFLAGS+=$(LIBOPENMPT_CFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef NOZLIB
|
ifndef NOZLIB
|
||||||
OPTS+=-DHAVE_ZLIB
|
OPTS+=-DHAVE_ZLIB
|
||||||
ZLIB_PKGCONFIG?=zlib
|
ZLIB_PKGCONFIG?=zlib
|
||||||
|
@ -455,6 +471,7 @@ OBJS:=$(i_main_o) \
|
||||||
$(OBJDIR)/r_sky.o \
|
$(OBJDIR)/r_sky.o \
|
||||||
$(OBJDIR)/r_splats.o \
|
$(OBJDIR)/r_splats.o \
|
||||||
$(OBJDIR)/r_things.o \
|
$(OBJDIR)/r_things.o \
|
||||||
|
$(OBJDIR)/r_portal.o \
|
||||||
$(OBJDIR)/screen.o \
|
$(OBJDIR)/screen.o \
|
||||||
$(OBJDIR)/v_video.o \
|
$(OBJDIR)/v_video.o \
|
||||||
$(OBJDIR)/s_sound.o \
|
$(OBJDIR)/s_sound.o \
|
||||||
|
|
|
@ -148,6 +148,20 @@ void COM_BufInsertText(const char *ptext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Progress the wait timer and flush waiting console commands when ready.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
COM_BufTicker(void)
|
||||||
|
{
|
||||||
|
if (com_wait)
|
||||||
|
{
|
||||||
|
com_wait--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
COM_BufExecute();
|
||||||
|
}
|
||||||
|
|
||||||
/** Flushes (executes) console commands in the buffer.
|
/** Flushes (executes) console commands in the buffer.
|
||||||
*/
|
*/
|
||||||
void COM_BufExecute(void)
|
void COM_BufExecute(void)
|
||||||
|
@ -157,12 +171,6 @@ void COM_BufExecute(void)
|
||||||
char line[1024] = "";
|
char line[1024] = "";
|
||||||
INT32 quotes;
|
INT32 quotes;
|
||||||
|
|
||||||
if (com_wait)
|
|
||||||
{
|
|
||||||
com_wait--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (com_text.cursize)
|
while (com_text.cursize)
|
||||||
{
|
{
|
||||||
// find a '\n' or; line break
|
// find a '\n' or; line break
|
||||||
|
@ -514,7 +522,6 @@ static void COM_ExecuteString(char *ptext)
|
||||||
{
|
{
|
||||||
if (!stricmp(com_argv[0], cmd->name)) //case insensitive now that we have lower and uppercase!
|
if (!stricmp(com_argv[0], cmd->name)) //case insensitive now that we have lower and uppercase!
|
||||||
{
|
{
|
||||||
recursion = 0;
|
|
||||||
cmd->function();
|
cmd->function();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -526,19 +533,17 @@ static void COM_ExecuteString(char *ptext)
|
||||||
if (!stricmp(com_argv[0], a->name))
|
if (!stricmp(com_argv[0], a->name))
|
||||||
{
|
{
|
||||||
if (recursion > MAX_ALIAS_RECURSION)
|
if (recursion > MAX_ALIAS_RECURSION)
|
||||||
{
|
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n"));
|
||||||
recursion = 0;
|
else
|
||||||
return;
|
{ // Monster Iestyn: keep track of how many levels of recursion we're in
|
||||||
|
recursion++;
|
||||||
|
COM_BufInsertText(a->value);
|
||||||
|
recursion--;
|
||||||
}
|
}
|
||||||
recursion++;
|
|
||||||
COM_BufInsertText(a->value);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
recursion = 0;
|
|
||||||
|
|
||||||
// check cvars
|
// check cvars
|
||||||
// Hurdler: added at Ebola's request ;)
|
// Hurdler: added at Ebola's request ;)
|
||||||
// (don't flood the console in software mode with bad gr_xxx command)
|
// (don't flood the console in software mode with bad gr_xxx command)
|
||||||
|
|
|
@ -45,6 +45,9 @@ void COM_ImmedExecute(const char *ptext);
|
||||||
// Execute commands in buffer, flush them
|
// Execute commands in buffer, flush them
|
||||||
void COM_BufExecute(void);
|
void COM_BufExecute(void);
|
||||||
|
|
||||||
|
// As above; and progress the wait timer.
|
||||||
|
void COM_BufTicker(void);
|
||||||
|
|
||||||
// setup command buffer, at game tartup
|
// setup command buffer, at game tartup
|
||||||
void COM_Init(void);
|
void COM_Init(void);
|
||||||
|
|
||||||
|
|
129
src/console.c
129
src/console.c
|
@ -93,6 +93,7 @@ static size_t input_len; // length of current line, used to bound cursor and suc
|
||||||
// protos.
|
// protos.
|
||||||
static void CON_InputInit(void);
|
static void CON_InputInit(void);
|
||||||
static void CON_RecalcSize(void);
|
static void CON_RecalcSize(void);
|
||||||
|
static void CON_ChangeHeight(void);
|
||||||
|
|
||||||
static void CONS_hudlines_Change(void);
|
static void CONS_hudlines_Change(void);
|
||||||
static void CONS_backcolor_Change(void);
|
static void CONS_backcolor_Change(void);
|
||||||
|
@ -126,8 +127,6 @@ static CV_PossibleValue_t backpic_cons_t[] = {{0, "translucent"}, {1, "picture"}
|
||||||
// whether to use console background picture, or translucent mode
|
// whether to use console background picture, or translucent mode
|
||||||
static consvar_t cons_backpic = {"con_backpic", "translucent", CV_SAVE, backpic_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
static consvar_t cons_backpic = {"con_backpic", "translucent", CV_SAVE, backpic_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
// \todo SRB2-CHAT 2.1 colors -- pending translation to 2.2 palette indexes
|
|
||||||
#if 0
|
|
||||||
static CV_PossibleValue_t backcolor_cons_t[] = {{0, "White"}, {1, "Black"}, {2, "Sepia"},
|
static CV_PossibleValue_t backcolor_cons_t[] = {{0, "White"}, {1, "Black"}, {2, "Sepia"},
|
||||||
{3, "Brown"}, {4, "Pink"}, {5, "Raspberry"},
|
{3, "Brown"}, {4, "Pink"}, {5, "Raspberry"},
|
||||||
{6, "Red"}, {7, "Creamsicle"}, {8, "Orange"},
|
{6, "Red"}, {7, "Creamsicle"}, {8, "Orange"},
|
||||||
|
@ -136,13 +135,7 @@ static CV_PossibleValue_t backcolor_cons_t[] = {{0, "White"}, {1, "Black"}, {
|
||||||
{15,"Periwinkle"}, {16,"Blue"}, {17,"Purple"},
|
{15,"Periwinkle"}, {16,"Blue"}, {17,"Purple"},
|
||||||
{18,"Lavender"},
|
{18,"Lavender"},
|
||||||
{0, NULL}};
|
{0, NULL}};
|
||||||
#else
|
|
||||||
static CV_PossibleValue_t backcolor_cons_t[] = {{0, "White"}, {1, "Gray"}, {2, "Brown"},
|
|
||||||
{3, "Red"}, {4, "Orange"}, {5, "Yellow"},
|
|
||||||
{6, "Green"}, {7, "Blue"}, {8, "Purple"},
|
|
||||||
{9, "Magenta"}, {10, "Aqua"},
|
|
||||||
{0, NULL}};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
consvar_t cons_backcolor = {"con_backcolor", "Green", CV_CALL|CV_SAVE, backcolor_cons_t, CONS_backcolor_Change, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cons_backcolor = {"con_backcolor", "Green", CV_CALL|CV_SAVE, backcolor_cons_t, CONS_backcolor_Change, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
@ -255,50 +248,30 @@ void CON_SetupBackColormapEx(INT32 color, boolean prompt)
|
||||||
|
|
||||||
shift = 6; // 12 colors -- shift of 7 means 6 colors
|
shift = 6; // 12 colors -- shift of 7 means 6 colors
|
||||||
|
|
||||||
// \todo SRB2-CHAT colors, pending translation to 2.2 palette indexes
|
|
||||||
#if 0
|
|
||||||
switch (color)
|
switch (color)
|
||||||
{
|
{
|
||||||
case 0: palindex = 15; break; // White
|
case 0: palindex = 15; break; // White
|
||||||
case 1: palindex = 31; break; // Gray
|
case 1: palindex = 31; break; // Black
|
||||||
case 2: palindex = 47; break; // Sepia
|
case 2: palindex = 251; break; // Sepia
|
||||||
case 3: palindex = 63; break; // Brown
|
case 3: palindex = 239; break; // Brown
|
||||||
case 4: palindex = 150; shift = 7; break; // Pink
|
case 4: palindex = 215; shift = 7; break; // Pink
|
||||||
case 5: palindex = 127; shift = 7; break; // Raspberry
|
case 5: palindex = 37; shift = 7; break; // Raspberry
|
||||||
case 6: palindex = 143; break; // Red
|
case 6: palindex = 47; shift = 7; break; // Red
|
||||||
case 7: palindex = 86; shift = 7; break; // Creamsicle
|
case 7: palindex = 53; shift = 7; break; // Creamsicle
|
||||||
case 8: palindex = 95; break; // Orange
|
case 8: palindex = 63; break; // Orange
|
||||||
case 9: palindex = 119; shift = 7; break; // Gold
|
case 9: palindex = 56; shift = 7; break; // Gold
|
||||||
case 10: palindex = 111; break; // Yellow
|
case 10: palindex = 79; shift = 7; break; // Yellow
|
||||||
case 11: palindex = 191; shift = 7; break; // Emerald
|
case 11: palindex = 119; shift = 7; break; // Emerald
|
||||||
case 12: palindex = 175; break; // Green
|
case 12: palindex = 111; break; // Green
|
||||||
case 13: palindex = 219; break; // Cyan
|
case 13: palindex = 136; shift = 7; break; // Cyan
|
||||||
case 14: palindex = 207; shift = 7; break; // Steel
|
case 14: palindex = 175; shift = 7; break; // Steel
|
||||||
case 15: palindex = 230; shift = 7; break; // Periwinkle
|
case 15: palindex = 166; shift = 7; break; // Periwinkle
|
||||||
case 16: palindex = 239; break; // Blue
|
case 16: palindex = 159; break; // Blue
|
||||||
case 17: palindex = 199; shift = 7; break; // Purple
|
case 17: palindex = 187; shift = 7; break; // Purple
|
||||||
case 18: palindex = 255; shift = 7; break; // Lavender
|
case 18: palindex = 199; shift = 7; break; // Lavender
|
||||||
// Default green
|
// Default green
|
||||||
default: palindex = 175; break;
|
default: palindex = 111; break;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
switch (color)
|
|
||||||
{
|
|
||||||
case 0: palindex = 15; break; // White
|
|
||||||
case 1: palindex = 31; break; // Gray
|
|
||||||
case 2: palindex = 239; break; // Brown
|
|
||||||
case 3: palindex = 47; break; // Red
|
|
||||||
case 4: palindex = 63; break; // Orange
|
|
||||||
case 5: palindex = 79; shift = 7; break; // Yellow
|
|
||||||
case 6: palindex = 111; break; // Green
|
|
||||||
case 7: palindex = 159; break; // Blue
|
|
||||||
case 8: palindex = 199; shift = 7; break; // Purple
|
|
||||||
case 9: palindex = 187; break; // Magenta
|
|
||||||
case 10: palindex = 139; break; // Aqua
|
|
||||||
// Default green
|
|
||||||
default: palindex = 175; color = 11; break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (prompt)
|
if (prompt)
|
||||||
{
|
{
|
||||||
|
@ -499,6 +472,12 @@ static void CON_RecalcSize(void)
|
||||||
con_destlines = vid.height;
|
con_destlines = vid.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (con_destlines > 0) // Resize console if already open
|
||||||
|
{
|
||||||
|
CON_ChangeHeight();
|
||||||
|
con_curlines = con_destlines;
|
||||||
|
}
|
||||||
|
|
||||||
// check for change of video width
|
// check for change of video width
|
||||||
if (conw == con_width)
|
if (conw == con_width)
|
||||||
return; // didn't change
|
return; // didn't change
|
||||||
|
@ -548,6 +527,20 @@ static void CON_RecalcSize(void)
|
||||||
Z_Free(tmp_buffer);
|
Z_Free(tmp_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CON_ChangeHeight(void)
|
||||||
|
{
|
||||||
|
INT32 minheight = 20 * con_scalefactor; // 20 = 8+8+4
|
||||||
|
|
||||||
|
// toggle console in
|
||||||
|
con_destlines = (cons_height.value*vid.height)/100;
|
||||||
|
if (con_destlines < minheight)
|
||||||
|
con_destlines = minheight;
|
||||||
|
else if (con_destlines > vid.height)
|
||||||
|
con_destlines = vid.height;
|
||||||
|
|
||||||
|
con_destlines &= ~0x3; // multiple of text row height
|
||||||
|
}
|
||||||
|
|
||||||
// Handles Console moves in/out of screen (per frame)
|
// Handles Console moves in/out of screen (per frame)
|
||||||
//
|
//
|
||||||
static void CON_MoveConsole(void)
|
static void CON_MoveConsole(void)
|
||||||
|
@ -636,16 +629,7 @@ void CON_Ticker(void)
|
||||||
CON_ClearHUD();
|
CON_ClearHUD();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
CON_ChangeHeight();
|
||||||
// toggle console in
|
|
||||||
con_destlines = (cons_height.value*vid.height)/100;
|
|
||||||
if (con_destlines < minheight)
|
|
||||||
con_destlines = minheight;
|
|
||||||
else if (con_destlines > vid.height)
|
|
||||||
con_destlines = vid.height;
|
|
||||||
|
|
||||||
con_destlines &= ~0x3; // multiple of text row height
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// console movement
|
// console movement
|
||||||
|
@ -1103,16 +1087,6 @@ boolean CON_Responder(event_t *ev)
|
||||||
else if (key == KEY_KPADSLASH)
|
else if (key == KEY_KPADSLASH)
|
||||||
key = '/';
|
key = '/';
|
||||||
|
|
||||||
// capslock
|
|
||||||
if (key == KEY_CAPSLOCK) // it's a toggle.
|
|
||||||
{
|
|
||||||
if (capslock)
|
|
||||||
capslock = false;
|
|
||||||
else
|
|
||||||
capslock = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key >= 'a' && key <= 'z')
|
if (key >= 'a' && key <= 'z')
|
||||||
{
|
{
|
||||||
if (capslock ^ shiftdown)
|
if (capslock ^ shiftdown)
|
||||||
|
@ -1158,6 +1132,7 @@ static void CON_Print(char *msg)
|
||||||
{
|
{
|
||||||
size_t l;
|
size_t l;
|
||||||
INT32 controlchars = 0; // for color changing
|
INT32 controlchars = 0; // for color changing
|
||||||
|
char color = '\x80'; // keep color across lines
|
||||||
|
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -1183,7 +1158,7 @@ static void CON_Print(char *msg)
|
||||||
{
|
{
|
||||||
if (*msg & 0x80)
|
if (*msg & 0x80)
|
||||||
{
|
{
|
||||||
con_line[con_cx++] = *(msg++);
|
color = con_line[con_cx++] = *(msg++);
|
||||||
controlchars++;
|
controlchars++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1191,12 +1166,14 @@ static void CON_Print(char *msg)
|
||||||
{
|
{
|
||||||
con_cy--;
|
con_cy--;
|
||||||
CON_Linefeed();
|
CON_Linefeed();
|
||||||
|
color = '\x80';
|
||||||
controlchars = 0;
|
controlchars = 0;
|
||||||
}
|
}
|
||||||
else if (*msg == '\n') // linefeed
|
else if (*msg == '\n') // linefeed
|
||||||
{
|
{
|
||||||
CON_Linefeed();
|
CON_Linefeed();
|
||||||
controlchars = 0;
|
con_line[con_cx++] = color;
|
||||||
|
controlchars = 1;
|
||||||
}
|
}
|
||||||
else if (*msg == ' ') // space
|
else if (*msg == ' ') // space
|
||||||
{
|
{
|
||||||
|
@ -1204,7 +1181,8 @@ static void CON_Print(char *msg)
|
||||||
if (con_cx - controlchars >= con_width-11)
|
if (con_cx - controlchars >= con_width-11)
|
||||||
{
|
{
|
||||||
CON_Linefeed();
|
CON_Linefeed();
|
||||||
controlchars = 0;
|
con_line[con_cx++] = color;
|
||||||
|
controlchars = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*msg == '\t')
|
else if (*msg == '\t')
|
||||||
|
@ -1219,7 +1197,8 @@ static void CON_Print(char *msg)
|
||||||
if (con_cx - controlchars >= con_width-11)
|
if (con_cx - controlchars >= con_width-11)
|
||||||
{
|
{
|
||||||
CON_Linefeed();
|
CON_Linefeed();
|
||||||
controlchars = 0;
|
con_line[con_cx++] = color;
|
||||||
|
controlchars = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg++;
|
msg++;
|
||||||
|
@ -1236,7 +1215,8 @@ static void CON_Print(char *msg)
|
||||||
if ((con_cx - controlchars) + l > con_width-11)
|
if ((con_cx - controlchars) + l > con_width-11)
|
||||||
{
|
{
|
||||||
CON_Linefeed();
|
CON_Linefeed();
|
||||||
controlchars = 0;
|
con_line[con_cx++] = color;
|
||||||
|
controlchars = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// a word at a time
|
// a word at a time
|
||||||
|
@ -1586,8 +1566,7 @@ static void CON_DrawConsole(void)
|
||||||
i = con_cy - con_scrollup;
|
i = con_cy - con_scrollup;
|
||||||
|
|
||||||
// skip the last empty line due to the cursor being at the start of a new line
|
// skip the last empty line due to the cursor being at the start of a new line
|
||||||
if (!con_scrollup && !con_cx)
|
i--;
|
||||||
i--;
|
|
||||||
|
|
||||||
i -= (con_curlines - minheight) / charheight;
|
i -= (con_curlines - minheight) / charheight;
|
||||||
|
|
||||||
|
|
|
@ -1127,7 +1127,8 @@ static inline void CL_DrawConnectionStatus(void)
|
||||||
INT32 ccstime = I_GetTime();
|
INT32 ccstime = I_GetTime();
|
||||||
|
|
||||||
// Draw background fade
|
// Draw background fade
|
||||||
V_DrawFadeScreen(0xFF00, 16);
|
if (!menuactive) // menu already draws its own fade
|
||||||
|
V_DrawFadeScreen(0xFF00, 16); // force default
|
||||||
|
|
||||||
// Draw the bottom box.
|
// Draw the bottom box.
|
||||||
M_DrawTextBox(BASEVIDWIDTH/2-128-8, BASEVIDHEIGHT-24-8, 32, 1);
|
M_DrawTextBox(BASEVIDWIDTH/2-128-8, BASEVIDHEIGHT-24-8, 32, 1);
|
||||||
|
@ -2002,6 +2003,7 @@ static boolean CL_ServerConnectionTicker(boolean viams, const char *tmpsave, tic
|
||||||
#ifdef CLIENT_LOADINGSCREEN
|
#ifdef CLIENT_LOADINGSCREEN
|
||||||
if (client && cl_mode != CL_CONNECTED && cl_mode != CL_ABORTED)
|
if (client && cl_mode != CL_CONNECTED && cl_mode != CL_ABORTED)
|
||||||
{
|
{
|
||||||
|
F_MenuPresTicker(true); // title sky
|
||||||
F_TitleScreenTicker(true);
|
F_TitleScreenTicker(true);
|
||||||
F_TitleScreenDrawer();
|
F_TitleScreenDrawer();
|
||||||
CL_DrawConnectionStatus();
|
CL_DrawConnectionStatus();
|
||||||
|
@ -2612,7 +2614,10 @@ static void Command_Ban(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (server) // only the server is allowed to do this right now
|
if (server) // only the server is allowed to do this right now
|
||||||
|
{
|
||||||
Ban_Add(COM_Argv(2));
|
Ban_Add(COM_Argv(2));
|
||||||
|
D_SaveBan(); // save the ban list
|
||||||
|
}
|
||||||
|
|
||||||
if (COM_Argc() == 2)
|
if (COM_Argc() == 2)
|
||||||
{
|
{
|
||||||
|
@ -2643,6 +2648,42 @@ static void Command_Ban(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Command_BanIP(void)
|
||||||
|
{
|
||||||
|
if (COM_Argc() < 2)
|
||||||
|
{
|
||||||
|
CONS_Printf(M_GetText("banip <ip> <reason>: ban an ip address\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server) // Only the server can use this, otherwise does nothing.
|
||||||
|
{
|
||||||
|
const char *address = (COM_Argv(1));
|
||||||
|
const char *reason;
|
||||||
|
|
||||||
|
if (COM_Argc() == 2)
|
||||||
|
reason = NULL;
|
||||||
|
else
|
||||||
|
reason = COM_Argv(2);
|
||||||
|
|
||||||
|
|
||||||
|
if (I_SetBanAddress && I_SetBanAddress(address, NULL))
|
||||||
|
{
|
||||||
|
if (reason)
|
||||||
|
CONS_Printf("Banned IP address %s for: %s\n", address, reason);
|
||||||
|
else
|
||||||
|
CONS_Printf("Banned IP address %s\n", address);
|
||||||
|
|
||||||
|
Ban_Add(reason);
|
||||||
|
D_SaveBan();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void Command_Kick(void)
|
static void Command_Kick(void)
|
||||||
{
|
{
|
||||||
if (COM_Argc() < 2)
|
if (COM_Argc() < 2)
|
||||||
|
@ -2922,6 +2963,7 @@ void D_ClientServerInit(void)
|
||||||
COM_AddCommand("getplayernum", Command_GetPlayerNum);
|
COM_AddCommand("getplayernum", Command_GetPlayerNum);
|
||||||
COM_AddCommand("kick", Command_Kick);
|
COM_AddCommand("kick", Command_Kick);
|
||||||
COM_AddCommand("ban", Command_Ban);
|
COM_AddCommand("ban", Command_Ban);
|
||||||
|
COM_AddCommand("banip", Command_BanIP);
|
||||||
COM_AddCommand("clearbans", Command_ClearBans);
|
COM_AddCommand("clearbans", Command_ClearBans);
|
||||||
COM_AddCommand("showbanlist", Command_ShowBan);
|
COM_AddCommand("showbanlist", Command_ShowBan);
|
||||||
COM_AddCommand("reloadbans", Command_ReloadBan);
|
COM_AddCommand("reloadbans", Command_ReloadBan);
|
||||||
|
@ -4577,7 +4619,7 @@ void TryRunTics(tic_t realtics)
|
||||||
|
|
||||||
if (realtics >= 1)
|
if (realtics >= 1)
|
||||||
{
|
{
|
||||||
COM_BufExecute();
|
COM_BufTicker();
|
||||||
if (mapchangepending)
|
if (mapchangepending)
|
||||||
D_MapChange(-1, 0, ultimatemode, false, 2, false, fromlevelselect); // finish the map change
|
D_MapChange(-1, 0, ultimatemode, false, 2, false, fromlevelselect); // finish the map change
|
||||||
}
|
}
|
||||||
|
|
85
src/d_main.c
85
src/d_main.c
|
@ -157,37 +157,11 @@ void D_PostEvent_end(void) {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// modifier keys
|
// modifier keys
|
||||||
|
// Now handled in I_OsPolling
|
||||||
UINT8 shiftdown = 0; // 0x1 left, 0x2 right
|
UINT8 shiftdown = 0; // 0x1 left, 0x2 right
|
||||||
UINT8 ctrldown = 0; // 0x1 left, 0x2 right
|
UINT8 ctrldown = 0; // 0x1 left, 0x2 right
|
||||||
UINT8 altdown = 0; // 0x1 left, 0x2 right
|
UINT8 altdown = 0; // 0x1 left, 0x2 right
|
||||||
boolean capslock = 0; // gee i wonder what this does.
|
boolean capslock = 0; // gee i wonder what this does.
|
||||||
//
|
|
||||||
// D_ModifierKeyResponder
|
|
||||||
// Sets global shift/ctrl/alt variables, never actually eats events
|
|
||||||
//
|
|
||||||
static inline void D_ModifierKeyResponder(event_t *ev)
|
|
||||||
{
|
|
||||||
if (ev->type == ev_keydown || ev->type == ev_console) switch (ev->data1)
|
|
||||||
{
|
|
||||||
case KEY_LSHIFT: shiftdown |= 0x1; return;
|
|
||||||
case KEY_RSHIFT: shiftdown |= 0x2; return;
|
|
||||||
case KEY_LCTRL: ctrldown |= 0x1; return;
|
|
||||||
case KEY_RCTRL: ctrldown |= 0x2; return;
|
|
||||||
case KEY_LALT: altdown |= 0x1; return;
|
|
||||||
case KEY_RALT: altdown |= 0x2; return;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
else if (ev->type == ev_keyup) switch (ev->data1)
|
|
||||||
{
|
|
||||||
case KEY_LSHIFT: shiftdown &= ~0x1; return;
|
|
||||||
case KEY_RSHIFT: shiftdown &= ~0x2; return;
|
|
||||||
case KEY_LCTRL: ctrldown &= ~0x1; return;
|
|
||||||
case KEY_RCTRL: ctrldown &= ~0x2; return;
|
|
||||||
case KEY_LALT: altdown &= ~0x1; return;
|
|
||||||
case KEY_RALT: altdown &= ~0x2; return;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// D_ProcessEvents
|
// D_ProcessEvents
|
||||||
|
@ -201,9 +175,6 @@ void D_ProcessEvents(void)
|
||||||
{
|
{
|
||||||
ev = &events[eventtail];
|
ev = &events[eventtail];
|
||||||
|
|
||||||
// Set global shift/ctrl/alt down variables
|
|
||||||
D_ModifierKeyResponder(ev); // never eats events
|
|
||||||
|
|
||||||
// Screenshots over everything so that they can be taken anywhere.
|
// Screenshots over everything so that they can be taken anywhere.
|
||||||
if (M_ScreenshotResponder(ev))
|
if (M_ScreenshotResponder(ev))
|
||||||
continue; // ate the event
|
continue; // ate the event
|
||||||
|
@ -234,6 +205,9 @@ void D_ProcessEvents(void)
|
||||||
// wipegamestate can be set to -1 to force a wipe on the next draw
|
// wipegamestate can be set to -1 to force a wipe on the next draw
|
||||||
// added comment : there is a wipe eatch change of the gamestate
|
// added comment : there is a wipe eatch change of the gamestate
|
||||||
gamestate_t wipegamestate = GS_LEVEL;
|
gamestate_t wipegamestate = GS_LEVEL;
|
||||||
|
// -1: Default; 0-n: Wipe index; INT16_MAX: do not wipe
|
||||||
|
INT16 wipetypepre = -1;
|
||||||
|
INT16 wipetypepost = -1;
|
||||||
|
|
||||||
static void D_Display(void)
|
static void D_Display(void)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +241,7 @@ static void D_Display(void)
|
||||||
|
|
||||||
// save the current screen if about to wipe
|
// save the current screen if about to wipe
|
||||||
wipe = (gamestate != wipegamestate);
|
wipe = (gamestate != wipegamestate);
|
||||||
if (wipe)
|
if (wipe && wipetypepre != INT16_MAX)
|
||||||
{
|
{
|
||||||
// set for all later
|
// set for all later
|
||||||
wipedefindex = gamestate; // wipe_xxx_toblack
|
wipedefindex = gamestate; // wipe_xxx_toblack
|
||||||
|
@ -279,27 +253,37 @@ static void D_Display(void)
|
||||||
wipedefindex = wipe_multinter_toblack;
|
wipedefindex = wipe_multinter_toblack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wipetypepre < 0 || !F_WipeExists(wipetypepre))
|
||||||
|
wipetypepre = wipedefs[wipedefindex];
|
||||||
|
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
// Fade to black first
|
// Fade to black first
|
||||||
if ((wipegamestate != (gamestate_t)-2) // fades to black on its own timing, always
|
if ((wipegamestate == (gamestate_t)FORCEWIPE ||
|
||||||
&& wipedefs[wipedefindex] != UINT8_MAX)
|
(wipegamestate != (gamestate_t)FORCEWIPEOFF
|
||||||
|
&& !(gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction)))
|
||||||
|
) // fades to black on its own timing, always
|
||||||
|
&& wipetypepre != UINT8_MAX)
|
||||||
{
|
{
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK);
|
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wipetypepre = -1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
wipetypepre = -1;
|
||||||
|
|
||||||
// do buffered drawing
|
// do buffered drawing
|
||||||
switch (gamestate)
|
switch (gamestate)
|
||||||
{
|
{
|
||||||
case GS_TITLESCREEN:
|
case GS_TITLESCREEN:
|
||||||
if (!titlemapinaction) {
|
if (!titlemapinaction || !curbghide) {
|
||||||
F_TitleScreenDrawer();
|
F_TitleScreenDrawer();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -361,14 +345,14 @@ static void D_Display(void)
|
||||||
|
|
||||||
// STUPID race condition...
|
// STUPID race condition...
|
||||||
if (wipegamestate == GS_INTRO && gamestate == GS_TITLESCREEN)
|
if (wipegamestate == GS_INTRO && gamestate == GS_TITLESCREEN)
|
||||||
wipegamestate = -2;
|
wipegamestate = FORCEWIPEOFF;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wipegamestate = gamestate;
|
wipegamestate = gamestate;
|
||||||
|
|
||||||
// clean up border stuff
|
// clean up border stuff
|
||||||
// see if the border needs to be initially drawn
|
// see if the border needs to be initially drawn
|
||||||
if (gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction))
|
if (gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction && curbghide))
|
||||||
{
|
{
|
||||||
// draw the view directly
|
// draw the view directly
|
||||||
|
|
||||||
|
@ -477,18 +461,25 @@ static void D_Display(void)
|
||||||
//
|
//
|
||||||
// wipe update
|
// wipe update
|
||||||
//
|
//
|
||||||
if (wipe)
|
if (wipe && wipetypepost != INT16_MAX)
|
||||||
{
|
{
|
||||||
// note: moved up here because NetUpdate does input changes
|
// note: moved up here because NetUpdate does input changes
|
||||||
// and input during wipe tends to mess things up
|
// and input during wipe tends to mess things up
|
||||||
wipedefindex += WIPEFINALSHIFT;
|
wipedefindex += WIPEFINALSHIFT;
|
||||||
|
|
||||||
|
if (wipetypepost < 0 || !F_WipeExists(wipetypepost))
|
||||||
|
wipetypepost = wipedefs[wipedefindex];
|
||||||
|
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK);
|
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wipetypepost = -1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
wipetypepost = -1;
|
||||||
|
|
||||||
NetUpdate(); // send out any new accumulation
|
NetUpdate(); // send out any new accumulation
|
||||||
|
|
||||||
|
@ -741,8 +732,10 @@ void D_StartTitle(void)
|
||||||
gametype = GT_COOP;
|
gametype = GT_COOP;
|
||||||
paused = false;
|
paused = false;
|
||||||
advancedemo = false;
|
advancedemo = false;
|
||||||
|
F_InitMenuPresValues();
|
||||||
F_StartTitleScreen();
|
F_StartTitleScreen();
|
||||||
CON_ToggleOff();
|
|
||||||
|
currentMenu = &MainDef; // reset the current menu ID
|
||||||
|
|
||||||
// Reset the palette
|
// Reset the palette
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
|
@ -1115,6 +1108,13 @@ void D_SRB2Main(void)
|
||||||
// adapt tables to SRB2's needs, including extra slots for dehacked file support
|
// adapt tables to SRB2's needs, including extra slots for dehacked file support
|
||||||
P_PatchInfoTables();
|
P_PatchInfoTables();
|
||||||
|
|
||||||
|
// initiate menu metadata before SOCcing them
|
||||||
|
M_InitMenuPresTables();
|
||||||
|
|
||||||
|
// init title screen display params
|
||||||
|
if (M_CheckParm("-connect"))
|
||||||
|
F_InitMenuPresValues();
|
||||||
|
|
||||||
//---------------------------------------------------- READY TIME
|
//---------------------------------------------------- READY TIME
|
||||||
// we need to check for dedicated before initialization of some subsystems
|
// we need to check for dedicated before initialization of some subsystems
|
||||||
|
|
||||||
|
@ -1401,13 +1401,14 @@ void D_SRB2Main(void)
|
||||||
}
|
}
|
||||||
else if (M_CheckParm("-skipintro"))
|
else if (M_CheckParm("-skipintro"))
|
||||||
{
|
{
|
||||||
CON_ToggleOff();
|
F_InitMenuPresValues();
|
||||||
CON_ClearHUD();
|
|
||||||
F_StartTitleScreen();
|
F_StartTitleScreen();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
F_StartIntro(); // Tails 03-03-2002
|
F_StartIntro(); // Tails 03-03-2002
|
||||||
|
|
||||||
|
CON_ToggleOff();
|
||||||
|
|
||||||
if (dedicated && server)
|
if (dedicated && server)
|
||||||
{
|
{
|
||||||
levelstarttic = gametic;
|
levelstarttic = gametic;
|
||||||
|
|
|
@ -1900,9 +1900,6 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
|
||||||
CONS_Printf(M_GetText("Speeding off to level...\n"));
|
CONS_Printf(M_GetText("Speeding off to level...\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
CON_ToggleOff();
|
|
||||||
CON_ClearHUD();
|
|
||||||
|
|
||||||
if (demoplayback && !timingdemo)
|
if (demoplayback && !timingdemo)
|
||||||
precache = false;
|
precache = false;
|
||||||
|
|
||||||
|
@ -4103,7 +4100,7 @@ static void Command_ExitLevel_f(void)
|
||||||
CONS_Printf(M_GetText("This only works in a netgame.\n"));
|
CONS_Printf(M_GetText("This only works in a netgame.\n"));
|
||||||
else if (!(server || (IsPlayerAdmin(consoleplayer))))
|
else if (!(server || (IsPlayerAdmin(consoleplayer))))
|
||||||
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
CONS_Printf(M_GetText("Only the server or a remote admin can use this.\n"));
|
||||||
else if (gamestate != GS_LEVEL || demoplayback)
|
else if (( gamestate != GS_LEVEL && gamestate != GS_CREDITS ) || demoplayback)
|
||||||
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
|
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
|
||||||
else
|
else
|
||||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||||
|
|
|
@ -232,7 +232,8 @@ typedef enum
|
||||||
// Specific level gimmicks.
|
// Specific level gimmicks.
|
||||||
CR_ZOOMTUBE,
|
CR_ZOOMTUBE,
|
||||||
CR_ROPEHANG,
|
CR_ROPEHANG,
|
||||||
CR_MACESPIN
|
CR_MACESPIN,
|
||||||
|
CR_MINECART
|
||||||
} carrytype_t; // pw_carry
|
} carrytype_t; // pw_carry
|
||||||
|
|
||||||
// Player powers. (don't edit this comment)
|
// Player powers. (don't edit this comment)
|
||||||
|
|
646
src/dehacked.c
646
src/dehacked.c
|
@ -72,6 +72,7 @@ static sfxenum_t get_sfx(const char *word);
|
||||||
static UINT16 get_mus(const char *word, UINT8 dehacked_mode);
|
static UINT16 get_mus(const char *word, UINT8 dehacked_mode);
|
||||||
#endif
|
#endif
|
||||||
static hudnum_t get_huditem(const char *word);
|
static hudnum_t get_huditem(const char *word);
|
||||||
|
static menutype_t get_menutype(const char *word);
|
||||||
#ifndef HAVE_BLUA
|
#ifndef HAVE_BLUA
|
||||||
static powertype_t get_power(const char *word);
|
static powertype_t get_power(const char *word);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1322,6 +1323,8 @@ static void readlevelheader(MYFILE *f, INT32 num)
|
||||||
else
|
else
|
||||||
mapheaderinfo[num-1]->menuflags &= ~LF2_WIDEICON;
|
mapheaderinfo[num-1]->menuflags &= ~LF2_WIDEICON;
|
||||||
}
|
}
|
||||||
|
else if (fastcmp(word, "STARTRINGS"))
|
||||||
|
mapheaderinfo[num-1]->startrings = (UINT16)i;
|
||||||
else
|
else
|
||||||
deh_warning("Level header %d: unknown word '%s'", num, word);
|
deh_warning("Level header %d: unknown word '%s'", num, word);
|
||||||
}
|
}
|
||||||
|
@ -1789,15 +1792,23 @@ static void readtextpromptpage(MYFILE *f, INT32 num, INT32 pagenum)
|
||||||
if (i == 0 || fastcmp(word2, "WHITE")) backcolor = 0;
|
if (i == 0 || fastcmp(word2, "WHITE")) backcolor = 0;
|
||||||
else if (i == 1 || fastcmp(word2, "GRAY") || fastcmp(word2, "GREY") ||
|
else if (i == 1 || fastcmp(word2, "GRAY") || fastcmp(word2, "GREY") ||
|
||||||
fastcmp(word2, "BLACK")) backcolor = 1;
|
fastcmp(word2, "BLACK")) backcolor = 1;
|
||||||
else if (i == 2 || fastcmp(word2, "BROWN")) backcolor = 2;
|
else if (i == 2 || fastcmp(word2, "SEPIA")) backcolor = 2;
|
||||||
else if (i == 3 || fastcmp(word2, "RED")) backcolor = 3;
|
else if (i == 3 || fastcmp(word2, "BROWN")) backcolor = 3;
|
||||||
else if (i == 4 || fastcmp(word2, "ORANGE")) backcolor = 4;
|
else if (i == 4 || fastcmp(word2, "PINK")) backcolor = 4;
|
||||||
else if (i == 5 || fastcmp(word2, "YELLOW")) backcolor = 5;
|
else if (i == 5 || fastcmp(word2, "RASPBERRY")) backcolor = 5;
|
||||||
else if (i == 6 || fastcmp(word2, "GREEN")) backcolor = 6;
|
else if (i == 6 || fastcmp(word2, "RED")) backcolor = 6;
|
||||||
else if (i == 7 || fastcmp(word2, "BLUE")) backcolor = 7;
|
else if (i == 7 || fastcmp(word2, "CREAMSICLE")) backcolor = 7;
|
||||||
else if (i == 8 || fastcmp(word2, "PURPLE")) backcolor = 8;
|
else if (i == 8 || fastcmp(word2, "ORANGE")) backcolor = 8;
|
||||||
else if (i == 9 || fastcmp(word2, "MAGENTA")) backcolor = 9;
|
else if (i == 9 || fastcmp(word2, "GOLD")) backcolor = 9;
|
||||||
else if (i == 10 || fastcmp(word2, "AQUA")) backcolor = 10;
|
else if (i == 10 || fastcmp(word2, "YELLOW")) backcolor = 10;
|
||||||
|
else if (i == 11 || fastcmp(word2, "EMERALD")) backcolor = 11;
|
||||||
|
else if (i == 12 || fastcmp(word2, "GREEN")) backcolor = 12;
|
||||||
|
else if (i == 13 || fastcmp(word2, "CYAN") || fastcmp(word2, "AQUA")) backcolor = 13;
|
||||||
|
else if (i == 14 || fastcmp(word2, "STEEL")) backcolor = 14;
|
||||||
|
else if (i == 15 || fastcmp(word2, "PERIWINKLE")) backcolor = 15;
|
||||||
|
else if (i == 16 || fastcmp(word2, "BLUE")) backcolor = 16;
|
||||||
|
else if (i == 17 || fastcmp(word2, "PURPLE")) backcolor = 17;
|
||||||
|
else if (i == 18 || fastcmp(word2, "LAVENDER")) backcolor = 18;
|
||||||
else if (i < 0) backcolor = INT32_MAX; // CONS_BACKCOLOR user-configured
|
else if (i < 0) backcolor = INT32_MAX; // CONS_BACKCOLOR user-configured
|
||||||
else backcolor = 1; // default gray
|
else backcolor = 1; // default gray
|
||||||
textprompts[num]->page[pagenum].backcolor = backcolor;
|
textprompts[num]->page[pagenum].backcolor = backcolor;
|
||||||
|
@ -1931,6 +1942,161 @@ static void readtextprompt(MYFILE *f, INT32 num)
|
||||||
Z_Free(s);
|
Z_Free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void readmenu(MYFILE *f, INT32 num)
|
||||||
|
{
|
||||||
|
char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
|
||||||
|
char *word = s;
|
||||||
|
char *word2;
|
||||||
|
char *tmp;
|
||||||
|
INT32 value;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (myfgets(s, MAXLINELEN, f))
|
||||||
|
{
|
||||||
|
if (s[0] == '\n')
|
||||||
|
break;
|
||||||
|
|
||||||
|
// First remove trailing newline, if there is one
|
||||||
|
tmp = strchr(s, '\n');
|
||||||
|
if (tmp)
|
||||||
|
*tmp = '\0';
|
||||||
|
|
||||||
|
tmp = strchr(s, '#');
|
||||||
|
if (tmp)
|
||||||
|
*tmp = '\0';
|
||||||
|
if (s == tmp)
|
||||||
|
continue; // Skip comment lines, but don't break.
|
||||||
|
|
||||||
|
// Get the part before the " = "
|
||||||
|
tmp = strchr(s, '=');
|
||||||
|
if (tmp)
|
||||||
|
*(tmp-1) = '\0';
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
strupr(word);
|
||||||
|
|
||||||
|
// Now get the part after
|
||||||
|
word2 = (tmp += 2);
|
||||||
|
strupr(word2);
|
||||||
|
|
||||||
|
value = atoi(word2); // used for numerical settings
|
||||||
|
|
||||||
|
if (fastcmp(word, "BACKGROUNDNAME"))
|
||||||
|
{
|
||||||
|
strncpy(menupres[num].bgname, word2, 8);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "HIDEBACKGROUND"))
|
||||||
|
{
|
||||||
|
menupres[num].bghide = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "BACKGROUNDCOLOR"))
|
||||||
|
{
|
||||||
|
menupres[num].bgcolor = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "HIDETITLEPICS") || fastcmp(word, "HIDEPICS"))
|
||||||
|
{
|
||||||
|
// true by default, except MM_MAIN
|
||||||
|
menupres[num].hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED")
|
||||||
|
|| fastcmp(word, "SCROLLSPEED") || fastcmp(word, "SCROLLXSPEED"))
|
||||||
|
{
|
||||||
|
menupres[num].titlescrollxspeed = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLESCROLLYSPEED") || fastcmp(word, "SCROLLYSPEED"))
|
||||||
|
{
|
||||||
|
menupres[num].titlescrollyspeed = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "MUSIC"))
|
||||||
|
{
|
||||||
|
strncpy(menupres[num].musname, word2, 7);
|
||||||
|
menupres[num].musname[6] = 0;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
#ifdef MUSICSLOT_COMPATIBILITY
|
||||||
|
else if (fastcmp(word, "MUSICSLOT"))
|
||||||
|
{
|
||||||
|
value = get_mus(word2, true);
|
||||||
|
if (value && value <= 1035)
|
||||||
|
snprintf(menupres[num].musname, 7, "%sM", G_BuildMapName(value));
|
||||||
|
else if (value && value <= 1050)
|
||||||
|
strncpy(menupres[num].musname, compat_special_music_slots[value - 1036], 7);
|
||||||
|
else
|
||||||
|
menupres[num].musname[0] = 0; // becomes empty string
|
||||||
|
menupres[num].musname[6] = 0;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (fastcmp(word, "MUSICTRACK"))
|
||||||
|
{
|
||||||
|
menupres[num].mustrack = ((UINT16)value - 1);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "MUSICLOOP"))
|
||||||
|
{
|
||||||
|
// true by default except MM_MAIN
|
||||||
|
menupres[num].muslooping = (value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "NOMUSIC"))
|
||||||
|
{
|
||||||
|
menupres[num].musstop = (value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "IGNOREMUSIC"))
|
||||||
|
{
|
||||||
|
menupres[num].musignore = (value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "FADESTRENGTH"))
|
||||||
|
{
|
||||||
|
// one-based, <= 0 means use default value. 1-32
|
||||||
|
menupres[num].fadestrength = get_number(word2)-1;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "NOENTERBUBBLE"))
|
||||||
|
{
|
||||||
|
menupres[num].enterbubble = !(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "NOEXITBUBBLE"))
|
||||||
|
{
|
||||||
|
menupres[num].exitbubble = !(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "ENTERTAG"))
|
||||||
|
{
|
||||||
|
menupres[num].entertag = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "EXITTAG"))
|
||||||
|
{
|
||||||
|
menupres[num].exittag = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "ENTERWIPE"))
|
||||||
|
{
|
||||||
|
menupres[num].enterwipe = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "EXITWIPE"))
|
||||||
|
{
|
||||||
|
menupres[num].exitwipe = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (!myfeof(f)); // finish when the line is empty
|
||||||
|
|
||||||
|
Z_Free(s);
|
||||||
|
}
|
||||||
|
|
||||||
static void readhuditem(MYFILE *f, INT32 num)
|
static void readhuditem(MYFILE *f, INT32 num)
|
||||||
{
|
{
|
||||||
char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
|
char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
|
||||||
|
@ -2109,6 +2275,9 @@ static actionpointer_t actionpointers[] =
|
||||||
{{A_CrushclawLaunch}, "A_CRUSHCLAWLAUNCH"},
|
{{A_CrushclawLaunch}, "A_CRUSHCLAWLAUNCH"},
|
||||||
{{A_VultureVtol}, "A_VULTUREVTOL"},
|
{{A_VultureVtol}, "A_VULTUREVTOL"},
|
||||||
{{A_VultureCheck}, "A_VULTURECHECK"},
|
{{A_VultureCheck}, "A_VULTURECHECK"},
|
||||||
|
{{A_VultureHover}, "A_VULTUREHOVER"},
|
||||||
|
{{A_VultureBlast}, "A_VULTUREBLAST"},
|
||||||
|
{{A_VultureFly}, "A_VULTUREFLY"},
|
||||||
{{A_SkimChase}, "A_SKIMCHASE"},
|
{{A_SkimChase}, "A_SKIMCHASE"},
|
||||||
{{A_1upThinker}, "A_1UPTHINKER"},
|
{{A_1upThinker}, "A_1UPTHINKER"},
|
||||||
{{A_SkullAttack}, "A_SKULLATTACK"},
|
{{A_SkullAttack}, "A_SKULLATTACK"},
|
||||||
|
@ -2225,8 +2394,30 @@ static actionpointer_t actionpointers[] =
|
||||||
{{A_ParentTriesToSleep}, "A_PARENTTRIESTOSLEEP"},
|
{{A_ParentTriesToSleep}, "A_PARENTTRIESTOSLEEP"},
|
||||||
{{A_CryingToMomma}, "A_CRYINGTOMOMMA"},
|
{{A_CryingToMomma}, "A_CRYINGTOMOMMA"},
|
||||||
{{A_CheckFlags2}, "A_CHECKFLAGS2"},
|
{{A_CheckFlags2}, "A_CHECKFLAGS2"},
|
||||||
|
{{A_Boss5FindWaypoint}, "A_BOSS5FINDWAYPOINT"},
|
||||||
{{NULL}, "NONE"},
|
{{A_DoNPCSkid}, "A_DONPCSKID"},
|
||||||
|
{{A_DoNPCPain}, "A_DONPCPAIN"},
|
||||||
|
{{A_PrepareRepeat}, "A_PREPAREREPEAT"},
|
||||||
|
{{A_Boss5ExtraRepeat}, "A_BOSS5EXTRAREPEAT"},
|
||||||
|
{{A_Boss5Calm}, "A_BOSS5CALM"},
|
||||||
|
{{A_Boss5CheckOnGround}, "A_BOSS5CHECKONGROUND"},
|
||||||
|
{{A_Boss5CheckFalling}, "A_BOSS5CHECKFALLING"},
|
||||||
|
{{A_Boss5PinchShot}, "A_BOSS5PINCHSHOT"},
|
||||||
|
{{A_Boss5MakeItRain}, "A_BOSS5MAKEITRAIN"},
|
||||||
|
{{A_LookForBetter}, "A_LOOKFORBETTER"},
|
||||||
|
{{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"},
|
||||||
|
{{A_DustDevilThink}, "A_DUSTDEVILTHINK"},
|
||||||
|
{{A_TNTExplode}, "A_TNTEXPLODE"},
|
||||||
|
{{A_DebrisRandom}, "A_DEBRISRANDOM"},
|
||||||
|
{{A_TrainCameo}, "A_TRAINCAMEO"},
|
||||||
|
{{A_TrainCameo2}, "A_TRAINCAMEO2"},
|
||||||
|
{{A_CanarivoreGas}, "A_CANARIVOREGAS"},
|
||||||
|
{{A_KillSegments}, "A_KILLSEGMENTS"},
|
||||||
|
{{A_SnapperSpawn}, "A_SNAPPERSPAWN"},
|
||||||
|
{{A_SnapperThinker}, "A_SNAPPERTHINKER"},
|
||||||
|
{{A_SaloonDoorSpawn}, "A_SALOONDOORSPAWN"},
|
||||||
|
{{A_MinecartSparkThink}, "A_MINECARTSPARKTHINK"},
|
||||||
|
{{NULL}, "NONE"},
|
||||||
|
|
||||||
// This NULL entry must be the last in the list
|
// This NULL entry must be the last in the list
|
||||||
{{NULL}, NULL},
|
{{NULL}, NULL},
|
||||||
|
@ -3174,9 +3365,14 @@ static void readmaincfg(MYFILE *f)
|
||||||
hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "TITLESCROLLSPEED"))
|
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED"))
|
||||||
{
|
{
|
||||||
titlescrollspeed = get_number(word2);
|
titlescrollxspeed = get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLESCROLLYSPEED"))
|
||||||
|
{
|
||||||
|
titlescrollyspeed = get_number(word2);
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "CREDITSCUTSCENE"))
|
else if (fastcmp(word, "CREDITSCUTSCENE"))
|
||||||
|
@ -3724,6 +3920,19 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
|
||||||
ignorelines(f);
|
ignorelines(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (fastcmp(word, "MENU"))
|
||||||
|
{
|
||||||
|
if (i == 0 && word2[0] != '0') // If word2 isn't a number
|
||||||
|
i = get_menutype(word2); // find a huditem by name
|
||||||
|
if (i >= 1 && i < NUMMENUTYPES)
|
||||||
|
readmenu(f, i);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// zero-based, but let's start at 1
|
||||||
|
deh_warning("Menu number %d out of range (1 - %d)", i, NUMMENUTYPES-1);
|
||||||
|
ignorelines(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (fastcmp(word, "UNLOCKABLE"))
|
else if (fastcmp(word, "UNLOCKABLE"))
|
||||||
{
|
{
|
||||||
if (!mainfile && !gamedataadded)
|
if (!mainfile && !gamedataadded)
|
||||||
|
@ -4195,15 +4404,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
// Vulture
|
// Vulture
|
||||||
"S_VULTURE_STND",
|
"S_VULTURE_STND",
|
||||||
"S_VULTURE_VTOL1",
|
"S_VULTURE_DRIFT",
|
||||||
"S_VULTURE_VTOL2",
|
|
||||||
"S_VULTURE_VTOL3",
|
|
||||||
"S_VULTURE_VTOL4",
|
|
||||||
"S_VULTURE_ZOOM1",
|
"S_VULTURE_ZOOM1",
|
||||||
"S_VULTURE_ZOOM2",
|
"S_VULTURE_ZOOM2",
|
||||||
"S_VULTURE_ZOOM3",
|
"S_VULTURE_STUNNED",
|
||||||
"S_VULTURE_ZOOM4",
|
|
||||||
"S_VULTURE_ZOOM5",
|
|
||||||
|
|
||||||
// Pointy
|
// Pointy
|
||||||
"S_POINTY1",
|
"S_POINTY1",
|
||||||
|
@ -4254,15 +4458,31 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_EGGSHIELDBREAK",
|
"S_EGGSHIELDBREAK",
|
||||||
|
|
||||||
// Green Snapper
|
// Green Snapper
|
||||||
|
"S_SNAPPER_SPAWN",
|
||||||
|
"S_SNAPPER_SPAWN2",
|
||||||
"S_GSNAPPER_STND",
|
"S_GSNAPPER_STND",
|
||||||
"S_GSNAPPER1",
|
"S_GSNAPPER1",
|
||||||
"S_GSNAPPER2",
|
"S_GSNAPPER2",
|
||||||
"S_GSNAPPER3",
|
"S_GSNAPPER3",
|
||||||
"S_GSNAPPER4",
|
"S_GSNAPPER4",
|
||||||
|
"S_SNAPPER_XPLD",
|
||||||
|
"S_SNAPPER_LEG",
|
||||||
|
"S_SNAPPER_LEGRAISE",
|
||||||
|
"S_SNAPPER_HEAD",
|
||||||
|
|
||||||
// Minus
|
// Minus
|
||||||
|
"S_MINUS_INIT",
|
||||||
"S_MINUS_STND",
|
"S_MINUS_STND",
|
||||||
"S_MINUS_DIGGING",
|
"S_MINUS_DIGGING1",
|
||||||
|
"S_MINUS_DIGGING2",
|
||||||
|
"S_MINUS_DIGGING3",
|
||||||
|
"S_MINUS_DIGGING4",
|
||||||
|
"S_MINUS_BURST0",
|
||||||
|
"S_MINUS_BURST1",
|
||||||
|
"S_MINUS_BURST2",
|
||||||
|
"S_MINUS_BURST3",
|
||||||
|
"S_MINUS_BURST4",
|
||||||
|
"S_MINUS_BURST5",
|
||||||
"S_MINUS_POPUP",
|
"S_MINUS_POPUP",
|
||||||
"S_MINUS_UPWARD1",
|
"S_MINUS_UPWARD1",
|
||||||
"S_MINUS_UPWARD2",
|
"S_MINUS_UPWARD2",
|
||||||
|
@ -4281,6 +4501,15 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_MINUS_DOWNWARD7",
|
"S_MINUS_DOWNWARD7",
|
||||||
"S_MINUS_DOWNWARD8",
|
"S_MINUS_DOWNWARD8",
|
||||||
|
|
||||||
|
// Minus dirt
|
||||||
|
"S_MINUSDIRT1",
|
||||||
|
"S_MINUSDIRT2",
|
||||||
|
"S_MINUSDIRT3",
|
||||||
|
"S_MINUSDIRT4",
|
||||||
|
"S_MINUSDIRT5",
|
||||||
|
"S_MINUSDIRT6",
|
||||||
|
"S_MINUSDIRT7",
|
||||||
|
|
||||||
// Spring Shell
|
// Spring Shell
|
||||||
"S_SSHELL_STND",
|
"S_SSHELL_STND",
|
||||||
"S_SSHELL_RUN1",
|
"S_SSHELL_RUN1",
|
||||||
|
@ -4308,6 +4537,28 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_UNIDUS_RUN",
|
"S_UNIDUS_RUN",
|
||||||
"S_UNIDUS_BALL",
|
"S_UNIDUS_BALL",
|
||||||
|
|
||||||
|
// Canarivore
|
||||||
|
"S_CANARIVORE_LOOK",
|
||||||
|
"S_CANARIVORE_AWAKEN1",
|
||||||
|
"S_CANARIVORE_AWAKEN2",
|
||||||
|
"S_CANARIVORE_AWAKEN3",
|
||||||
|
"S_CANARIVORE_GAS1",
|
||||||
|
"S_CANARIVORE_GAS2",
|
||||||
|
"S_CANARIVORE_GAS3",
|
||||||
|
"S_CANARIVORE_GAS4",
|
||||||
|
"S_CANARIVORE_GAS5",
|
||||||
|
"S_CANARIVORE_GASREPEAT",
|
||||||
|
"S_CANARIVORE_CLOSE1",
|
||||||
|
"S_CANARIVORE_CLOSE2",
|
||||||
|
"S_CANARIVOREGAS_1",
|
||||||
|
"S_CANARIVOREGAS_2",
|
||||||
|
"S_CANARIVOREGAS_3",
|
||||||
|
"S_CANARIVOREGAS_4",
|
||||||
|
"S_CANARIVOREGAS_5",
|
||||||
|
"S_CANARIVOREGAS_6",
|
||||||
|
"S_CANARIVOREGAS_7",
|
||||||
|
"S_CANARIVOREGAS_8",
|
||||||
|
|
||||||
// Boss Explosion
|
// Boss Explosion
|
||||||
"S_BOSSEXPLODE",
|
"S_BOSSEXPLODE",
|
||||||
|
|
||||||
|
@ -4530,6 +4781,96 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_JETFLAME1",
|
"S_JETFLAME1",
|
||||||
"S_JETFLAME2",
|
"S_JETFLAME2",
|
||||||
|
|
||||||
|
// Boss 5
|
||||||
|
"S_FANG_IDLE1",
|
||||||
|
"S_FANG_IDLE2",
|
||||||
|
"S_FANG_IDLE3",
|
||||||
|
"S_FANG_IDLE4",
|
||||||
|
"S_FANG_IDLE5",
|
||||||
|
"S_FANG_IDLE6",
|
||||||
|
"S_FANG_IDLE7",
|
||||||
|
"S_FANG_IDLE8",
|
||||||
|
"S_FANG_PAIN1",
|
||||||
|
"S_FANG_PAIN2",
|
||||||
|
"S_FANG_PATHINGSTART1",
|
||||||
|
"S_FANG_PATHINGSTART2",
|
||||||
|
"S_FANG_PATHING",
|
||||||
|
"S_FANG_BOUNCE1",
|
||||||
|
"S_FANG_BOUNCE2",
|
||||||
|
"S_FANG_BOUNCE3",
|
||||||
|
"S_FANG_BOUNCE4",
|
||||||
|
"S_FANG_FALL1",
|
||||||
|
"S_FANG_FALL2",
|
||||||
|
"S_FANG_CHECKPATH1",
|
||||||
|
"S_FANG_CHECKPATH2",
|
||||||
|
"S_FANG_PATHINGCONT1",
|
||||||
|
"S_FANG_PATHINGCONT2",
|
||||||
|
"S_FANG_PATHINGCONT3",
|
||||||
|
"S_FANG_SKID1",
|
||||||
|
"S_FANG_SKID2",
|
||||||
|
"S_FANG_SKID3",
|
||||||
|
"S_FANG_CHOOSEATTACK",
|
||||||
|
"S_FANG_FIRESTART1",
|
||||||
|
"S_FANG_FIRESTART2",
|
||||||
|
"S_FANG_FIRE1",
|
||||||
|
"S_FANG_FIRE2",
|
||||||
|
"S_FANG_FIRE3",
|
||||||
|
"S_FANG_FIRE4",
|
||||||
|
"S_FANG_FIREREPEAT",
|
||||||
|
"S_FANG_LOBSHOT1",
|
||||||
|
"S_FANG_LOBSHOT2",
|
||||||
|
"S_FANG_WAIT1",
|
||||||
|
"S_FANG_WAIT2",
|
||||||
|
"S_FANG_WALLHIT",
|
||||||
|
"S_FANG_PINCHPATHINGSTART1",
|
||||||
|
"S_FANG_PINCHPATHINGSTART2",
|
||||||
|
"S_FANG_PINCHPATHING",
|
||||||
|
"S_FANG_PINCHBOUNCE1",
|
||||||
|
"S_FANG_PINCHBOUNCE2",
|
||||||
|
"S_FANG_PINCHBOUNCE3",
|
||||||
|
"S_FANG_PINCHBOUNCE4",
|
||||||
|
"S_FANG_PINCHFALL1",
|
||||||
|
"S_FANG_PINCHFALL2",
|
||||||
|
"S_FANG_PINCHSKID1",
|
||||||
|
"S_FANG_PINCHSKID2",
|
||||||
|
"S_FANG_PINCHLOBSHOT1",
|
||||||
|
"S_FANG_PINCHLOBSHOT2",
|
||||||
|
"S_FANG_PINCHLOBSHOT3",
|
||||||
|
"S_FANG_PINCHLOBSHOT4",
|
||||||
|
"S_FANG_DIE1",
|
||||||
|
"S_FANG_DIE2",
|
||||||
|
"S_FANG_DIE3",
|
||||||
|
"S_FANG_DIE4",
|
||||||
|
"S_FANG_DIE5",
|
||||||
|
"S_FANG_DIE6",
|
||||||
|
"S_FANG_DIE7",
|
||||||
|
"S_FANG_DIE8",
|
||||||
|
"S_FANG_FLEEPATHING1",
|
||||||
|
"S_FANG_FLEEPATHING2",
|
||||||
|
"S_FANG_FLEEBOUNCE1",
|
||||||
|
"S_FANG_FLEEBOUNCE2",
|
||||||
|
"S_FANG_KO",
|
||||||
|
|
||||||
|
"S_FBOMB1",
|
||||||
|
"S_FBOMB2",
|
||||||
|
"S_FBOMB_EXPL1",
|
||||||
|
"S_FBOMB_EXPL2",
|
||||||
|
"S_FBOMB_EXPL3",
|
||||||
|
"S_FBOMB_EXPL4",
|
||||||
|
"S_FBOMB_EXPL5",
|
||||||
|
"S_FBOMB_EXPL6",
|
||||||
|
"S_TNTDUST_1",
|
||||||
|
"S_TNTDUST_2",
|
||||||
|
"S_TNTDUST_3",
|
||||||
|
"S_TNTDUST_4",
|
||||||
|
"S_TNTDUST_5",
|
||||||
|
"S_TNTDUST_6",
|
||||||
|
"S_TNTDUST_7",
|
||||||
|
"S_TNTDUST_8",
|
||||||
|
"S_FSGNA",
|
||||||
|
"S_FSGNB",
|
||||||
|
"S_FSGNC",
|
||||||
|
|
||||||
// Black Eggman (Boss 7)
|
// Black Eggman (Boss 7)
|
||||||
"S_BLACKEGG_STND",
|
"S_BLACKEGG_STND",
|
||||||
"S_BLACKEGG_STND2",
|
"S_BLACKEGG_STND2",
|
||||||
|
@ -5394,6 +5735,95 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_CACTI2",
|
"S_CACTI2",
|
||||||
"S_CACTI3",
|
"S_CACTI3",
|
||||||
"S_CACTI4",
|
"S_CACTI4",
|
||||||
|
"S_CACTI5",
|
||||||
|
"S_CACTI6",
|
||||||
|
"S_CACTI7",
|
||||||
|
"S_CACTI8",
|
||||||
|
"S_CACTI9",
|
||||||
|
|
||||||
|
// Warning signs sprites
|
||||||
|
"S_ARIDSIGN_CAUTION",
|
||||||
|
"S_ARIDSIGN_CACTI",
|
||||||
|
"S_ARIDSIGN_SHARPTURN",
|
||||||
|
|
||||||
|
// Oil lamp
|
||||||
|
"S_OILLAMP",
|
||||||
|
"S_OILLAMPFLARE",
|
||||||
|
|
||||||
|
// TNT barrel
|
||||||
|
"S_TNTBARREL_STND1",
|
||||||
|
"S_TNTBARREL_EXPL1",
|
||||||
|
"S_TNTBARREL_EXPL2",
|
||||||
|
"S_TNTBARREL_EXPL3",
|
||||||
|
"S_TNTBARREL_EXPL4",
|
||||||
|
"S_TNTBARREL_EXPL5",
|
||||||
|
"S_TNTBARREL_EXPL6",
|
||||||
|
"S_TNTBARREL_FLYING",
|
||||||
|
|
||||||
|
// TNT proximity shell
|
||||||
|
"S_PROXIMITY_TNT",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER1",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER2",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER3",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER4",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER5",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER6",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER7",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER8",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER9",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER10",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER11",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER12",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER13",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER14",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER15",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER16",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER17",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER18",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER19",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER20",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER21",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER22",
|
||||||
|
"S_PROXIMITY_TNT_TRIGGER23",
|
||||||
|
|
||||||
|
// Dust devil
|
||||||
|
"S_DUSTDEVIL",
|
||||||
|
"S_DUSTLAYER1",
|
||||||
|
"S_DUSTLAYER2",
|
||||||
|
"S_DUSTLAYER3",
|
||||||
|
"S_DUSTLAYER4",
|
||||||
|
"S_DUSTLAYER5",
|
||||||
|
"S_ARIDDUST1",
|
||||||
|
"S_ARIDDUST2",
|
||||||
|
"S_ARIDDUST3",
|
||||||
|
|
||||||
|
// Minecart
|
||||||
|
"S_MINECART_IDLE",
|
||||||
|
"S_MINECART_DTH1",
|
||||||
|
"S_MINECARTEND",
|
||||||
|
"S_MINECARTSEG_FRONT",
|
||||||
|
"S_MINECARTSEG_BACK",
|
||||||
|
"S_MINECARTSEG_LEFT",
|
||||||
|
"S_MINECARTSEG_RIGHT",
|
||||||
|
"S_MINECARTSIDEMARK1",
|
||||||
|
"S_MINECARTSIDEMARK2",
|
||||||
|
"S_MINECARTSPARK",
|
||||||
|
|
||||||
|
// Saloon door
|
||||||
|
"S_SALOONDOOR",
|
||||||
|
"S_SALOONDOORTHINKER",
|
||||||
|
|
||||||
|
// Train cameo
|
||||||
|
"S_TRAINCAMEOSPAWNER_1",
|
||||||
|
"S_TRAINCAMEOSPAWNER_2",
|
||||||
|
"S_TRAINCAMEOSPAWNER_3",
|
||||||
|
"S_TRAINCAMEOSPAWNER_4",
|
||||||
|
"S_TRAINCAMEOSPAWNER_5",
|
||||||
|
"S_TRAINPUFFMAKER",
|
||||||
|
|
||||||
|
// Train
|
||||||
|
"S_TRAINDUST",
|
||||||
|
"S_TRAINSTEAM",
|
||||||
|
|
||||||
// Flame jet
|
// Flame jet
|
||||||
"S_FLAMEJETSTND",
|
"S_FLAMEJETSTND",
|
||||||
|
@ -6717,6 +7147,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_DUST3",
|
"S_DUST3",
|
||||||
"S_DUST4",
|
"S_DUST4",
|
||||||
|
|
||||||
|
"S_WOODDEBRIS",
|
||||||
|
|
||||||
"S_ROCKSPAWN",
|
"S_ROCKSPAWN",
|
||||||
|
|
||||||
"S_ROCKCRUMBLEA",
|
"S_ROCKCRUMBLEA",
|
||||||
|
@ -6780,11 +7212,16 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_EGGGUARD", // Egg Guard
|
"MT_EGGGUARD", // Egg Guard
|
||||||
"MT_EGGSHIELD", // Egg Guard's shield
|
"MT_EGGSHIELD", // Egg Guard's shield
|
||||||
"MT_GSNAPPER", // Green Snapper
|
"MT_GSNAPPER", // Green Snapper
|
||||||
|
"MT_SNAPPER_LEG", // Green Snapper leg
|
||||||
|
"MT_SNAPPER_HEAD", // Green Snapper head
|
||||||
"MT_MINUS", // Minus
|
"MT_MINUS", // Minus
|
||||||
|
"MT_MINUSDIRT", // Minus dirt
|
||||||
"MT_SPRINGSHELL", // Spring Shell
|
"MT_SPRINGSHELL", // Spring Shell
|
||||||
"MT_YELLOWSHELL", // Spring Shell (yellow)
|
"MT_YELLOWSHELL", // Spring Shell (yellow)
|
||||||
"MT_UNIDUS", // Unidus
|
"MT_UNIDUS", // Unidus
|
||||||
"MT_UNIBALL", // Unidus Ball
|
"MT_UNIBALL", // Unidus Ball
|
||||||
|
"MT_CANARIVORE", // Canarivore
|
||||||
|
"MT_CANARIVORE_GAS", // Canarivore gas
|
||||||
|
|
||||||
// Generic Boss Items
|
// Generic Boss Items
|
||||||
"MT_BOSSEXPLODE",
|
"MT_BOSSEXPLODE",
|
||||||
|
@ -6820,6 +7257,14 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_EGGMOBILE4_MACE",
|
"MT_EGGMOBILE4_MACE",
|
||||||
"MT_JETFLAME",
|
"MT_JETFLAME",
|
||||||
|
|
||||||
|
// Boss 5
|
||||||
|
"MT_FANG",
|
||||||
|
"MT_FBOMB",
|
||||||
|
"MT_TNTDUST", // also used by barrel
|
||||||
|
"MT_FSGNA",
|
||||||
|
"MT_FSGNB",
|
||||||
|
"MT_FANGWAYPOINT",
|
||||||
|
|
||||||
// Black Eggman (Boss 7)
|
// Black Eggman (Boss 7)
|
||||||
"MT_BLACKEGGMAN",
|
"MT_BLACKEGGMAN",
|
||||||
"MT_BLACKEGGMAN_HELPER",
|
"MT_BLACKEGGMAN_HELPER",
|
||||||
|
@ -7067,6 +7512,34 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_CACTI2",
|
"MT_CACTI2",
|
||||||
"MT_CACTI3",
|
"MT_CACTI3",
|
||||||
"MT_CACTI4",
|
"MT_CACTI4",
|
||||||
|
"MT_CACTI5",
|
||||||
|
"MT_CACTI6",
|
||||||
|
"MT_CACTI7",
|
||||||
|
"MT_CACTI8",
|
||||||
|
"MT_CACTI9",
|
||||||
|
"MT_ARIDSIGN_CAUTION",
|
||||||
|
"MT_ARIDSIGN_CACTI",
|
||||||
|
"MT_ARIDSIGN_SHARPTURN",
|
||||||
|
"MT_OILLAMP",
|
||||||
|
"MT_TNTBARREL",
|
||||||
|
"MT_PROXIMITYTNT",
|
||||||
|
"MT_DUSTDEVIL",
|
||||||
|
"MT_DUSTLAYER",
|
||||||
|
"MT_ARIDDUST",
|
||||||
|
"MT_MINECART",
|
||||||
|
"MT_MINECARTSEG",
|
||||||
|
"MT_MINECARTSPAWNER",
|
||||||
|
"MT_MINECARTEND",
|
||||||
|
"MT_MINECARTENDSOLID",
|
||||||
|
"MT_MINECARTSIDEMARK",
|
||||||
|
"MT_MINECARTSPARK",
|
||||||
|
"MT_SALOONDOOR",
|
||||||
|
"MT_SALOONDOORTHINKER",
|
||||||
|
"MT_TRAINCAMEOSPAWNER",
|
||||||
|
"MT_TRAINSEG",
|
||||||
|
"MT_TRAINDUSTSPAWNER",
|
||||||
|
"MT_TRAINSTEAMSPAWNER",
|
||||||
|
"MT_MINECARTSWITCHPOINT",
|
||||||
|
|
||||||
// Red Volcano Scenery
|
// Red Volcano Scenery
|
||||||
"MT_FLAMEJET",
|
"MT_FLAMEJET",
|
||||||
|
@ -7389,6 +7862,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_EXPLODE", // Robot Explosion
|
"MT_EXPLODE", // Robot Explosion
|
||||||
"MT_UWEXPLODE", // Underwater Explosion
|
"MT_UWEXPLODE", // Underwater Explosion
|
||||||
"MT_DUST",
|
"MT_DUST",
|
||||||
|
"MT_WOODDEBRIS",
|
||||||
"MT_ROCKSPAWNER",
|
"MT_ROCKSPAWNER",
|
||||||
"MT_FALLINGROCK",
|
"MT_FALLINGROCK",
|
||||||
"MT_ROCKCRUMBLE1",
|
"MT_ROCKCRUMBLE1",
|
||||||
|
@ -7778,6 +8252,96 @@ static const char *const HUDITEMS_LIST[] = {
|
||||||
"LAP"
|
"LAP"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *const MENUTYPES_LIST[] = {
|
||||||
|
"NONE",
|
||||||
|
|
||||||
|
"MAIN",
|
||||||
|
|
||||||
|
// Single Player
|
||||||
|
"SP_MAIN",
|
||||||
|
|
||||||
|
"SP_LOAD",
|
||||||
|
"SP_PLAYER",
|
||||||
|
|
||||||
|
"SP_LEVELSELECT",
|
||||||
|
"SP_LEVELSTATS",
|
||||||
|
|
||||||
|
"SP_TIMEATTACK",
|
||||||
|
"SP_TIMEATTACK_LEVELSELECT",
|
||||||
|
"SP_GUESTREPLAY",
|
||||||
|
"SP_REPLAY",
|
||||||
|
"SP_GHOST",
|
||||||
|
|
||||||
|
"SP_NIGHTSATTACK",
|
||||||
|
"SP_NIGHTS_LEVELSELECT",
|
||||||
|
"SP_NIGHTS_GUESTREPLAY",
|
||||||
|
"SP_NIGHTS_REPLAY",
|
||||||
|
"SP_NIGHTS_GHOST",
|
||||||
|
|
||||||
|
// Multiplayer
|
||||||
|
"MP_MAIN",
|
||||||
|
"MP_SPLITSCREEN", // SplitServer
|
||||||
|
"MP_SERVER",
|
||||||
|
"MP_CONNECT",
|
||||||
|
"MP_ROOM",
|
||||||
|
"MP_PLAYERSETUP", // MP_PlayerSetupDef shared with SPLITSCREEN if #defined NONET
|
||||||
|
|
||||||
|
// Options
|
||||||
|
"OP_MAIN",
|
||||||
|
|
||||||
|
"OP_P1CONTROLS",
|
||||||
|
"OP_CHANGECONTROLS", // OP_ChangeControlsDef shared with P2
|
||||||
|
"OP_P1MOUSE",
|
||||||
|
"OP_P1JOYSTICK",
|
||||||
|
"OP_JOYSTICKSET", // OP_JoystickSetDef shared with P2
|
||||||
|
|
||||||
|
"OP_P2CONTROLS",
|
||||||
|
"OP_P2MOUSE",
|
||||||
|
"OP_P2JOYSTICK",
|
||||||
|
|
||||||
|
"OP_VIDEO",
|
||||||
|
"OP_VIDEOMODE",
|
||||||
|
"OP_COLOR",
|
||||||
|
"OP_OPENGL",
|
||||||
|
"OP_OPENGL_LIGHTING",
|
||||||
|
"OP_OPENGL_FOG",
|
||||||
|
"OP_OPENGL_COLOR",
|
||||||
|
|
||||||
|
"OP_SOUND",
|
||||||
|
|
||||||
|
"OP_SERVER",
|
||||||
|
"OP_MONITORTOGGLE",
|
||||||
|
|
||||||
|
"OP_DATA",
|
||||||
|
"OP_ADDONS",
|
||||||
|
"OP_SCREENSHOTS",
|
||||||
|
"OP_ERASEDATA",
|
||||||
|
|
||||||
|
// Secrets
|
||||||
|
"SR_MAIN",
|
||||||
|
"SR_PANDORA",
|
||||||
|
"SR_LEVELSELECT",
|
||||||
|
"SR_UNLOCKCHECKLIST",
|
||||||
|
"SR_EMBLEMHINT",
|
||||||
|
|
||||||
|
// Addons (Part of MISC, but let's make it our own)
|
||||||
|
"AD_MAIN",
|
||||||
|
|
||||||
|
// MISC
|
||||||
|
// "MESSAGE",
|
||||||
|
// "SPAUSE",
|
||||||
|
|
||||||
|
// "MPAUSE",
|
||||||
|
// "SCRAMBLETEAM",
|
||||||
|
// "CHANGETEAM",
|
||||||
|
// "CHANGELEVEL",
|
||||||
|
|
||||||
|
// "MAPAUSE",
|
||||||
|
// "HELP",
|
||||||
|
|
||||||
|
"SPECIAL"
|
||||||
|
};
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
const char *n;
|
const char *n;
|
||||||
// has to be able to hold both fixed_t and angle_t, so drastic measure!!
|
// has to be able to hold both fixed_t and angle_t, so drastic measure!!
|
||||||
|
@ -7827,6 +8391,14 @@ struct {
|
||||||
{"LE_BOSSDEAD",LE_BOSSDEAD}, // A boss in the map died (Chaos mode boss tally)
|
{"LE_BOSSDEAD",LE_BOSSDEAD}, // A boss in the map died (Chaos mode boss tally)
|
||||||
{"LE_BOSS4DROP",LE_BOSS4DROP}, // CEZ boss dropped its cage
|
{"LE_BOSS4DROP",LE_BOSS4DROP}, // CEZ boss dropped its cage
|
||||||
{"LE_BRAKVILEATACK",LE_BRAKVILEATACK}, // Brak's doing his LOS attack, oh noes
|
{"LE_BRAKVILEATACK",LE_BRAKVILEATACK}, // Brak's doing his LOS attack, oh noes
|
||||||
|
{"LE_TURRET",LE_TURRET}, // THZ turret
|
||||||
|
{"LE_BRAKPLATFORM",LE_BRAKPLATFORM}, // v2.0 Black Eggman destroys platform
|
||||||
|
{"LE_CAPSULE2",LE_CAPSULE2}, // Egg Capsule
|
||||||
|
{"LE_CAPSULE1",LE_CAPSULE1}, // Egg Capsule
|
||||||
|
{"LE_CAPSULE0",LE_CAPSULE0}, // Egg Capsule
|
||||||
|
{"LE_KOOPA",LE_KOOPA}, // Distant cousin to Gay Bowser
|
||||||
|
{"LE_AXE",LE_AXE}, // MKB Axe object
|
||||||
|
{"LE_PARAMWIDTH",LE_PARAMWIDTH}, // If an object that calls LinedefExecute has a nonzero parameter value, this times the parameter will be subtracted. (Mostly for the purpose of coexisting bosses...)
|
||||||
|
|
||||||
/// \todo Get all this stuff into its own sections, maybe. Maybe.
|
/// \todo Get all this stuff into its own sections, maybe. Maybe.
|
||||||
|
|
||||||
|
@ -7974,6 +8546,7 @@ struct {
|
||||||
{"CR_ZOOMTUBE",CR_ZOOMTUBE},
|
{"CR_ZOOMTUBE",CR_ZOOMTUBE},
|
||||||
{"CR_ROPEHANG",CR_ROPEHANG},
|
{"CR_ROPEHANG",CR_ROPEHANG},
|
||||||
{"CR_MACESPIN",CR_MACESPIN},
|
{"CR_MACESPIN",CR_MACESPIN},
|
||||||
|
{"CR_MINECART",CR_MINECART},
|
||||||
|
|
||||||
// Ring weapons (ringweapons_t)
|
// Ring weapons (ringweapons_t)
|
||||||
// Useful for A_GiveWeapon
|
// Useful for A_GiveWeapon
|
||||||
|
@ -8278,6 +8851,7 @@ struct {
|
||||||
{"V_6WIDTHSPACE",V_6WIDTHSPACE},
|
{"V_6WIDTHSPACE",V_6WIDTHSPACE},
|
||||||
{"V_OLDSPACING",V_OLDSPACING},
|
{"V_OLDSPACING",V_OLDSPACING},
|
||||||
{"V_MONOSPACE",V_MONOSPACE},
|
{"V_MONOSPACE",V_MONOSPACE},
|
||||||
|
|
||||||
{"V_MAGENTAMAP",V_MAGENTAMAP},
|
{"V_MAGENTAMAP",V_MAGENTAMAP},
|
||||||
{"V_YELLOWMAP",V_YELLOWMAP},
|
{"V_YELLOWMAP",V_YELLOWMAP},
|
||||||
{"V_GREENMAP",V_GREENMAP},
|
{"V_GREENMAP",V_GREENMAP},
|
||||||
|
@ -8293,6 +8867,7 @@ struct {
|
||||||
{"V_BROWNMAP",V_BROWNMAP},
|
{"V_BROWNMAP",V_BROWNMAP},
|
||||||
{"V_ROSYMAP",V_ROSYMAP},
|
{"V_ROSYMAP",V_ROSYMAP},
|
||||||
{"V_INVERTMAP",V_INVERTMAP},
|
{"V_INVERTMAP",V_INVERTMAP},
|
||||||
|
|
||||||
{"V_TRANSLUCENT",V_TRANSLUCENT},
|
{"V_TRANSLUCENT",V_TRANSLUCENT},
|
||||||
{"V_10TRANS",V_10TRANS},
|
{"V_10TRANS",V_10TRANS},
|
||||||
{"V_20TRANS",V_20TRANS},
|
{"V_20TRANS",V_20TRANS},
|
||||||
|
@ -8479,6 +9054,20 @@ static hudnum_t get_huditem(const char *word)
|
||||||
return HUD_LIVES;
|
return HUD_LIVES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static menutype_t get_menutype(const char *word)
|
||||||
|
{ // Returns the value of MN_ enumerations
|
||||||
|
menutype_t i;
|
||||||
|
if (*word >= '0' && *word <= '9')
|
||||||
|
return atoi(word);
|
||||||
|
if (fastncmp("MN_",word,3))
|
||||||
|
word += 3; // take off the MN_
|
||||||
|
for (i = 0; i < NUMMENUTYPES; i++)
|
||||||
|
if (fastcmp(word, MENUTYPES_LIST[i]))
|
||||||
|
return i;
|
||||||
|
deh_warning("Couldn't find menutype named 'MN_%s'",word);
|
||||||
|
return MN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef HAVE_BLUA
|
#ifndef HAVE_BLUA
|
||||||
static powertype_t get_power(const char *word)
|
static powertype_t get_power(const char *word)
|
||||||
{ // Returns the vlaue of pw_ enumerations
|
{ // Returns the vlaue of pw_ enumerations
|
||||||
|
@ -8675,6 +9264,11 @@ static fixed_t find_const(const char **rword)
|
||||||
free(word);
|
free(word);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
else if (fastncmp("MN_",word,4)) {
|
||||||
|
r = get_menutype(word);
|
||||||
|
free(word);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
else if (fastncmp("HUD_",word,4)) {
|
else if (fastncmp("HUD_",word,4)) {
|
||||||
r = get_huditem(word);
|
r = get_huditem(word);
|
||||||
free(word);
|
free(word);
|
||||||
|
@ -9143,6 +9737,16 @@ static inline int lib_getenum(lua_State *L)
|
||||||
if (mathlib) return luaL_error(L, "skincolor '%s' could not be found.\n", word);
|
if (mathlib) return luaL_error(L, "skincolor '%s' could not be found.\n", word);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if (fastncmp("MN_",word,3)) {
|
||||||
|
p = word+3;
|
||||||
|
for (i = 0; i < NUMMENUTYPES; i++)
|
||||||
|
if (fastcmp(p, MENUTYPES_LIST[i])) {
|
||||||
|
lua_pushinteger(L, i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (mathlib) return luaL_error(L, "menutype '%s' could not be found.\n", word);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else if (!mathlib && fastncmp("A_",word,2)) {
|
else if (!mathlib && fastncmp("A_",word,2)) {
|
||||||
char *caps;
|
char *caps;
|
||||||
// Try to get a Lua action first.
|
// Try to get a Lua action first.
|
||||||
|
|
|
@ -381,11 +381,19 @@ typedef enum
|
||||||
|
|
||||||
// Special linedef executor tag numbers!
|
// Special linedef executor tag numbers!
|
||||||
enum {
|
enum {
|
||||||
LE_PINCHPHASE = -2, // A boss entered pinch phase (and, in most cases, is preparing their pinch phase attack!)
|
LE_PINCHPHASE = -2, // A boss entered pinch phase (and, in most cases, is preparing their pinch phase attack!)
|
||||||
LE_ALLBOSSESDEAD = -3, // All bosses in the map are dead (Egg capsule raise)
|
LE_ALLBOSSESDEAD = -3, // All bosses in the map are dead (Egg capsule raise)
|
||||||
LE_BOSSDEAD = -4, // A boss in the map died (Chaos mode boss tally)
|
LE_BOSSDEAD = -4, // A boss in the map died (Chaos mode boss tally)
|
||||||
LE_BOSS4DROP = -5, // CEZ boss dropped its cage
|
LE_BOSS4DROP = -5, // CEZ boss dropped its cage
|
||||||
LE_BRAKVILEATACK = -6 // Brak's doing his LOS attack, oh noes
|
LE_BRAKVILEATACK = -6, // Brak's doing his LOS attack, oh noes
|
||||||
|
LE_TURRET = 32000, // THZ turret
|
||||||
|
LE_BRAKPLATFORM = 4200, // v2.0 Black Eggman destroys platform
|
||||||
|
LE_CAPSULE2 = 682, // Egg Capsule
|
||||||
|
LE_CAPSULE1 = 681, // Egg Capsule
|
||||||
|
LE_CAPSULE0 = 680, // Egg Capsule
|
||||||
|
LE_KOOPA = 650, // Distant cousin to Gay Bowser
|
||||||
|
LE_AXE = 649, // MKB Axe object
|
||||||
|
LE_PARAMWIDTH = -100 // If an object that calls LinedefExecute has a nonzero parameter value, this times the parameter will be subtracted. (Mostly for the purpose of coexisting bosses...)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Name of local directory for config files and savegames
|
// Name of local directory for config files and savegames
|
||||||
|
|
|
@ -313,6 +313,7 @@ typedef struct
|
||||||
UINT8 menuflags; ///< LF2_flags: options that affect record attack / nights mode menus
|
UINT8 menuflags; ///< LF2_flags: options that affect record attack / nights mode menus
|
||||||
|
|
||||||
char selectheading[22]; ///< Level select heading. Allows for controllable grouping.
|
char selectheading[22]; ///< Level select heading. Allows for controllable grouping.
|
||||||
|
UINT16 startrings; ///< Number of rings players start with.
|
||||||
|
|
||||||
// Freed animals stuff.
|
// Freed animals stuff.
|
||||||
UINT8 numFlickies; ///< Internal. For freed flicky support.
|
UINT8 numFlickies; ///< Internal. For freed flicky support.
|
||||||
|
@ -555,6 +556,8 @@ extern boolean precache;
|
||||||
// wipegamestate can be set to -1
|
// wipegamestate can be set to -1
|
||||||
// to force a wipe on the next draw
|
// to force a wipe on the next draw
|
||||||
extern gamestate_t wipegamestate;
|
extern gamestate_t wipegamestate;
|
||||||
|
extern INT16 wipetypepre;
|
||||||
|
extern INT16 wipetypepost;
|
||||||
|
|
||||||
// debug flag to cancel adaptiveness
|
// debug flag to cancel adaptiveness
|
||||||
extern boolean singletics;
|
extern boolean singletics;
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
|
|
||||||
/* 7.18.1.1 Exact-width integer types */
|
/* 7.18.1.1 Exact-width integer types */
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
// libopenmpt.h will include stdint.h later;
|
||||||
|
// include it now so that INT8_MAX etc. don't get redefined
|
||||||
|
#ifdef HAVE_OPENMPT
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define UINT8 unsigned __int8
|
#define UINT8 unsigned __int8
|
||||||
#define SINT8 signed __int8
|
#define SINT8 signed __int8
|
||||||
|
|
||||||
|
@ -171,6 +177,7 @@ size_t strlcpy(char *dst, const char *src, size_t siz);
|
||||||
#endif // __BYTEBOOL__
|
#endif // __BYTEBOOL__
|
||||||
|
|
||||||
/* 7.18.2.1 Limits of exact-width integer types */
|
/* 7.18.2.1 Limits of exact-width integer types */
|
||||||
|
|
||||||
#ifndef INT8_MIN
|
#ifndef INT8_MIN
|
||||||
#define INT8_MIN (-128)
|
#define INT8_MIN (-128)
|
||||||
#endif
|
#endif
|
||||||
|
|
299
src/f_finale.c
299
src/f_finale.c
|
@ -44,14 +44,15 @@
|
||||||
// Stage of animation:
|
// Stage of animation:
|
||||||
// 0 = text, 1 = art screen
|
// 0 = text, 1 = art screen
|
||||||
static INT32 finalecount;
|
static INT32 finalecount;
|
||||||
INT32 titlescrollspeed = 80;
|
INT32 titlescrollxspeed = 80;
|
||||||
|
INT32 titlescrollyspeed = 0;
|
||||||
UINT8 titlemapinaction = TITLEMAP_OFF;
|
UINT8 titlemapinaction = TITLEMAP_OFF;
|
||||||
|
|
||||||
static INT32 timetonext; // Delay between screen changes
|
static INT32 timetonext; // Delay between screen changes
|
||||||
static INT32 continuetime; // Short delay when continuing
|
static INT32 continuetime; // Short delay when continuing
|
||||||
|
|
||||||
static tic_t animtimer; // Used for some animation timings
|
static tic_t animtimer; // Used for some animation timings
|
||||||
static INT16 skullAnimCounter; // Chevron animation
|
static INT16 skullAnimCounter; // Prompts: Chevron animation
|
||||||
static INT32 roidtics; // Asteroid spinning
|
static INT32 roidtics; // Asteroid spinning
|
||||||
|
|
||||||
static INT32 deplete;
|
static INT32 deplete;
|
||||||
|
@ -60,6 +61,20 @@ static tic_t stoptimer;
|
||||||
static boolean keypressed = false;
|
static boolean keypressed = false;
|
||||||
|
|
||||||
// (no longer) De-Demo'd Title Screen
|
// (no longer) De-Demo'd Title Screen
|
||||||
|
static tic_t xscrolltimer;
|
||||||
|
static tic_t yscrolltimer;
|
||||||
|
static INT32 menuanimtimer; // Title screen: background animation timing
|
||||||
|
mobj_t *titlemapcameraref = NULL;
|
||||||
|
|
||||||
|
// menu presentation state
|
||||||
|
char curbgname[8];
|
||||||
|
SINT8 curfadevalue;
|
||||||
|
boolean curhidepics;
|
||||||
|
INT32 curbgcolor;
|
||||||
|
INT32 curbgxspeed;
|
||||||
|
INT32 curbgyspeed;
|
||||||
|
boolean curbghide;
|
||||||
|
|
||||||
static UINT8 curDemo = 0;
|
static UINT8 curDemo = 0;
|
||||||
static UINT32 demoDelayLeft;
|
static UINT32 demoDelayLeft;
|
||||||
static UINT32 demoIdleLeft;
|
static UINT32 demoIdleLeft;
|
||||||
|
@ -80,8 +95,6 @@ static patch_t *ttspop5;
|
||||||
static patch_t *ttspop6;
|
static patch_t *ttspop6;
|
||||||
static patch_t *ttspop7;
|
static patch_t *ttspop7;
|
||||||
|
|
||||||
static void F_SkyScroll(INT32 scrollspeed);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// PROMPT STATE
|
// PROMPT STATE
|
||||||
//
|
//
|
||||||
|
@ -182,101 +195,6 @@ static void F_NewCutscene(const char *basetext)
|
||||||
cutscene_textcount = TICRATE/2;
|
cutscene_textcount = TICRATE/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// F_DrawPatchCol
|
|
||||||
//
|
|
||||||
static void F_DrawPatchCol(INT32 x, patch_t *patch, INT32 col)
|
|
||||||
{
|
|
||||||
const column_t *column;
|
|
||||||
const UINT8 *source;
|
|
||||||
UINT8 *desttop, *dest = NULL;
|
|
||||||
const UINT8 *deststop, *destbottom;
|
|
||||||
size_t count;
|
|
||||||
|
|
||||||
desttop = screens[0] + x*vid.dupx;
|
|
||||||
deststop = screens[0] + vid.rowbytes * vid.height;
|
|
||||||
destbottom = desttop + vid.height*vid.width;
|
|
||||||
|
|
||||||
do {
|
|
||||||
INT32 topdelta, prevdelta = -1;
|
|
||||||
column = (column_t *)((UINT8 *)patch + LONG(patch->columnofs[col]));
|
|
||||||
|
|
||||||
// step through the posts in a column
|
|
||||||
while (column->topdelta != 0xff)
|
|
||||||
{
|
|
||||||
topdelta = column->topdelta;
|
|
||||||
if (topdelta <= prevdelta)
|
|
||||||
topdelta += prevdelta;
|
|
||||||
prevdelta = topdelta;
|
|
||||||
source = (const UINT8 *)column + 3;
|
|
||||||
dest = desttop + topdelta*vid.width;
|
|
||||||
count = column->length;
|
|
||||||
|
|
||||||
while (count--)
|
|
||||||
{
|
|
||||||
INT32 dupycount = vid.dupy;
|
|
||||||
|
|
||||||
while (dupycount-- && dest < destbottom)
|
|
||||||
{
|
|
||||||
INT32 dupxcount = vid.dupx;
|
|
||||||
while (dupxcount-- && dest <= deststop)
|
|
||||||
*dest++ = *source;
|
|
||||||
|
|
||||||
dest += (vid.width - vid.dupx);
|
|
||||||
}
|
|
||||||
source++;
|
|
||||||
}
|
|
||||||
column = (const column_t *)((const UINT8 *)column + column->length + 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
desttop += SHORT(patch->height)*vid.dupy*vid.width;
|
|
||||||
} while(dest < destbottom);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// F_SkyScroll
|
|
||||||
//
|
|
||||||
static void F_SkyScroll(INT32 scrollspeed)
|
|
||||||
{
|
|
||||||
INT32 scrolled, x, mx, fakedwidth;
|
|
||||||
patch_t *pat;
|
|
||||||
INT16 patwidth;
|
|
||||||
|
|
||||||
pat = W_CachePatchName("TITLESKY", PU_CACHE);
|
|
||||||
|
|
||||||
patwidth = SHORT(pat->width);
|
|
||||||
animtimer = ((finalecount*scrollspeed)/16 + patwidth) % patwidth;
|
|
||||||
|
|
||||||
fakedwidth = vid.width / vid.dupx;
|
|
||||||
|
|
||||||
if (rendermode == render_soft)
|
|
||||||
{ // if only hardware rendering could be this elegant and complete
|
|
||||||
scrolled = (patwidth - animtimer) - 1;
|
|
||||||
for (x = 0, mx = scrolled; x < fakedwidth; x++, mx = (mx+1)%patwidth)
|
|
||||||
F_DrawPatchCol(x, pat, mx);
|
|
||||||
}
|
|
||||||
#ifdef HWRENDER
|
|
||||||
else if (rendermode != render_none)
|
|
||||||
{ // if only software rendering could be this simple and retarded
|
|
||||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
INT32 y, pw = patwidth * dupz, ph = SHORT(pat->height) * dupz;
|
|
||||||
scrolled = animtimer * dupz;
|
|
||||||
for (x = 0; x < vid.width; x += pw)
|
|
||||||
{
|
|
||||||
for (y = 0; y < vid.height; y += ph)
|
|
||||||
{
|
|
||||||
if (scrolled > 0)
|
|
||||||
V_DrawScaledPatch(scrolled - pw, y, V_NOSCALESTART, pat);
|
|
||||||
|
|
||||||
V_DrawScaledPatch(x + scrolled, y, V_NOSCALESTART, pat);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
W_UnlockCachedPatch(pat);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =============
|
// =============
|
||||||
// INTRO SCENE
|
// INTRO SCENE
|
||||||
// =============
|
// =============
|
||||||
|
@ -471,11 +389,10 @@ void F_StartIntro(void)
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
CON_ClearHUD();
|
|
||||||
F_NewCutscene(introtext[0]);
|
F_NewCutscene(introtext[0]);
|
||||||
|
|
||||||
intro_scenenum = 0;
|
intro_scenenum = 0;
|
||||||
finalecount = animtimer = stoptimer = 0;
|
finalecount = animtimer = skullAnimCounter = stoptimer = 0;
|
||||||
roidtics = BASEVIDWIDTH - 64;
|
roidtics = BASEVIDWIDTH - 64;
|
||||||
timetonext = introscenetime[intro_scenenum];
|
timetonext = introscenetime[intro_scenenum];
|
||||||
}
|
}
|
||||||
|
@ -707,7 +624,7 @@ static void F_IntroDrawScene(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
F_SkyScroll(80*4);
|
F_SkyScroll(80*4, 0, "TITLESKY");
|
||||||
if (timetonext == 6)
|
if (timetonext == 6)
|
||||||
{
|
{
|
||||||
stoptimer = finalecount;
|
stoptimer = finalecount;
|
||||||
|
@ -1184,7 +1101,6 @@ void F_StartCredits(void)
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
CON_ClearHUD();
|
|
||||||
S_StopMusic();
|
S_StopMusic();
|
||||||
|
|
||||||
S_ChangeMusicInternal("_creds", false);
|
S_ChangeMusicInternal("_creds", false);
|
||||||
|
@ -1230,16 +1146,34 @@ void F_CreditDrawer(void)
|
||||||
if (FixedMul(y,vid.dupy) > vid.height)
|
if (FixedMul(y,vid.dupy) > vid.height)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void F_CreditTicker(void)
|
||||||
|
{
|
||||||
|
// "Simulate" the drawing of the credits so that dedicated mode doesn't get stuck
|
||||||
|
UINT16 i;
|
||||||
|
fixed_t y = (80<<FRACBITS) - 5*(animtimer<<FRACBITS)/8;
|
||||||
|
|
||||||
|
// Draw credits text on top
|
||||||
|
for (i = 0; credits[i]; i++)
|
||||||
|
{
|
||||||
|
switch(credits[i][0])
|
||||||
|
{
|
||||||
|
case 0: y += 80<<FRACBITS; break;
|
||||||
|
case 1: y += 30<<FRACBITS; break;
|
||||||
|
default: y += 12<<FRACBITS; break;
|
||||||
|
}
|
||||||
|
if (FixedMul(y,vid.dupy) > vid.height)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do this here rather than in the drawer you doofus! (this is why dedicated mode broke at credits)
|
||||||
if (!credits[i] && y <= 120<<FRACBITS && !finalecount)
|
if (!credits[i] && y <= 120<<FRACBITS && !finalecount)
|
||||||
{
|
{
|
||||||
timetonext = 5*TICRATE+1;
|
timetonext = 5*TICRATE+1;
|
||||||
finalecount = 5*TICRATE;
|
finalecount = 5*TICRATE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void F_CreditTicker(void)
|
|
||||||
{
|
|
||||||
if (timetonext)
|
if (timetonext)
|
||||||
timetonext--;
|
timetonext--;
|
||||||
else
|
else
|
||||||
|
@ -1333,7 +1267,6 @@ void F_StartGameEvaluation(void)
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
CON_ClearHUD();
|
|
||||||
|
|
||||||
finalecount = 0;
|
finalecount = 0;
|
||||||
}
|
}
|
||||||
|
@ -1443,7 +1376,6 @@ void F_StartGameEnd(void)
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
CON_ClearHUD();
|
|
||||||
S_StopMusic();
|
S_StopMusic();
|
||||||
|
|
||||||
// In case menus are still up?!!
|
// In case menus are still up?!!
|
||||||
|
@ -1475,12 +1407,104 @@ void F_GameEndTicker(void)
|
||||||
// ==============
|
// ==============
|
||||||
// TITLE SCREEN
|
// TITLE SCREEN
|
||||||
// ==============
|
// ==============
|
||||||
|
|
||||||
|
void F_InitMenuPresValues(void)
|
||||||
|
{
|
||||||
|
menuanimtimer = 0;
|
||||||
|
prevMenuId = 0;
|
||||||
|
activeMenuId = MainDef.menuid;
|
||||||
|
|
||||||
|
// Set defaults for presentation values
|
||||||
|
strncpy(curbgname, "TITLESKY", 8);
|
||||||
|
curfadevalue = 16;
|
||||||
|
curhidepics = hidetitlepics;
|
||||||
|
curbgcolor = -1;
|
||||||
|
curbgxspeed = titlescrollxspeed;
|
||||||
|
curbgyspeed = titlescrollyspeed;
|
||||||
|
curbghide = true;
|
||||||
|
|
||||||
|
// Find current presentation values
|
||||||
|
M_SetMenuCurBackground((gamestate == GS_TIMEATTACK) ? "SRB2BACK" : "TITLESKY");
|
||||||
|
M_SetMenuCurFadeValue(16);
|
||||||
|
M_SetMenuCurHideTitlePics();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// F_SkyScroll
|
||||||
|
//
|
||||||
|
void F_SkyScroll(INT32 scrollxspeed, INT32 scrollyspeed, const char *patchname)
|
||||||
|
{
|
||||||
|
INT32 xscrolled, x, xneg = (scrollxspeed > 0) - (scrollxspeed < 0), tilex;
|
||||||
|
INT32 yscrolled, y, yneg = (scrollyspeed > 0) - (scrollyspeed < 0), tiley;
|
||||||
|
boolean xispos = (scrollxspeed >= 0), yispos = (scrollyspeed >= 0);
|
||||||
|
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
||||||
|
INT16 patwidth, patheight;
|
||||||
|
INT32 pw, ph; // scaled by dupz
|
||||||
|
patch_t *pat;
|
||||||
|
INT32 i, j;
|
||||||
|
|
||||||
|
if (rendermode == render_none)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!patchname || !patchname[0])
|
||||||
|
{
|
||||||
|
V_DrawFill(0, 0, vid.width, vid.height, 31);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!scrollxspeed && !scrollyspeed)
|
||||||
|
{
|
||||||
|
V_DrawPatchFill(W_CachePatchName(patchname, PU_CACHE));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pat = W_CachePatchName(patchname, PU_CACHE);
|
||||||
|
|
||||||
|
patwidth = SHORT(pat->width);
|
||||||
|
patheight = SHORT(pat->height);
|
||||||
|
pw = patwidth * dupz;
|
||||||
|
ph = patheight * dupz;
|
||||||
|
|
||||||
|
tilex = max(FixedCeil(FixedDiv(vid.width, pw)) >> FRACBITS, 1)+2; // one tile on both sides of center
|
||||||
|
tiley = max(FixedCeil(FixedDiv(vid.height, ph)) >> FRACBITS, 1)+2;
|
||||||
|
|
||||||
|
xscrolltimer = ((menuanimtimer*scrollxspeed)/16 + patwidth*xneg) % (patwidth);
|
||||||
|
yscrolltimer = ((menuanimtimer*scrollyspeed)/16 + patheight*yneg) % (patheight);
|
||||||
|
|
||||||
|
// coordinate offsets
|
||||||
|
xscrolled = xscrolltimer * dupz;
|
||||||
|
yscrolled = yscrolltimer * dupz;
|
||||||
|
|
||||||
|
for (x = (xispos) ? -pw*(tilex-1)+pw : 0, i = 0;
|
||||||
|
i < tilex;
|
||||||
|
x += pw, i++)
|
||||||
|
{
|
||||||
|
for (y = (yispos) ? -ph*(tiley-1)+ph : 0, j = 0;
|
||||||
|
j < tiley;
|
||||||
|
y += ph, j++)
|
||||||
|
{
|
||||||
|
V_DrawScaledPatch(
|
||||||
|
(xispos) ? xscrolled - x : x + xscrolled,
|
||||||
|
(yispos) ? yscrolled - y : y + yscrolled,
|
||||||
|
V_NOSCALESTART, pat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
W_UnlockCachedPatch(pat);
|
||||||
|
}
|
||||||
|
|
||||||
void F_StartTitleScreen(void)
|
void F_StartTitleScreen(void)
|
||||||
{
|
{
|
||||||
S_ChangeMusicInternal("_title", looptitle);
|
if (menupres[MN_MAIN].musname[0])
|
||||||
|
S_ChangeMusic(menupres[MN_MAIN].musname, menupres[MN_MAIN].mustrack, menupres[MN_MAIN].muslooping);
|
||||||
|
else
|
||||||
|
S_ChangeMusicInternal("_title", looptitle);
|
||||||
|
|
||||||
if (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS)
|
if (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS)
|
||||||
|
{
|
||||||
finalecount = 0;
|
finalecount = 0;
|
||||||
|
wipetypepost = menupres[MN_MAIN].enterwipe;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
wipegamestate = GS_TITLESCREEN;
|
wipegamestate = GS_TITLESCREEN;
|
||||||
|
|
||||||
|
@ -1490,6 +1514,7 @@ void F_StartTitleScreen(void)
|
||||||
|
|
||||||
gamestate_t prevwipegamestate = wipegamestate;
|
gamestate_t prevwipegamestate = wipegamestate;
|
||||||
titlemapinaction = TITLEMAP_LOADING;
|
titlemapinaction = TITLEMAP_LOADING;
|
||||||
|
titlemapcameraref = NULL;
|
||||||
gamemap = titlemap;
|
gamemap = titlemap;
|
||||||
|
|
||||||
if (!mapheaderinfo[gamemap-1])
|
if (!mapheaderinfo[gamemap-1])
|
||||||
|
@ -1530,6 +1555,10 @@ void F_StartTitleScreen(void)
|
||||||
camera.chase = true;
|
camera.chase = true;
|
||||||
camera.height = 0;
|
camera.height = 0;
|
||||||
|
|
||||||
|
// Run enter linedef exec for MN_MAIN, since this is where we start
|
||||||
|
if (menupres[MN_MAIN].entertag)
|
||||||
|
P_LinedefExecute(menupres[MN_MAIN].entertag, players[displayplayer].mo, NULL);
|
||||||
|
|
||||||
wipegamestate = prevwipegamestate;
|
wipegamestate = prevwipegamestate;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1543,7 +1572,7 @@ void F_StartTitleScreen(void)
|
||||||
|
|
||||||
// IWAD dependent stuff.
|
// IWAD dependent stuff.
|
||||||
|
|
||||||
animtimer = 0;
|
animtimer = skullAnimCounter = 0;
|
||||||
|
|
||||||
demoDelayLeft = demoDelayTime;
|
demoDelayLeft = demoDelayTime;
|
||||||
demoIdleLeft = demoIdleTime;
|
demoIdleLeft = demoIdleTime;
|
||||||
|
@ -1568,19 +1597,24 @@ void F_StartTitleScreen(void)
|
||||||
// (no longer) De-Demo'd Title Screen
|
// (no longer) De-Demo'd Title Screen
|
||||||
void F_TitleScreenDrawer(void)
|
void F_TitleScreenDrawer(void)
|
||||||
{
|
{
|
||||||
|
boolean hidepics;
|
||||||
|
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
return; // We likely came here from retrying. Don't do a damn thing.
|
return; // We likely came here from retrying. Don't do a damn thing.
|
||||||
|
|
||||||
// Draw that sky!
|
// Draw that sky!
|
||||||
if (!titlemapinaction)
|
if (curbgcolor >= 0)
|
||||||
F_SkyScroll(titlescrollspeed);
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, curbgcolor);
|
||||||
|
else if (!curbghide || !titlemapinaction || gamestate == GS_WAITINGPLAYERS)
|
||||||
|
F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
|
||||||
|
|
||||||
// Don't draw outside of the title screen, or if the patch isn't there.
|
// Don't draw outside of the title screen, or if the patch isn't there.
|
||||||
if (!ttwing || (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS))
|
if (!ttwing || (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// rei|miru: use title pics?
|
// rei|miru: use title pics?
|
||||||
if (hidetitlepics)
|
hidepics = curhidepics;
|
||||||
|
if (hidepics)
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
goto luahook;
|
goto luahook;
|
||||||
#else
|
#else
|
||||||
|
@ -1630,6 +1664,14 @@ luahook:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// separate animation timer for backgrounds, since we also count
|
||||||
|
// during GS_TIMEATTACK
|
||||||
|
void F_MenuPresTicker(boolean run)
|
||||||
|
{
|
||||||
|
if (run)
|
||||||
|
menuanimtimer++;
|
||||||
|
}
|
||||||
|
|
||||||
// (no longer) De-Demo'd Title Screen
|
// (no longer) De-Demo'd Title Screen
|
||||||
void F_TitleScreenTicker(boolean run)
|
void F_TitleScreenTicker(boolean run)
|
||||||
{
|
{
|
||||||
|
@ -1647,22 +1689,28 @@ void F_TitleScreenTicker(boolean run)
|
||||||
mobj_t *mo2;
|
mobj_t *mo2;
|
||||||
mobj_t *cameraref = NULL;
|
mobj_t *cameraref = NULL;
|
||||||
|
|
||||||
for (th = thinkercap.next; th != &thinkercap; th = th->next)
|
// If there's a Line 422 Switch Cut-Away view, don't force us.
|
||||||
|
if (!titlemapcameraref || titlemapcameraref->type != MT_ALTVIEWMAN)
|
||||||
{
|
{
|
||||||
if (th->function.acp1 != (actionf_p1)P_MobjThinker) // Not a mobj thinker
|
for (th = thinkercap.next; th != &thinkercap; th = th->next)
|
||||||
continue;
|
{
|
||||||
|
if (th->function.acp1 != (actionf_p1)P_MobjThinker) // Not a mobj thinker
|
||||||
|
continue;
|
||||||
|
|
||||||
mo2 = (mobj_t *)th;
|
mo2 = (mobj_t *)th;
|
||||||
|
|
||||||
if (!mo2)
|
if (!mo2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo2->type != MT_ALTVIEWMAN)
|
if (mo2->type != MT_ALTVIEWMAN)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cameraref = mo2;
|
cameraref = titlemapcameraref = mo2;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
cameraref = titlemapcameraref;
|
||||||
|
|
||||||
if (cameraref)
|
if (cameraref)
|
||||||
{
|
{
|
||||||
|
@ -1676,7 +1724,7 @@ void F_TitleScreenTicker(boolean run)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Default behavior: Do a lil' camera spin if a title map is loaded;
|
// Default behavior: Do a lil' camera spin if a title map is loaded;
|
||||||
camera.angle += titlescrollspeed*ANG1/64;
|
camera.angle += titlescrollxspeed*ANG1/64;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1755,7 +1803,6 @@ void F_StartContinue(void)
|
||||||
keypressed = false;
|
keypressed = false;
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
CON_ClearHUD();
|
|
||||||
|
|
||||||
// In case menus are still up?!!
|
// In case menus are still up?!!
|
||||||
M_ClearMenus(true);
|
M_ClearMenus(true);
|
||||||
|
@ -1930,8 +1977,6 @@ void F_StartCustomCutscene(INT32 cutscenenum, boolean precutscene, boolean reset
|
||||||
|
|
||||||
F_NewCutscene(cutscenes[cutscenenum]->scene[0].text);
|
F_NewCutscene(cutscenes[cutscenenum]->scene[0].text);
|
||||||
|
|
||||||
CON_ClearHUD();
|
|
||||||
|
|
||||||
cutsceneover = false;
|
cutsceneover = false;
|
||||||
runningprecutscene = precutscene;
|
runningprecutscene = precutscene;
|
||||||
precutresetplayer = resetplayer;
|
precutresetplayer = resetplayer;
|
||||||
|
|
|
@ -40,6 +40,7 @@ void F_TextPromptTicker(void);
|
||||||
void F_GameEndDrawer(void);
|
void F_GameEndDrawer(void);
|
||||||
void F_IntroDrawer(void);
|
void F_IntroDrawer(void);
|
||||||
void F_TitleScreenDrawer(void);
|
void F_TitleScreenDrawer(void);
|
||||||
|
void F_SkyScroll(INT32 scrollxspeed, INT32 scrollyspeed, const char *patchname);
|
||||||
|
|
||||||
void F_GameEvaluationDrawer(void);
|
void F_GameEvaluationDrawer(void);
|
||||||
void F_StartGameEvaluation(void);
|
void F_StartGameEvaluation(void);
|
||||||
|
@ -69,7 +70,8 @@ void F_StartContinue(void);
|
||||||
void F_ContinueTicker(void);
|
void F_ContinueTicker(void);
|
||||||
void F_ContinueDrawer(void);
|
void F_ContinueDrawer(void);
|
||||||
|
|
||||||
extern INT32 titlescrollspeed;
|
extern INT32 titlescrollxspeed;
|
||||||
|
extern INT32 titlescrollyspeed;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -78,11 +80,30 @@ typedef enum
|
||||||
TITLEMAP_RUNNING
|
TITLEMAP_RUNNING
|
||||||
} titlemap_enum;
|
} titlemap_enum;
|
||||||
|
|
||||||
|
// Current menu parameters
|
||||||
|
|
||||||
extern UINT8 titlemapinaction;
|
extern UINT8 titlemapinaction;
|
||||||
|
extern mobj_t *titlemapcameraref;
|
||||||
|
extern char curbgname[8];
|
||||||
|
extern SINT8 curfadevalue;
|
||||||
|
extern boolean curhidepics;
|
||||||
|
extern INT32 curbgcolor;
|
||||||
|
extern INT32 curbgxspeed;
|
||||||
|
extern INT32 curbgyspeed;
|
||||||
|
extern boolean curbghide;
|
||||||
|
|
||||||
|
#define TITLEBACKGROUNDACTIVE (curfadevalue >= 0 || curbgname[0])
|
||||||
|
|
||||||
|
void F_InitMenuPresValues(void);
|
||||||
|
void F_MenuPresTicker(boolean run);
|
||||||
|
|
||||||
//
|
//
|
||||||
// WIPE
|
// WIPE
|
||||||
//
|
//
|
||||||
|
// HACK for menu fading while titlemapinaction; skips the level check
|
||||||
|
#define FORCEWIPE -3
|
||||||
|
#define FORCEWIPEOFF -2
|
||||||
|
|
||||||
extern boolean WipeInAction;
|
extern boolean WipeInAction;
|
||||||
extern INT32 lastwipetic;
|
extern INT32 lastwipetic;
|
||||||
|
|
||||||
|
@ -90,6 +111,7 @@ void F_WipeStartScreen(void);
|
||||||
void F_WipeEndScreen(void);
|
void F_WipeEndScreen(void);
|
||||||
void F_RunWipe(UINT8 wipetype, boolean drawMenu);
|
void F_RunWipe(UINT8 wipetype, boolean drawMenu);
|
||||||
tic_t F_GetWipeLength(UINT8 wipetype);
|
tic_t F_GetWipeLength(UINT8 wipetype);
|
||||||
|
boolean F_WipeExists(UINT8 wipetype);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
|
18
src/f_wipe.c
18
src/f_wipe.c
|
@ -405,3 +405,21 @@ tic_t F_GetWipeLength(UINT8 wipetype)
|
||||||
return --wipeframe;
|
return --wipeframe;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean F_WipeExists(UINT8 wipetype)
|
||||||
|
{
|
||||||
|
#ifdef NOWIPE
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
static char lumpname[10] = "FADEmm00";
|
||||||
|
lumpnum_t lumpnum;
|
||||||
|
|
||||||
|
if (wipetype > 99)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sprintf(&lumpname[4], "%.2hu00", (UINT16)wipetype);
|
||||||
|
|
||||||
|
lumpnum = W_CheckNumForName(lumpname);
|
||||||
|
return !(lumpnum == LUMPERROR);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
13
src/g_game.c
13
src/g_game.c
|
@ -15,6 +15,7 @@
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "d_main.h"
|
#include "d_main.h"
|
||||||
#include "d_player.h"
|
#include "d_player.h"
|
||||||
|
#include "d_clisrv.h"
|
||||||
#include "f_finale.h"
|
#include "f_finale.h"
|
||||||
#include "p_setup.h"
|
#include "p_setup.h"
|
||||||
#include "p_saveg.h"
|
#include "p_saveg.h"
|
||||||
|
@ -1847,7 +1848,9 @@ boolean G_Responder(event_t *ev)
|
||||||
|
|
||||||
if (F_CreditResponder(ev))
|
if (F_CreditResponder(ev))
|
||||||
{
|
{
|
||||||
F_StartGameEvaluation();
|
// Skip credits for everyone
|
||||||
|
if (!netgame || server || IsPlayerAdmin(consoleplayer))
|
||||||
|
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2020,6 +2023,7 @@ void G_Ticker(boolean run)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GS_TIMEATTACK:
|
case GS_TIMEATTACK:
|
||||||
|
F_MenuPresTicker(run);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GS_INTRO:
|
case GS_INTRO:
|
||||||
|
@ -2059,6 +2063,7 @@ void G_Ticker(boolean run)
|
||||||
if (titlemapinaction) P_Ticker(run); // then intentionally fall through
|
if (titlemapinaction) P_Ticker(run); // then intentionally fall through
|
||||||
/* FALLTHRU */
|
/* FALLTHRU */
|
||||||
case GS_WAITINGPLAYERS:
|
case GS_WAITINGPLAYERS:
|
||||||
|
F_MenuPresTicker(run);
|
||||||
F_TitleScreenTicker(run);
|
F_TitleScreenTicker(run);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2392,6 +2397,8 @@ void G_SpawnPlayer(INT32 playernum, boolean starpost)
|
||||||
|
|
||||||
P_SpawnPlayer(playernum);
|
P_SpawnPlayer(playernum);
|
||||||
|
|
||||||
|
players[playernum].rings = mapheaderinfo[gamemap-1]->startrings;
|
||||||
|
|
||||||
if (starpost) //Don't even bother with looking for a place to spawn.
|
if (starpost) //Don't even bother with looking for a place to spawn.
|
||||||
{
|
{
|
||||||
P_MovePlayerToStarpost(playernum);
|
P_MovePlayerToStarpost(playernum);
|
||||||
|
@ -2841,6 +2848,10 @@ void G_ExitLevel(void)
|
||||||
// Remove CEcho text on round end.
|
// Remove CEcho text on round end.
|
||||||
HU_ClearCEcho();
|
HU_ClearCEcho();
|
||||||
}
|
}
|
||||||
|
else if (gamestate == GS_CREDITS)
|
||||||
|
{
|
||||||
|
F_StartGameEvaluation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// See also the enum GameType in doomstat.h
|
// See also the enum GameType in doomstat.h
|
||||||
|
|
|
@ -41,37 +41,316 @@ static INT32 blocksize, blockwidth, blockheight;
|
||||||
INT32 patchformat = GR_TEXFMT_AP_88; // use alpha for holes
|
INT32 patchformat = GR_TEXFMT_AP_88; // use alpha for holes
|
||||||
INT32 textureformat = GR_TEXFMT_P_8; // use chromakey for hole
|
INT32 textureformat = GR_TEXFMT_P_8; // use chromakey for hole
|
||||||
|
|
||||||
// sprite, use alpha and chroma key for hole
|
static const INT32 format2bpp[16] =
|
||||||
|
{
|
||||||
|
0, //0
|
||||||
|
0, //1
|
||||||
|
1, //2 GR_TEXFMT_ALPHA_8
|
||||||
|
1, //3 GR_TEXFMT_INTENSITY_8
|
||||||
|
1, //4 GR_TEXFMT_ALPHA_INTENSITY_44
|
||||||
|
1, //5 GR_TEXFMT_P_8
|
||||||
|
4, //6 GR_RGBA
|
||||||
|
0, //7
|
||||||
|
0, //8
|
||||||
|
0, //9
|
||||||
|
2, //10 GR_TEXFMT_RGB_565
|
||||||
|
2, //11 GR_TEXFMT_ARGB_1555
|
||||||
|
2, //12 GR_TEXFMT_ARGB_4444
|
||||||
|
2, //13 GR_TEXFMT_ALPHA_INTENSITY_88
|
||||||
|
2, //14 GR_TEXFMT_AP_88
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// This code was originally placed directly in HWR_DrawPatchInCache.
|
||||||
|
// It is now split from it for my sanity! (and the sanity of others)
|
||||||
|
// -- Monster Iestyn (13/02/19)
|
||||||
|
static void HWR_DrawColumnInCache(const column_t *patchcol, UINT8 *block, GLMipmap_t *mipmap,
|
||||||
|
INT32 pblockheight, INT32 blockmodulo,
|
||||||
|
fixed_t yfracstep, fixed_t scale_y,
|
||||||
|
texpatch_t *originPatch, INT32 patchheight,
|
||||||
|
INT32 bpp)
|
||||||
|
{
|
||||||
|
fixed_t yfrac, position, count;
|
||||||
|
UINT8 *dest;
|
||||||
|
const UINT8 *source;
|
||||||
|
INT32 topdelta, prevdelta = -1;
|
||||||
|
INT32 originy = 0;
|
||||||
|
|
||||||
|
// for writing a pixel to dest
|
||||||
|
RGBA_t colortemp;
|
||||||
|
UINT8 alpha;
|
||||||
|
UINT8 texel;
|
||||||
|
UINT16 texelu16;
|
||||||
|
|
||||||
|
(void)patchheight; // This parameter is unused
|
||||||
|
|
||||||
|
if (originPatch) // originPatch can be NULL here, unlike in the software version
|
||||||
|
originy = originPatch->originy;
|
||||||
|
|
||||||
|
while (patchcol->topdelta != 0xff)
|
||||||
|
{
|
||||||
|
topdelta = patchcol->topdelta;
|
||||||
|
if (topdelta <= prevdelta)
|
||||||
|
topdelta += prevdelta;
|
||||||
|
prevdelta = topdelta;
|
||||||
|
source = (const UINT8 *)patchcol + 3;
|
||||||
|
count = ((patchcol->length * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
||||||
|
position = originy + topdelta;
|
||||||
|
|
||||||
|
yfrac = 0;
|
||||||
|
//yfracstep = (patchcol->length << FRACBITS) / count;
|
||||||
|
if (position < 0)
|
||||||
|
{
|
||||||
|
yfrac = -position<<FRACBITS;
|
||||||
|
count += (((position * scale_y) + (FRACUNIT/2)) >> FRACBITS);
|
||||||
|
position = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
position = ((position * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
||||||
|
|
||||||
|
if (position < 0)
|
||||||
|
position = 0;
|
||||||
|
|
||||||
|
if (position + count >= pblockheight)
|
||||||
|
count = pblockheight - position;
|
||||||
|
|
||||||
|
dest = block + (position*blockmodulo);
|
||||||
|
while (count > 0)
|
||||||
|
{
|
||||||
|
count--;
|
||||||
|
|
||||||
|
texel = source[yfrac>>FRACBITS];
|
||||||
|
|
||||||
|
if (firetranslucent && (transtables[(texel<<8)+0x40000]!=texel))
|
||||||
|
alpha = 0x80;
|
||||||
|
else
|
||||||
|
alpha = 0xff;
|
||||||
|
|
||||||
|
//Hurdler: not perfect, but better than holes
|
||||||
|
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX && (mipmap->flags & TF_CHROMAKEYED))
|
||||||
|
texel = HWR_CHROMAKEY_EQUIVALENTCOLORINDEX;
|
||||||
|
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
||||||
|
else if (mipmap->colormap)
|
||||||
|
texel = mipmap->colormap[texel];
|
||||||
|
|
||||||
|
// hope compiler will get this switch out of the loops (dreams...)
|
||||||
|
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
||||||
|
// Alam: SRB2 uses Mingw, HUGS
|
||||||
|
switch (bpp)
|
||||||
|
{
|
||||||
|
case 2 : texelu16 = (UINT16)((alpha<<8) | texel);
|
||||||
|
memcpy(dest, &texelu16, sizeof(UINT16));
|
||||||
|
break;
|
||||||
|
case 3 : colortemp = V_GetColor(texel);
|
||||||
|
memcpy(dest, &colortemp, sizeof(RGBA_t)-sizeof(UINT8));
|
||||||
|
break;
|
||||||
|
case 4 : colortemp = V_GetColor(texel);
|
||||||
|
colortemp.s.alpha = alpha;
|
||||||
|
memcpy(dest, &colortemp, sizeof(RGBA_t));
|
||||||
|
break;
|
||||||
|
// default is 1
|
||||||
|
default: *dest = texel;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dest += blockmodulo;
|
||||||
|
yfrac += yfracstep;
|
||||||
|
}
|
||||||
|
patchcol = (const column_t *)((const UINT8 *)patchcol + patchcol->length + 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HWR_DrawFlippedColumnInCache(const column_t *patchcol, UINT8 *block, GLMipmap_t *mipmap,
|
||||||
|
INT32 pblockheight, INT32 blockmodulo,
|
||||||
|
fixed_t yfracstep, fixed_t scale_y,
|
||||||
|
texpatch_t *originPatch, INT32 patchheight,
|
||||||
|
INT32 bpp)
|
||||||
|
{
|
||||||
|
fixed_t yfrac, position, count;
|
||||||
|
UINT8 *dest;
|
||||||
|
const UINT8 *source;
|
||||||
|
INT32 topdelta, prevdelta = -1;
|
||||||
|
INT32 originy = 0;
|
||||||
|
|
||||||
|
// for writing a pixel to dest
|
||||||
|
RGBA_t colortemp;
|
||||||
|
UINT8 alpha;
|
||||||
|
UINT8 texel;
|
||||||
|
UINT16 texelu16;
|
||||||
|
|
||||||
|
if (originPatch) // originPatch can be NULL here, unlike in the software version
|
||||||
|
originy = originPatch->originy;
|
||||||
|
|
||||||
|
while (patchcol->topdelta != 0xff)
|
||||||
|
{
|
||||||
|
topdelta = patchcol->topdelta;
|
||||||
|
if (topdelta <= prevdelta)
|
||||||
|
topdelta += prevdelta;
|
||||||
|
prevdelta = topdelta;
|
||||||
|
topdelta = patchheight-patchcol->length-topdelta;
|
||||||
|
source = (const UINT8 *)patchcol + 3;
|
||||||
|
count = ((patchcol->length * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
||||||
|
position = originy + topdelta;
|
||||||
|
|
||||||
|
yfrac = (patchcol->length-1) << FRACBITS;
|
||||||
|
|
||||||
|
if (position < 0)
|
||||||
|
{
|
||||||
|
yfrac += position<<FRACBITS;
|
||||||
|
count += (((position * scale_y) + (FRACUNIT/2)) >> FRACBITS);
|
||||||
|
position = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
position = ((position * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
||||||
|
|
||||||
|
if (position < 0)
|
||||||
|
position = 0;
|
||||||
|
|
||||||
|
if (position + count >= pblockheight)
|
||||||
|
count = pblockheight - position;
|
||||||
|
|
||||||
|
dest = block + (position*blockmodulo);
|
||||||
|
while (count > 0)
|
||||||
|
{
|
||||||
|
count--;
|
||||||
|
|
||||||
|
texel = source[yfrac>>FRACBITS];
|
||||||
|
|
||||||
|
if (firetranslucent && (transtables[(texel<<8)+0x40000]!=texel))
|
||||||
|
alpha = 0x80;
|
||||||
|
else
|
||||||
|
alpha = 0xff;
|
||||||
|
|
||||||
|
//Hurdler: not perfect, but better than holes
|
||||||
|
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX && (mipmap->flags & TF_CHROMAKEYED))
|
||||||
|
texel = HWR_CHROMAKEY_EQUIVALENTCOLORINDEX;
|
||||||
|
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
||||||
|
else if (mipmap->colormap)
|
||||||
|
texel = mipmap->colormap[texel];
|
||||||
|
|
||||||
|
// hope compiler will get this switch out of the loops (dreams...)
|
||||||
|
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
||||||
|
// Alam: SRB2 uses Mingw, HUGS
|
||||||
|
switch (bpp)
|
||||||
|
{
|
||||||
|
case 2 : texelu16 = (UINT16)((alpha<<8) | texel);
|
||||||
|
memcpy(dest, &texelu16, sizeof(UINT16));
|
||||||
|
break;
|
||||||
|
case 3 : colortemp = V_GetColor(texel);
|
||||||
|
memcpy(dest, &colortemp, sizeof(RGBA_t)-sizeof(UINT8));
|
||||||
|
break;
|
||||||
|
case 4 : colortemp = V_GetColor(texel);
|
||||||
|
colortemp.s.alpha = alpha;
|
||||||
|
memcpy(dest, &colortemp, sizeof(RGBA_t));
|
||||||
|
break;
|
||||||
|
// default is 1
|
||||||
|
default: *dest = texel;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dest += blockmodulo;
|
||||||
|
yfrac -= yfracstep;
|
||||||
|
}
|
||||||
|
patchcol = (const column_t *)((const UINT8 *)patchcol + patchcol->length + 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Simplified patch caching function
|
||||||
|
// for use by sprites and other patches that are not part of a wall texture
|
||||||
|
// no alpha or flipping should be present since we do not want non-texture graphics to have them
|
||||||
|
// no offsets are used either
|
||||||
|
// -- Monster Iestyn (13/02/19)
|
||||||
static void HWR_DrawPatchInCache(GLMipmap_t *mipmap,
|
static void HWR_DrawPatchInCache(GLMipmap_t *mipmap,
|
||||||
INT32 pblockwidth, INT32 pblockheight, INT32 blockmodulo,
|
INT32 pblockwidth, INT32 pblockheight,
|
||||||
INT32 ptexturewidth, INT32 ptextureheight,
|
INT32 pwidth, INT32 pheight,
|
||||||
INT32 originx, INT32 originy, // where to draw patch in surface block
|
const patch_t *realpatch)
|
||||||
const patch_t *realpatch, INT32 bpp)
|
{
|
||||||
|
INT32 ncols;
|
||||||
|
fixed_t xfrac, xfracstep;
|
||||||
|
fixed_t yfracstep, scale_y;
|
||||||
|
const column_t *patchcol;
|
||||||
|
UINT8 *block = mipmap->grInfo.data;
|
||||||
|
INT32 bpp;
|
||||||
|
INT32 blockmodulo;
|
||||||
|
|
||||||
|
if (pwidth <= 0 || pheight <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ncols = (pwidth * pblockwidth) / pwidth;
|
||||||
|
|
||||||
|
// source advance
|
||||||
|
xfrac = 0;
|
||||||
|
xfracstep = (pwidth << FRACBITS) / pblockwidth;
|
||||||
|
yfracstep = (pheight << FRACBITS) / pblockheight;
|
||||||
|
scale_y = (pblockheight << FRACBITS) / pheight;
|
||||||
|
|
||||||
|
bpp = format2bpp[mipmap->grInfo.format];
|
||||||
|
|
||||||
|
if (bpp < 1 || bpp > 4)
|
||||||
|
I_Error("HWR_DrawPatchInCache: no drawer defined for this bpp (%d)\n",bpp);
|
||||||
|
|
||||||
|
// NOTE: should this actually be pblockwidth*bpp?
|
||||||
|
blockmodulo = blockwidth*bpp;
|
||||||
|
|
||||||
|
// Draw each column to the block cache
|
||||||
|
for (; ncols--; block += bpp, xfrac += xfracstep)
|
||||||
|
{
|
||||||
|
patchcol = (const column_t *)((const UINT8 *)realpatch + LONG(realpatch->columnofs[xfrac>>FRACBITS]));
|
||||||
|
|
||||||
|
HWR_DrawColumnInCache(patchcol, block, mipmap,
|
||||||
|
pblockheight, blockmodulo,
|
||||||
|
yfracstep, scale_y,
|
||||||
|
NULL, pheight, // not that pheight is going to get used anyway...
|
||||||
|
bpp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function we use for caching patches that belong to textures
|
||||||
|
static void HWR_DrawTexturePatchInCache(GLMipmap_t *mipmap,
|
||||||
|
INT32 pblockwidth, INT32 pblockheight,
|
||||||
|
texture_t *texture, texpatch_t *patch,
|
||||||
|
const patch_t *realpatch)
|
||||||
{
|
{
|
||||||
INT32 x, x1, x2;
|
INT32 x, x1, x2;
|
||||||
INT32 col, ncols;
|
INT32 col, ncols;
|
||||||
fixed_t xfrac, xfracstep;
|
fixed_t xfrac, xfracstep;
|
||||||
fixed_t yfrac, yfracstep, position, count;
|
fixed_t yfracstep, scale_y;
|
||||||
fixed_t scale_y;
|
|
||||||
RGBA_t colortemp;
|
|
||||||
UINT8 *dest;
|
|
||||||
const UINT8 *source;
|
|
||||||
const column_t *patchcol;
|
const column_t *patchcol;
|
||||||
UINT8 alpha;
|
|
||||||
UINT8 *block = mipmap->grInfo.data;
|
UINT8 *block = mipmap->grInfo.data;
|
||||||
UINT8 texel;
|
INT32 bpp;
|
||||||
UINT16 texelu16;
|
INT32 blockmodulo;
|
||||||
|
INT32 width, height;
|
||||||
|
// Column drawing function pointer.
|
||||||
|
static void (*ColumnDrawerPointer)(const column_t *patchcol, UINT8 *block, GLMipmap_t *mipmap,
|
||||||
|
INT32 pblockheight, INT32 blockmodulo,
|
||||||
|
fixed_t yfracstep, fixed_t scale_y,
|
||||||
|
texpatch_t *originPatch, INT32 patchheight,
|
||||||
|
INT32 bpp);
|
||||||
|
|
||||||
if (!ptexturewidth)
|
if (texture->width <= 0 || texture->height <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
x1 = originx;
|
/*if ((patch->style == AST_TRANSLUCENT) && (patch->alpha <= (10*255/11))) // Alpha style set to translucent? Is the alpha small enough for translucency?
|
||||||
x2 = x1 + SHORT(realpatch->width);
|
{
|
||||||
|
if (patch->alpha < 255/11) // Is the patch way too translucent? Don't render then.
|
||||||
|
continue;
|
||||||
|
ColumnDrawerPointer = (patch->flip & 2) ? HWR_DrawTransFlippedColumnInCache : HWR_DrawTransColumnInCache;
|
||||||
|
}
|
||||||
|
else*/
|
||||||
|
{
|
||||||
|
ColumnDrawerPointer = (patch->flip & 2) ? HWR_DrawFlippedColumnInCache : HWR_DrawColumnInCache;
|
||||||
|
}
|
||||||
|
|
||||||
if (x1 > ptexturewidth || x2 < 0)
|
x1 = patch->originx;
|
||||||
|
width = SHORT(realpatch->width);
|
||||||
|
height = SHORT(realpatch->height);
|
||||||
|
x2 = x1 + width;
|
||||||
|
|
||||||
|
if (x1 > texture->width || x2 < 0)
|
||||||
return; // patch not located within texture's x bounds, ignore
|
return; // patch not located within texture's x bounds, ignore
|
||||||
|
|
||||||
if (originy > ptextureheight || (originy + SHORT(realpatch->height)) < 0)
|
if (patch->originy > texture->height || (patch->originy + height) < 0)
|
||||||
return; // patch not located within texture's y bounds, ignore
|
return; // patch not located within texture's y bounds, ignore
|
||||||
|
|
||||||
// patch is actually inside the texture!
|
// patch is actually inside the texture!
|
||||||
|
@ -84,19 +363,18 @@ static void HWR_DrawPatchInCache(GLMipmap_t *mipmap,
|
||||||
x = x1;
|
x = x1;
|
||||||
|
|
||||||
// right edge
|
// right edge
|
||||||
if (x2 > ptexturewidth)
|
if (x2 > texture->width)
|
||||||
x2 = ptexturewidth;
|
x2 = texture->width;
|
||||||
|
|
||||||
|
|
||||||
col = x * pblockwidth / ptexturewidth;
|
col = x * pblockwidth / texture->width;
|
||||||
ncols = ((x2 - x) * pblockwidth) / ptexturewidth;
|
ncols = ((x2 - x) * pblockwidth) / texture->width;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CONS_Debug(DBG_RENDER, "patch %dx%d texture %dx%d block %dx%d\n", SHORT(realpatch->width),
|
CONS_Debug(DBG_RENDER, "patch %dx%d texture %dx%d block %dx%d\n",
|
||||||
SHORT(realpatch->height),
|
width, height,
|
||||||
ptexturewidth,
|
texture->width, texture->height,
|
||||||
textureheight,
|
pblockwidth, pblockheight);
|
||||||
pblockwidth,pblockheight);
|
|
||||||
CONS_Debug(DBG_RENDER, " col %d ncols %d x %d\n", col, ncols, x);
|
CONS_Debug(DBG_RENDER, " col %d ncols %d x %d\n", col, ncols, x);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -105,90 +383,31 @@ static void HWR_DrawPatchInCache(GLMipmap_t *mipmap,
|
||||||
if (x1 < 0)
|
if (x1 < 0)
|
||||||
xfrac = -x1<<FRACBITS;
|
xfrac = -x1<<FRACBITS;
|
||||||
|
|
||||||
xfracstep = (ptexturewidth << FRACBITS) / pblockwidth;
|
xfracstep = (texture->width << FRACBITS) / pblockwidth;
|
||||||
yfracstep = (ptextureheight<< FRACBITS) / pblockheight;
|
yfracstep = (texture->height<< FRACBITS) / pblockheight;
|
||||||
|
scale_y = (pblockheight << FRACBITS) / texture->height;
|
||||||
|
|
||||||
|
bpp = format2bpp[mipmap->grInfo.format];
|
||||||
|
|
||||||
if (bpp < 1 || bpp > 4)
|
if (bpp < 1 || bpp > 4)
|
||||||
I_Error("HWR_DrawPatchInCache: no drawer defined for this bpp (%d)\n",bpp);
|
I_Error("HWR_DrawPatchInCache: no drawer defined for this bpp (%d)\n",bpp);
|
||||||
|
|
||||||
|
// NOTE: should this actually be pblockwidth*bpp?
|
||||||
|
blockmodulo = blockwidth*bpp;
|
||||||
|
|
||||||
|
// Draw each column to the block cache
|
||||||
for (block += col*bpp; ncols--; block += bpp, xfrac += xfracstep)
|
for (block += col*bpp; ncols--; block += bpp, xfrac += xfracstep)
|
||||||
{
|
{
|
||||||
INT32 topdelta, prevdelta = -1;
|
if (patch->flip & 1)
|
||||||
patchcol = (const column_t *)((const UINT8 *)realpatch
|
patchcol = (const column_t *)((const UINT8 *)realpatch + LONG(realpatch->columnofs[(width-1)-(xfrac>>FRACBITS)]));
|
||||||
+ LONG(realpatch->columnofs[xfrac>>FRACBITS]));
|
else
|
||||||
|
patchcol = (const column_t *)((const UINT8 *)realpatch + LONG(realpatch->columnofs[xfrac>>FRACBITS]));
|
||||||
|
|
||||||
scale_y = (pblockheight << FRACBITS) / ptextureheight;
|
ColumnDrawerPointer(patchcol, block, mipmap,
|
||||||
|
pblockheight, blockmodulo,
|
||||||
while (patchcol->topdelta != 0xff)
|
yfracstep, scale_y,
|
||||||
{
|
patch, height,
|
||||||
topdelta = patchcol->topdelta;
|
bpp);
|
||||||
if (topdelta <= prevdelta)
|
|
||||||
topdelta += prevdelta;
|
|
||||||
prevdelta = topdelta;
|
|
||||||
source = (const UINT8 *)patchcol + 3;
|
|
||||||
count = ((patchcol->length * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
|
||||||
position = originy + topdelta;
|
|
||||||
|
|
||||||
yfrac = 0;
|
|
||||||
//yfracstep = (patchcol->length << FRACBITS) / count;
|
|
||||||
if (position < 0)
|
|
||||||
{
|
|
||||||
yfrac = -position<<FRACBITS;
|
|
||||||
count += (((position * scale_y) + (FRACUNIT/2)) >> FRACBITS);
|
|
||||||
position = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
position = ((position * scale_y) + (FRACUNIT/2)) >> FRACBITS;
|
|
||||||
|
|
||||||
if (position < 0)
|
|
||||||
position = 0;
|
|
||||||
|
|
||||||
if (position + count >= pblockheight)
|
|
||||||
count = pblockheight - position;
|
|
||||||
|
|
||||||
dest = block + (position*blockmodulo);
|
|
||||||
while (count > 0)
|
|
||||||
{
|
|
||||||
count--;
|
|
||||||
|
|
||||||
texel = source[yfrac>>FRACBITS];
|
|
||||||
|
|
||||||
if (firetranslucent && (transtables[(texel<<8)+0x40000]!=texel))
|
|
||||||
alpha = 0x80;
|
|
||||||
else
|
|
||||||
alpha = 0xff;
|
|
||||||
|
|
||||||
//Hurdler: not perfect, but better than holes
|
|
||||||
if (texel == HWR_PATCHES_CHROMAKEY_COLORINDEX && (mipmap->flags & TF_CHROMAKEYED))
|
|
||||||
texel = HWR_CHROMAKEY_EQUIVALENTCOLORINDEX;
|
|
||||||
//Hurdler: 25/04/2000: now support colormap in hardware mode
|
|
||||||
else if (mipmap->colormap)
|
|
||||||
texel = mipmap->colormap[texel];
|
|
||||||
|
|
||||||
// hope compiler will get this switch out of the loops (dreams...)
|
|
||||||
// gcc do it ! but vcc not ! (why don't use cygwin gcc for win32 ?)
|
|
||||||
// Alam: SRB2 uses Mingw, HUGS
|
|
||||||
switch (bpp)
|
|
||||||
{
|
|
||||||
case 2 : texelu16 = (UINT16)((alpha<<8) | texel);
|
|
||||||
memcpy(dest, &texelu16, sizeof(UINT16));
|
|
||||||
break;
|
|
||||||
case 3 : colortemp = V_GetColor(texel);
|
|
||||||
memcpy(dest, &colortemp, sizeof(RGBA_t)-sizeof(UINT8));
|
|
||||||
break;
|
|
||||||
case 4 : colortemp = V_GetColor(texel);
|
|
||||||
colortemp.s.alpha = alpha;
|
|
||||||
memcpy(dest, &colortemp, sizeof(RGBA_t));
|
|
||||||
break;
|
|
||||||
// default is 1
|
|
||||||
default: *dest = texel;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dest += blockmodulo;
|
|
||||||
yfrac += yfracstep;
|
|
||||||
}
|
|
||||||
patchcol = (const column_t *)((const UINT8 *)patchcol + patchcol->length + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,26 +568,6 @@ static void HWR_ResizeBlock(INT32 originalwidth, INT32 originalheight,
|
||||||
//CONS_Debug(DBG_RENDER, "Width is %d, Height is %d\n", blockwidth, blockheight);
|
//CONS_Debug(DBG_RENDER, "Width is %d, Height is %d\n", blockwidth, blockheight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const INT32 format2bpp[16] =
|
|
||||||
{
|
|
||||||
0, //0
|
|
||||||
0, //1
|
|
||||||
1, //2 GR_TEXFMT_ALPHA_8
|
|
||||||
1, //3 GR_TEXFMT_INTENSITY_8
|
|
||||||
1, //4 GR_TEXFMT_ALPHA_INTENSITY_44
|
|
||||||
1, //5 GR_TEXFMT_P_8
|
|
||||||
4, //6 GR_RGBA
|
|
||||||
0, //7
|
|
||||||
0, //8
|
|
||||||
0, //9
|
|
||||||
2, //10 GR_TEXFMT_RGB_565
|
|
||||||
2, //11 GR_TEXFMT_ARGB_1555
|
|
||||||
2, //12 GR_TEXFMT_ARGB_4444
|
|
||||||
2, //13 GR_TEXFMT_ALPHA_INTENSITY_88
|
|
||||||
2, //14 GR_TEXFMT_AP_88
|
|
||||||
};
|
|
||||||
|
|
||||||
static UINT8 *MakeBlock(GLMipmap_t *grMipmap)
|
static UINT8 *MakeBlock(GLMipmap_t *grMipmap)
|
||||||
{
|
{
|
||||||
UINT8 *block;
|
UINT8 *block;
|
||||||
|
@ -452,13 +651,10 @@ static void HWR_GenerateTexture(INT32 texnum, GLTexture_t *grtex)
|
||||||
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++)
|
||||||
{
|
{
|
||||||
realpatch = W_CacheLumpNumPwad(patch->wad, patch->lump, PU_CACHE);
|
realpatch = W_CacheLumpNumPwad(patch->wad, patch->lump, PU_CACHE);
|
||||||
HWR_DrawPatchInCache(&grtex->mipmap,
|
HWR_DrawTexturePatchInCache(&grtex->mipmap,
|
||||||
blockwidth, blockheight,
|
blockwidth, blockheight,
|
||||||
blockwidth*format2bpp[grtex->mipmap.grInfo.format],
|
texture, patch,
|
||||||
texture->width, texture->height,
|
realpatch);
|
||||||
patch->originx, patch->originy,
|
|
||||||
realpatch,
|
|
||||||
format2bpp[grtex->mipmap.grInfo.format]);
|
|
||||||
Z_Unlock(realpatch);
|
Z_Unlock(realpatch);
|
||||||
}
|
}
|
||||||
//Hurdler: not efficient at all but I don't remember exactly how HWR_DrawPatchInCache works :(
|
//Hurdler: not efficient at all but I don't remember exactly how HWR_DrawPatchInCache works :(
|
||||||
|
@ -545,11 +741,8 @@ void HWR_MakePatch (const patch_t *patch, GLPatch_t *grPatch, GLMipmap_t *grMipm
|
||||||
|
|
||||||
HWR_DrawPatchInCache(grMipmap,
|
HWR_DrawPatchInCache(grMipmap,
|
||||||
newwidth, newheight,
|
newwidth, newheight,
|
||||||
blockwidth*format2bpp[grMipmap->grInfo.format],
|
|
||||||
grPatch->width, grPatch->height,
|
grPatch->width, grPatch->height,
|
||||||
0, 0,
|
patch);
|
||||||
patch,
|
|
||||||
format2bpp[grMipmap->grInfo.format]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grPatch->max_s = (float)newwidth / (float)blockwidth;
|
grPatch->max_s = (float)newwidth / (float)blockwidth;
|
||||||
|
|
|
@ -1266,21 +1266,24 @@ UINT8 *HWR_GetScreenshot(void)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HWR_Screenshot(const char *lbmname)
|
boolean HWR_Screenshot(const char *pathname)
|
||||||
{
|
{
|
||||||
boolean ret;
|
boolean ret;
|
||||||
UINT8 *buf = malloc(vid.width * vid.height * 3 * sizeof (*buf));
|
UINT8 *buf = malloc(vid.width * vid.height * 3 * sizeof (*buf));
|
||||||
|
|
||||||
if (!buf)
|
if (!buf)
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_RENDER, "HWR_Screenshot: Failed to allocate memory\n");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// returns 24bit 888 RGB
|
// returns 24bit 888 RGB
|
||||||
HWD.pfnReadRect(0, 0, vid.width, vid.height, vid.width * 3, (void *)buf);
|
HWD.pfnReadRect(0, 0, vid.width, vid.height, vid.width * 3, (void *)buf);
|
||||||
|
|
||||||
#ifdef USE_PNG
|
#ifdef USE_PNG
|
||||||
ret = M_SavePNG(lbmname, buf, vid.width, vid.height, false);
|
ret = M_SavePNG(pathname, buf, vid.width, vid.height, NULL);
|
||||||
#else
|
#else
|
||||||
ret = saveTGA(lbmname, buf, vid.width, vid.height);
|
ret = saveTGA(pathname, buf, vid.width, vid.height);
|
||||||
#endif
|
#endif
|
||||||
free(buf);
|
free(buf);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -172,9 +172,14 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_SPSH
|
&lspr[NOLIGHT], // SPR_SPSH
|
||||||
&lspr[NOLIGHT], // SPR_ESHI
|
&lspr[NOLIGHT], // SPR_ESHI
|
||||||
&lspr[NOLIGHT], // SPR_GSNP
|
&lspr[NOLIGHT], // SPR_GSNP
|
||||||
|
&lspr[NOLIGHT], // SPR_GSNL
|
||||||
|
&lspr[NOLIGHT], // SPR_GSNH
|
||||||
&lspr[NOLIGHT], // SPR_MNUS
|
&lspr[NOLIGHT], // SPR_MNUS
|
||||||
|
&lspr[NOLIGHT], // SPR_MNUD
|
||||||
&lspr[NOLIGHT], // SPR_SSHL
|
&lspr[NOLIGHT], // SPR_SSHL
|
||||||
&lspr[NOLIGHT], // SPR_UNID
|
&lspr[NOLIGHT], // SPR_UNID
|
||||||
|
&lspr[NOLIGHT], // SPR_CANA
|
||||||
|
&lspr[NOLIGHT], // SPR_CANG
|
||||||
|
|
||||||
// Generic Boos Items
|
// Generic Boos Items
|
||||||
&lspr[JETLIGHT_L], // SPR_JETF // Boss jet fumes
|
&lspr[JETLIGHT_L], // SPR_JETF // Boss jet fumes
|
||||||
|
@ -199,7 +204,11 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[REDBALL_L], // SPR_EFIR
|
&lspr[REDBALL_L], // SPR_EFIR
|
||||||
|
|
||||||
// Boss 5 (Arid Canyon)
|
// Boss 5 (Arid Canyon)
|
||||||
&lspr[NOLIGHT], // SPR_EGGQ
|
&lspr[NOLIGHT], //SPR_FANG // replaces EGGQ
|
||||||
|
&lspr[NOLIGHT], //SPR_FBOM
|
||||||
|
&lspr[NOLIGHT], //SPR_FSGN
|
||||||
|
&lspr[REDBALL_L], //SPR_BARX // bomb explosion (also used by barrel)
|
||||||
|
&lspr[NOLIGHT], //SPR_BARD // bomb dust (also used by barrel)
|
||||||
|
|
||||||
// Boss 6 (Red Volcano)
|
// Boss 6 (Red Volcano)
|
||||||
&lspr[NOLIGHT], // SPR_EEGR
|
&lspr[NOLIGHT], // SPR_EEGR
|
||||||
|
@ -343,6 +352,22 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_BTBL
|
&lspr[NOLIGHT], // SPR_BTBL
|
||||||
&lspr[NOLIGHT], // SPR_STBL
|
&lspr[NOLIGHT], // SPR_STBL
|
||||||
&lspr[NOLIGHT], // SPR_CACT
|
&lspr[NOLIGHT], // SPR_CACT
|
||||||
|
&lspr[NOLIGHT], // SPR_WWSG
|
||||||
|
&lspr[NOLIGHT], // SPR_WWS2
|
||||||
|
&lspr[NOLIGHT], // SPR_WWS3
|
||||||
|
&lspr[NOLIGHT], // SPR_OILL
|
||||||
|
&lspr[NOLIGHT], // SPR_OILF
|
||||||
|
&lspr[NOLIGHT], // SPR_BARR
|
||||||
|
&lspr[NOLIGHT], // SPR_REMT
|
||||||
|
&lspr[NOLIGHT], // SPR_TAZD
|
||||||
|
&lspr[NOLIGHT], // SPR_ADST
|
||||||
|
&lspr[NOLIGHT], // SPR_MCRT
|
||||||
|
&lspr[NOLIGHT], // SPR_MCSP
|
||||||
|
&lspr[NOLIGHT], // SPR_NON2
|
||||||
|
&lspr[NOLIGHT], // SPR_SALD
|
||||||
|
&lspr[NOLIGHT], // SPR_TRAE
|
||||||
|
&lspr[NOLIGHT], // SPR_TRAI
|
||||||
|
&lspr[NOLIGHT], // SPR_STEA
|
||||||
|
|
||||||
// Red Volcano Scenery
|
// Red Volcano Scenery
|
||||||
&lspr[REDBALL_L], // SPR_FLME
|
&lspr[REDBALL_L], // SPR_FLME
|
||||||
|
@ -535,6 +560,7 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[SUPERSPARK_L], // SPR_BOM3
|
&lspr[SUPERSPARK_L], // SPR_BOM3
|
||||||
&lspr[NOLIGHT], // SPR_BOM4
|
&lspr[NOLIGHT], // SPR_BOM4
|
||||||
&lspr[REDBALL_L], // SPR_BMNB
|
&lspr[REDBALL_L], // SPR_BMNB
|
||||||
|
&lspr[NOLIGHT], // SPR_WDDB
|
||||||
|
|
||||||
// Crumbly rocks
|
// Crumbly rocks
|
||||||
&lspr[NOLIGHT], // SPR_ROIA
|
&lspr[NOLIGHT], // SPR_ROIA
|
||||||
|
|
|
@ -4265,10 +4265,45 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is expecting a pointer to an array containing 4 wallVerts for a sprite
|
||||||
|
static void HWR_RotateSpritePolyToAim(gr_vissprite_t *spr, FOutVector *wallVerts)
|
||||||
|
{
|
||||||
|
if (cv_grspritebillboarding.value
|
||||||
|
&& spr && spr->mobj && !(spr->mobj->frame & FF_PAPERSPRITE)
|
||||||
|
&& wallVerts)
|
||||||
|
{
|
||||||
|
float basey = FIXED_TO_FLOAT(spr->mobj->z);
|
||||||
|
float lowy = wallVerts[0].y;
|
||||||
|
if (P_MobjFlip(spr->mobj) == -1)
|
||||||
|
{
|
||||||
|
basey = FIXED_TO_FLOAT(spr->mobj->z + spr->mobj->height);
|
||||||
|
}
|
||||||
|
// Rotate sprites to fully billboard with the camera
|
||||||
|
// X, Y, AND Z need to be manipulated for the polys to rotate around the
|
||||||
|
// origin, because of how the origin setting works I believe that should
|
||||||
|
// be mobj->z or mobj->z + mobj->height
|
||||||
|
wallVerts[2].y = wallVerts[3].y = (spr->ty - basey) * gr_viewludsin + basey;
|
||||||
|
wallVerts[0].y = wallVerts[1].y = (lowy - basey) * gr_viewludsin + basey;
|
||||||
|
// translate back to be around 0 before translating back
|
||||||
|
wallVerts[3].x += ((spr->ty - basey) * gr_viewludcos) * gr_viewcos;
|
||||||
|
wallVerts[2].x += ((spr->ty - basey) * gr_viewludcos) * gr_viewcos;
|
||||||
|
|
||||||
|
wallVerts[0].x += ((lowy - basey) * gr_viewludcos) * gr_viewcos;
|
||||||
|
wallVerts[1].x += ((lowy - basey) * gr_viewludcos) * gr_viewcos;
|
||||||
|
|
||||||
|
wallVerts[3].z += ((spr->ty - basey) * gr_viewludcos) * gr_viewsin;
|
||||||
|
wallVerts[2].z += ((spr->ty - basey) * gr_viewludcos) * gr_viewsin;
|
||||||
|
|
||||||
|
wallVerts[0].z += ((lowy - basey) * gr_viewludcos) * gr_viewsin;
|
||||||
|
wallVerts[1].z += ((lowy - basey) * gr_viewludcos) * gr_viewsin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void HWR_SplitSprite(gr_vissprite_t *spr)
|
static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
{
|
{
|
||||||
float this_scale = 1.0f;
|
float this_scale = 1.0f;
|
||||||
FOutVector wallVerts[4];
|
FOutVector wallVerts[4];
|
||||||
|
FOutVector baseWallVerts[4]; // This is what the verts should end up as
|
||||||
GLPatch_t *gpatch;
|
GLPatch_t *gpatch;
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)spr->mobj->skin)->flags & SF_HIRES);
|
const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)spr->mobj->skin)->flags & SF_HIRES);
|
||||||
|
@ -4281,11 +4316,13 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
float realtop, realbot, top, bot;
|
float realtop, realbot, top, bot;
|
||||||
float towtop, towbot, towmult;
|
float towtop, towbot, towmult;
|
||||||
float bheight;
|
float bheight;
|
||||||
|
float realheight, heightmult;
|
||||||
const sector_t *sector = spr->mobj->subsector->sector;
|
const sector_t *sector = spr->mobj->subsector->sector;
|
||||||
const lightlist_t *list = sector->lightlist;
|
const lightlist_t *list = sector->lightlist;
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
float endrealtop, endrealbot, endtop, endbot;
|
float endrealtop, endrealbot, endtop, endbot;
|
||||||
float endbheight;
|
float endbheight;
|
||||||
|
float endrealheight;
|
||||||
fixed_t temp;
|
fixed_t temp;
|
||||||
fixed_t v1x, v1y, v2x, v2y;
|
fixed_t v1x, v1y, v2x, v2y;
|
||||||
#endif
|
#endif
|
||||||
|
@ -4318,16 +4355,16 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
HWR_DrawSpriteShadow(spr, gpatch, this_scale);
|
HWR_DrawSpriteShadow(spr, gpatch, this_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
wallVerts[0].x = wallVerts[3].x = spr->x1;
|
baseWallVerts[0].x = baseWallVerts[3].x = spr->x1;
|
||||||
wallVerts[2].x = wallVerts[1].x = spr->x2;
|
baseWallVerts[2].x = baseWallVerts[1].x = spr->x2;
|
||||||
wallVerts[0].z = wallVerts[3].z = spr->z1;
|
baseWallVerts[0].z = baseWallVerts[3].z = spr->z1;
|
||||||
wallVerts[1].z = wallVerts[2].z = spr->z2;
|
baseWallVerts[1].z = baseWallVerts[2].z = spr->z2;
|
||||||
|
|
||||||
wallVerts[2].y = wallVerts[3].y = spr->ty;
|
baseWallVerts[2].y = baseWallVerts[3].y = spr->ty;
|
||||||
if (spr->mobj && fabsf(this_scale - 1.0f) > 1.0E-36f)
|
if (spr->mobj && fabsf(this_scale - 1.0f) > 1.0E-36f)
|
||||||
wallVerts[0].y = wallVerts[1].y = spr->ty - gpatch->height * this_scale;
|
baseWallVerts[0].y = baseWallVerts[1].y = spr->ty - gpatch->height * this_scale;
|
||||||
else
|
else
|
||||||
wallVerts[0].y = wallVerts[1].y = spr->ty - gpatch->height;
|
baseWallVerts[0].y = baseWallVerts[1].y = spr->ty - gpatch->height;
|
||||||
|
|
||||||
v1x = FLOAT_TO_FIXED(spr->x1);
|
v1x = FLOAT_TO_FIXED(spr->x1);
|
||||||
v1y = FLOAT_TO_FIXED(spr->z1);
|
v1y = FLOAT_TO_FIXED(spr->z1);
|
||||||
|
@ -4336,44 +4373,56 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
|
|
||||||
if (spr->flip)
|
if (spr->flip)
|
||||||
{
|
{
|
||||||
wallVerts[0].sow = wallVerts[3].sow = gpatch->max_s;
|
baseWallVerts[0].sow = baseWallVerts[3].sow = gpatch->max_s;
|
||||||
wallVerts[2].sow = wallVerts[1].sow = 0;
|
baseWallVerts[2].sow = baseWallVerts[1].sow = 0;
|
||||||
}else{
|
}
|
||||||
wallVerts[0].sow = wallVerts[3].sow = 0;
|
else
|
||||||
wallVerts[2].sow = wallVerts[1].sow = gpatch->max_s;
|
{
|
||||||
|
baseWallVerts[0].sow = baseWallVerts[3].sow = 0;
|
||||||
|
baseWallVerts[2].sow = baseWallVerts[1].sow = gpatch->max_s;
|
||||||
}
|
}
|
||||||
|
|
||||||
// flip the texture coords (look familiar?)
|
// flip the texture coords (look familiar?)
|
||||||
if (spr->vflip)
|
if (spr->vflip)
|
||||||
{
|
{
|
||||||
wallVerts[3].tow = wallVerts[2].tow = gpatch->max_t;
|
baseWallVerts[3].tow = baseWallVerts[2].tow = gpatch->max_t;
|
||||||
wallVerts[0].tow = wallVerts[1].tow = 0;
|
baseWallVerts[0].tow = baseWallVerts[1].tow = 0;
|
||||||
}else{
|
}
|
||||||
wallVerts[3].tow = wallVerts[2].tow = 0;
|
else
|
||||||
wallVerts[0].tow = wallVerts[1].tow = gpatch->max_t;
|
{
|
||||||
|
baseWallVerts[3].tow = baseWallVerts[2].tow = 0;
|
||||||
|
baseWallVerts[0].tow = baseWallVerts[1].tow = gpatch->max_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if it has a dispoffset, push it a little towards the camera
|
// if it has a dispoffset, push it a little towards the camera
|
||||||
if (spr->dispoffset) {
|
if (spr->dispoffset) {
|
||||||
float co = -gr_viewcos*(0.05f*spr->dispoffset);
|
float co = -gr_viewcos*(0.05f*spr->dispoffset);
|
||||||
float si = -gr_viewsin*(0.05f*spr->dispoffset);
|
float si = -gr_viewsin*(0.05f*spr->dispoffset);
|
||||||
wallVerts[0].z = wallVerts[3].z = wallVerts[0].z+si;
|
baseWallVerts[0].z = baseWallVerts[3].z = baseWallVerts[0].z+si;
|
||||||
wallVerts[1].z = wallVerts[2].z = wallVerts[1].z+si;
|
baseWallVerts[1].z = baseWallVerts[2].z = baseWallVerts[1].z+si;
|
||||||
wallVerts[0].x = wallVerts[3].x = wallVerts[0].x+co;
|
baseWallVerts[0].x = baseWallVerts[3].x = baseWallVerts[0].x+co;
|
||||||
wallVerts[1].x = wallVerts[2].x = wallVerts[1].x+co;
|
baseWallVerts[1].x = baseWallVerts[2].x = baseWallVerts[1].x+co;
|
||||||
}
|
}
|
||||||
|
|
||||||
realtop = top = wallVerts[3].y;
|
// Let dispoffset work first since this adjust each vertex
|
||||||
realbot = bot = wallVerts[0].y;
|
HWR_RotateSpritePolyToAim(spr, baseWallVerts);
|
||||||
towtop = wallVerts[3].tow;
|
|
||||||
towbot = wallVerts[0].tow;
|
realtop = top = baseWallVerts[3].y;
|
||||||
|
realbot = bot = baseWallVerts[0].y;
|
||||||
|
towtop = baseWallVerts[3].tow;
|
||||||
|
towbot = baseWallVerts[0].tow;
|
||||||
towmult = (towbot - towtop) / (top - bot);
|
towmult = (towbot - towtop) / (top - bot);
|
||||||
|
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
endrealtop = endtop = wallVerts[2].y;
|
endrealtop = endtop = baseWallVerts[2].y;
|
||||||
endrealbot = endbot = wallVerts[1].y;
|
endrealbot = endbot = baseWallVerts[1].y;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// copy the contents of baseWallVerts into the drawn wallVerts array
|
||||||
|
// baseWallVerts is used to know the final shape to easily get the vertex
|
||||||
|
// co-ordinates
|
||||||
|
memcpy(wallVerts, baseWallVerts, sizeof(baseWallVerts));
|
||||||
|
|
||||||
if (!cv_translucency.value) // translucency disabled
|
if (!cv_translucency.value) // translucency disabled
|
||||||
{
|
{
|
||||||
Surf.FlatColor.s.alpha = 0xFF;
|
Surf.FlatColor.s.alpha = 0xFF;
|
||||||
|
@ -4500,12 +4549,55 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
wallVerts[2].y = endtop;
|
wallVerts[2].y = endtop;
|
||||||
wallVerts[0].y = bot;
|
wallVerts[0].y = bot;
|
||||||
wallVerts[1].y = endbot;
|
wallVerts[1].y = endbot;
|
||||||
|
|
||||||
|
// The x and y only need to be adjusted in the case that it's not a papersprite
|
||||||
|
if (cv_grspritebillboarding.value
|
||||||
|
&& spr->mobj && !(spr->mobj->frame & FF_PAPERSPRITE))
|
||||||
|
{
|
||||||
|
// Get the x and z of the vertices so billboarding draws correctly
|
||||||
|
realheight = realbot - realtop;
|
||||||
|
endrealheight = endrealbot - endrealtop;
|
||||||
|
heightmult = (realtop - top) / realheight;
|
||||||
|
wallVerts[3].x = baseWallVerts[3].x + (baseWallVerts[3].x - baseWallVerts[0].x) * heightmult;
|
||||||
|
wallVerts[3].z = baseWallVerts[3].z + (baseWallVerts[3].z - baseWallVerts[0].z) * heightmult;
|
||||||
|
|
||||||
|
heightmult = (endrealtop - endtop) / endrealheight;
|
||||||
|
wallVerts[2].x = baseWallVerts[2].x + (baseWallVerts[2].x - baseWallVerts[1].x) * heightmult;
|
||||||
|
wallVerts[2].z = baseWallVerts[2].z + (baseWallVerts[2].z - baseWallVerts[1].z) * heightmult;
|
||||||
|
|
||||||
|
heightmult = (realtop - bot) / realheight;
|
||||||
|
wallVerts[0].x = baseWallVerts[3].x + (baseWallVerts[3].x - baseWallVerts[0].x) * heightmult;
|
||||||
|
wallVerts[0].z = baseWallVerts[3].z + (baseWallVerts[3].z - baseWallVerts[0].z) * heightmult;
|
||||||
|
|
||||||
|
heightmult = (endrealtop - endbot) / endrealheight;
|
||||||
|
wallVerts[1].x = baseWallVerts[2].x + (baseWallVerts[2].x - baseWallVerts[1].x) * heightmult;
|
||||||
|
wallVerts[1].z = baseWallVerts[2].z + (baseWallVerts[2].z - baseWallVerts[1].z) * heightmult;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
wallVerts[3].tow = wallVerts[2].tow = towtop + ((realtop - top) * towmult);
|
wallVerts[3].tow = wallVerts[2].tow = towtop + ((realtop - top) * towmult);
|
||||||
wallVerts[0].tow = wallVerts[1].tow = towtop + ((realtop - bot) * towmult);
|
wallVerts[0].tow = wallVerts[1].tow = towtop + ((realtop - bot) * towmult);
|
||||||
|
|
||||||
wallVerts[2].y = wallVerts[3].y = top;
|
wallVerts[2].y = wallVerts[3].y = top;
|
||||||
wallVerts[0].y = wallVerts[1].y = bot;
|
wallVerts[0].y = wallVerts[1].y = bot;
|
||||||
|
|
||||||
|
// The x and y only need to be adjusted in the case that it's not a papersprite
|
||||||
|
if (cv_grspritebillboarding.value
|
||||||
|
&& spr->mobj && !(spr->mobj->frame & FF_PAPERSPRITE))
|
||||||
|
{
|
||||||
|
// Get the x and z of the vertices so billboarding draws correctly
|
||||||
|
realheight = realbot - realtop;
|
||||||
|
heightmult = (realtop - top) / realheight;
|
||||||
|
wallVerts[3].x = baseWallVerts[3].x + (baseWallVerts[3].x - baseWallVerts[0].x) * heightmult;
|
||||||
|
wallVerts[3].z = baseWallVerts[3].z + (baseWallVerts[3].z - baseWallVerts[0].z) * heightmult;
|
||||||
|
wallVerts[2].x = baseWallVerts[2].x + (baseWallVerts[2].x - baseWallVerts[1].x) * heightmult;
|
||||||
|
wallVerts[2].z = baseWallVerts[2].z + (baseWallVerts[2].z - baseWallVerts[1].z) * heightmult;
|
||||||
|
|
||||||
|
heightmult = (realtop - bot) / realheight;
|
||||||
|
wallVerts[0].x = baseWallVerts[3].x + (baseWallVerts[3].x - baseWallVerts[0].x) * heightmult;
|
||||||
|
wallVerts[0].z = baseWallVerts[3].z + (baseWallVerts[3].z - baseWallVerts[0].z) * heightmult;
|
||||||
|
wallVerts[1].x = baseWallVerts[2].x + (baseWallVerts[2].x - baseWallVerts[1].x) * heightmult;
|
||||||
|
wallVerts[1].z = baseWallVerts[2].z + (baseWallVerts[2].z - baseWallVerts[1].z) * heightmult;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (colormap)
|
if (colormap)
|
||||||
|
@ -4675,6 +4767,9 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
||||||
wallVerts[1].x = wallVerts[2].x = wallVerts[1].x+co;
|
wallVerts[1].x = wallVerts[2].x = wallVerts[1].x+co;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Let dispoffset work first since this adjust each vertex
|
||||||
|
HWR_RotateSpritePolyToAim(spr, wallVerts);
|
||||||
|
|
||||||
// This needs to be AFTER the shadows so that the regular sprites aren't drawn completely black.
|
// This needs to be AFTER the shadows so that the regular sprites aren't drawn completely black.
|
||||||
// sprite lighting by modulating the RGB components
|
// sprite lighting by modulating the RGB components
|
||||||
/// \todo coloured
|
/// \todo coloured
|
||||||
|
@ -4756,6 +4851,9 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
||||||
wallVerts[0].z = wallVerts[3].z = spr->z1;
|
wallVerts[0].z = wallVerts[3].z = spr->z1;
|
||||||
wallVerts[1].z = wallVerts[2].z = spr->z2;
|
wallVerts[1].z = wallVerts[2].z = spr->z2;
|
||||||
|
|
||||||
|
// Let dispoffset work first since this adjust each vertex
|
||||||
|
HWR_RotateSpritePolyToAim(spr, wallVerts);
|
||||||
|
|
||||||
wallVerts[0].sow = wallVerts[3].sow = 0;
|
wallVerts[0].sow = wallVerts[3].sow = 0;
|
||||||
wallVerts[2].sow = wallVerts[1].sow = gpatch->max_s;
|
wallVerts[2].sow = wallVerts[1].sow = gpatch->max_s;
|
||||||
|
|
||||||
|
@ -5333,7 +5431,7 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HWPRECIP
|
#ifdef HWPRECIP
|
||||||
// Someone seriously wants infinite draw distance for precipitation?
|
// no, no infinite draw distance for precipitation. this option at zero is supposed to turn it off
|
||||||
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
||||||
{
|
{
|
||||||
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
||||||
|
@ -5349,13 +5447,6 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
HWR_ProjectPrecipitationSprite(precipthing);
|
HWR_ProjectPrecipitationSprite(precipthing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// Draw everything in sector, no checks
|
|
||||||
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
|
||||||
if (!(precipthing->precipflags & PCF_INVISIBLE))
|
|
||||||
HWR_ProjectPrecipitationSprite(precipthing);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5676,16 +5767,6 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing)
|
||||||
x1 = tr_x + x1 * rightcos;
|
x1 = tr_x + x1 * rightcos;
|
||||||
x2 = tr_x - x2 * rightcos;
|
x2 = tr_x - x2 * rightcos;
|
||||||
|
|
||||||
// okay, we can't return now... this is a hack, but weather isn't networked, so it should be ok
|
|
||||||
if (!(thing->precipflags & PCF_THUNK))
|
|
||||||
{
|
|
||||||
if (thing->precipflags & PCF_RAIN)
|
|
||||||
P_RainThinker(thing);
|
|
||||||
else
|
|
||||||
P_SnowThinker(thing);
|
|
||||||
thing->precipflags |= PCF_THUNK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// store information in a vissprite
|
// store information in a vissprite
|
||||||
//
|
//
|
||||||
|
@ -5706,6 +5787,16 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing)
|
||||||
vis->ty = FIXED_TO_FLOAT(thing->z + spritecachedinfo[lumpoff].topoffset);
|
vis->ty = FIXED_TO_FLOAT(thing->z + spritecachedinfo[lumpoff].topoffset);
|
||||||
|
|
||||||
vis->precip = true;
|
vis->precip = true;
|
||||||
|
|
||||||
|
// okay... this is a hack, but weather isn't networked, so it should be ok
|
||||||
|
if (!(thing->precipflags & PCF_THUNK))
|
||||||
|
{
|
||||||
|
if (thing->precipflags & PCF_RAIN)
|
||||||
|
P_RainThinker(thing);
|
||||||
|
else
|
||||||
|
P_SnowThinker(thing);
|
||||||
|
thing->precipflags |= PCF_THUNK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -6096,7 +6187,7 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// note: sets viewangle, viewx, viewy, viewz
|
// note: sets viewangle, viewx, viewy, viewz
|
||||||
R_SetupFrame(player, false); // This can stay false because it is only used to set viewsky in r_main.c, which isn't used here
|
R_SetupFrame(player);
|
||||||
|
|
||||||
// copy view cam position for local use
|
// copy view cam position for local use
|
||||||
dup_viewx = viewx;
|
dup_viewx = viewx;
|
||||||
|
|
|
@ -39,8 +39,6 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player);
|
||||||
void HWR_RenderPlayerView(INT32 viewnumber, player_t *player);
|
void HWR_RenderPlayerView(INT32 viewnumber, player_t *player);
|
||||||
void HWR_DrawViewBorder(INT32 clearlines);
|
void HWR_DrawViewBorder(INT32 clearlines);
|
||||||
void HWR_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatlumpnum);
|
void HWR_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatlumpnum);
|
||||||
UINT8 *HWR_GetScreenshot(void);
|
|
||||||
boolean HWR_Screenshot(const char *lbmname);
|
|
||||||
void HWR_InitTextureMapping(void);
|
void HWR_InitTextureMapping(void);
|
||||||
void HWR_SetViewSize(void);
|
void HWR_SetViewSize(void);
|
||||||
void HWR_DrawPatch(GLPatch_t *gpatch, INT32 x, INT32 y, INT32 option);
|
void HWR_DrawPatch(GLPatch_t *gpatch, INT32 x, INT32 y, INT32 option);
|
||||||
|
@ -54,6 +52,9 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color);
|
||||||
void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, UINT32 color, INT32 options); // Lat: separate flags from color since color needs to be an uint to work right.
|
void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, UINT32 color, INT32 options); // Lat: separate flags from color since color needs to be an uint to work right.
|
||||||
void HWR_DrawPic(INT32 x,INT32 y,lumpnum_t lumpnum);
|
void HWR_DrawPic(INT32 x,INT32 y,lumpnum_t lumpnum);
|
||||||
|
|
||||||
|
UINT8 *HWR_GetScreenshot(void);
|
||||||
|
boolean HWR_Screenshot(const char *pathname);
|
||||||
|
|
||||||
void HWR_AddCommands(void);
|
void HWR_AddCommands(void);
|
||||||
void HWR_CorrectSWTricks(void);
|
void HWR_CorrectSWTricks(void);
|
||||||
void transform(float *cx, float *cy, float *cz);
|
void transform(float *cx, float *cy, float *cz);
|
||||||
|
@ -95,6 +96,7 @@ extern consvar_t cv_grcorrecttricks;
|
||||||
extern consvar_t cv_voodoocompatibility;
|
extern consvar_t cv_voodoocompatibility;
|
||||||
extern consvar_t cv_grfovchange;
|
extern consvar_t cv_grfovchange;
|
||||||
extern consvar_t cv_grsolvetjoin;
|
extern consvar_t cv_grsolvetjoin;
|
||||||
|
extern consvar_t cv_grspritebillboarding;
|
||||||
|
|
||||||
extern float gr_viewwidth, gr_viewheight, gr_baseviewwindowy;
|
extern float gr_viewwidth, gr_viewheight, gr_baseviewwindowy;
|
||||||
|
|
||||||
|
|
238
src/hu_stuff.c
238
src/hu_stuff.c
|
@ -751,40 +751,102 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
|
||||||
cstart = "\x83";
|
cstart = "\x83";
|
||||||
|
|
||||||
// Follow palette order at r_draw.c Color_Names
|
// Follow palette order at r_draw.c Color_Names
|
||||||
if (color <= SKINCOLOR_SILVER
|
switch (color)
|
||||||
|| color == SKINCOLOR_AETHER)
|
{
|
||||||
cstart = "\x80"; // White
|
default:
|
||||||
else if (color <= SKINCOLOR_BLACK
|
case SKINCOLOR_WHITE:
|
||||||
|| color == SKINCOLOR_SLATE)
|
case SKINCOLOR_BONE:
|
||||||
cstart = "\x86"; // Grey
|
case SKINCOLOR_CLOUDY:
|
||||||
else if (color <= SKINCOLOR_YOGURT)
|
case SKINCOLOR_GREY:
|
||||||
cstart = "\x85"; // Red
|
case SKINCOLOR_SILVER:
|
||||||
else if (color <= SKINCOLOR_BEIGE)
|
case SKINCOLOR_AETHER:
|
||||||
cstart = "\x86"; // Grey
|
case SKINCOLOR_SLATE:
|
||||||
else if (color <= SKINCOLOR_LAVENDER)
|
cstart = "\x80"; // white
|
||||||
cstart = "\x81"; // Purple
|
break;
|
||||||
else if (color <= SKINCOLOR_PEACHY)
|
case SKINCOLOR_CARBON:
|
||||||
cstart = "\x85"; // Red
|
case SKINCOLOR_JET:
|
||||||
else if (color <= SKINCOLOR_RUST)
|
case SKINCOLOR_BLACK:
|
||||||
cstart = "\x87"; // Orange
|
cstart = "\x86"; // V_GRAYMAP
|
||||||
else if (color == SKINCOLOR_GOLD
|
break;
|
||||||
|| color == SKINCOLOR_YELLOW)
|
case SKINCOLOR_PINK:
|
||||||
cstart = "\x82"; // Yellow
|
case SKINCOLOR_RUBY:
|
||||||
else if (color == SKINCOLOR_SANDY
|
case SKINCOLOR_SALMON:
|
||||||
|| color == SKINCOLOR_OLIVE)
|
case SKINCOLOR_RED:
|
||||||
cstart = "\x81"; // Purple
|
case SKINCOLOR_CRIMSON:
|
||||||
else if (color <= SKINCOLOR_MINT)
|
case SKINCOLOR_FLAME:
|
||||||
cstart = "\x83"; // Green
|
cstart = "\x85"; // V_REDMAP
|
||||||
else if (color <= SKINCOLOR_DUSK)
|
break;
|
||||||
cstart = "\x84"; // Blue
|
case SKINCOLOR_YOGURT:
|
||||||
else if (color == SKINCOLOR_PINK
|
case SKINCOLOR_BROWN:
|
||||||
|| color == SKINCOLOR_PASTEL
|
case SKINCOLOR_TAN:
|
||||||
|| color == SKINCOLOR_BUBBLEGUM
|
case SKINCOLOR_BEIGE:
|
||||||
|| color == SKINCOLOR_MAGENTA
|
case SKINCOLOR_QUAIL:
|
||||||
|| color == SKINCOLOR_ROSY)
|
cstart = "\x8d"; // V_BROWNMAP
|
||||||
cstart = "\x85"; // Red
|
break;
|
||||||
else if (color <= SKINCOLOR_PLUM)
|
case SKINCOLOR_MOSS:
|
||||||
cstart = "\x81"; // Purple
|
case SKINCOLOR_GREEN:
|
||||||
|
case SKINCOLOR_FOREST:
|
||||||
|
case SKINCOLOR_EMERALD:
|
||||||
|
case SKINCOLOR_MINT:
|
||||||
|
cstart = "\x83"; // V_GREENMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_AZURE:
|
||||||
|
cstart = "\x8c"; // V_AZUREMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_LAVENDER:
|
||||||
|
case SKINCOLOR_PASTEL:
|
||||||
|
case SKINCOLOR_PURPLE:
|
||||||
|
cstart = "\x89"; // V_PURPLEMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_PEACHY:
|
||||||
|
case SKINCOLOR_LILAC:
|
||||||
|
case SKINCOLOR_PLUM:
|
||||||
|
case SKINCOLOR_ROSY:
|
||||||
|
cstart = "\x8e"; // V_ROSYMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_SUNSET:
|
||||||
|
case SKINCOLOR_APRICOT:
|
||||||
|
case SKINCOLOR_ORANGE:
|
||||||
|
case SKINCOLOR_RUST:
|
||||||
|
cstart = "\x87"; // V_ORANGEMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_GOLD:
|
||||||
|
case SKINCOLOR_SANDY:
|
||||||
|
case SKINCOLOR_YELLOW:
|
||||||
|
case SKINCOLOR_OLIVE:
|
||||||
|
cstart = "\x82"; // V_YELLOWMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_LIME:
|
||||||
|
case SKINCOLOR_PERIDOT:
|
||||||
|
cstart = "\x8b"; // V_PERIDOTMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_SEAFOAM:
|
||||||
|
case SKINCOLOR_AQUA:
|
||||||
|
cstart = "\x8a"; // V_AQUAMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_TEAL:
|
||||||
|
case SKINCOLOR_WAVE:
|
||||||
|
case SKINCOLOR_CYAN:
|
||||||
|
case SKINCOLOR_SKY:
|
||||||
|
case SKINCOLOR_CERULEAN:
|
||||||
|
case SKINCOLOR_ICY:
|
||||||
|
case SKINCOLOR_SAPPHIRE:
|
||||||
|
case SKINCOLOR_VAPOR:
|
||||||
|
cstart = "\x88"; // V_SKYMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_CORNFLOWER:
|
||||||
|
case SKINCOLOR_BLUE:
|
||||||
|
case SKINCOLOR_COBALT:
|
||||||
|
case SKINCOLOR_DUSK:
|
||||||
|
cstart = "\x84"; // V_BLUEMAP
|
||||||
|
break;
|
||||||
|
case SKINCOLOR_BUBBLEGUM:
|
||||||
|
case SKINCOLOR_MAGENTA:
|
||||||
|
case SKINCOLOR_NEON:
|
||||||
|
case SKINCOLOR_VIOLET:
|
||||||
|
cstart = "\x81"; // V_MAGENTAMAP
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
prefix = cstart;
|
prefix = cstart;
|
||||||
|
|
||||||
|
@ -1095,7 +1157,9 @@ static INT16 typelines = 1; // number of drawfill lines we need when drawing the
|
||||||
//
|
//
|
||||||
boolean HU_Responder(event_t *ev)
|
boolean HU_Responder(event_t *ev)
|
||||||
{
|
{
|
||||||
|
#ifndef NONET
|
||||||
INT32 c=0;
|
INT32 c=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ev->type != ev_keydown)
|
if (ev->type != ev_keydown)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1122,19 +1186,9 @@ boolean HU_Responder(event_t *ev)
|
||||||
return false;
|
return false;
|
||||||
}*/ //We don't actually care about that unless we get splitscreen netgames. :V
|
}*/ //We don't actually care about that unless we get splitscreen netgames. :V
|
||||||
|
|
||||||
|
#ifndef NONET
|
||||||
c = (INT32)ev->data1;
|
c = (INT32)ev->data1;
|
||||||
|
|
||||||
// capslock (now handled outside of chat on so that it works everytime......)
|
|
||||||
if (c && c == KEY_CAPSLOCK) // it's a toggle.
|
|
||||||
{
|
|
||||||
if (capslock)
|
|
||||||
capslock = false;
|
|
||||||
else
|
|
||||||
capslock = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NONET
|
|
||||||
if (!chat_on)
|
if (!chat_on)
|
||||||
{
|
{
|
||||||
// enter chat mode
|
// enter chat mode
|
||||||
|
@ -1335,7 +1389,7 @@ static char *CHAT_WordWrap(INT32 x, INT32 w, INT32 option, const char *string)
|
||||||
|
|
||||||
// 30/7/18: chaty is now the distance at which the lowest point of the chat will be drawn if that makes any sense.
|
// 30/7/18: chaty is now the distance at which the lowest point of the chat will be drawn if that makes any sense.
|
||||||
|
|
||||||
INT16 chatx = 13, chaty = 169; // let's use this as our coordinates, shh
|
INT16 chatx = 13, chaty = 169; // let's use this as our coordinates
|
||||||
|
|
||||||
// chat stuff by VincyTM LOL XD!
|
// chat stuff by VincyTM LOL XD!
|
||||||
|
|
||||||
|
@ -1414,7 +1468,6 @@ static void HU_drawMiniChat(void)
|
||||||
if (splitscreen > 1)
|
if (splitscreen > 1)
|
||||||
y += 16;
|
y += 16;
|
||||||
}*/
|
}*/
|
||||||
y -= (G_RingSlingerGametype() ? 16 : 0);
|
|
||||||
|
|
||||||
dx = 0;
|
dx = 0;
|
||||||
dy = 0;
|
dy = 0;
|
||||||
|
@ -1510,11 +1563,10 @@ static void HU_drawChatLog(INT32 offset)
|
||||||
if (splitscreen)
|
if (splitscreen)
|
||||||
{
|
{
|
||||||
y -= BASEVIDHEIGHT/2;
|
y -= BASEVIDHEIGHT/2;
|
||||||
if (splitscreen > 1)
|
//if (splitscreen > 1)
|
||||||
y += 16;
|
//y += 16;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
y -= (G_RingSlingerGametype() ? 16 : 0);
|
|
||||||
|
|
||||||
chat_topy = y + chat_scroll*charheight;
|
chat_topy = y + chat_scroll*charheight;
|
||||||
chat_bottomy = chat_topy + boxh*charheight;
|
chat_bottomy = chat_topy + boxh*charheight;
|
||||||
|
@ -1624,7 +1676,6 @@ static void HU_DrawChat(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
y -= (G_RingSlingerGametype() ? 16 : 0);
|
|
||||||
|
|
||||||
if (teamtalk)
|
if (teamtalk)
|
||||||
{
|
{
|
||||||
|
@ -1717,7 +1768,6 @@ static void HU_DrawChat(void)
|
||||||
p_dispy += 16;
|
p_dispy += 16;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
p_dispy -= (G_RingSlingerGametype() ? 16 : 0);
|
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(i=0; (i<MAXPLAYERS); i++)
|
for(i=0; (i<MAXPLAYERS); i++)
|
||||||
|
@ -2237,7 +2287,7 @@ void HU_Erase(void)
|
||||||
//======================================================================
|
//======================================================================
|
||||||
|
|
||||||
#define supercheckdef ((players[tab[i].num].powers[pw_super] && players[tab[i].num].mo && (players[tab[i].num].mo->state < &states[S_PLAY_SUPER_TRANS1] || players[tab[i].num].mo->state >= &states[S_PLAY_SUPER_TRANS6])) || (players[tab[i].num].powers[pw_carry] == CR_NIGHTSMODE && skins[players[tab[i].num].skin].flags & SF_SUPER))
|
#define supercheckdef ((players[tab[i].num].powers[pw_super] && players[tab[i].num].mo && (players[tab[i].num].mo->state < &states[S_PLAY_SUPER_TRANS1] || players[tab[i].num].mo->state >= &states[S_PLAY_SUPER_TRANS6])) || (players[tab[i].num].powers[pw_carry] == CR_NIGHTSMODE && skins[players[tab[i].num].skin].flags & SF_SUPER))
|
||||||
#define greycheckdef ((players[tab[i].num].mo && ((players[tab[i].num].rings <= 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres <= 0 && (maptol & TOL_NIGHTS)))) || players[tab[i].num].spectator)
|
#define greycheckdef (players[tab[i].num].spectator || players[tab[i].num].playerstate == PST_DEAD || (G_IsSpecialStage(gamemap) && players[tab[i].num].exiting))
|
||||||
|
|
||||||
//
|
//
|
||||||
// HU_drawPing
|
// HU_drawPing
|
||||||
|
@ -2245,7 +2295,7 @@ void HU_Erase(void)
|
||||||
void HU_drawPing(INT32 x, INT32 y, INT32 ping, boolean notext)
|
void HU_drawPing(INT32 x, INT32 y, INT32 ping, boolean notext)
|
||||||
{
|
{
|
||||||
UINT8 numbars = 1; // how many ping bars do we draw?
|
UINT8 numbars = 1; // how many ping bars do we draw?
|
||||||
UINT8 barcolor = 128; // color we use for the bars (green, yellow or red)
|
UINT8 barcolor = 35; // color we use for the bars (green, yellow or red)
|
||||||
SINT8 i = 0;
|
SINT8 i = 0;
|
||||||
SINT8 yoffset = 6;
|
SINT8 yoffset = 6;
|
||||||
INT32 dx = x+1 - (V_SmallStringWidth(va("%dms", ping), V_ALLOWLOWERCASE)/2);
|
INT32 dx = x+1 - (V_SmallStringWidth(va("%dms", ping), V_ALLOWLOWERCASE)/2);
|
||||||
|
@ -2253,12 +2303,12 @@ void HU_drawPing(INT32 x, INT32 y, INT32 ping, boolean notext)
|
||||||
if (ping < 128)
|
if (ping < 128)
|
||||||
{
|
{
|
||||||
numbars = 3;
|
numbars = 3;
|
||||||
barcolor = 184;
|
barcolor = 112;
|
||||||
}
|
}
|
||||||
else if (ping < 256)
|
else if (ping < 256)
|
||||||
{
|
{
|
||||||
numbars = 2; // Apparently ternaries w/ multiple statements don't look good in C so I decided against it.
|
numbars = 2; // Apparently ternaries w/ multiple statements don't look good in C so I decided against it.
|
||||||
barcolor = 103;
|
barcolor = 73;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!notext || vid.width >= 640) // how sad, we're using a shit resolution.
|
if (!notext || vid.width >= 640) // how sad, we're using a shit resolution.
|
||||||
|
@ -2310,7 +2360,9 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
|
||||||
| V_ALLOWLOWERCASE, tab[i].name);
|
| V_ALLOWLOWERCASE, tab[i].name);
|
||||||
|
|
||||||
// Draw emeralds
|
// Draw emeralds
|
||||||
if (!players[tab[i].num].powers[pw_super]
|
if (players[tab[i].num].powers[pw_invulnerability] && (players[tab[i].num].powers[pw_invulnerability] == players[tab[i].num].powers[pw_sneakers]) && ((leveltime/7) & 1))
|
||||||
|
HU_DrawEmeralds(x-12,y+2,255);
|
||||||
|
else if (!players[tab[i].num].powers[pw_super]
|
||||||
|| ((leveltime/7) & 1))
|
|| ((leveltime/7) & 1))
|
||||||
{
|
{
|
||||||
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
||||||
|
@ -2420,6 +2472,7 @@ static void HU_Draw32TeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
INT32 redplayers = 0, blueplayers = 0;
|
INT32 redplayers = 0, blueplayers = 0;
|
||||||
const UINT8 *colormap;
|
const UINT8 *colormap;
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
|
boolean greycheck, supercheck;
|
||||||
|
|
||||||
V_DrawFill(160, 26, 1, 154, 0); //Draw a vertical line to separate the two teams.
|
V_DrawFill(160, 26, 1, 154, 0); //Draw a vertical line to separate the two teams.
|
||||||
V_DrawFill(1, 26, 318, 1, 0); //And a horizontal line to make a T.
|
V_DrawFill(1, 26, 318, 1, 0); //And a horizontal line to make a T.
|
||||||
|
@ -2430,6 +2483,9 @@ static void HU_Draw32TeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
if (players[tab[i].num].spectator)
|
if (players[tab[i].num].spectator)
|
||||||
continue; //ignore them.
|
continue; //ignore them.
|
||||||
|
|
||||||
|
greycheck = greycheckdef;
|
||||||
|
supercheck = supercheckdef;
|
||||||
|
|
||||||
if (tab[i].color == skincolor_redteam) //red
|
if (tab[i].color == skincolor_redteam) //red
|
||||||
{
|
{
|
||||||
redplayers++;
|
redplayers++;
|
||||||
|
@ -2445,10 +2501,13 @@ static void HU_Draw32TeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
else //er? not on red or blue, so ignore them
|
else //er? not on red or blue, so ignore them
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
greycheck = greycheckdef;
|
||||||
|
supercheck = supercheckdef;
|
||||||
|
|
||||||
strlcpy(name, tab[i].name, 8);
|
strlcpy(name, tab[i].name, 8);
|
||||||
V_DrawString(x + 10, y,
|
V_DrawString(x + 10, y,
|
||||||
((tab[i].num == whiteplayer) ? V_YELLOWMAP : 0)
|
((tab[i].num == whiteplayer) ? V_YELLOWMAP : 0)
|
||||||
| (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT)
|
| (greycheck ? 0 : V_TRANSLUCENT)
|
||||||
| V_ALLOWLOWERCASE, name);
|
| V_ALLOWLOWERCASE, name);
|
||||||
|
|
||||||
if (gametype == GT_CTF)
|
if (gametype == GT_CTF)
|
||||||
|
@ -2460,13 +2519,19 @@ static void HU_Draw32TeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw emeralds
|
// Draw emeralds
|
||||||
if (!players[tab[i].num].powers[pw_super]
|
if (players[tab[i].num].powers[pw_invulnerability] && (players[tab[i].num].powers[pw_invulnerability] == players[tab[i].num].powers[pw_sneakers]) && ((leveltime/7) & 1))
|
||||||
|
{
|
||||||
|
HU_Draw32Emeralds(x+60, y+2, 255);
|
||||||
|
//HU_DrawEmeralds(x-12,y+2,255);
|
||||||
|
}
|
||||||
|
else if (!players[tab[i].num].powers[pw_super]
|
||||||
|| ((leveltime/7) & 1))
|
|| ((leveltime/7) & 1))
|
||||||
{
|
{
|
||||||
HU_Draw32Emeralds(x+60, y+2, tab[i].emeralds);
|
HU_Draw32Emeralds(x+60, y+2, tab[i].emeralds);
|
||||||
|
//HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (players[tab[i].num].powers[pw_super])
|
if (supercheck)
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], colormap);
|
||||||
|
@ -2474,12 +2539,12 @@ static void HU_Draw32TeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
||||||
if ((players[tab[i].num].rings <= 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres <= 0 && (maptol & TOL_NIGHTS)))
|
if (players[tab[i].num].spectator || players[tab[i].num].playerstate == PST_DEAD)
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], colormap);
|
||||||
else
|
else
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], colormap);
|
||||||
}
|
}
|
||||||
V_DrawRightAlignedThinString(x+128, y, (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
V_DrawRightAlignedThinString(x+128, y, ((players[tab[i].num].spectator || players[tab[i].num].playerstate == PST_DEAD) ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
||||||
if (!splitscreen)
|
if (!splitscreen)
|
||||||
{
|
{
|
||||||
if (!(tab[i].num == serverplayer))
|
if (!(tab[i].num == serverplayer))
|
||||||
|
@ -2582,7 +2647,9 @@ void HU_DrawTeamTabRankings(playersort_t *tab, INT32 whiteplayer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw emeralds
|
// Draw emeralds
|
||||||
if (!players[tab[i].num].powers[pw_super]
|
if (players[tab[i].num].powers[pw_invulnerability] && (players[tab[i].num].powers[pw_invulnerability] == players[tab[i].num].powers[pw_sneakers]) && ((leveltime/7) & 1))
|
||||||
|
HU_DrawEmeralds(x-12,y+2,255);
|
||||||
|
else if (!players[tab[i].num].powers[pw_super]
|
||||||
|| ((leveltime/7) & 1))
|
|| ((leveltime/7) & 1))
|
||||||
{
|
{
|
||||||
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
||||||
|
@ -2654,7 +2721,9 @@ void HU_DrawDualTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scoreline
|
||||||
V_DrawSmallScaledPatch(x - SHORT(exiticon->width)/2 - 1, y-3, 0, exiticon);
|
V_DrawSmallScaledPatch(x - SHORT(exiticon->width)/2 - 1, y-3, 0, exiticon);
|
||||||
|
|
||||||
// Draw emeralds
|
// Draw emeralds
|
||||||
if (!players[tab[i].num].powers[pw_super]
|
if (players[tab[i].num].powers[pw_invulnerability] && (players[tab[i].num].powers[pw_invulnerability] == players[tab[i].num].powers[pw_sneakers]) && ((leveltime/7) & 1))
|
||||||
|
HU_DrawEmeralds(x-12,y+2,255);
|
||||||
|
else if (!players[tab[i].num].powers[pw_super]
|
||||||
|| ((leveltime/7) & 1))
|
|| ((leveltime/7) & 1))
|
||||||
{
|
{
|
||||||
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
HU_DrawEmeralds(x-12,y+2,tab[i].emeralds);
|
||||||
|
@ -2724,6 +2793,7 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
INT32 i;
|
INT32 i;
|
||||||
const UINT8 *colormap;
|
const UINT8 *colormap;
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
|
boolean greycheck, supercheck;
|
||||||
|
|
||||||
V_DrawFill(160, 26, 1, 154, 0); //Draw a vertical line to separate the two sides.
|
V_DrawFill(160, 26, 1, 154, 0); //Draw a vertical line to separate the two sides.
|
||||||
V_DrawFill(1, 26, 318, 1, 0); //And a horizontal line to make a T.
|
V_DrawFill(1, 26, 318, 1, 0); //And a horizontal line to make a T.
|
||||||
|
@ -2731,9 +2801,12 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
|
|
||||||
for (i = 0; i < scorelines; i++)
|
for (i = 0; i < scorelines; i++)
|
||||||
{
|
{
|
||||||
if (players[tab[i].num].spectator)
|
if (players[tab[i].num].spectator && gametype != GT_COOP)
|
||||||
continue; //ignore them.
|
continue; //ignore them.
|
||||||
|
|
||||||
|
greycheck = greycheckdef;
|
||||||
|
supercheck = supercheckdef;
|
||||||
|
|
||||||
strlcpy(name, tab[i].name, 7);
|
strlcpy(name, tab[i].name, 7);
|
||||||
if (!splitscreen) // don't draw it on splitscreen,
|
if (!splitscreen) // don't draw it on splitscreen,
|
||||||
{
|
{
|
||||||
|
@ -2745,7 +2818,7 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
|
|
||||||
V_DrawString(x + 10, y,
|
V_DrawString(x + 10, y,
|
||||||
((tab[i].num == whiteplayer) ? V_YELLOWMAP : 0)
|
((tab[i].num == whiteplayer) ? V_YELLOWMAP : 0)
|
||||||
| (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT)
|
| (greycheck ? 0 : V_TRANSLUCENT)
|
||||||
| V_ALLOWLOWERCASE, name);
|
| V_ALLOWLOWERCASE, name);
|
||||||
|
|
||||||
if (G_GametypeUsesLives()) //show lives
|
if (G_GametypeUsesLives()) //show lives
|
||||||
|
@ -2754,7 +2827,12 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
V_DrawFixedPatch((x-10)*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, tagico, 0);
|
V_DrawFixedPatch((x-10)*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, tagico, 0);
|
||||||
|
|
||||||
// Draw emeralds
|
// Draw emeralds
|
||||||
if (!players[tab[i].num].powers[pw_super]
|
if (players[tab[i].num].powers[pw_invulnerability] && (players[tab[i].num].powers[pw_invulnerability] == players[tab[i].num].powers[pw_sneakers]) && ((leveltime/7) & 1))
|
||||||
|
{
|
||||||
|
HU_Draw32Emeralds(x+60, y+2, 255);
|
||||||
|
//HU_DrawEmeralds(x-12,y+2,255);
|
||||||
|
}
|
||||||
|
else if (!players[tab[i].num].powers[pw_super]
|
||||||
|| ((leveltime/7) & 1))
|
|| ((leveltime/7) & 1))
|
||||||
{
|
{
|
||||||
HU_Draw32Emeralds(x+60, y+2, tab[i].emeralds);
|
HU_Draw32Emeralds(x+60, y+2, tab[i].emeralds);
|
||||||
|
@ -2769,7 +2847,7 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], 0);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], 0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((players[tab[i].num].rings <= 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres <= 0 && (maptol & TOL_NIGHTS)))
|
if (greycheck)
|
||||||
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], 0);
|
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], 0);
|
||||||
else
|
else
|
||||||
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], 0);
|
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], 0);
|
||||||
|
@ -2777,7 +2855,7 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (players[tab[i].num].powers[pw_super])
|
if (supercheck)
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT/4, 0, superprefix[players[tab[i].num].skin], colormap);
|
||||||
|
@ -2785,7 +2863,7 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE);
|
||||||
if ((players[tab[i].num].rings <= 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres <= 0 && (maptol & TOL_NIGHTS)))
|
if (greycheck)
|
||||||
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, V_HUDTRANSHALF, faceprefix[players[tab[i].num].skin], colormap);
|
||||||
else
|
else
|
||||||
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], colormap);
|
V_DrawFixedPatch(x*FRACUNIT, (y)*FRACUNIT, FRACUNIT/4, 0, faceprefix[players[tab[i].num].skin], colormap);
|
||||||
|
@ -2800,13 +2878,13 @@ static void HU_Draw32TabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scor
|
||||||
if (players[tab[i].num].exiting)
|
if (players[tab[i].num].exiting)
|
||||||
V_DrawRightAlignedThinString(x+128, y, 0, va("%i:%02i.%02i", G_TicsToMinutes(players[tab[i].num].realtime,true), G_TicsToSeconds(players[tab[i].num].realtime), G_TicsToCentiseconds(players[tab[i].num].realtime)));
|
V_DrawRightAlignedThinString(x+128, y, 0, va("%i:%02i.%02i", G_TicsToMinutes(players[tab[i].num].realtime,true), G_TicsToSeconds(players[tab[i].num].realtime), G_TicsToCentiseconds(players[tab[i].num].realtime)));
|
||||||
else
|
else
|
||||||
V_DrawRightAlignedThinString(x+128, y, (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
V_DrawRightAlignedThinString(x+128, y, (greycheck ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
V_DrawRightAlignedThinString(x+128, y, (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT), va("%i:%02i.%02i", G_TicsToMinutes(tab[i].count,true), G_TicsToSeconds(tab[i].count), G_TicsToCentiseconds(tab[i].count)));
|
V_DrawRightAlignedThinString(x+128, y, (greycheck ? 0 : V_TRANSLUCENT), va("%i:%02i.%02i", G_TicsToMinutes(tab[i].count,true), G_TicsToSeconds(tab[i].count), G_TicsToCentiseconds(tab[i].count)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
V_DrawRightAlignedThinString(x+128, y, (((players[tab[i].num].rings > 0 && !(maptol & TOL_NIGHTS)) || (players[tab[i].num].spheres > 0 && (maptol & TOL_NIGHTS))) ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
V_DrawRightAlignedThinString(x+128, y, (greycheck ? 0 : V_TRANSLUCENT), va("%u", tab[i].count));
|
||||||
|
|
||||||
y += 9;
|
y += 9;
|
||||||
if (i == 16)
|
if (i == 16)
|
||||||
|
@ -3042,7 +3120,7 @@ static void HU_DrawRankings(void)
|
||||||
// shush, we'll do it anyway.
|
// shush, we'll do it anyway.
|
||||||
|
|
||||||
if (G_GametypeHasTeams())
|
if (G_GametypeHasTeams())
|
||||||
HU_DrawTeamTabRankings(tab, whiteplayer); //separate function for Spazzo's silly request
|
HU_DrawTeamTabRankings(tab, whiteplayer);
|
||||||
else if (scorelines <= 9 && !cv_compactscoreboard.value)
|
else if (scorelines <= 9 && !cv_compactscoreboard.value)
|
||||||
HU_DrawTabRankings(40, 32, tab, scorelines, whiteplayer);
|
HU_DrawTabRankings(40, 32, tab, scorelines, whiteplayer);
|
||||||
else if (scorelines <= 20 && !cv_compactscoreboard.value)
|
else if (scorelines <= 20 && !cv_compactscoreboard.value)
|
||||||
|
@ -3101,6 +3179,16 @@ static void HU_DrawNetplayCoopOverlay(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (token
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
|
&& LUA_HudEnabled(hud_tokens)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
V_DrawString(168, 10, 0, va("- %d", token));
|
||||||
|
V_DrawSmallScaledPatch(148, 6, 0, tokenicon);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (!LUA_HudEnabled(hud_coopemeralds))
|
if (!LUA_HudEnabled(hud_coopemeralds))
|
||||||
return;
|
return;
|
||||||
|
@ -3109,7 +3197,7 @@ static void HU_DrawNetplayCoopOverlay(void)
|
||||||
for (i = 0; i < 7; ++i)
|
for (i = 0; i < 7; ++i)
|
||||||
{
|
{
|
||||||
if (emeralds & (1 << i))
|
if (emeralds & (1 << i))
|
||||||
V_DrawScaledPatch(20 + (i * 20), 6, 0, emeraldpics[0][i]);
|
V_DrawScaledPatch(20 + (i * 10), 9, 0, emeraldpics[1][i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue