mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-27 04:41:23 +00:00
Merge branch 'master' into ping-stuff-take2
This commit is contained in:
commit
b1ec0442da
58 changed files with 926 additions and 568 deletions
|
@ -36,12 +36,15 @@ jobs:
|
||||||
- v1-SRB2-APT
|
- v1-SRB2-APT
|
||||||
- run:
|
- run:
|
||||||
name: Install SDK
|
name: Install SDK
|
||||||
command: apt-get -qq -y install git build-essential nasm libpng12-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 gettext ccache wget gcc-multilib upx
|
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
|
||||||
- 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:
|
||||||
|
name: Compile without network support
|
||||||
|
command: make -C src LINUX=1 ERRORMODE=1 -k NONET=1
|
||||||
- run:
|
- run:
|
||||||
name: Clean build
|
name: Clean build
|
||||||
command: make -C src LINUX=1 clean
|
command: make -C src LINUX=1 clean
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -4,7 +4,7 @@ project(libgme)
|
||||||
include (CheckCXXCompilerFlag)
|
include (CheckCXXCompilerFlag)
|
||||||
|
|
||||||
# When version is changed, also change the one in gme/gme.h to match
|
# When version is changed, also change the one in gme/gme.h to match
|
||||||
set(GME_VERSION 0.6.0 CACHE INTERNAL "libgme Version")
|
set(GME_VERSION 0.6.2 CACHE INTERNAL "libgme Version")
|
||||||
|
|
||||||
# 2.6+ always assumes FATAL_ERROR, but 2.4 and below don't.
|
# 2.6+ always assumes FATAL_ERROR, but 2.4 and below don't.
|
||||||
# Of course, 2.4 might work, in which case you're welcome to drop
|
# Of course, 2.4 might work, in which case you're welcome to drop
|
||||||
|
@ -57,6 +57,8 @@ if (USE_GME_NSFE AND NOT USE_GME_NSF)
|
||||||
SET(USE_GME_NSF 1 CACHE BOOL "Enable NES NSF music emulation" FORCE)
|
SET(USE_GME_NSF 1 CACHE BOOL "Enable NES NSF music emulation" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared library (set to OFF for static library)" ON)
|
||||||
|
|
||||||
# Check for GCC "visibility" support.
|
# Check for GCC "visibility" support.
|
||||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
check_cxx_compiler_flag (-fvisibility=hidden __LIBGME_TEST_VISIBILITY)
|
check_cxx_compiler_flag (-fvisibility=hidden __LIBGME_TEST_VISIBILITY)
|
||||||
|
@ -79,10 +81,10 @@ if (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif() # test visibility
|
endif() # test visibility
|
||||||
endif (CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
|
|
||||||
# Cache this result
|
# Cache this result
|
||||||
set( LIBGME_HAVE_GCC_VISIBILITY ${ENABLE_VISIBILITY} CACHE BOOL "GCC support for hidden visibility")
|
set( LIBGME_HAVE_GCC_VISIBILITY ${ENABLE_VISIBILITY} CACHE BOOL "GCC support for hidden visibility")
|
||||||
|
endif (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
|
||||||
# Shared library defined here
|
# Shared library defined here
|
||||||
add_subdirectory(gme)
|
add_subdirectory(gme)
|
||||||
|
|
|
@ -1,262 +1,5 @@
|
||||||
Game_Music_Emu Change Log
|
Game_Music_Emu Change Log
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Game_Music_Emu 0.6.0
|
Please see the git version history (e.g. git shortlog tags/0.6.0..tags/0.6.1)
|
||||||
--------------------
|
for the accurate change log.
|
||||||
|
|
||||||
- Note: A 0.5.6 release was referenced but never tagged or packaged.
|
|
||||||
|
|
||||||
- SPC improvements:
|
|
||||||
- Switched to newer snes_spc 0.9.0 for SPC emulation. Uses fast DSP.
|
|
||||||
- Fixed Spc_Emu::gain().
|
|
||||||
- Fixed support for files <0x10200 bytes.
|
|
||||||
|
|
||||||
- Other bugfixes:
|
|
||||||
- Fixed a couple of GBS bugs, one involving access of memory after
|
|
||||||
realloc.
|
|
||||||
- Blip_Buffer works on systems where 'double' is a single-precision
|
|
||||||
floating-point type.
|
|
||||||
- Fix uninitialized buffer size in dual_resampler.
|
|
||||||
- Compilation warnings squashed out as of clang 3.3-pre and gcc 4.7.2.
|
|
||||||
|
|
||||||
- API changes/additions:
|
|
||||||
- Removed documentation of C++ interface, as the C interface in gme.h is
|
|
||||||
the only supported one.
|
|
||||||
- Added gme_enable_accuracy() for enabling more accurate sound emulation
|
|
||||||
options (currently affects SPC only).
|
|
||||||
|
|
||||||
- Build system improvements:
|
|
||||||
- Add pkg_config support.
|
|
||||||
- Fix build on case-insensitive systems.
|
|
||||||
- Allow for install on Cygwin.
|
|
||||||
- Fix install on multilib systems, such as many 64-bit distros (CMake must
|
|
||||||
be able to figure out your system's libsuffix, if any).
|
|
||||||
- C++ implementation symbols are not leaked into the resultant library
|
|
||||||
file (requires symbol visibility support).
|
|
||||||
|
|
||||||
- Sample player improvements:
|
|
||||||
- Can toggle fast/accurate emulation (with the 'A' key).
|
|
||||||
|
|
||||||
Game_Music_Emu 0.5.5
|
|
||||||
--------------------
|
|
||||||
- CMake build support has been added. You can build Game_Music_Emu as
|
|
||||||
a shared library and install it so that you do not have to include your
|
|
||||||
own copy if you know libgme will be present on your target system.
|
|
||||||
Requires CMake 2.6 or higher.
|
|
||||||
|
|
||||||
|
|
||||||
Game_Music_Emu 0.5.2
|
|
||||||
--------------------
|
|
||||||
- *TONS* of changes and improvements. You should re-read the new header
|
|
||||||
files and documentation as the changes will allow you to simplify your
|
|
||||||
code a lot (it might even be simpler to just rewrite it). Existing code
|
|
||||||
should continue to work without changes in most cases (see Deprecated
|
|
||||||
features in gme.txt).
|
|
||||||
|
|
||||||
- New file formats: AY, HES, KSS, SAP, NSFE
|
|
||||||
|
|
||||||
- All-new comprehensive C interface (also usable from C++). Simplifies
|
|
||||||
many things, especially file loading, and brings everything together in
|
|
||||||
one header file (gme.h).
|
|
||||||
|
|
||||||
- Information tags and track names and times can be accessed for all
|
|
||||||
game music formats
|
|
||||||
|
|
||||||
- New features supported by all emulators: end of track fading,
|
|
||||||
automatic silence detection, adjustable song tempo, seek to new time in
|
|
||||||
track
|
|
||||||
|
|
||||||
- Updated mini player example to support track names and times, echo,
|
|
||||||
tempo, and channel muting, and added visual waveform display
|
|
||||||
|
|
||||||
- Improved configuration to use blargg_config.h, which you can modify
|
|
||||||
and keep when you update to a newer libary version. Includes flag for
|
|
||||||
library to automatically handle gzipped files using zlib (so you don't
|
|
||||||
need to use Gzip_File_Reader anymore).
|
|
||||||
|
|
||||||
- GBS: Fixed wave channel to not reset waveform when APU is powered off
|
|
||||||
(affected Garfield). Also improved invalid bank selection (affected Game
|
|
||||||
& Watch and others).
|
|
||||||
|
|
||||||
- VGM: Added support for alternate noise shifter register
|
|
||||||
configurations, used by other systems like the BBC Micro.
|
|
||||||
|
|
||||||
- SPC: Removed IPL ROM dump from emulator, as none of the SPC files I
|
|
||||||
scanned needed it, and an SPC file can include a copy if necessary. Also
|
|
||||||
re-enabled supposed clamping in gaussian interpolation between the third
|
|
||||||
and fourth lookups, though I don't know whether it matters
|
|
||||||
|
|
||||||
- Added Music_Emu::load_mem() to use music data already in memory
|
|
||||||
(without copying it)
|
|
||||||
|
|
||||||
- Added Music_Emu::warning(), which reports minor problems when loading
|
|
||||||
and playing a music file
|
|
||||||
|
|
||||||
- Added Music_Emu::set_gain() for uniform adjustment of gain. Can only
|
|
||||||
be set during initialization, so not useful as a general volume control.
|
|
||||||
|
|
||||||
- Added custom operator new to ensure that no exceptions are thrown in
|
|
||||||
the library (I'd use std::nothrow if it were part of pre-ISO (ARM) C++)
|
|
||||||
|
|
||||||
- Added BLIP_BUFFER_FAST flag to blargg_config.h to use a lower quality
|
|
||||||
bandlimited synthesis in "classic" emulators, which might help
|
|
||||||
performance on ancient processors (measure first!). Don't use this
|
|
||||||
unless absolutely necessary, as quality suffers.
|
|
||||||
|
|
||||||
- Improved performance a bit for x86 platforms
|
|
||||||
|
|
||||||
- Text files now in DOS newline format so they will open in Notepad
|
|
||||||
properly
|
|
||||||
|
|
||||||
- Removed requirement that file header structures not have any padding
|
|
||||||
added to the end
|
|
||||||
|
|
||||||
- Fixed common bug in all CPU emulators where negative program counter
|
|
||||||
could crash emulator (occurred during a negative branch from the
|
|
||||||
beginning of memory). Also fixed related bug in Z80 emulator for
|
|
||||||
IX/IY+displacement mode.
|
|
||||||
|
|
||||||
- Eliminated all warnings when compiling on gcc 4.0. The following
|
|
||||||
generates no diagnostics:
|
|
||||||
|
|
||||||
gcc -S gme/*.cpp -o /dev/null -ansi -fno-gnu-keywords
|
|
||||||
-fno-nonansi-builtins -pedantic -W -Wabi -Wall -Wcast-align
|
|
||||||
-Wcast-qual -Wchar-subscripts -Wdisabled-optimization -Werror
|
|
||||||
-Winline -Wlong-long -Wmultichar -Winvalid-offsetof
|
|
||||||
-Wnon-virtual-dtor -Woverloaded-virtual -Wparentheses
|
|
||||||
-Wpointer-arith -Wredundant-decls -Wreorder -Wsign-compare
|
|
||||||
-Wsign-promo -Wunknown-pragmas -Wwrite-strings
|
|
||||||
|
|
||||||
|
|
||||||
Game_Music_Emu 0.3.0
|
|
||||||
--------------------
|
|
||||||
- Added more demos, including music player using the SDL multimedia
|
|
||||||
library for sound, and improved documentation
|
|
||||||
|
|
||||||
- All: Improved interface to emulators to allow simpler setup and
|
|
||||||
loading. Instead of various init() functions, all now support
|
|
||||||
set_sample_rate( long rate ) and load( const char* file_path ).
|
|
||||||
|
|
||||||
- All: Removed error return from start_track() and play(), and added
|
|
||||||
error_count() to get the total number of emulation errors since the
|
|
||||||
track was last started. See demos for examples of new usage.
|
|
||||||
|
|
||||||
- All: Fixed mute_voices() muting to be preserved after loading files
|
|
||||||
and starting tracks, instead of being cleared as it was whenever a track
|
|
||||||
was started
|
|
||||||
|
|
||||||
- VGM: Rewrote Vgm_Emu to support Sega Genesis/Mega Drive FM sound at
|
|
||||||
any sample rate with optional FM oversampling, support for alternate
|
|
||||||
YM2612 sound cores, and support for optional YM2413
|
|
||||||
|
|
||||||
- VGM: Added tempo control, useful for slowing 60Hz NTSC Sega Genesis
|
|
||||||
music to 50Hz PAL
|
|
||||||
|
|
||||||
- VGM: Removed Vgm_Emu::track_data(), since I realized that this
|
|
||||||
information is already present in the VGM header (oops!)
|
|
||||||
|
|
||||||
- GYM: Changed Gym_Emu::track_length() operation (see Gym_Emu.h)
|
|
||||||
|
|
||||||
- NSF: Added support for Sunsoft FME-7 sound chip used by Gimmick
|
|
||||||
soundtrack
|
|
||||||
|
|
||||||
- NSF: Fixed Namco 106 problems with Final Lap and others
|
|
||||||
|
|
||||||
- Moved library sources to gme/ directory to reduce clutter, and merged
|
|
||||||
boost/ functionality into blargg_common.h
|
|
||||||
|
|
||||||
- Added Gzip_File_Reader for transparently using gzipped files
|
|
||||||
|
|
||||||
|
|
||||||
Game_Music_Emu 0.2.4
|
|
||||||
--------------------
|
|
||||||
- Created a discussion forum for problems and feedback:
|
|
||||||
http://groups-beta.google.com/group/blargg-sound-libs
|
|
||||||
|
|
||||||
- Changed error return value of Blip_Buffer::sample_rate() (also for
|
|
||||||
Stereo_Buffer, Effects_Buffer, etc.) to blargg_err_t (defined in
|
|
||||||
blargg_common.h), to make error reporting consistent with other
|
|
||||||
functions. This means the "no error" return value is the opposite of
|
|
||||||
what it was before, which will break current code which checks the error
|
|
||||||
return value:
|
|
||||||
|
|
||||||
// current code (broken)
|
|
||||||
if ( !buf.sample_rate( samples_per_sec ) )
|
|
||||||
out_of_memory();
|
|
||||||
|
|
||||||
// quick-and-dirty fix (just remove the ! operation)
|
|
||||||
if ( buf.sample_rate( samples_per_sec ) )
|
|
||||||
out_of_memory();
|
|
||||||
|
|
||||||
// proper fix
|
|
||||||
blargg_err_t error = buf.sample_rate( samples_per_sec );
|
|
||||||
if ( error )
|
|
||||||
report_error( error );
|
|
||||||
|
|
||||||
- Implemented workaround for MSVC++ 6 compiler limitations, allowing it
|
|
||||||
to work on that compiler again
|
|
||||||
|
|
||||||
- Added sample clamping to avoid wrap-around at high volumes, allowing
|
|
||||||
higher volume with little distortion
|
|
||||||
|
|
||||||
- Added to-do list and design notes
|
|
||||||
|
|
||||||
- Added Music_Emu::skip( long sample_count ) to skip ahead in current
|
|
||||||
track
|
|
||||||
|
|
||||||
- Added Gym_Emu::track_length() and Vgm_Emu::track_length() for
|
|
||||||
determining the length of non-looped GYM and VGM files
|
|
||||||
|
|
||||||
- Partially implemented DMC non-linearity when its value is directly set
|
|
||||||
using $4011, which reduces previously over-emphasized "popping" of
|
|
||||||
percussion on some games (TMNT II in particular)
|
|
||||||
|
|
||||||
- Fixed Fir_Resampler, used for SPC and GYM playback (was incorrectly
|
|
||||||
using abs() instead of fabs()...argh)
|
|
||||||
|
|
||||||
- Fixed SPC emulation bugs: eliminated clicks in Plok! soundtrack and
|
|
||||||
now stops sample slightly earlier than the end, as the SNES does. Fixed
|
|
||||||
a totally broken CPU addressing mode.
|
|
||||||
|
|
||||||
- Fixed Konami VRC6 saw wave (was very broken before). Now VRC6 music
|
|
||||||
sounds decent
|
|
||||||
|
|
||||||
- Fixed a minor GBS emulation bug
|
|
||||||
|
|
||||||
- Fixed GYM loop point bug when track was restarted before loop point
|
|
||||||
had been reached
|
|
||||||
|
|
||||||
- Made default GBS frequency equalization less muffled
|
|
||||||
|
|
||||||
- Added pseudo-surround effect removal for SPC files
|
|
||||||
|
|
||||||
- Added Music_Emu::voice_names() which returns names for each voice.
|
|
||||||
|
|
||||||
- Added BLARGG_SOURCE_BEGIN which allows custom compiler options to be
|
|
||||||
easily set for library sources
|
|
||||||
|
|
||||||
- Changed assignment of expansion sound chips in Nsf_Emu to be spread
|
|
||||||
more evenly when using Effects_Buffer
|
|
||||||
|
|
||||||
- Changed 'size_t' values in Blip_Buffer interface to 'long'
|
|
||||||
|
|
||||||
- Changed demo to generate a WAVE sound file rather than an AIFF file
|
|
||||||
|
|
||||||
|
|
||||||
Game_Music_Emu 0.2.0
|
|
||||||
--------------------
|
|
||||||
- Redid framework and rewrote/cleaned up emulators
|
|
||||||
|
|
||||||
- Changed licensing to GNU Lesser General Public License (LGPL)
|
|
||||||
|
|
||||||
- Added Sega Genesis GYM and Super Nintendo SPC emulators
|
|
||||||
|
|
||||||
- Added Namco-106 and Konami VRC6 sound chip support to NSF emulator
|
|
||||||
|
|
||||||
- Eliminated use of static mutable data in emulators, allowing
|
|
||||||
multi-instance safety
|
|
||||||
|
|
||||||
|
|
||||||
Game_Music_Emu 0.1.0
|
|
||||||
--------------------
|
|
||||||
- First release
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
/* C example that opens a game music file and records 10 seconds to "out.wav" */
|
/* C example that opens a game music file and records 10 seconds to "out.wav" */
|
||||||
|
|
||||||
static char filename [] = "test.nsf"; /* opens this file (can be any music type) */
|
|
||||||
|
|
||||||
#include "gme/gme.h"
|
#include "gme/gme.h"
|
||||||
|
|
||||||
#include "Wave_Writer.h" /* wave_ functions for writing sound file */
|
#include "Wave_Writer.h" /* wave_ functions for writing sound file */
|
||||||
|
@ -10,10 +8,15 @@ static char filename [] = "test.nsf"; /* opens this file (can be any music type)
|
||||||
|
|
||||||
void handle_error( const char* str );
|
void handle_error( const char* str );
|
||||||
|
|
||||||
int main()
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
const char *filename = "test.nsf"; /* Default file to open */
|
||||||
|
if ( argc >= 2 )
|
||||||
|
filename = argv[1];
|
||||||
|
|
||||||
long sample_rate = 44100; /* number of samples per second */
|
long sample_rate = 44100; /* number of samples per second */
|
||||||
int track = 0; /* index of track to play (0 = first) */
|
/* index of track to play (0 = first) */
|
||||||
|
int track = argc >= 3 ? atoi(argv[2]) : 0;
|
||||||
|
|
||||||
/* Open music file in new emulator */
|
/* Open music file in new emulator */
|
||||||
Music_Emu* emu;
|
Music_Emu* emu;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// C++ example that opens a game music file and records 10 seconds to "out.wav"
|
// C++ example that opens a game music file and records 10 seconds to "out.wav"
|
||||||
|
|
||||||
static char filename [] = "test.nsf"; /* opens this file (can be any music type) */
|
|
||||||
|
|
||||||
#include "gme/Music_Emu.h"
|
#include "gme/Music_Emu.h"
|
||||||
|
|
||||||
#include "Wave_Writer.h"
|
#include "Wave_Writer.h"
|
||||||
|
@ -10,10 +8,15 @@ static char filename [] = "test.nsf"; /* opens this file (can be any music type)
|
||||||
|
|
||||||
void handle_error( const char* str );
|
void handle_error( const char* str );
|
||||||
|
|
||||||
int main()
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
const char *filename = "test.nsf"; /* Default file to open */
|
||||||
|
if ( argc >= 2 )
|
||||||
|
filename = argv[1];
|
||||||
|
|
||||||
long sample_rate = 44100; // number of samples per second
|
long sample_rate = 44100; // number of samples per second
|
||||||
int track = 0; // index of track to play (0 = first)
|
// index of track to play (0 = first)
|
||||||
|
int track = argc >= 3 ? atoi(argv[2]) : 0;
|
||||||
|
|
||||||
// Determine file type
|
// Determine file type
|
||||||
gme_type_t file_type;
|
gme_type_t file_type;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
Game_Music_Emu 0.6.0
|
Game_Music_Emu 0.6.2
|
||||||
--------------------
|
--------------------
|
||||||
Author : Shay Green <gblargg@gmail.com>
|
Author : Shay Green <gblargg@gmail.com>
|
||||||
Website: http://www.slack.net/~ant/libs/
|
Maintainer : Michael Pyne <mpyne@purinchu.net>
|
||||||
Forum : http://groups.google.com/group/blargg-sound-libs
|
Website : https://bitbucket.org/mpyne/game-music-emu/
|
||||||
Source : https://code.google.com/p/game-music-emu/
|
Source : https://bitbucket.org/mpyne/game-music-emu/
|
||||||
License: GNU Lesser General Public License (LGPL)
|
License : GNU Lesser General Public License (LGPL), see LICENSE.txt
|
||||||
|
|
||||||
Contents
|
Contents
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -143,7 +143,7 @@ add_definitions(-DBLARGG_BUILD_DLL)
|
||||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
# Add library to be compiled.
|
# Add library to be compiled.
|
||||||
add_library(gme SHARED ${libgme_SRCS})
|
add_library(gme ${libgme_SRCS})
|
||||||
|
|
||||||
# The version is the release. The "soversion" is the API version. As long
|
# The version is the release. The "soversion" is the API version. As long
|
||||||
# as only build fixes are performed (i.e. no backwards-incompatible changes
|
# as only build fixes are performed (i.e. no backwards-incompatible changes
|
||||||
|
@ -159,4 +159,4 @@ install(TARGETS gme LIBRARY DESTINATION lib${LIB_SUFFIX}
|
||||||
ARCHIVE DESTINATION lib) # DLL platforms
|
ARCHIVE DESTINATION lib) # DLL platforms
|
||||||
|
|
||||||
install(FILES ${EXPORTED_HEADERS} DESTINATION include/gme)
|
install(FILES ${EXPORTED_HEADERS} DESTINATION include/gme)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgme.pc DESTINATION lib/pkgconfig)
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgme.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
|
||||||
|
|
|
@ -22,8 +22,13 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||||
|
|
||||||
const char Data_Reader::eof_error [] = "Unexpected end of file";
|
const char Data_Reader::eof_error [] = "Unexpected end of file";
|
||||||
|
|
||||||
|
#define RETURN_VALIDITY_CHECK( cond ) \
|
||||||
|
do { if ( unlikely( !(cond) ) ) return "Corrupt file"; } while(0)
|
||||||
|
|
||||||
blargg_err_t Data_Reader::read( void* p, long s )
|
blargg_err_t Data_Reader::read( void* p, long s )
|
||||||
{
|
{
|
||||||
|
RETURN_VALIDITY_CHECK( s > 0 );
|
||||||
|
|
||||||
long result = read_avail( p, s );
|
long result = read_avail( p, s );
|
||||||
if ( result != s )
|
if ( result != s )
|
||||||
{
|
{
|
||||||
|
@ -38,6 +43,8 @@ blargg_err_t Data_Reader::read( void* p, long s )
|
||||||
|
|
||||||
blargg_err_t Data_Reader::skip( long count )
|
blargg_err_t Data_Reader::skip( long count )
|
||||||
{
|
{
|
||||||
|
RETURN_VALIDITY_CHECK( count >= 0 );
|
||||||
|
|
||||||
char buf [512];
|
char buf [512];
|
||||||
while ( count )
|
while ( count )
|
||||||
{
|
{
|
||||||
|
@ -54,7 +61,8 @@ long File_Reader::remain() const { return size() - tell(); }
|
||||||
|
|
||||||
blargg_err_t File_Reader::skip( long n )
|
blargg_err_t File_Reader::skip( long n )
|
||||||
{
|
{
|
||||||
assert( n >= 0 );
|
RETURN_VALIDITY_CHECK( n >= 0 );
|
||||||
|
|
||||||
if ( !n )
|
if ( !n )
|
||||||
return 0;
|
return 0;
|
||||||
return seek( tell() + n );
|
return seek( tell() + n );
|
||||||
|
@ -67,13 +75,14 @@ Subset_Reader::Subset_Reader( Data_Reader* dr, long size )
|
||||||
in = dr;
|
in = dr;
|
||||||
remain_ = dr->remain();
|
remain_ = dr->remain();
|
||||||
if ( remain_ > size )
|
if ( remain_ > size )
|
||||||
remain_ = size;
|
remain_ = max( 0l, size );
|
||||||
}
|
}
|
||||||
|
|
||||||
long Subset_Reader::remain() const { return remain_; }
|
long Subset_Reader::remain() const { return remain_; }
|
||||||
|
|
||||||
long Subset_Reader::read_avail( void* p, long s )
|
long Subset_Reader::read_avail( void* p, long s )
|
||||||
{
|
{
|
||||||
|
s = max( 0l, s );
|
||||||
if ( s > remain_ )
|
if ( s > remain_ )
|
||||||
s = remain_;
|
s = remain_;
|
||||||
remain_ -= s;
|
remain_ -= s;
|
||||||
|
@ -85,7 +94,7 @@ long Subset_Reader::read_avail( void* p, long s )
|
||||||
Remaining_Reader::Remaining_Reader( void const* h, long size, Data_Reader* r )
|
Remaining_Reader::Remaining_Reader( void const* h, long size, Data_Reader* r )
|
||||||
{
|
{
|
||||||
header = (char const*) h;
|
header = (char const*) h;
|
||||||
header_end = header + size;
|
header_end = header + max( 0l, size );
|
||||||
in = r;
|
in = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +102,7 @@ long Remaining_Reader::remain() const { return header_end - header + in->remain(
|
||||||
|
|
||||||
long Remaining_Reader::read_first( void* out, long count )
|
long Remaining_Reader::read_first( void* out, long count )
|
||||||
{
|
{
|
||||||
|
count = max( 0l, count );
|
||||||
long first = header_end - header;
|
long first = header_end - header;
|
||||||
if ( first )
|
if ( first )
|
||||||
{
|
{
|
||||||
|
@ -107,8 +117,9 @@ long Remaining_Reader::read_first( void* out, long count )
|
||||||
|
|
||||||
long Remaining_Reader::read_avail( void* out, long count )
|
long Remaining_Reader::read_avail( void* out, long count )
|
||||||
{
|
{
|
||||||
|
count = max( 0l, count );
|
||||||
long first = read_first( out, count );
|
long first = read_first( out, count );
|
||||||
long second = count - first;
|
long second = max( 0l, count - first );
|
||||||
if ( second )
|
if ( second )
|
||||||
{
|
{
|
||||||
second = in->read_avail( (char*) out + first, second );
|
second = in->read_avail( (char*) out + first, second );
|
||||||
|
@ -120,8 +131,9 @@ long Remaining_Reader::read_avail( void* out, long count )
|
||||||
|
|
||||||
blargg_err_t Remaining_Reader::read( void* out, long count )
|
blargg_err_t Remaining_Reader::read( void* out, long count )
|
||||||
{
|
{
|
||||||
|
count = max( 0l, count );
|
||||||
long first = read_first( out, count );
|
long first = read_first( out, count );
|
||||||
long second = count - first;
|
long second = max( 0l, count - first );
|
||||||
if ( !second )
|
if ( !second )
|
||||||
return 0;
|
return 0;
|
||||||
return in->read( (char*) out + first, second );
|
return in->read( (char*) out + first, second );
|
||||||
|
@ -131,7 +143,7 @@ blargg_err_t Remaining_Reader::read( void* out, long count )
|
||||||
|
|
||||||
Mem_File_Reader::Mem_File_Reader( const void* p, long s ) :
|
Mem_File_Reader::Mem_File_Reader( const void* p, long s ) :
|
||||||
begin( (const char*) p ),
|
begin( (const char*) p ),
|
||||||
size_( s )
|
size_( max( 0l, s ) )
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
}
|
}
|
||||||
|
@ -141,6 +153,7 @@ long Mem_File_Reader::size() const { return size_; }
|
||||||
long Mem_File_Reader::read_avail( void* p, long s )
|
long Mem_File_Reader::read_avail( void* p, long s )
|
||||||
{
|
{
|
||||||
long r = remain();
|
long r = remain();
|
||||||
|
s = max( 0l, s );
|
||||||
if ( s > r )
|
if ( s > r )
|
||||||
s = r;
|
s = r;
|
||||||
memcpy( p, begin + pos, s );
|
memcpy( p, begin + pos, s );
|
||||||
|
@ -152,6 +165,7 @@ long Mem_File_Reader::tell() const { return pos; }
|
||||||
|
|
||||||
blargg_err_t Mem_File_Reader::seek( long n )
|
blargg_err_t Mem_File_Reader::seek( long n )
|
||||||
{
|
{
|
||||||
|
RETURN_VALIDITY_CHECK( n >= 0 );
|
||||||
if ( n > size_ )
|
if ( n > size_ )
|
||||||
return eof_error;
|
return eof_error;
|
||||||
pos = n;
|
pos = n;
|
||||||
|
@ -164,7 +178,7 @@ Callback_Reader::Callback_Reader( callback_t c, long size, void* d ) :
|
||||||
callback( c ),
|
callback( c ),
|
||||||
data( d )
|
data( d )
|
||||||
{
|
{
|
||||||
remain_ = size;
|
remain_ = max( 0l, size );
|
||||||
}
|
}
|
||||||
|
|
||||||
long Callback_Reader::remain() const { return remain_; }
|
long Callback_Reader::remain() const { return remain_; }
|
||||||
|
@ -173,13 +187,14 @@ long Callback_Reader::read_avail( void* out, long count )
|
||||||
{
|
{
|
||||||
if ( count > remain_ )
|
if ( count > remain_ )
|
||||||
count = remain_;
|
count = remain_;
|
||||||
if ( Callback_Reader::read( out, count ) )
|
if ( count < 0 || Callback_Reader::read( out, count ) )
|
||||||
count = -1;
|
count = -1;
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
blargg_err_t Callback_Reader::read( void* out, long count )
|
blargg_err_t Callback_Reader::read( void* out, long count )
|
||||||
{
|
{
|
||||||
|
RETURN_VALIDITY_CHECK( count >= 0 );
|
||||||
if ( count > remain_ )
|
if ( count > remain_ )
|
||||||
return eof_error;
|
return eof_error;
|
||||||
return callback( data, out, count );
|
return callback( data, out, count );
|
||||||
|
@ -210,11 +225,12 @@ long Std_File_Reader::size() const
|
||||||
|
|
||||||
long Std_File_Reader::read_avail( void* p, long s )
|
long Std_File_Reader::read_avail( void* p, long s )
|
||||||
{
|
{
|
||||||
return fread( p, 1, s, (FILE*) file_ );
|
return fread( p, 1, max( 0l, s ), (FILE*) file_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
blargg_err_t Std_File_Reader::read( void* p, long s )
|
blargg_err_t Std_File_Reader::read( void* p, long s )
|
||||||
{
|
{
|
||||||
|
RETURN_VALIDITY_CHECK( s > 0 );
|
||||||
if ( s == (long) fread( p, 1, s, (FILE*) file_ ) )
|
if ( s == (long) fread( p, 1, s, (FILE*) file_ ) )
|
||||||
return 0;
|
return 0;
|
||||||
if ( feof( (FILE*) file_ ) )
|
if ( feof( (FILE*) file_ ) )
|
||||||
|
|
|
@ -129,6 +129,8 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_ZLIB_H
|
#ifdef HAVE_ZLIB_H
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
// Gzip compressed file reader
|
// Gzip compressed file reader
|
||||||
class Gzip_File_Reader : public File_Reader {
|
class Gzip_File_Reader : public File_Reader {
|
||||||
public:
|
public:
|
||||||
|
@ -143,7 +145,7 @@ public:
|
||||||
long tell() const;
|
long tell() const;
|
||||||
blargg_err_t seek( long );
|
blargg_err_t seek( long );
|
||||||
private:
|
private:
|
||||||
void* file_;
|
gzFile file_;
|
||||||
long size_;
|
long size_;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -178,6 +178,11 @@ blargg_long Music_Emu::msec_to_samples( blargg_long msec ) const
|
||||||
return (sec * sample_rate() + msec * sample_rate() / 1000) * stereo;
|
return (sec * sample_rate() + msec * sample_rate() / 1000) * stereo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long Music_Emu::tell_samples() const
|
||||||
|
{
|
||||||
|
return out_time;
|
||||||
|
}
|
||||||
|
|
||||||
long Music_Emu::tell() const
|
long Music_Emu::tell() const
|
||||||
{
|
{
|
||||||
blargg_long rate = sample_rate() * stereo;
|
blargg_long rate = sample_rate() * stereo;
|
||||||
|
@ -185,14 +190,18 @@ long Music_Emu::tell() const
|
||||||
return sec * 1000 + (out_time - sec * rate) * 1000 / rate;
|
return sec * 1000 + (out_time - sec * rate) * 1000 / rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
blargg_err_t Music_Emu::seek( long msec )
|
blargg_err_t Music_Emu::seek_samples( long time )
|
||||||
{
|
{
|
||||||
blargg_long time = msec_to_samples( msec );
|
|
||||||
if ( time < out_time )
|
if ( time < out_time )
|
||||||
RETURN_ERR( start_track( current_track_ ) );
|
RETURN_ERR( start_track( current_track_ ) );
|
||||||
return skip( time - out_time );
|
return skip( time - out_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blargg_err_t Music_Emu::seek( long msec )
|
||||||
|
{
|
||||||
|
return seek_samples( msec_to_samples( msec ) );
|
||||||
|
}
|
||||||
|
|
||||||
blargg_err_t Music_Emu::skip( long count )
|
blargg_err_t Music_Emu::skip( long count )
|
||||||
{
|
{
|
||||||
require( current_track() >= 0 ); // start_track() must have been called already
|
require( current_track() >= 0 ); // start_track() must have been called already
|
||||||
|
|
|
@ -41,9 +41,15 @@ public:
|
||||||
// Number of milliseconds (1000 msec = 1 second) played since beginning of track
|
// Number of milliseconds (1000 msec = 1 second) played since beginning of track
|
||||||
long tell() const;
|
long tell() const;
|
||||||
|
|
||||||
|
// Number of samples generated since beginning of track
|
||||||
|
long tell_samples() const;
|
||||||
|
|
||||||
// Seek to new time in track. Seeking backwards or far forward can take a while.
|
// Seek to new time in track. Seeking backwards or far forward can take a while.
|
||||||
blargg_err_t seek( long msec );
|
blargg_err_t seek( long msec );
|
||||||
|
|
||||||
|
// Equivalent to restarting track then skipping n samples
|
||||||
|
blargg_err_t seek_samples( long n );
|
||||||
|
|
||||||
// Skip n samples
|
// Skip n samples
|
||||||
blargg_err_t skip( long n );
|
blargg_err_t skip( long n );
|
||||||
|
|
||||||
|
|
|
@ -135,6 +135,9 @@ blargg_err_t Nsfe_Info::load( Data_Reader& in, Nsf_Emu* nsf_emu )
|
||||||
blargg_long size = get_le32( block_header [0] );
|
blargg_long size = get_le32( block_header [0] );
|
||||||
blargg_long tag = get_le32( block_header [1] );
|
blargg_long tag = get_le32( block_header [1] );
|
||||||
|
|
||||||
|
if ( size <= 0 )
|
||||||
|
return "Corrupt file";
|
||||||
|
|
||||||
//debug_printf( "tag: %c%c%c%c\n", char(tag), char(tag>>8), char(tag>>16), char(tag>>24) );
|
//debug_printf( "tag: %c%c%c%c\n", char(tag), char(tag>>8), char(tag>>16), char(tag>>24) );
|
||||||
|
|
||||||
switch ( tag )
|
switch ( tag )
|
||||||
|
|
|
@ -433,9 +433,7 @@ void Snes_Spc::cpu_write( int data, int addr, rel_time_t time )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Registers other than $F2 and $F4-$F7
|
// Registers other than $F2 and $F4-$F7
|
||||||
//if ( reg != 2 && reg != 4 && reg != 5 && reg != 6 && reg != 7 )
|
if ( reg != 2 && (reg < 4 || reg > 7) ) // 36%
|
||||||
// TODO: this is a bit on the fragile side
|
|
||||||
if ( ((~0x2F00 << (bits_in_int - 16)) << reg) < 0 ) // 36%
|
|
||||||
cpu_write_smp_reg( data, time, reg );
|
cpu_write_smp_reg( data, time, reg );
|
||||||
}
|
}
|
||||||
// High mem/address wrap-around
|
// High mem/address wrap-around
|
||||||
|
|
|
@ -76,8 +76,8 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||||
// TODO: remove non-wrapping versions?
|
// TODO: remove non-wrapping versions?
|
||||||
#define SPC_NO_SP_WRAPAROUND 0
|
#define SPC_NO_SP_WRAPAROUND 0
|
||||||
|
|
||||||
#define SET_SP( v ) (sp = ram + 0x101 + (v))
|
#define SET_SP( v ) (sp = ram + 0x101 + ((uint8_t) v))
|
||||||
#define GET_SP() (sp - 0x101 - ram)
|
#define GET_SP() (uint8_t (sp - 0x101 - ram))
|
||||||
|
|
||||||
#if SPC_NO_SP_WRAPAROUND
|
#if SPC_NO_SP_WRAPAROUND
|
||||||
#define PUSH16( v ) (sp -= 2, SET_LE16( sp, v ))
|
#define PUSH16( v ) (sp -= 2, SET_LE16( sp, v ))
|
||||||
|
@ -485,7 +485,7 @@ loop:
|
||||||
|
|
||||||
case 0xAF: // MOV (X)+,A
|
case 0xAF: // MOV (X)+,A
|
||||||
WRITE_DP( 0, x, a + no_read_before_write );
|
WRITE_DP( 0, x, a + no_read_before_write );
|
||||||
x++;
|
x = (uint8_t) (x + 1);
|
||||||
goto loop;
|
goto loop;
|
||||||
|
|
||||||
// 5. 8-BIT LOGIC OPERATION COMMANDS
|
// 5. 8-BIT LOGIC OPERATION COMMANDS
|
||||||
|
@ -808,7 +808,7 @@ loop:
|
||||||
unsigned temp = y * a;
|
unsigned temp = y * a;
|
||||||
a = (uint8_t) temp;
|
a = (uint8_t) temp;
|
||||||
nz = ((temp >> 1) | temp) & 0x7F;
|
nz = ((temp >> 1) | temp) & 0x7F;
|
||||||
y = temp >> 8;
|
y = (uint8_t) (temp >> 8);
|
||||||
nz |= y;
|
nz |= y;
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
@ -838,6 +838,7 @@ loop:
|
||||||
|
|
||||||
nz = (uint8_t) a;
|
nz = (uint8_t) a;
|
||||||
a = (uint8_t) a;
|
a = (uint8_t) a;
|
||||||
|
y = (uint8_t) y;
|
||||||
|
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
@ -1004,7 +1005,7 @@ loop:
|
||||||
case 0x7F: // RET1
|
case 0x7F: // RET1
|
||||||
temp = *sp;
|
temp = *sp;
|
||||||
SET_PC( GET_LE16( sp + 1 ) );
|
SET_PC( GET_LE16( sp + 1 ) );
|
||||||
sp += 3;
|
SET_SP( GET_SP() + 3 );
|
||||||
goto set_psw;
|
goto set_psw;
|
||||||
case 0x8E: // POP PSW
|
case 0x8E: // POP PSW
|
||||||
POP( temp );
|
POP( temp );
|
||||||
|
|
|
@ -18,6 +18,19 @@ all other #include lines. */
|
||||||
#undef require
|
#undef require
|
||||||
#define require( expr ) assert( expr )
|
#define require( expr ) assert( expr )
|
||||||
|
|
||||||
|
// Use to provide hints to compiler for optimized code layout in situations where we
|
||||||
|
// can almost always expect a conditional to go one way or the other. Should only be
|
||||||
|
// used in situations where an unexpected branch is truly exceptional though!
|
||||||
|
#undef likely
|
||||||
|
#undef unlikely
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define likely( x ) __builtin_expect(x, 1)
|
||||||
|
#define unlikely( x ) __builtin_expect(x, 0)
|
||||||
|
#else
|
||||||
|
#define likely( x ) (x)
|
||||||
|
#define unlikely( x ) (x)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Like printf() except output goes to debug log file. Might be defined to do
|
// Like printf() except output goes to debug log file. Might be defined to do
|
||||||
// nothing (not even evaluate its arguments).
|
// nothing (not even evaluate its arguments).
|
||||||
// void debug_printf( const char* format, ... );
|
// void debug_printf( const char* format, ... );
|
||||||
|
|
|
@ -337,7 +337,9 @@ BLARGG_EXPORT gme_err_t gme_play ( Music_Emu* me, int n, short* p )
|
||||||
BLARGG_EXPORT void gme_set_fade ( Music_Emu* me, int start_msec ) { me->set_fade( start_msec ); }
|
BLARGG_EXPORT void gme_set_fade ( Music_Emu* me, int start_msec ) { me->set_fade( start_msec ); }
|
||||||
BLARGG_EXPORT int gme_track_ended ( Music_Emu const* me ) { return me->track_ended(); }
|
BLARGG_EXPORT int gme_track_ended ( Music_Emu const* me ) { return me->track_ended(); }
|
||||||
BLARGG_EXPORT int gme_tell ( Music_Emu const* me ) { return me->tell(); }
|
BLARGG_EXPORT int gme_tell ( Music_Emu const* me ) { return me->tell(); }
|
||||||
|
BLARGG_EXPORT int gme_tell_samples ( Music_Emu const* me ) { return me->tell_samples(); }
|
||||||
BLARGG_EXPORT gme_err_t gme_seek ( Music_Emu* me, int msec ) { return me->seek( msec ); }
|
BLARGG_EXPORT gme_err_t gme_seek ( Music_Emu* me, int msec ) { return me->seek( msec ); }
|
||||||
|
BLARGG_EXPORT gme_err_t gme_seek_samples ( Music_Emu* me, int n ) { return me->seek_samples( n ); }
|
||||||
BLARGG_EXPORT int gme_voice_count ( Music_Emu const* me ) { return me->voice_count(); }
|
BLARGG_EXPORT int gme_voice_count ( Music_Emu const* me ) { return me->voice_count(); }
|
||||||
BLARGG_EXPORT void gme_ignore_silence ( Music_Emu* me, int disable ) { me->ignore_silence( disable != 0 ); }
|
BLARGG_EXPORT void gme_ignore_silence ( Music_Emu* me, int disable ) { me->ignore_silence( disable != 0 ); }
|
||||||
BLARGG_EXPORT void gme_set_tempo ( Music_Emu* me, double t ) { me->set_tempo( t ); }
|
BLARGG_EXPORT void gme_set_tempo ( Music_Emu* me, double t ) { me->set_tempo( t ); }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Game music emulator library C interface (also usable from C++) */
|
/* Game music emulator library C interface (also usable from C++) */
|
||||||
|
|
||||||
/* Game_Music_Emu 0.6.0 */
|
/* Game_Music_Emu 0.6.1 */
|
||||||
#ifndef GME_H
|
#ifndef GME_H
|
||||||
#define GME_H
|
#define GME_H
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GME_VERSION 0x000600 /* 1 byte major, 1 byte minor, 1 byte patch-level */
|
#define GME_VERSION 0x000601 /* 1 byte major, 1 byte minor, 1 byte patch-level */
|
||||||
|
|
||||||
/* Error string returned by library functions, or NULL if no error (success) */
|
/* Error string returned by library functions, or NULL if no error (success) */
|
||||||
typedef const char* gme_err_t;
|
typedef const char* gme_err_t;
|
||||||
|
@ -47,9 +47,15 @@ int gme_track_ended( Music_Emu const* );
|
||||||
/* Number of milliseconds (1000 = one second) played since beginning of track */
|
/* Number of milliseconds (1000 = one second) played since beginning of track */
|
||||||
int gme_tell( Music_Emu const* );
|
int gme_tell( Music_Emu const* );
|
||||||
|
|
||||||
|
/* Number of samples generated since beginning of track */
|
||||||
|
int gme_tell_samples( Music_Emu const* );
|
||||||
|
|
||||||
/* Seek to new time in track. Seeking backwards or far forward can take a while. */
|
/* Seek to new time in track. Seeking backwards or far forward can take a while. */
|
||||||
gme_err_t gme_seek( Music_Emu*, int msec );
|
gme_err_t gme_seek( Music_Emu*, int msec );
|
||||||
|
|
||||||
|
/* Equivalent to restarting track then skipping n samples */
|
||||||
|
gme_err_t gme_seek_samples( Music_Emu*, int n );
|
||||||
|
|
||||||
|
|
||||||
/******** Informational ********/
|
/******** Informational ********/
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# later are used by pkg-config.
|
# later are used by pkg-config.
|
||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
lib_suffix=
|
lib_suffix=@LIB_SUFFIX@
|
||||||
libdir=${exec_prefix}/lib${lib_suffix}
|
libdir=${exec_prefix}/lib${lib_suffix}
|
||||||
includedir=${prefix}/include
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
@ -13,3 +13,4 @@ URL: http://code.google.com/p/game-music-emu/
|
||||||
Version: @GME_VERSION@
|
Version: @GME_VERSION@
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
Libs: -L${libdir} -lgme
|
Libs: -L${libdir} -lgme
|
||||||
|
Libs.private: -lstdc++
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Game music emulator library C interface (also usable from C++) */
|
/* Game music emulator library C interface (also usable from C++) */
|
||||||
|
|
||||||
/* Game_Music_Emu 0.6.0 */
|
/* Game_Music_Emu 0.6.1 */
|
||||||
#ifndef GME_H
|
#ifndef GME_H
|
||||||
#define GME_H
|
#define GME_H
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GME_VERSION 0x000600 /* 1 byte major, 1 byte minor, 1 byte patch-level */
|
#define GME_VERSION 0x000601 /* 1 byte major, 1 byte minor, 1 byte patch-level */
|
||||||
|
|
||||||
/* Error string returned by library functions, or NULL if no error (success) */
|
/* Error string returned by library functions, or NULL if no error (success) */
|
||||||
typedef const char* gme_err_t;
|
typedef const char* gme_err_t;
|
||||||
|
@ -47,9 +47,15 @@ int gme_track_ended( Music_Emu const* );
|
||||||
/* Number of milliseconds (1000 = one second) played since beginning of track */
|
/* Number of milliseconds (1000 = one second) played since beginning of track */
|
||||||
int gme_tell( Music_Emu const* );
|
int gme_tell( Music_Emu const* );
|
||||||
|
|
||||||
|
/* Number of samples generated since beginning of track */
|
||||||
|
int gme_tell_samples( Music_Emu const* );
|
||||||
|
|
||||||
/* Seek to new time in track. Seeking backwards or far forward can take a while. */
|
/* Seek to new time in track. Seeking backwards or far forward can take a while. */
|
||||||
gme_err_t gme_seek( Music_Emu*, int msec );
|
gme_err_t gme_seek( Music_Emu*, int msec );
|
||||||
|
|
||||||
|
/* Equivalent to restarting track then skipping n samples */
|
||||||
|
gme_err_t gme_seek_samples( Music_Emu*, int n );
|
||||||
|
|
||||||
|
|
||||||
/******** Informational ********/
|
/******** Informational ********/
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Game_Music_Emu 0.6.0: Game Music Emulators
|
Game_Music_Emu 0.6.2: Game Music Emulators
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Game_Music_Emu is a collection of video game music file emulators that
|
Game_Music_Emu is a collection of video game music file emulators that
|
||||||
support the following formats and systems:
|
support the following formats and systems:
|
||||||
|
@ -34,30 +34,45 @@ several architectures, Mac OS, MorphOS, Xbox, PlayStation Portable,
|
||||||
GP2X, and Nintendo DS.
|
GP2X, and Nintendo DS.
|
||||||
|
|
||||||
Author : Shay Green <gblargg@gmail.com>
|
Author : Shay Green <gblargg@gmail.com>
|
||||||
Website: http://www.slack.net/~ant/
|
Website: https://bitbucket.org/mpyne/game-music-emu/wiki/Home
|
||||||
Forum : http://groups.google.com/group/blargg-sound-libs
|
|
||||||
License: GNU Lesser General Public License (LGPL)
|
License: GNU Lesser General Public License (LGPL)
|
||||||
|
|
||||||
|
Current Maintainer: Michael Pyne <mpyne@purinchu.net>
|
||||||
|
|
||||||
Getting Started
|
Getting Started
|
||||||
---------------
|
---------------
|
||||||
Build a program consisting of demo/basics.c, demo/Wave_Writer.cpp, and
|
Build a program consisting of demo/basics.c, demo/Wave_Writer.cpp, and
|
||||||
all source files in gme/. If you have CMake 2.6 or later, execute
|
all source files in gme/.
|
||||||
|
|
||||||
run cmake
|
Or, if you have CMake 2.6 or later, execute at a command prompt (from the
|
||||||
cd demo
|
extracted source directory):
|
||||||
run make
|
|
||||||
|
|
||||||
Be sure "test.nsf" is in the same directory as the program. Running it
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ../ # <-- Pass any needed CMake flags here
|
||||||
|
make # To build the library
|
||||||
|
cd demo
|
||||||
|
make # To build the demo itself
|
||||||
|
|
||||||
|
Be sure "test.nsf" is in the same directory as the demo program. Running it
|
||||||
should generate the recording "out.wav".
|
should generate the recording "out.wav".
|
||||||
|
|
||||||
|
You can use "make install" to install the library. To choose where to install
|
||||||
|
the library to, use the CMake argument "-DCMAKE_INSTALL_PREFIX=/usr/local"
|
||||||
|
(and replace /usr/local with the base path you wish to use). Alternately, you
|
||||||
|
can specify the base path to install to when you run "make install" by passing
|
||||||
|
'DESTDIR=/usr/local' on the make install command line (again, replace
|
||||||
|
/usr/local as appropriate).
|
||||||
|
|
||||||
|
To build a static library instead of shared (the default), pass
|
||||||
|
-DBUILD_SHARED_LIBS=OFF to the cmake command when running cmake.
|
||||||
|
|
||||||
A slightly more extensive demo application is available in the player/
|
A slightly more extensive demo application is available in the player/
|
||||||
directory. It requires SDL to build.
|
directory. It requires SDL to build.
|
||||||
|
|
||||||
Read gme.txt for more information. Post to the discussion forum for
|
Read gme.txt for more information. Post to the discussion forum for
|
||||||
assistance.
|
assistance.
|
||||||
|
|
||||||
|
|
||||||
Files
|
Files
|
||||||
-----
|
-----
|
||||||
gme.txt General notes about the library
|
gme.txt General notes about the library
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -379,6 +379,12 @@ if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB})
|
||||||
set(SRB2_HAVE_PNG ON)
|
set(SRB2_HAVE_PNG ON)
|
||||||
add_definitions(-DHAVE_PNG)
|
add_definitions(-DHAVE_PNG)
|
||||||
add_definitions(-D_LARGEFILE64_SOURCE)
|
add_definitions(-D_LARGEFILE64_SOURCE)
|
||||||
|
set(SRB2_PNG_SOURCES apng.c)
|
||||||
|
set(SRB2_PNG_HEADERS apng.h)
|
||||||
|
prepend_sources(SRB2_PNG_SOURCES)
|
||||||
|
prepend_sources(SRB2_PNG_HEADERS)
|
||||||
|
source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS}
|
||||||
|
${SRB2_PNG_SOURCES} ${SRB2_PNG_HEADERS})
|
||||||
else()
|
else()
|
||||||
message(WARNING "You have specified that PNG is available but it was not found. SRB2Kart may not compile correctly.")
|
message(WARNING "You have specified that PNG is available but it was not found. SRB2Kart may not compile correctly.")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -341,6 +341,8 @@ endif
|
||||||
|
|
||||||
LIBS+=$(PNG_LDFLAGS)
|
LIBS+=$(PNG_LDFLAGS)
|
||||||
CFLAGS+=$(PNG_CFLAGS)
|
CFLAGS+=$(PNG_CFLAGS)
|
||||||
|
|
||||||
|
OBJS+=$(OBJDIR)/apng.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef HAVE_LIBGME
|
ifdef HAVE_LIBGME
|
||||||
|
|
|
@ -116,6 +116,7 @@ WFLAGS+=-Wfloat-equal
|
||||||
#WFLAGS+=-Wtraditional
|
#WFLAGS+=-Wtraditional
|
||||||
ifdef VCHELP
|
ifdef VCHELP
|
||||||
WFLAGS+=-Wdeclaration-after-statement
|
WFLAGS+=-Wdeclaration-after-statement
|
||||||
|
WFLAGS+=-Wno-error=declaration-after-statement
|
||||||
endif
|
endif
|
||||||
WFLAGS+=-Wundef
|
WFLAGS+=-Wundef
|
||||||
ifndef GCC295
|
ifndef GCC295
|
||||||
|
@ -189,12 +190,6 @@ ifdef GCC46
|
||||||
WFLAGS+=-Wno-suggest-attribute=noreturn
|
WFLAGS+=-Wno-suggest-attribute=noreturn
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef MINGW
|
|
||||||
ifdef GCC45
|
|
||||||
WFLAGS+=-Wunsuffixed-float-constants
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef NOLDWARNING
|
ifdef NOLDWARNING
|
||||||
LDFLAGS+=-Wl,--as-needed
|
LDFLAGS+=-Wl,--as-needed
|
||||||
endif
|
endif
|
||||||
|
@ -208,6 +203,9 @@ WFLAGS+=$(OLDWFLAGS)
|
||||||
ifdef GCC43
|
ifdef GCC43
|
||||||
#WFLAGS+=-Wno-error=clobbered
|
#WFLAGS+=-Wno-error=clobbered
|
||||||
endif
|
endif
|
||||||
|
ifdef GCC44
|
||||||
|
WFLAGS+=-Wno-error=array-bounds
|
||||||
|
endif
|
||||||
ifdef GCC46
|
ifdef GCC46
|
||||||
WFLAGS+=-Wno-error=suggest-attribute=noreturn
|
WFLAGS+=-Wno-error=suggest-attribute=noreturn
|
||||||
endif
|
endif
|
||||||
|
@ -228,6 +226,7 @@ ifdef GCC80
|
||||||
WFLAGS+=-Wno-format-overflow
|
WFLAGS+=-Wno-format-overflow
|
||||||
WFLAGS+=-Wno-stringop-truncation
|
WFLAGS+=-Wno-stringop-truncation
|
||||||
WFLAGS+=-Wno-stringop-overflow
|
WFLAGS+=-Wno-stringop-overflow
|
||||||
|
WFLAGS+=-Wno-error=multistatement-macros
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
289
src/apng.c
Normal file
289
src/apng.c
Normal file
|
@ -0,0 +1,289 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019, James R.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
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 COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "apng.h"
|
||||||
|
|
||||||
|
#define APNG_INFO_acTL 0x20000U
|
||||||
|
|
||||||
|
#define APNG_WROTE_acTL 0x10000U
|
||||||
|
|
||||||
|
struct apng_info_def
|
||||||
|
{
|
||||||
|
png_uint_32 mode;
|
||||||
|
png_uint_32 valid;
|
||||||
|
|
||||||
|
png_uint_32 num_frames;
|
||||||
|
png_uint_32 num_plays;
|
||||||
|
|
||||||
|
long start_acTL;/* acTL is written here */
|
||||||
|
|
||||||
|
png_flush_ptr output_flush_fn;
|
||||||
|
apng_seek_ptr output_seek_fn;
|
||||||
|
apng_tell_ptr output_tell_fn;
|
||||||
|
|
||||||
|
apng_set_acTL_ptr set_acTL_fn;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* PROTOS (FUCK COMPILER) */
|
||||||
|
void apng_seek (png_structp, apng_const_infop, size_t);
|
||||||
|
size_t apng_tell (png_structp, apng_const_infop);
|
||||||
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
void apng_flush (png_structp, apng_infop);
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
void apng_default_flush (png_structp);
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
#endif/* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
void apng_default_seek (png_structp, size_t);
|
||||||
|
size_t apng_default_tell (png_structp);
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
void apng_write_IEND (png_structp);
|
||||||
|
void apng_write_acTL (png_structp, png_uint_32, png_uint_32);
|
||||||
|
#ifndef PNG_WRITE_APNG_SUPPORTED
|
||||||
|
png_uint_32 apng_set_acTL_dummy (png_structp, png_infop,
|
||||||
|
png_uint_32, png_uint_32);
|
||||||
|
#endif/* PNG_WRITE_APNG_SUPPORTED */
|
||||||
|
|
||||||
|
apng_infop
|
||||||
|
apng_create_info_struct (png_structp pngp)
|
||||||
|
{
|
||||||
|
apng_infop ainfop;
|
||||||
|
(void)pngp;
|
||||||
|
if (( ainfop = calloc(sizeof (apng_info),1) ))
|
||||||
|
{
|
||||||
|
apng_set_write_fn(pngp, ainfop, 0, 0, 0, 0, 0);
|
||||||
|
apng_set_set_acTL_fn(pngp, ainfop, 0);
|
||||||
|
}
|
||||||
|
return ainfop;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_destroy_info_struct (png_structp pngp, apng_infopp ainfopp)
|
||||||
|
{
|
||||||
|
(void)pngp;
|
||||||
|
if (!( pngp && ainfopp ))
|
||||||
|
return;
|
||||||
|
|
||||||
|
free((*ainfopp));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_seek (png_structp pngp, apng_const_infop ainfop, size_t l)
|
||||||
|
{
|
||||||
|
(*(ainfop->output_seek_fn))(pngp, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
apng_tell (png_structp pngp, apng_const_infop ainfop)
|
||||||
|
{
|
||||||
|
return (*(ainfop->output_tell_fn))(pngp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
void
|
||||||
|
apng_flush (png_structp pngp, apng_infop ainfop)
|
||||||
|
{
|
||||||
|
if (ainfop->output_flush_fn)
|
||||||
|
(*(ainfop->output_flush_fn))(pngp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
void
|
||||||
|
apng_default_flush (png_structp pngp)
|
||||||
|
{
|
||||||
|
if (!( pngp ))
|
||||||
|
return;
|
||||||
|
|
||||||
|
fflush((png_FILE_p)png_get_io_ptr);
|
||||||
|
}
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
#endif/* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
void
|
||||||
|
apng_default_seek (png_structp pngp, size_t l)
|
||||||
|
{
|
||||||
|
if (!( pngp ))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (fseek((png_FILE_p)png_get_io_ptr(pngp), (long)l, SEEK_SET) == -1)
|
||||||
|
png_error(pngp, "Seek Error");
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
apng_default_tell (png_structp pngp)
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
|
||||||
|
if (!( pngp ))
|
||||||
|
{
|
||||||
|
png_error(pngp, "Call to apng_default_tell with NULL pngp failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (( l = ftell((png_FILE_p)png_get_io_ptr(pngp)) ) == -1)
|
||||||
|
png_error(pngp, "Tell Error");
|
||||||
|
|
||||||
|
return (size_t)l;
|
||||||
|
}
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_set_write_fn (png_structp pngp, apng_infop ainfop, png_voidp iop,
|
||||||
|
png_rw_ptr write_f, png_flush_ptr flush_f,
|
||||||
|
apng_seek_ptr seek_f, apng_tell_ptr tell_f)
|
||||||
|
{
|
||||||
|
if (!( pngp && ainfop ))
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_set_write_fn(pngp, iop, write_f, flush_f);
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
if (!flush_f)
|
||||||
|
ainfop->output_flush_fn = &apng_default_flush;
|
||||||
|
else
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
ainfop->output_flush_fn = flush_f;
|
||||||
|
#endif/* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
if (!seek_f)
|
||||||
|
ainfop->output_seek_fn = &apng_default_seek;
|
||||||
|
else
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
ainfop->output_seek_fn = seek_f;
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
if (!seek_f)
|
||||||
|
ainfop->output_tell_fn = apng_default_tell;
|
||||||
|
else
|
||||||
|
#endif/* PNG_STDIO_SUPPORTED */
|
||||||
|
ainfop->output_tell_fn = tell_f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_write_IEND (png_structp pngp)
|
||||||
|
{
|
||||||
|
png_byte chunkc[] = "IEND";
|
||||||
|
png_write_chunk(pngp, chunkc, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_write_acTL (png_structp pngp, png_uint_32 frames, png_uint_32 plays)
|
||||||
|
{
|
||||||
|
png_byte chunkc[] = "acTL";
|
||||||
|
png_byte buf[8];
|
||||||
|
png_save_uint_32(buf, frames);
|
||||||
|
png_save_uint_32(buf + 4, plays);
|
||||||
|
png_write_chunk(pngp, chunkc, buf, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
apng_set_acTL (png_structp pngp, png_infop infop, apng_infop ainfop,
|
||||||
|
png_uint_32 frames, png_uint_32 plays)
|
||||||
|
{
|
||||||
|
(void)pngp;
|
||||||
|
(void)infop;
|
||||||
|
if (!( pngp && infop && ainfop ))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ainfop->num_frames = frames;
|
||||||
|
ainfop->num_plays = plays;
|
||||||
|
|
||||||
|
ainfop->valid |= APNG_INFO_acTL;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_write_info_before_PLTE (png_structp pngp, png_infop infop,
|
||||||
|
apng_infop ainfop)
|
||||||
|
{
|
||||||
|
if (!( pngp && infop && ainfop ))
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_write_info_before_PLTE(pngp, infop);
|
||||||
|
|
||||||
|
if (( ainfop->valid & APNG_INFO_acTL )&&!( ainfop->mode & APNG_WROTE_acTL ))
|
||||||
|
{
|
||||||
|
ainfop->start_acTL = apng_tell(pngp, ainfop);
|
||||||
|
|
||||||
|
apng_write_acTL(pngp, 0, 0);
|
||||||
|
/* modified for runtime dynamic linking */
|
||||||
|
(*(ainfop->set_acTL_fn))(pngp, infop, PNG_UINT_31_MAX, 0);
|
||||||
|
|
||||||
|
ainfop->mode |= APNG_WROTE_acTL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_write_info (png_structp pngp, png_infop infop,
|
||||||
|
apng_infop ainfop)
|
||||||
|
{
|
||||||
|
apng_write_info_before_PLTE(pngp, infop, ainfop);
|
||||||
|
png_write_info(pngp, infop);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
apng_write_end (png_structp pngp, png_infop infop, apng_infop ainfop)
|
||||||
|
{
|
||||||
|
(void)infop;
|
||||||
|
apng_write_IEND(pngp);
|
||||||
|
apng_seek(pngp, ainfop, ainfop->start_acTL);
|
||||||
|
apng_write_acTL(pngp, ainfop->num_frames, ainfop->num_plays);
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
#ifdef PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED
|
||||||
|
apng_flush(pngp, infop);
|
||||||
|
#endif/* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
#endif/* PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED */
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef PNG_WRITE_APNG_SUPPORTED
|
||||||
|
png_uint_32
|
||||||
|
apng_set_acTL_dummy (png_structp pngp, png_infop infop,
|
||||||
|
png_uint_32 frames, png_uint_32 plays)
|
||||||
|
{
|
||||||
|
(void)pngp;
|
||||||
|
(void)infop;
|
||||||
|
(void)frames;
|
||||||
|
(void)plays;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif/* PNG_WRITE_APNG_SUPPORTED */
|
||||||
|
|
||||||
|
/* Dynamic runtime linking capable! (Hopefully.) */
|
||||||
|
void
|
||||||
|
apng_set_set_acTL_fn (png_structp pngp, apng_infop ainfop,
|
||||||
|
apng_set_acTL_ptr set_acTL_f)
|
||||||
|
{
|
||||||
|
(void)pngp;
|
||||||
|
if (!ainfop->set_acTL_fn)
|
||||||
|
#ifndef PNG_WRITE_APNG_SUPPORTED
|
||||||
|
ainfop->set_acTL_fn = &apng_set_acTL_dummy;
|
||||||
|
#else
|
||||||
|
ainfop->set_acTL_fn = &png_set_acTL;
|
||||||
|
#endif/* PNG_WRITE_APNG_SUPPORTED */
|
||||||
|
else
|
||||||
|
ainfop->set_acTL_fn = set_acTL_f;
|
||||||
|
}
|
82
src/apng.h
Normal file
82
src/apng.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019, James R.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
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 COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef APNG_H
|
||||||
|
#define APNG_H
|
||||||
|
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#ifndef _WII
|
||||||
|
#ifndef _LARGEFILE64_SOURCE
|
||||||
|
#define _LARGEFILE64_SOURCE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _LFS64_LARGEFILE
|
||||||
|
#define _LFS64_LARGEFILE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _FILE_OFFSET_BITS
|
||||||
|
#define _FILE_OFFSET_BITS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <png.h>
|
||||||
|
|
||||||
|
typedef struct apng_info_def apng_info;
|
||||||
|
typedef apng_info * apng_infop;
|
||||||
|
typedef const apng_info * apng_const_infop;
|
||||||
|
typedef apng_info * * apng_infopp;
|
||||||
|
|
||||||
|
typedef void (*apng_seek_ptr)(png_structp, size_t);
|
||||||
|
typedef size_t (*apng_tell_ptr)(png_structp);
|
||||||
|
|
||||||
|
typedef png_uint_32 (*apng_set_acTL_ptr)(png_structp, png_infop,
|
||||||
|
png_uint_32, png_uint_32);
|
||||||
|
|
||||||
|
apng_infop apng_create_info_struct (png_structp png_ptr);
|
||||||
|
|
||||||
|
void apng_destroy_info_struct (png_structp png_ptr,
|
||||||
|
apng_infopp info_ptr_ptr);
|
||||||
|
|
||||||
|
/* Call the following functions in place of the libpng counterparts. */
|
||||||
|
|
||||||
|
png_uint_32 apng_set_acTL (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
apng_infop ainfo_ptr,
|
||||||
|
png_uint_32 num_frames, png_uint_32 num_plays);
|
||||||
|
|
||||||
|
void apng_write_info_before_PLTE (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
apng_infop ainfo_ptr);
|
||||||
|
void apng_write_info (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
apng_infop ainfo_ptr);
|
||||||
|
|
||||||
|
void apng_write_end (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
apng_infop ainfo_ptr);
|
||||||
|
|
||||||
|
void apng_set_write_fn (png_structp png_ptr, apng_infop ainfo_ptr,
|
||||||
|
png_voidp io_ptr,
|
||||||
|
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn,
|
||||||
|
apng_seek_ptr output_seek_fn, apng_tell_ptr output_tell_fn);
|
||||||
|
|
||||||
|
void apng_set_set_acTL_fn (png_structp png_ptr, apng_infop ainfo_ptr,
|
||||||
|
apng_set_acTL_ptr set_acTL_fn);
|
||||||
|
|
||||||
|
#endif/* APNG_H */
|
|
@ -2212,8 +2212,10 @@ static void CL_ConnectToServer(boolean viams)
|
||||||
}
|
}
|
||||||
while (!(cl_mode == CL_CONNECTED && (client || (server && nodewaited <= pnumnodes))));
|
while (!(cl_mode == CL_CONNECTED && (client || (server && nodewaited <= pnumnodes))));
|
||||||
|
|
||||||
|
#ifndef NONET
|
||||||
if (netgame)
|
if (netgame)
|
||||||
F_StartWaitingPlayers();
|
F_StartWaitingPlayers();
|
||||||
|
#endif
|
||||||
DEBFILE(va("Synchronisation Finished\n"));
|
DEBFILE(va("Synchronisation Finished\n"));
|
||||||
|
|
||||||
displayplayer = consoleplayer;
|
displayplayer = consoleplayer;
|
||||||
|
@ -2541,6 +2543,8 @@ static void CL_RemovePlayer(INT32 playernum, INT32 reason)
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
LUAh_PlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
LUAh_PlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
||||||
|
#else
|
||||||
|
(void)reason;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Reset player data
|
// Reset player data
|
||||||
|
|
20
src/d_main.c
20
src/d_main.c
|
@ -1325,10 +1325,6 @@ void D_SRB2Main(void)
|
||||||
midi_disabled = true;
|
midi_disabled = true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
CONS_Printf("S_InitSfxChannels(): Setting up sound channels.\n");
|
|
||||||
}
|
|
||||||
if (M_CheckParm("-nosound"))
|
if (M_CheckParm("-nosound"))
|
||||||
sound_disabled = true;
|
sound_disabled = true;
|
||||||
if (M_CheckParm("-nomusic")) // combines -nomidimusic and -nodigmusic
|
if (M_CheckParm("-nomusic")) // combines -nomidimusic and -nodigmusic
|
||||||
|
@ -1347,10 +1343,18 @@ void D_SRB2Main(void)
|
||||||
if (M_CheckParm("-nodigmusic"))
|
if (M_CheckParm("-nodigmusic"))
|
||||||
digital_disabled = true; // WARNING: DOS version initmusic in I_StartupSound
|
digital_disabled = true; // WARNING: DOS version initmusic in I_StartupSound
|
||||||
}
|
}
|
||||||
I_StartupSound();
|
if (!( sound_disabled && digital_disabled
|
||||||
I_InitMusic();
|
#ifndef NO_MIDI
|
||||||
S_InitSfxChannels(cv_soundvolume.value);
|
&& midi_disabled
|
||||||
S_InitMusicDefs();
|
#endif
|
||||||
|
))
|
||||||
|
{
|
||||||
|
CONS_Printf("S_InitSfxChannels(): Setting up sound channels.\n");
|
||||||
|
I_StartupSound();
|
||||||
|
I_InitMusic();
|
||||||
|
S_InitSfxChannels(cv_soundvolume.value);
|
||||||
|
S_InitMusicDefs();
|
||||||
|
}
|
||||||
|
|
||||||
CONS_Printf("ST_Init(): Init status bar.\n");
|
CONS_Printf("ST_Init(): Init status bar.\n");
|
||||||
ST_Init();
|
ST_Init();
|
||||||
|
|
|
@ -8254,6 +8254,7 @@ static const char *const POWERS_LIST[] = {
|
||||||
"INGOOP" // In goop
|
"INGOOP" // In goop
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
static const char *const KARTSTUFF_LIST[] = {
|
static const char *const KARTSTUFF_LIST[] = {
|
||||||
"POSITION",
|
"POSITION",
|
||||||
"OLDPOSITION",
|
"OLDPOSITION",
|
||||||
|
@ -8337,6 +8338,7 @@ static const char *const KARTSTUFF_LIST[] = {
|
||||||
"JAWZTARGETDELAY",
|
"JAWZTARGETDELAY",
|
||||||
"SPECTATEWAIT"
|
"SPECTATEWAIT"
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static const char *const HUDITEMS_LIST[] = {
|
static const char *const HUDITEMS_LIST[] = {
|
||||||
"LIVESNAME",
|
"LIVESNAME",
|
||||||
|
@ -9042,20 +9044,6 @@ static powertype_t get_power(const char *word)
|
||||||
return pw_invulnerability;
|
return pw_invulnerability;
|
||||||
}
|
}
|
||||||
|
|
||||||
static kartstufftype_t get_kartstuff(const char *word)
|
|
||||||
{ // Returns the vlaue of k_ enumerations
|
|
||||||
kartstufftype_t i;
|
|
||||||
if (*word >= '0' && *word <= '9')
|
|
||||||
return atoi(word);
|
|
||||||
if (fastncmp("K_",word,2))
|
|
||||||
word += 2; // take off the k_
|
|
||||||
for (i = 0; i < NUMKARTSTUFF; i++)
|
|
||||||
if (fastcmp(word, KARTSTUFF_LIST[i]))
|
|
||||||
return i;
|
|
||||||
deh_warning("Couldn't find power named 'k_%s'",word);
|
|
||||||
return k_position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \todo Make ANY of this completely over-the-top math craziness obey the order of operations.
|
/// \todo Make ANY of this completely over-the-top math craziness obey the order of operations.
|
||||||
static fixed_t op_mul(fixed_t a, fixed_t b) { return a*b; }
|
static fixed_t op_mul(fixed_t a, fixed_t b) { return a*b; }
|
||||||
static fixed_t op_div(fixed_t a, fixed_t b) { return a/b; }
|
static fixed_t op_div(fixed_t a, fixed_t b) { return a/b; }
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
#include "../v_video.h"
|
#include "../v_video.h"
|
||||||
#include "hw_clip.h"
|
#include "hw_clip.h"
|
||||||
#include "hw_glob.h"
|
#include "hw_glob.h"
|
||||||
|
#include "../r_main.h"
|
||||||
#include "../r_state.h"
|
#include "../r_state.h"
|
||||||
#include "../tables.h"
|
#include "../tables.h"
|
||||||
#include "r_opengl/r_opengl.h"
|
#include "r_opengl/r_opengl.h"
|
||||||
|
@ -328,7 +329,7 @@ angle_t gld_FrustumAngle(void)
|
||||||
|
|
||||||
// NEWCLIP TODO: SRB2CBTODO: make a global render_fov for this function
|
// NEWCLIP TODO: SRB2CBTODO: make a global render_fov for this function
|
||||||
|
|
||||||
float render_fov = FIXED_TO_FLOAT(cv_grfov.value);
|
float render_fov = FIXED_TO_FLOAT(cv_fov.value);
|
||||||
float render_fovratio = (float)BASEVIDWIDTH / (float)BASEVIDHEIGHT; // SRB2CBTODO: NEWCLIPTODO: Is this right?
|
float render_fovratio = (float)BASEVIDWIDTH / (float)BASEVIDHEIGHT; // SRB2CBTODO: NEWCLIPTODO: Is this right?
|
||||||
float render_multiplier = 64.0f / render_fovratio / RMUL;
|
float render_multiplier = 64.0f / render_fovratio / RMUL;
|
||||||
|
|
||||||
|
|
|
@ -86,12 +86,10 @@ static UINT32 atohex(const char *s);
|
||||||
static void CV_filtermode_ONChange(void);
|
static void CV_filtermode_ONChange(void);
|
||||||
static void CV_anisotropic_ONChange(void);
|
static void CV_anisotropic_ONChange(void);
|
||||||
static void CV_FogDensity_ONChange(void);
|
static void CV_FogDensity_ONChange(void);
|
||||||
static void CV_grFov_OnChange(void);
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// 3D ENGINE COMMANDS & CONSOLE VARS
|
// 3D ENGINE COMMANDS & CONSOLE VARS
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
static CV_PossibleValue_t grfov_cons_t[] = {{0, "MIN"}, {179*FRACUNIT, "MAX"}, {0, NULL}};
|
|
||||||
static CV_PossibleValue_t grfiltermode_cons_t[]= {{HWD_SET_TEXTUREFILTER_POINTSAMPLED, "Nearest"},
|
static CV_PossibleValue_t grfiltermode_cons_t[]= {{HWD_SET_TEXTUREFILTER_POINTSAMPLED, "Nearest"},
|
||||||
{HWD_SET_TEXTUREFILTER_BILINEAR, "Bilinear"}, {HWD_SET_TEXTUREFILTER_TRILINEAR, "Trilinear"},
|
{HWD_SET_TEXTUREFILTER_BILINEAR, "Bilinear"}, {HWD_SET_TEXTUREFILTER_TRILINEAR, "Trilinear"},
|
||||||
{HWD_SET_TEXTUREFILTER_MIXED1, "Linear_Nearest"},
|
{HWD_SET_TEXTUREFILTER_MIXED1, "Linear_Nearest"},
|
||||||
|
@ -112,7 +110,6 @@ static consvar_t cv_grbeta = {"gr_beta", "0", 0, CV_Unsigned, NULL, 0, NULL, NUL
|
||||||
|
|
||||||
static float HWRWipeCounter = 1.0f;
|
static float HWRWipeCounter = 1.0f;
|
||||||
consvar_t cv_grrounddown = {"gr_rounddown", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_grrounddown = {"gr_rounddown", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_grfov = {"gr_fov", "90", CV_FLOAT|CV_CALL, grfov_cons_t, CV_grFov_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
|
||||||
consvar_t cv_grfogdensity = {"gr_fogdensity", "150", CV_CALL|CV_NOINIT, CV_Unsigned,
|
consvar_t cv_grfogdensity = {"gr_fogdensity", "150", CV_CALL|CV_NOINIT, CV_Unsigned,
|
||||||
CV_FogDensity_ONChange, 0, NULL, NULL, 0, 0, NULL};
|
CV_FogDensity_ONChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
@ -5907,7 +5904,7 @@ void HWR_SetViewSize(void)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player)
|
void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player)
|
||||||
{
|
{
|
||||||
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
const float fpov = FIXED_TO_FLOAT(cv_fov.value+player->fovadd);
|
||||||
postimg_t *type;
|
postimg_t *type;
|
||||||
UINT8 ssplayer = 0;
|
UINT8 ssplayer = 0;
|
||||||
|
|
||||||
|
@ -6073,7 +6070,7 @@ if (0)
|
||||||
viewangle = localaiming4;
|
viewangle = localaiming4;
|
||||||
|
|
||||||
// Handle stuff when you are looking farther up or down.
|
// Handle stuff when you are looking farther up or down.
|
||||||
if ((aimingangle || cv_grfov.value+player->fovadd > 90*FRACUNIT))
|
if ((aimingangle || cv_fov.value+player->fovadd > 90*FRACUNIT))
|
||||||
{
|
{
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
|
@ -6151,7 +6148,7 @@ if (0)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
|
void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
|
||||||
{
|
{
|
||||||
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
const float fpov = FIXED_TO_FLOAT(cv_fov.value+player->fovadd);
|
||||||
postimg_t *type;
|
postimg_t *type;
|
||||||
UINT8 ssplayer = 0;
|
UINT8 ssplayer = 0;
|
||||||
|
|
||||||
|
@ -6332,7 +6329,7 @@ if (0)
|
||||||
viewangle = localaiming4;
|
viewangle = localaiming4;
|
||||||
|
|
||||||
// Handle stuff when you are looking farther up or down.
|
// Handle stuff when you are looking farther up or down.
|
||||||
if ((aimingangle || cv_grfov.value+player->fovadd > 90*FRACUNIT))
|
if ((aimingangle || cv_fov.value+player->fovadd > 90*FRACUNIT))
|
||||||
{
|
{
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
|
@ -6455,11 +6452,6 @@ static void HWR_FoggingOn(void)
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
|
|
||||||
static void CV_grFov_OnChange(void)
|
|
||||||
{
|
|
||||||
if ((netgame || multiplayer) && !cv_debug && cv_grfov.value != 90*FRACUNIT)
|
|
||||||
CV_Set(&cv_grfov, cv_grfov.defaultvalue);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Command_GrStats_f(void)
|
static void Command_GrStats_f(void)
|
||||||
{
|
{
|
||||||
|
@ -6482,7 +6474,6 @@ static void Command_GrStats_f(void)
|
||||||
void HWR_AddCommands(void)
|
void HWR_AddCommands(void)
|
||||||
{
|
{
|
||||||
CV_RegisterVar(&cv_grrounddown);
|
CV_RegisterVar(&cv_grrounddown);
|
||||||
CV_RegisterVar(&cv_grfov);
|
|
||||||
CV_RegisterVar(&cv_grfogdensity);
|
CV_RegisterVar(&cv_grfogdensity);
|
||||||
CV_RegisterVar(&cv_grfiltermode);
|
CV_RegisterVar(&cv_grfiltermode);
|
||||||
CV_RegisterVar(&cv_granisotropicmode);
|
CV_RegisterVar(&cv_granisotropicmode);
|
||||||
|
|
|
@ -80,7 +80,6 @@ extern consvar_t cv_grstaticlighting;
|
||||||
extern consvar_t cv_grcoronas;
|
extern consvar_t cv_grcoronas;
|
||||||
extern consvar_t cv_grcoronasize;
|
extern consvar_t cv_grcoronasize;
|
||||||
#endif
|
#endif
|
||||||
extern consvar_t cv_grfov;
|
|
||||||
extern consvar_t cv_grmd2;
|
extern consvar_t cv_grmd2;
|
||||||
extern consvar_t cv_grfog;
|
extern consvar_t cv_grfog;
|
||||||
extern consvar_t cv_grfogcolor;
|
extern consvar_t cv_grfogcolor;
|
||||||
|
|
|
@ -2056,10 +2056,11 @@ EXPORT void HWRAPI(DrawMD2) (INT32 *gl_cmd_buffer, md2_frame_t *frame, FTransfor
|
||||||
EXPORT void HWRAPI(SetTransform) (FTransform *stransform)
|
EXPORT void HWRAPI(SetTransform) (FTransform *stransform)
|
||||||
{
|
{
|
||||||
static boolean special_splitscreen;
|
static boolean special_splitscreen;
|
||||||
|
float used_fov;
|
||||||
pglLoadIdentity();
|
pglLoadIdentity();
|
||||||
if (stransform)
|
if (stransform)
|
||||||
{
|
{
|
||||||
boolean fovx90;
|
used_fov = stransform->fovxangle;
|
||||||
// keep a trace of the transformation for md2
|
// keep a trace of the transformation for md2
|
||||||
memcpy(&md2_transform, stransform, sizeof (md2_transform));
|
memcpy(&md2_transform, stransform, sizeof (md2_transform));
|
||||||
|
|
||||||
|
@ -2074,36 +2075,29 @@ EXPORT void HWRAPI(SetTransform) (FTransform *stransform)
|
||||||
pglRotatef(stransform->angley+270.0f, 0.0f, 1.0f, 0.0f);
|
pglRotatef(stransform->angley+270.0f, 0.0f, 1.0f, 0.0f);
|
||||||
pglTranslatef(-stransform->x, -stransform->z, -stransform->y);
|
pglTranslatef(-stransform->x, -stransform->z, -stransform->y);
|
||||||
|
|
||||||
pglMatrixMode(GL_PROJECTION);
|
special_splitscreen = (stransform->splitscreen == 1);
|
||||||
pglLoadIdentity();
|
|
||||||
fovx90 = stransform->fovxangle > 0.0f && fabsf(stransform->fovxangle - 90.0f) < 0.5f;
|
|
||||||
special_splitscreen = (stransform->splitscreen == 1 && fovx90);
|
|
||||||
if (special_splitscreen)
|
|
||||||
GLPerspective(53.13l, 2*ASPECT_RATIO); // 53.13 = 2*atan(0.5)
|
|
||||||
else
|
|
||||||
GLPerspective(stransform->fovxangle, ASPECT_RATIO);
|
|
||||||
#ifndef MINI_GL_COMPATIBILITY
|
|
||||||
pglGetDoublev(GL_PROJECTION_MATRIX, projMatrix); // added for new coronas' code (without depth buffer)
|
|
||||||
#endif
|
|
||||||
pglMatrixMode(GL_MODELVIEW);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//Hurdler: is "fov" correct?
|
||||||
|
used_fov = fov;
|
||||||
pglScalef(1.0f, 1.0f, -1.0f);
|
pglScalef(1.0f, 1.0f, -1.0f);
|
||||||
|
|
||||||
pglMatrixMode(GL_PROJECTION);
|
|
||||||
pglLoadIdentity();
|
|
||||||
if (special_splitscreen)
|
|
||||||
GLPerspective(53.13l, 2*ASPECT_RATIO); // 53.13 = 2*atan(0.5)
|
|
||||||
else
|
|
||||||
//Hurdler: is "fov" correct?
|
|
||||||
GLPerspective(fov, ASPECT_RATIO);
|
|
||||||
#ifndef MINI_GL_COMPATIBILITY
|
|
||||||
pglGetDoublev(GL_PROJECTION_MATRIX, projMatrix); // added for new coronas' code (without depth buffer)
|
|
||||||
#endif
|
|
||||||
pglMatrixMode(GL_MODELVIEW);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pglMatrixMode(GL_PROJECTION);
|
||||||
|
pglLoadIdentity();
|
||||||
|
if (special_splitscreen)
|
||||||
|
{
|
||||||
|
used_fov = atan(tan(used_fov*M_PI/360)*0.8)*360/M_PI;
|
||||||
|
GLPerspective(used_fov, 2*ASPECT_RATIO);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
GLPerspective(used_fov, ASPECT_RATIO);
|
||||||
|
#ifndef MINI_GL_COMPATIBILITY
|
||||||
|
pglGetDoublev(GL_PROJECTION_MATRIX, projMatrix); // added for new coronas' code (without depth buffer)
|
||||||
|
#endif
|
||||||
|
pglMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
#ifndef MINI_GL_COMPATIBILITY
|
#ifndef MINI_GL_COMPATIBILITY
|
||||||
pglGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix); // added for new coronas' code (without depth buffer)
|
pglGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix); // added for new coronas' code (without depth buffer)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1894,8 +1894,10 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_PlayerSpin(player, inflictor, source)) // Let Lua do its thing or overwrite if it wants to. Make sure to let any possible instashield happen because we didn't get "damaged" in this case.
|
if (LUAh_PlayerSpin(player, inflictor, source)) // Let Lua do its thing or overwrite if it wants to. Make sure to let any possible instashield happen because we didn't get "damaged" in this case.
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (source && source != player->mo && source->player)
|
if (source && source != player->mo && source->player)
|
||||||
K_PlayHitEmSound(source);
|
K_PlayHitEmSound(source);
|
||||||
|
@ -2025,8 +2027,10 @@ void K_SquishPlayer(player_t *player, mobj_t *source, mobj_t *inflictor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_PlayerSquish(player, inflictor, source)) // Let Lua do its thing or overwrite if it wants to. Make sure to let any possible instashield happen because we didn't get "damaged" in this case.
|
if (LUAh_PlayerSquish(player, inflictor, source)) // Let Lua do its thing or overwrite if it wants to. Make sure to let any possible instashield happen because we didn't get "damaged" in this case.
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
player->kartstuff[k_sneakertimer] = 0;
|
player->kartstuff[k_sneakertimer] = 0;
|
||||||
player->kartstuff[k_driftboost] = 0;
|
player->kartstuff[k_driftboost] = 0;
|
||||||
|
@ -2139,8 +2143,10 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_PlayerExplode(player, inflictor, source)) // Same thing. Also make sure to let Instashield happen blah blah
|
if (LUAh_PlayerExplode(player, inflictor, source)) // Same thing. Also make sure to let Instashield happen blah blah
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (source && source != player->mo && source->player)
|
if (source && source != player->mo && source->player)
|
||||||
K_PlayHitEmSound(source);
|
K_PlayHitEmSound(source);
|
||||||
|
|
21
src/m_menu.c
21
src/m_menu.c
|
@ -438,7 +438,7 @@ static CV_PossibleValue_t serversort_cons_t[] = {
|
||||||
{1,"Modified State"},
|
{1,"Modified State"},
|
||||||
{2,"Most Players"},
|
{2,"Most Players"},
|
||||||
{3,"Least Players"},
|
{3,"Least Players"},
|
||||||
{4,"Max Players"},
|
{4,"Max Player Slots"},
|
||||||
{5,"Gametype"},
|
{5,"Gametype"},
|
||||||
{0,NULL}
|
{0,NULL}
|
||||||
};
|
};
|
||||||
|
@ -1249,7 +1249,7 @@ static menuitem_t OP_OpenGLOptionsMenu[] =
|
||||||
{IT_SUBMENU|IT_STRING, NULL, "Fog...", &OP_OpenGLFogDef, 10},
|
{IT_SUBMENU|IT_STRING, NULL, "Fog...", &OP_OpenGLFogDef, 10},
|
||||||
{IT_SUBMENU|IT_STRING, NULL, "Gamma...", &OP_OpenGLColorDef, 20},
|
{IT_SUBMENU|IT_STRING, NULL, "Gamma...", &OP_OpenGLColorDef, 20},
|
||||||
|
|
||||||
{IT_STRING|IT_CVAR, NULL, "Field of View", &cv_grfov, 35},
|
{IT_STRING|IT_CVAR, NULL, "Field of View", &cv_fov, 35},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Quality", &cv_scr_depth, 45},
|
{IT_STRING|IT_CVAR, NULL, "Quality", &cv_scr_depth, 45},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Texture Filter", &cv_grfiltermode, 55},
|
{IT_STRING|IT_CVAR, NULL, "Texture Filter", &cv_grfiltermode, 55},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Anisotropic", &cv_granisotropicmode, 65},
|
{IT_STRING|IT_CVAR, NULL, "Anisotropic", &cv_granisotropicmode, 65},
|
||||||
|
@ -1834,7 +1834,6 @@ static menu_t SP_NightsGhostDef =
|
||||||
NULL
|
NULL
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
#ifndef NONET
|
|
||||||
// Multiplayer
|
// Multiplayer
|
||||||
menu_t MP_MainDef =
|
menu_t MP_MainDef =
|
||||||
{
|
{
|
||||||
|
@ -1845,12 +1844,18 @@ menu_t MP_MainDef =
|
||||||
M_DrawMPMainMenu,
|
M_DrawMPMainMenu,
|
||||||
42, 30,
|
42, 30,
|
||||||
0,
|
0,
|
||||||
M_CancelConnect
|
|
||||||
};
|
|
||||||
menu_t MP_ServerDef = MAPICONMENUSTYLE("M_MULTI", MP_ServerMenu, &MP_MainDef);
|
|
||||||
#endif
|
|
||||||
menu_t MP_OfflineServerDef = MAPICONMENUSTYLE("M_MULTI", MP_OfflineServerMenu, &MP_MainDef);
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
M_CancelConnect
|
||||||
|
#else
|
||||||
|
NULL
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
menu_t MP_OfflineServerDef = MAPICONMENUSTYLE("M_MULTI", MP_OfflineServerMenu, &MP_MainDef);
|
||||||
|
|
||||||
|
#ifndef NONET
|
||||||
|
menu_t MP_ServerDef = MAPICONMENUSTYLE("M_MULTI", MP_ServerMenu, &MP_MainDef);
|
||||||
|
|
||||||
menu_t MP_ConnectDef =
|
menu_t MP_ConnectDef =
|
||||||
{
|
{
|
||||||
"M_MULTI",
|
"M_MULTI",
|
||||||
|
|
123
src/m_misc.c
123
src/m_misc.c
|
@ -93,9 +93,8 @@ typedef off_t off64_t;
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
#define USE_PNG // Only actually use PNG if write is supported.
|
#define USE_PNG // Only actually use PNG if write is supported.
|
||||||
#if defined (PNG_WRITE_APNG_SUPPORTED) //|| !defined(PNG_STATIC)
|
#if defined (PNG_WRITE_APNG_SUPPORTED) //|| !defined(PNG_STATIC)
|
||||||
#if (PNG_LIBPNG_VER_MAJOR) == 1 && (PNG_LIBPNG_VER_MINOR <= 4) // Supposedly, the current APNG code can't work on newer versions as is
|
#include "apng.h"
|
||||||
#define USE_APNG
|
#define USE_APNG
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
// See hardware/hw_draw.c for a similar check to this one.
|
// See hardware/hw_draw.c for a similar check to this one.
|
||||||
#endif
|
#endif
|
||||||
|
@ -795,13 +794,13 @@ static inline void M_PNGImage(png_structp png_ptr, png_infop png_info_ptr, PNG_C
|
||||||
#ifdef USE_APNG
|
#ifdef USE_APNG
|
||||||
static png_structp apng_ptr = NULL;
|
static png_structp apng_ptr = NULL;
|
||||||
static png_infop apng_info_ptr = NULL;
|
static png_infop apng_info_ptr = NULL;
|
||||||
|
static apng_infop apng_ainfo_ptr = NULL;
|
||||||
static png_FILE_p apng_FILE = NULL;
|
static png_FILE_p apng_FILE = NULL;
|
||||||
static png_uint_32 apng_frames = 0;
|
static png_uint_32 apng_frames = 0;
|
||||||
static png_byte acTL_cn[5] = { 97, 99, 84, 76, '\0'};
|
|
||||||
#ifdef PNG_STATIC // Win32 build have static libpng
|
#ifdef PNG_STATIC // Win32 build have static libpng
|
||||||
#define apng_set_acTL png_set_acTL
|
#define aPNG_set_acTL png_set_acTL
|
||||||
#define apng_write_frame_head png_write_frame_head
|
#define aPNG_write_frame_head png_write_frame_head
|
||||||
#define apng_write_frame_tail png_write_frame_tail
|
#define aPNG_write_frame_tail png_write_frame_tail
|
||||||
#else // outside libpng may not have apng support
|
#else // outside libpng may not have apng support
|
||||||
|
|
||||||
#ifndef PNG_WRITE_APNG_SUPPORTED // libpng header may not have apng patch
|
#ifndef PNG_WRITE_APNG_SUPPORTED // libpng header may not have apng patch
|
||||||
|
@ -838,20 +837,20 @@ static png_byte acTL_cn[5] = { 97, 99, 84, 76, '\0'};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
typedef PNG_EXPORT(png_uint_32, (*P_png_set_acTL)) PNGARG((png_structp png_ptr,
|
typedef png_uint_32 (*P_png_set_acTL) (png_structp png_ptr,
|
||||||
png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
|
png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays);
|
||||||
typedef PNG_EXPORT (void, (*P_png_write_frame_head)) PNGARG((png_structp png_ptr,
|
typedef void (*P_png_write_frame_head) (png_structp png_ptr,
|
||||||
png_infop info_ptr, png_bytepp row_pointers,
|
png_infop info_ptr, png_bytepp row_pointers,
|
||||||
png_uint_32 width, png_uint_32 height,
|
png_uint_32 width, png_uint_32 height,
|
||||||
png_uint_32 x_offset, png_uint_32 y_offset,
|
png_uint_32 x_offset, png_uint_32 y_offset,
|
||||||
png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
|
png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
|
||||||
png_byte blend_op));
|
png_byte blend_op);
|
||||||
|
|
||||||
typedef PNG_EXPORT (void, (*P_png_write_frame_tail)) PNGARG((png_structp png_ptr,
|
typedef void (*P_png_write_frame_tail) (png_structp png_ptr,
|
||||||
png_infop info_ptr));
|
png_infop info_ptr);
|
||||||
static P_png_set_acTL apng_set_acTL = NULL;
|
static P_png_set_acTL aPNG_set_acTL = NULL;
|
||||||
static P_png_write_frame_head apng_write_frame_head = NULL;
|
static P_png_write_frame_head aPNG_write_frame_head = NULL;
|
||||||
static P_png_write_frame_tail apng_write_frame_tail = NULL;
|
static P_png_write_frame_tail aPNG_write_frame_tail = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline boolean M_PNGLib(void)
|
static inline boolean M_PNGLib(void)
|
||||||
|
@ -860,7 +859,7 @@ static inline boolean M_PNGLib(void)
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
static void *pnglib = NULL;
|
static void *pnglib = NULL;
|
||||||
if (apng_set_acTL && apng_write_frame_head && apng_write_frame_tail)
|
if (aPNG_set_acTL && aPNG_write_frame_head && aPNG_write_frame_tail)
|
||||||
return true;
|
return true;
|
||||||
if (pnglib)
|
if (pnglib)
|
||||||
return false;
|
return false;
|
||||||
|
@ -880,16 +879,16 @@ static inline boolean M_PNGLib(void)
|
||||||
if (!pnglib)
|
if (!pnglib)
|
||||||
return false;
|
return false;
|
||||||
#ifdef HAVE_SDL
|
#ifdef HAVE_SDL
|
||||||
apng_set_acTL = hwSym("png_set_acTL", pnglib);
|
aPNG_set_acTL = hwSym("png_set_acTL", pnglib);
|
||||||
apng_write_frame_head = hwSym("png_write_frame_head", pnglib);
|
aPNG_write_frame_head = hwSym("png_write_frame_head", pnglib);
|
||||||
apng_write_frame_tail = hwSym("png_write_frame_tail", pnglib);
|
aPNG_write_frame_tail = hwSym("png_write_frame_tail", pnglib);
|
||||||
#endif
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
apng_set_acTL = GetProcAddress("png_set_acTL", pnglib);
|
aPNG_set_acTL = GetProcAddress("png_set_acTL", pnglib);
|
||||||
apng_write_frame_head = GetProcAddress("png_write_frame_head", pnglib);
|
aPNG_write_frame_head = GetProcAddress("png_write_frame_head", pnglib);
|
||||||
apng_write_frame_tail = GetProcAddress("png_write_frame_tail", pnglib);
|
aPNG_write_frame_tail = GetProcAddress("png_write_frame_tail", pnglib);
|
||||||
#endif
|
#endif
|
||||||
return (apng_set_acTL && apng_write_frame_head && apng_write_frame_tail);
|
return (aPNG_set_acTL && aPNG_write_frame_head && aPNG_write_frame_tail);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,11 +902,6 @@ static void M_PNGFrame(png_structp png_ptr, png_infop png_info_ptr, png_bytep pn
|
||||||
|
|
||||||
apng_frames++;
|
apng_frames++;
|
||||||
|
|
||||||
#ifndef PNG_STATIC
|
|
||||||
if (apng_set_acTL)
|
|
||||||
#endif
|
|
||||||
apng_set_acTL(apng_ptr, apng_info_ptr, apng_frames, 0);
|
|
||||||
|
|
||||||
for (y = 0; y < height; y++)
|
for (y = 0; y < height; y++)
|
||||||
{
|
{
|
||||||
row_pointers[y] = png_buf;
|
row_pointers[y] = png_buf;
|
||||||
|
@ -915,9 +909,9 @@ static void M_PNGFrame(png_structp png_ptr, png_infop png_info_ptr, png_bytep pn
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PNG_STATIC
|
#ifndef PNG_STATIC
|
||||||
if (apng_write_frame_head)
|
if (aPNG_write_frame_head)
|
||||||
#endif
|
#endif
|
||||||
apng_write_frame_head(apng_ptr, apng_info_ptr, row_pointers,
|
aPNG_write_frame_head(apng_ptr, apng_info_ptr, row_pointers,
|
||||||
vid.width, /* width */
|
vid.width, /* width */
|
||||||
height, /* height */
|
height, /* height */
|
||||||
0, /* x offset */
|
0, /* x offset */
|
||||||
|
@ -930,57 +924,21 @@ static void M_PNGFrame(png_structp png_ptr, png_infop png_info_ptr, png_bytep pn
|
||||||
png_write_image(png_ptr, row_pointers);
|
png_write_image(png_ptr, row_pointers);
|
||||||
|
|
||||||
#ifndef PNG_STATIC
|
#ifndef PNG_STATIC
|
||||||
if (apng_write_frame_tail)
|
if (aPNG_write_frame_tail)
|
||||||
#endif
|
#endif
|
||||||
apng_write_frame_tail(apng_ptr, apng_info_ptr);
|
aPNG_write_frame_tail(apng_ptr, apng_info_ptr);
|
||||||
|
|
||||||
png_free(png_ptr, (png_voidp)row_pointers);
|
png_free(png_ptr, (png_voidp)row_pointers);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline boolean M_PNGfind_acTL(void)
|
static void M_PNGfix_acTL(png_structp png_ptr, png_infop png_info_ptr,
|
||||||
|
apng_infop png_ainfo_ptr)
|
||||||
{
|
{
|
||||||
png_byte cn[8]; // 4 bytes for len then 4 byes for name
|
apng_set_acTL(png_ptr, png_info_ptr, png_ainfo_ptr, apng_frames, 0);
|
||||||
long endpos = ftell(apng_FILE); // not the real end of file, just what of libpng wrote
|
|
||||||
for (fseek(apng_FILE, 0, SEEK_SET); // let go to the start of the file
|
|
||||||
ftell(apng_FILE)+12 < endpos; // let not go over the file bound
|
|
||||||
fseek(apng_FILE, 1, SEEK_CUR) // we went 8 steps back and now we go 1 step forward
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (fread(cn, sizeof(cn), 1, apng_FILE) != 1) // read 8 bytes
|
|
||||||
return false; // failed to read data
|
|
||||||
if (fseek(apng_FILE, -8, SEEK_CUR) != 0) //rewind 8 bytes
|
|
||||||
return false; // failed to rewird
|
|
||||||
if (!png_memcmp(cn+4, acTL_cn, 4)) //cmp for chuck header
|
|
||||||
return true; // found it
|
|
||||||
}
|
|
||||||
return false; // acTL chuck not found
|
|
||||||
}
|
|
||||||
|
|
||||||
static void M_PNGfix_acTL(png_structp png_ptr, png_infop png_info_ptr)
|
|
||||||
{
|
|
||||||
png_byte data[16];
|
|
||||||
long oldpos;
|
|
||||||
|
|
||||||
#ifndef PNG_STATIC
|
|
||||||
if (apng_set_acTL)
|
|
||||||
#endif
|
|
||||||
apng_set_acTL(png_ptr, png_info_ptr, apng_frames, 0);
|
|
||||||
|
|
||||||
#ifndef NO_PNG_DEBUG
|
#ifndef NO_PNG_DEBUG
|
||||||
png_debug(1, "in png_write_acTL\n");
|
png_debug(1, "in png_write_acTL\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_ptr->num_frames_to_write = apng_frames;
|
|
||||||
|
|
||||||
png_save_uint_32(data, apng_frames);
|
|
||||||
png_save_uint_32(data + 4, 0);
|
|
||||||
|
|
||||||
oldpos = ftell(apng_FILE);
|
|
||||||
|
|
||||||
if (M_PNGfind_acTL())
|
|
||||||
png_write_chunk(png_ptr, (png_bytep)acTL_cn, data, (png_size_t)8);
|
|
||||||
|
|
||||||
fseek(apng_FILE, oldpos, SEEK_SET);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean M_SetupaPNG(png_const_charp filename, png_bytep pal)
|
static boolean M_SetupaPNG(png_const_charp filename, png_bytep pal)
|
||||||
|
@ -1012,6 +970,16 @@ static boolean M_SetupaPNG(png_const_charp filename, png_bytep pal)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apng_ainfo_ptr = apng_create_info_struct(apng_ptr);
|
||||||
|
if (!apng_ainfo_ptr)
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_RENDER, "M_StartMovie: Error on allocate for apng\n");
|
||||||
|
png_destroy_write_struct(&apng_ptr, &apng_info_ptr);
|
||||||
|
fclose(apng_FILE);
|
||||||
|
remove(filename);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
png_init_io(apng_ptr, apng_FILE);
|
png_init_io(apng_ptr, apng_FILE);
|
||||||
|
|
||||||
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
|
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
|
||||||
|
@ -1029,12 +997,11 @@ static boolean M_SetupaPNG(png_const_charp filename, png_bytep pal)
|
||||||
|
|
||||||
M_PNGText(apng_ptr, apng_info_ptr, true);
|
M_PNGText(apng_ptr, apng_info_ptr, true);
|
||||||
|
|
||||||
#ifndef PNG_STATIC
|
apng_set_set_acTL_fn(apng_ptr, apng_ainfo_ptr, aPNG_set_acTL);
|
||||||
if (apng_set_acTL)
|
|
||||||
#endif
|
|
||||||
apng_set_acTL(apng_ptr, apng_info_ptr, PNG_UINT_31_MAX, 0);
|
|
||||||
|
|
||||||
png_write_info(apng_ptr, apng_info_ptr);
|
apng_set_acTL(apng_ptr, apng_info_ptr, apng_ainfo_ptr, PNG_UINT_31_MAX, 0);
|
||||||
|
|
||||||
|
apng_write_info(apng_ptr, apng_info_ptr, apng_ainfo_ptr);
|
||||||
|
|
||||||
apng_frames = 0;
|
apng_frames = 0;
|
||||||
|
|
||||||
|
@ -1237,8 +1204,8 @@ void M_StopMovie(void)
|
||||||
|
|
||||||
if (apng_frames)
|
if (apng_frames)
|
||||||
{
|
{
|
||||||
M_PNGfix_acTL(apng_ptr, apng_info_ptr);
|
M_PNGfix_acTL(apng_ptr, apng_info_ptr, apng_ainfo_ptr);
|
||||||
png_write_end(apng_ptr, apng_info_ptr);
|
apng_write_end(apng_ptr, apng_info_ptr, apng_ainfo_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
png_destroy_write_struct(&apng_ptr, &apng_info_ptr);
|
png_destroy_write_struct(&apng_ptr, &apng_info_ptr);
|
||||||
|
|
149
src/p_saveg.c
149
src/p_saveg.c
|
@ -677,84 +677,87 @@ static void P_NetArchiveWorld(void)
|
||||||
|
|
||||||
mld = W_CacheLumpNum(lastloadedmaplumpnum+ML_LINEDEFS, PU_CACHE);
|
mld = W_CacheLumpNum(lastloadedmaplumpnum+ML_LINEDEFS, PU_CACHE);
|
||||||
msd = W_CacheLumpNum(lastloadedmaplumpnum+ML_SIDEDEFS, PU_CACHE);
|
msd = W_CacheLumpNum(lastloadedmaplumpnum+ML_SIDEDEFS, PU_CACHE);
|
||||||
// do lines
|
if (mld && msd)
|
||||||
for (i = 0; i < numlines; i++, mld++, li++)
|
|
||||||
{
|
{
|
||||||
diff = diff2 = 0;
|
// do lines
|
||||||
|
for (i = 0; i < numlines; i++, mld++, li++)
|
||||||
if (li->special != SHORT(mld->special))
|
|
||||||
diff |= LD_SPECIAL;
|
|
||||||
|
|
||||||
if (SHORT(mld->special) == 321 || SHORT(mld->special) == 322) // only reason li->callcount would be non-zero is if either of these are involved
|
|
||||||
diff |= LD_CLLCOUNT;
|
|
||||||
|
|
||||||
if (li->sidenum[0] != 0xffff)
|
|
||||||
{
|
{
|
||||||
si = &sides[li->sidenum[0]];
|
diff = diff2 = 0;
|
||||||
if (si->textureoffset != SHORT(msd[li->sidenum[0]].textureoffset)<<FRACBITS)
|
|
||||||
diff |= LD_S1TEXOFF;
|
|
||||||
//SoM: 4/1/2000: Some textures are colormaps. Don't worry about invalid textures.
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[0]].toptexture) != -1
|
|
||||||
&& si->toptexture != R_TextureNumForName(msd[li->sidenum[0]].toptexture))
|
|
||||||
diff |= LD_S1TOPTEX;
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[0]].bottomtexture) != -1
|
|
||||||
&& si->bottomtexture != R_TextureNumForName(msd[li->sidenum[0]].bottomtexture))
|
|
||||||
diff |= LD_S1BOTTEX;
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[0]].midtexture) != -1
|
|
||||||
&& si->midtexture != R_TextureNumForName(msd[li->sidenum[0]].midtexture))
|
|
||||||
diff |= LD_S1MIDTEX;
|
|
||||||
}
|
|
||||||
if (li->sidenum[1] != 0xffff)
|
|
||||||
{
|
|
||||||
si = &sides[li->sidenum[1]];
|
|
||||||
if (si->textureoffset != SHORT(msd[li->sidenum[1]].textureoffset)<<FRACBITS)
|
|
||||||
diff2 |= LD_S2TEXOFF;
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[1]].toptexture) != -1
|
|
||||||
&& si->toptexture != R_TextureNumForName(msd[li->sidenum[1]].toptexture))
|
|
||||||
diff2 |= LD_S2TOPTEX;
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[1]].bottomtexture) != -1
|
|
||||||
&& si->bottomtexture != R_TextureNumForName(msd[li->sidenum[1]].bottomtexture))
|
|
||||||
diff2 |= LD_S2BOTTEX;
|
|
||||||
if (R_CheckTextureNumForName(msd[li->sidenum[1]].midtexture) != -1
|
|
||||||
&& si->midtexture != R_TextureNumForName(msd[li->sidenum[1]].midtexture))
|
|
||||||
diff2 |= LD_S2MIDTEX;
|
|
||||||
if (diff2)
|
|
||||||
diff |= LD_DIFF2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (diff)
|
if (li->special != SHORT(mld->special))
|
||||||
{
|
diff |= LD_SPECIAL;
|
||||||
statline++;
|
|
||||||
WRITEINT16(put, i);
|
|
||||||
WRITEUINT8(put, diff);
|
|
||||||
if (diff & LD_DIFF2)
|
|
||||||
WRITEUINT8(put, diff2);
|
|
||||||
if (diff & LD_FLAG)
|
|
||||||
WRITEINT16(put, li->flags);
|
|
||||||
if (diff & LD_SPECIAL)
|
|
||||||
WRITEINT16(put, li->special);
|
|
||||||
if (diff & LD_CLLCOUNT)
|
|
||||||
WRITEINT16(put, li->callcount);
|
|
||||||
|
|
||||||
si = &sides[li->sidenum[0]];
|
if (SHORT(mld->special) == 321 || SHORT(mld->special) == 322) // only reason li->callcount would be non-zero is if either of these are involved
|
||||||
if (diff & LD_S1TEXOFF)
|
diff |= LD_CLLCOUNT;
|
||||||
WRITEFIXED(put, si->textureoffset);
|
|
||||||
if (diff & LD_S1TOPTEX)
|
|
||||||
WRITEINT32(put, si->toptexture);
|
|
||||||
if (diff & LD_S1BOTTEX)
|
|
||||||
WRITEINT32(put, si->bottomtexture);
|
|
||||||
if (diff & LD_S1MIDTEX)
|
|
||||||
WRITEINT32(put, si->midtexture);
|
|
||||||
|
|
||||||
si = &sides[li->sidenum[1]];
|
if (li->sidenum[0] != 0xffff)
|
||||||
if (diff2 & LD_S2TEXOFF)
|
{
|
||||||
WRITEFIXED(put, si->textureoffset);
|
si = &sides[li->sidenum[0]];
|
||||||
if (diff2 & LD_S2TOPTEX)
|
if (si->textureoffset != SHORT(msd[li->sidenum[0]].textureoffset)<<FRACBITS)
|
||||||
WRITEINT32(put, si->toptexture);
|
diff |= LD_S1TEXOFF;
|
||||||
if (diff2 & LD_S2BOTTEX)
|
//SoM: 4/1/2000: Some textures are colormaps. Don't worry about invalid textures.
|
||||||
WRITEINT32(put, si->bottomtexture);
|
if (R_CheckTextureNumForName(msd[li->sidenum[0]].toptexture) != -1
|
||||||
if (diff2 & LD_S2MIDTEX)
|
&& si->toptexture != R_TextureNumForName(msd[li->sidenum[0]].toptexture))
|
||||||
WRITEINT32(put, si->midtexture);
|
diff |= LD_S1TOPTEX;
|
||||||
|
if (R_CheckTextureNumForName(msd[li->sidenum[0]].bottomtexture) != -1
|
||||||
|
&& si->bottomtexture != R_TextureNumForName(msd[li->sidenum[0]].bottomtexture))
|
||||||
|
diff |= LD_S1BOTTEX;
|
||||||
|
if (R_CheckTextureNumForName(msd[li->sidenum[0]].midtexture) != -1
|
||||||
|
&& si->midtexture != R_TextureNumForName(msd[li->sidenum[0]].midtexture))
|
||||||
|
diff |= LD_S1MIDTEX;
|
||||||
|
}
|
||||||
|
if (li->sidenum[1] != 0xffff)
|
||||||
|
{
|
||||||
|
si = &sides[li->sidenum[1]];
|
||||||
|
if (si->textureoffset != SHORT(msd[li->sidenum[1]].textureoffset)<<FRACBITS)
|
||||||
|
diff2 |= LD_S2TEXOFF;
|
||||||
|
if (R_CheckTextureNumForName(msd[li->sidenum[1]].toptexture) != -1
|
||||||
|
&& si->toptexture != R_TextureNumForName(msd[li->sidenum[1]].toptexture))
|
||||||
|
diff2 |= LD_S2TOPTEX;
|
||||||
|
if (R_CheckTextureNumForName(msd[li->sidenum[1]].bottomtexture) != -1
|
||||||
|
&& si->bottomtexture != R_TextureNumForName(msd[li->sidenum[1]].bottomtexture))
|
||||||
|
diff2 |= LD_S2BOTTEX;
|
||||||
|
if (R_CheckTextureNumForName(msd[li->sidenum[1]].midtexture) != -1
|
||||||
|
&& si->midtexture != R_TextureNumForName(msd[li->sidenum[1]].midtexture))
|
||||||
|
diff2 |= LD_S2MIDTEX;
|
||||||
|
if (diff2)
|
||||||
|
diff |= LD_DIFF2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (diff)
|
||||||
|
{
|
||||||
|
statline++;
|
||||||
|
WRITEINT16(put, i);
|
||||||
|
WRITEUINT8(put, diff);
|
||||||
|
if (diff & LD_DIFF2)
|
||||||
|
WRITEUINT8(put, diff2);
|
||||||
|
if (diff & LD_FLAG)
|
||||||
|
WRITEINT16(put, li->flags);
|
||||||
|
if (diff & LD_SPECIAL)
|
||||||
|
WRITEINT16(put, li->special);
|
||||||
|
if (diff & LD_CLLCOUNT)
|
||||||
|
WRITEINT16(put, li->callcount);
|
||||||
|
|
||||||
|
si = &sides[li->sidenum[0]];
|
||||||
|
if (diff & LD_S1TEXOFF)
|
||||||
|
WRITEFIXED(put, si->textureoffset);
|
||||||
|
if (diff & LD_S1TOPTEX)
|
||||||
|
WRITEINT32(put, si->toptexture);
|
||||||
|
if (diff & LD_S1BOTTEX)
|
||||||
|
WRITEINT32(put, si->bottomtexture);
|
||||||
|
if (diff & LD_S1MIDTEX)
|
||||||
|
WRITEINT32(put, si->midtexture);
|
||||||
|
|
||||||
|
si = &sides[li->sidenum[1]];
|
||||||
|
if (diff2 & LD_S2TEXOFF)
|
||||||
|
WRITEFIXED(put, si->textureoffset);
|
||||||
|
if (diff2 & LD_S2TOPTEX)
|
||||||
|
WRITEINT32(put, si->toptexture);
|
||||||
|
if (diff2 & LD_S2BOTTEX)
|
||||||
|
WRITEINT32(put, si->bottomtexture);
|
||||||
|
if (diff2 & LD_S2MIDTEX)
|
||||||
|
WRITEINT32(put, si->midtexture);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WRITEUINT16(put, 0xffff);
|
WRITEUINT16(put, 0xffff);
|
||||||
|
|
|
@ -3214,10 +3214,9 @@ boolean P_SetupLevel(boolean skipprecip)
|
||||||
if (!cv_analog4.changed)
|
if (!cv_analog4.changed)
|
||||||
CV_SetValue(&cv_analog4, 0);*/
|
CV_SetValue(&cv_analog4, 0);*/
|
||||||
|
|
||||||
#ifdef HWRENDER
|
// Shouldn't be necessary with render parity?
|
||||||
if (rendermode != render_soft && rendermode != render_none)
|
/*if (rendermode != render_none)
|
||||||
CV_Set(&cv_grfov, cv_grfov.defaultvalue);
|
CV_Set(&cv_fov, cv_fov.defaultvalue);*/
|
||||||
#endif
|
|
||||||
|
|
||||||
displayplayer = consoleplayer; // Start with your OWN view, please!
|
displayplayer = consoleplayer; // Start with your OWN view, please!
|
||||||
}
|
}
|
||||||
|
|
15
src/p_user.c
15
src/p_user.c
|
@ -8295,9 +8295,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
if (mo->eflags & MFE_VERTICALFLIP)
|
if (mo->eflags & MFE_VERTICALFLIP)
|
||||||
camheight += thiscam->height;
|
camheight += thiscam->height;
|
||||||
|
|
||||||
if (splitscreen == 1)
|
|
||||||
camspeed = (3*camspeed)/4;
|
|
||||||
|
|
||||||
if (camspeed > FRACUNIT)
|
if (camspeed > FRACUNIT)
|
||||||
camspeed = FRACUNIT;
|
camspeed = FRACUNIT;
|
||||||
|
|
||||||
|
@ -8351,13 +8348,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
height -= FixedMul(height, player->kartstuff[k_boostcam]);
|
height -= FixedMul(height, player->kartstuff[k_boostcam]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// in splitscreen modes, mess with the camera distances to make it feel proportional to how it feels normally
|
|
||||||
if (splitscreen == 1) // widescreen splits should get x1.5 distance
|
|
||||||
{
|
|
||||||
dist = FixedMul(dist, 3*FRACUNIT/2);
|
|
||||||
height = FixedMul(height, 3*FRACUNIT/2);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = mo->x - FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
x = mo->x - FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
||||||
y = mo->y - FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
y = mo->y - FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
||||||
|
|
||||||
|
@ -8623,10 +8613,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
{
|
{
|
||||||
thiscam->momx = x - thiscam->x;
|
thiscam->momx = x - thiscam->x;
|
||||||
thiscam->momy = y - thiscam->y;
|
thiscam->momy = y - thiscam->y;
|
||||||
if (splitscreen == 1) // Wide-screen needs to follow faster, due to a smaller vertical:horizontal ratio of screen space
|
thiscam->momz = FixedMul(z - thiscam->z, camspeed/2);
|
||||||
thiscam->momz = FixedMul(z - thiscam->z, (3*camspeed)/4);
|
|
||||||
else
|
|
||||||
thiscam->momz = FixedMul(z - thiscam->z, camspeed/2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
thiscam->pan = pan;
|
thiscam->pan = pan;
|
||||||
|
|
30
src/r_main.c
30
src/r_main.c
|
@ -56,6 +56,7 @@ INT32 centerx, centery;
|
||||||
fixed_t centerxfrac, centeryfrac;
|
fixed_t centerxfrac, centeryfrac;
|
||||||
fixed_t projection;
|
fixed_t projection;
|
||||||
fixed_t projectiony; // aspect ratio
|
fixed_t projectiony; // aspect ratio
|
||||||
|
fixed_t fovtan; // field of view
|
||||||
|
|
||||||
// just for profiling purposes
|
// just for profiling purposes
|
||||||
size_t framecount;
|
size_t framecount;
|
||||||
|
@ -134,11 +135,14 @@ static CV_PossibleValue_t drawdist_precip_cons_t[] = {
|
||||||
{1024, "1024"}, {1536, "1536"}, {2048, "2048"},
|
{1024, "1024"}, {1536, "1536"}, {2048, "2048"},
|
||||||
{0, "None"}, {0, NULL}};
|
{0, "None"}, {0, NULL}};
|
||||||
|
|
||||||
|
static CV_PossibleValue_t fov_cons_t[] = {{0, "MIN"}, {179*FRACUNIT, "MAX"}, {0, NULL}};
|
||||||
|
|
||||||
//static CV_PossibleValue_t precipdensity_cons_t[] = {{0, "None"}, {1, "Light"}, {2, "Moderate"}, {4, "Heavy"}, {6, "Thick"}, {8, "V.Thick"}, {0, NULL}};
|
//static CV_PossibleValue_t precipdensity_cons_t[] = {{0, "None"}, {1, "Light"}, {2, "Moderate"}, {4, "Heavy"}, {6, "Thick"}, {8, "V.Thick"}, {0, NULL}};
|
||||||
static CV_PossibleValue_t translucenthud_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t translucenthud_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}};
|
||||||
static CV_PossibleValue_t maxportals_cons_t[] = {{0, "MIN"}, {12, "MAX"}, {0, NULL}}; // lmao rendering 32 portals, you're a card
|
static CV_PossibleValue_t maxportals_cons_t[] = {{0, "MIN"}, {12, "MAX"}, {0, NULL}}; // lmao rendering 32 portals, you're a card
|
||||||
static CV_PossibleValue_t homremoval_cons_t[] = {{0, "No"}, {1, "Yes"}, {2, "Flash"}, {0, NULL}};
|
static CV_PossibleValue_t homremoval_cons_t[] = {{0, "No"}, {1, "Yes"}, {2, "Flash"}, {0, NULL}};
|
||||||
|
|
||||||
|
static void Fov_OnChange(void);
|
||||||
static void ChaseCam_OnChange(void);
|
static void ChaseCam_OnChange(void);
|
||||||
static void ChaseCam2_OnChange(void);
|
static void ChaseCam2_OnChange(void);
|
||||||
static void ChaseCam3_OnChange(void);
|
static void ChaseCam3_OnChange(void);
|
||||||
|
@ -175,6 +179,7 @@ consvar_t cv_drawdist = {"drawdist", "Infinite", CV_SAVE, drawdist_cons_t, NULL,
|
||||||
//consvar_t cv_drawdist_nights = {"drawdist_nights", "2048", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
//consvar_t cv_drawdist_nights = {"drawdist_nights", "2048", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_drawdist_precip = {"drawdist_precip", "1024", CV_SAVE, drawdist_precip_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_drawdist_precip = {"drawdist_precip", "1024", CV_SAVE, drawdist_precip_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
//consvar_t cv_precipdensity = {"precipdensity", "Moderate", CV_SAVE, precipdensity_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
//consvar_t cv_precipdensity = {"precipdensity", "Moderate", CV_SAVE, precipdensity_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
consvar_t cv_fov = {"fov", "90", CV_FLOAT|CV_CALL, fov_cons_t, Fov_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
// Okay, whoever said homremoval causes a performance hit should be shot.
|
// Okay, whoever said homremoval causes a performance hit should be shot.
|
||||||
consvar_t cv_homremoval = {"homremoval", "Yes", CV_SAVE, homremoval_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_homremoval = {"homremoval", "Yes", CV_SAVE, homremoval_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
@ -227,6 +232,14 @@ void SplitScreen_OnChange(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static void Fov_OnChange(void)
|
||||||
|
{
|
||||||
|
// Shouldn't be needed with render parity?
|
||||||
|
//if ((netgame || multiplayer) && !cv_debug && cv_fov.value != 90*FRACUNIT)
|
||||||
|
// CV_Set(&cv_fov, cv_fov.defaultvalue);
|
||||||
|
|
||||||
|
R_SetViewSize();
|
||||||
|
}
|
||||||
|
|
||||||
static void ChaseCam_OnChange(void)
|
static void ChaseCam_OnChange(void)
|
||||||
{
|
{
|
||||||
|
@ -517,7 +530,7 @@ static void R_InitTextureMapping(void)
|
||||||
//
|
//
|
||||||
// Calc focallength
|
// Calc focallength
|
||||||
// so FIELDOFVIEW angles covers SCREENWIDTH.
|
// so FIELDOFVIEW angles covers SCREENWIDTH.
|
||||||
focallength = FixedDiv(centerxfrac,
|
focallength = FixedDiv(projection,
|
||||||
FINETANGENT(FINEANGLES/4+/*cv_fov.value*/ FIELDOFVIEW/2));
|
FINETANGENT(FINEANGLES/4+/*cv_fov.value*/ FIELDOFVIEW/2));
|
||||||
|
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
|
@ -632,6 +645,7 @@ void R_ExecuteSetViewSize(void)
|
||||||
INT32 j;
|
INT32 j;
|
||||||
INT32 level;
|
INT32 level;
|
||||||
INT32 startmapl;
|
INT32 startmapl;
|
||||||
|
angle_t fov;
|
||||||
|
|
||||||
setsizeneeded = false;
|
setsizeneeded = false;
|
||||||
|
|
||||||
|
@ -660,9 +674,12 @@ void R_ExecuteSetViewSize(void)
|
||||||
centerxfrac = centerx<<FRACBITS;
|
centerxfrac = centerx<<FRACBITS;
|
||||||
centeryfrac = centery<<FRACBITS;
|
centeryfrac = centery<<FRACBITS;
|
||||||
|
|
||||||
projection = centerxfrac;
|
fov = FixedAngle(cv_fov.value/2) + ANGLE_90;
|
||||||
//projectiony = (((vid.height*centerx*BASEVIDWIDTH)/BASEVIDHEIGHT)/vid.width)<<FRACBITS;
|
fovtan = FINETANGENT(fov >> ANGLETOFINESHIFT);
|
||||||
projectiony = centerxfrac;
|
if (splitscreen == 1) // Splitscreen FOV should be adjusted to maintain expected vertical view
|
||||||
|
fovtan = 17*fovtan/10;
|
||||||
|
|
||||||
|
projection = projectiony = FixedDiv(centerxfrac, fovtan);
|
||||||
|
|
||||||
R_InitViewBuffer(scaledviewwidth, viewheight);
|
R_InitViewBuffer(scaledviewwidth, viewheight);
|
||||||
|
|
||||||
|
@ -688,7 +705,7 @@ void R_ExecuteSetViewSize(void)
|
||||||
for (i = 0; i < j; i++)
|
for (i = 0; i < j; i++)
|
||||||
{
|
{
|
||||||
dy = ((i - viewheight*8)<<FRACBITS) + FRACUNIT/2;
|
dy = ((i - viewheight*8)<<FRACBITS) + FRACUNIT/2;
|
||||||
dy = abs(dy);
|
dy = FixedMul(abs(dy), fovtan);
|
||||||
yslopetab[i] = FixedDiv(centerx*FRACUNIT, dy);
|
yslopetab[i] = FixedDiv(centerx*FRACUNIT, dy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -803,7 +820,7 @@ subsector_t *R_IsPointInSubsector(fixed_t x, fixed_t y)
|
||||||
static mobj_t *viewmobj;
|
static mobj_t *viewmobj;
|
||||||
|
|
||||||
// WARNING: a should be unsigned but to add with 2048, it isn't!
|
// WARNING: a should be unsigned but to add with 2048, it isn't!
|
||||||
#define AIMINGTODY(a) ((FINETANGENT((2048+(((INT32)a)>>ANGLETOFINESHIFT)) & FINEMASK)*160)>>FRACBITS)
|
#define AIMINGTODY(a) FixedDiv((FINETANGENT((2048+(((INT32)a)>>ANGLETOFINESHIFT)) & FINEMASK)*160)>>FRACBITS, fovtan)
|
||||||
|
|
||||||
// recalc necessary stuff for mouseaiming
|
// recalc necessary stuff for mouseaiming
|
||||||
// slopes are already calculated for the full possible view (which is 4*viewheight).
|
// slopes are already calculated for the full possible view (which is 4*viewheight).
|
||||||
|
@ -1490,6 +1507,7 @@ void R_RegisterEngineStuff(void)
|
||||||
CV_RegisterVar(&cv_drawdist);
|
CV_RegisterVar(&cv_drawdist);
|
||||||
//CV_RegisterVar(&cv_drawdist_nights);
|
//CV_RegisterVar(&cv_drawdist_nights);
|
||||||
CV_RegisterVar(&cv_drawdist_precip);
|
CV_RegisterVar(&cv_drawdist_precip);
|
||||||
|
CV_RegisterVar(&cv_fov);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_chasecam);
|
CV_RegisterVar(&cv_chasecam);
|
||||||
CV_RegisterVar(&cv_chasecam2);
|
CV_RegisterVar(&cv_chasecam2);
|
||||||
|
|
|
@ -79,6 +79,7 @@ extern consvar_t cv_flipcam, cv_flipcam2, cv_flipcam3, cv_flipcam4;
|
||||||
extern consvar_t cv_shadow, cv_shadowoffs;
|
extern consvar_t cv_shadow, cv_shadowoffs;
|
||||||
extern consvar_t cv_translucency;
|
extern consvar_t cv_translucency;
|
||||||
extern consvar_t /*cv_precipdensity,*/ cv_drawdist, /*cv_drawdist_nights,*/ cv_drawdist_precip;
|
extern consvar_t /*cv_precipdensity,*/ cv_drawdist, /*cv_drawdist_nights,*/ cv_drawdist_precip;
|
||||||
|
extern consvar_t cv_fov;
|
||||||
extern consvar_t cv_skybox;
|
extern consvar_t cv_skybox;
|
||||||
extern consvar_t cv_tailspickup;
|
extern consvar_t cv_tailspickup;
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,8 @@ if(${SDL2_FOUND})
|
||||||
set(SRB2_SDL2_TOTAL_SOURCES
|
set(SRB2_SDL2_TOTAL_SOURCES
|
||||||
${SRB2_CORE_SOURCES}
|
${SRB2_CORE_SOURCES}
|
||||||
${SRB2_CORE_HEADERS}
|
${SRB2_CORE_HEADERS}
|
||||||
|
${SRB2_PNG_SOURCES}
|
||||||
|
${SRB2_PNG_HEADERS}
|
||||||
${SRB2_CORE_RENDER_SOURCES}
|
${SRB2_CORE_RENDER_SOURCES}
|
||||||
${SRB2_CORE_GAME_SOURCES}
|
${SRB2_CORE_GAME_SOURCES}
|
||||||
${SRB2_LUA_SOURCES}
|
${SRB2_LUA_SOURCES}
|
||||||
|
@ -80,7 +82,8 @@ if(${SDL2_FOUND})
|
||||||
${SRB2_SDL2_HEADERS}
|
${SRB2_SDL2_HEADERS}
|
||||||
)
|
)
|
||||||
|
|
||||||
source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS})
|
source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS}
|
||||||
|
${SRB2_PNG_SOURCES} ${SRB2_PNG_HEADERS})
|
||||||
source_group("Renderer" FILES ${SRB2_CORE_RENDER_SOURCES})
|
source_group("Renderer" FILES ${SRB2_CORE_RENDER_SOURCES})
|
||||||
source_group("Game" FILES ${SRB2_CORE_GAME_SOURCES})
|
source_group("Game" FILES ${SRB2_CORE_GAME_SOURCES})
|
||||||
source_group("Assembly" FILES ${SRB2_ASM_SOURCES} ${SRB2_NASM_SOURCES})
|
source_group("Assembly" FILES ${SRB2_ASM_SOURCES} ${SRB2_NASM_SOURCES})
|
||||||
|
|
|
@ -164,6 +164,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\am_map.h" />
|
<ClInclude Include="..\am_map.h" />
|
||||||
|
<ClInclude Include="..\apng.h" />
|
||||||
<ClInclude Include="..\blua\lapi.h" />
|
<ClInclude Include="..\blua\lapi.h" />
|
||||||
<ClInclude Include="..\blua\lauxlib.h" />
|
<ClInclude Include="..\blua\lauxlib.h" />
|
||||||
<ClInclude Include="..\blua\lcode.h" />
|
<ClInclude Include="..\blua\lcode.h" />
|
||||||
|
@ -317,6 +318,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\am_map.c" />
|
<ClCompile Include="..\am_map.c" />
|
||||||
|
<ClCompile Include="..\apng.c" />
|
||||||
<ClCompile Include="..\blua\lapi.c" />
|
<ClCompile Include="..\blua\lapi.c" />
|
||||||
<ClCompile Include="..\blua\lauxlib.c" />
|
<ClCompile Include="..\blua\lauxlib.c" />
|
||||||
<ClCompile Include="..\blua\lbaselib.c" />
|
<ClCompile Include="..\blua\lbaselib.c" />
|
||||||
|
|
|
@ -294,6 +294,9 @@
|
||||||
<ClInclude Include="..\lua_script.h">
|
<ClInclude Include="..\lua_script.h">
|
||||||
<Filter>LUA</Filter>
|
<Filter>LUA</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\apng.h">
|
||||||
|
<Filter>M_Misc</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\md5.h">
|
<ClInclude Include="..\md5.h">
|
||||||
<Filter>M_Misc</Filter>
|
<Filter>M_Misc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
@ -2834,6 +2834,50 @@
|
||||||
RelativePath="..\m_argv.h"
|
RelativePath="..\m_argv.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\m_bbox.c"
|
RelativePath="..\m_bbox.c"
|
||||||
>
|
>
|
||||||
|
|
|
@ -2974,8 +2974,8 @@ static void I_ShutdownTimer(void)
|
||||||
//
|
//
|
||||||
tic_t I_GetTime (void)
|
tic_t I_GetTime (void)
|
||||||
{
|
{
|
||||||
static Uint32 basetime = 0;
|
static Uint64 basetime = 0;
|
||||||
Uint32 ticks = SDL_GetTicks();
|
Uint64 ticks = SDL_GetTicks();
|
||||||
|
|
||||||
if (!basetime)
|
if (!basetime)
|
||||||
basetime = ticks;
|
basetime = ticks;
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFE0B67CDE900BAD059 /* m_fixed.c */; };
|
1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFE0B67CDE900BAD059 /* m_fixed.c */; };
|
||||||
1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF000B67CDE900BAD059 /* m_menu.c */; };
|
1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF000B67CDE900BAD059 /* m_menu.c */; };
|
||||||
1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* m_misc.c */; };
|
1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* m_misc.c */; };
|
||||||
|
1E44AF110B67CDE900BAD059 /* apng.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* apng.c */; };
|
||||||
1E44AF130B67CDE900BAD059 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF040B67CDE900BAD059 /* m_random.c */; };
|
1E44AF130B67CDE900BAD059 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF040B67CDE900BAD059 /* m_random.c */; };
|
||||||
1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF180B67CE2A00BAD059 /* info.c */; };
|
1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF180B67CE2A00BAD059 /* info.c */; };
|
||||||
1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF1C0B67CE3600BAD059 /* md5.c */; };
|
1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF1C0B67CE3600BAD059 /* md5.c */; };
|
||||||
|
@ -253,7 +254,9 @@
|
||||||
1E44AF000B67CDE900BAD059 /* m_menu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_menu.c; path = ../../m_menu.c; sourceTree = SOURCE_ROOT; };
|
1E44AF000B67CDE900BAD059 /* m_menu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_menu.c; path = ../../m_menu.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF010B67CDE900BAD059 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../m_menu.h; sourceTree = SOURCE_ROOT; };
|
1E44AF010B67CDE900BAD059 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../m_menu.h; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF020B67CDE900BAD059 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
1E44AF020B67CDE900BAD059 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
||||||
|
1E44AF020B67CDE900BAD059 /* apng.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = apng.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF030B67CDE900BAD059 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
|
1E44AF030B67CDE900BAD059 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
1E44AF020B67CDE900BAD059 /* apng.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = apng.h; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF040B67CDE900BAD059 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../m_random.c; sourceTree = SOURCE_ROOT; };
|
1E44AF040B67CDE900BAD059 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../m_random.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF050B67CDE900BAD059 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../m_random.h; sourceTree = SOURCE_ROOT; };
|
1E44AF050B67CDE900BAD059 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../m_random.h; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF060B67CDE900BAD059 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../m_swap.h; sourceTree = SOURCE_ROOT; };
|
1E44AF060B67CDE900BAD059 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../m_swap.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
@ -679,6 +682,8 @@
|
||||||
1E44AEFF0B67CDE900BAD059 /* m_fixed.h */,
|
1E44AEFF0B67CDE900BAD059 /* m_fixed.h */,
|
||||||
1E44AF020B67CDE900BAD059 /* m_misc.c */,
|
1E44AF020B67CDE900BAD059 /* m_misc.c */,
|
||||||
1E44AF030B67CDE900BAD059 /* m_misc.h */,
|
1E44AF030B67CDE900BAD059 /* m_misc.h */,
|
||||||
|
1E44AF020B67CDE900BAD059 /* apng.c */,
|
||||||
|
1E44AF030B67CDE900BAD059 /* apng.h */,
|
||||||
676BB51C0E0DE06100C95963 /* m_queue.c */,
|
676BB51C0E0DE06100C95963 /* m_queue.c */,
|
||||||
676BB51D0E0DE06100C95963 /* m_queue.h */,
|
676BB51D0E0DE06100C95963 /* m_queue.h */,
|
||||||
1E44AF040B67CDE900BAD059 /* m_random.c */,
|
1E44AF040B67CDE900BAD059 /* m_random.c */,
|
||||||
|
|
BIN
src/sdl/srb2icon.png
Normal file
BIN
src/sdl/srb2icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
|
@ -835,6 +835,16 @@
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\apng.c">
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\m_misc.c">
|
<ClCompile Include="..\m_misc.c">
|
||||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
@ -1293,6 +1303,7 @@
|
||||||
<ClInclude Include="filter\interp.h" />
|
<ClInclude Include="filter\interp.h" />
|
||||||
<ClInclude Include="filter\lq2x.h" />
|
<ClInclude Include="filter\lq2x.h" />
|
||||||
<ClInclude Include="..\p5prof.h" />
|
<ClInclude Include="..\p5prof.h" />
|
||||||
|
<ClInclude Include="..\apng.h" />
|
||||||
<ClInclude Include="..\d_clisrv.h" />
|
<ClInclude Include="..\d_clisrv.h" />
|
||||||
<ClInclude Include="..\d_event.h" />
|
<ClInclude Include="..\d_event.h" />
|
||||||
<ClInclude Include="..\d_main.h" />
|
<ClInclude Include="..\d_main.h" />
|
||||||
|
|
|
@ -2790,6 +2790,50 @@
|
||||||
<Filter
|
<Filter
|
||||||
Name="M_Misc"
|
Name="M_Misc"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\m_argv.c"
|
RelativePath="..\m_argv.c"
|
||||||
>
|
>
|
||||||
|
|
|
@ -1365,6 +1365,20 @@
|
||||||
path = ../../m_misc.h;
|
path = ../../m_misc.h;
|
||||||
refType = 2;
|
refType = 2;
|
||||||
};
|
};
|
||||||
|
84177764085A10EB000C01D8 = {
|
||||||
|
fileEncoding = 30;
|
||||||
|
isa = PBXFileReference;
|
||||||
|
name = apng.c;
|
||||||
|
path = ../../apng.c;
|
||||||
|
refType = 2;
|
||||||
|
};
|
||||||
|
84177765085A10EB000C01D8 = {
|
||||||
|
fileEncoding = 30;
|
||||||
|
isa = PBXFileReference;
|
||||||
|
name = m_misc.h;
|
||||||
|
path = ../../apng.h;
|
||||||
|
refType = 2;
|
||||||
|
};
|
||||||
84177766085A10EB000C01D8 = {
|
84177766085A10EB000C01D8 = {
|
||||||
fileEncoding = 30;
|
fileEncoding = 30;
|
||||||
isa = PBXFileReference;
|
isa = PBXFileReference;
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFE0B67CDE900BAD059 /* m_fixed.c */; };
|
1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFE0B67CDE900BAD059 /* m_fixed.c */; };
|
||||||
1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF000B67CDE900BAD059 /* m_menu.c */; };
|
1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF000B67CDE900BAD059 /* m_menu.c */; };
|
||||||
1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* m_misc.c */; };
|
1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* m_misc.c */; };
|
||||||
|
1E44AF110B67CDE900BAD059 /* apng.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* apng.c */; };
|
||||||
1E44AF130B67CDE900BAD059 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF040B67CDE900BAD059 /* m_random.c */; };
|
1E44AF130B67CDE900BAD059 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF040B67CDE900BAD059 /* m_random.c */; };
|
||||||
1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF180B67CE2A00BAD059 /* info.c */; };
|
1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF180B67CE2A00BAD059 /* info.c */; };
|
||||||
1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF1C0B67CE3600BAD059 /* md5.c */; };
|
1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF1C0B67CE3600BAD059 /* md5.c */; };
|
||||||
|
@ -254,6 +255,8 @@
|
||||||
1E44AF010B67CDE900BAD059 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../m_menu.h; sourceTree = SOURCE_ROOT; };
|
1E44AF010B67CDE900BAD059 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../m_menu.h; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF020B67CDE900BAD059 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
1E44AF020B67CDE900BAD059 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF030B67CDE900BAD059 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
|
1E44AF030B67CDE900BAD059 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
1E44AF020B67CDE900BAD059 /* apng.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = apng.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
|
||||||
|
1E44AF030B67CDE900BAD059 /* apng.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = apng.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF040B67CDE900BAD059 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../m_random.c; sourceTree = SOURCE_ROOT; };
|
1E44AF040B67CDE900BAD059 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../m_random.c; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF050B67CDE900BAD059 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../m_random.h; sourceTree = SOURCE_ROOT; };
|
1E44AF050B67CDE900BAD059 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../m_random.h; sourceTree = SOURCE_ROOT; };
|
||||||
1E44AF060B67CDE900BAD059 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../m_swap.h; sourceTree = SOURCE_ROOT; };
|
1E44AF060B67CDE900BAD059 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../m_swap.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
@ -679,6 +682,8 @@
|
||||||
1E44AEFF0B67CDE900BAD059 /* m_fixed.h */,
|
1E44AEFF0B67CDE900BAD059 /* m_fixed.h */,
|
||||||
1E44AF020B67CDE900BAD059 /* m_misc.c */,
|
1E44AF020B67CDE900BAD059 /* m_misc.c */,
|
||||||
1E44AF030B67CDE900BAD059 /* m_misc.h */,
|
1E44AF030B67CDE900BAD059 /* m_misc.h */,
|
||||||
|
1E44AF020B67CDE900BAD059 /* apng.c */,
|
||||||
|
1E44AF030B67CDE900BAD059 /* apng.h */,
|
||||||
676BB51C0E0DE06100C95963 /* m_queue.c */,
|
676BB51C0E0DE06100C95963 /* m_queue.c */,
|
||||||
676BB51D0E0DE06100C95963 /* m_queue.h */,
|
676BB51D0E0DE06100C95963 /* m_queue.h */,
|
||||||
1E44AF040B67CDE900BAD059 /* m_random.c */,
|
1E44AF040B67CDE900BAD059 /* m_random.c */,
|
||||||
|
|
|
@ -186,6 +186,7 @@ FILE *W_OpenWadFile(const char **filename, boolean useerrors)
|
||||||
static inline void W_LoadDehackedLumpsPK3(UINT16 wadnum)
|
static inline void W_LoadDehackedLumpsPK3(UINT16 wadnum)
|
||||||
{
|
{
|
||||||
UINT16 posStart, posEnd;
|
UINT16 posStart, posEnd;
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
posStart = W_CheckNumForFolderStartPK3("Lua/", wadnum, 0);
|
posStart = W_CheckNumForFolderStartPK3("Lua/", wadnum, 0);
|
||||||
if (posStart != INT16_MAX)
|
if (posStart != INT16_MAX)
|
||||||
{
|
{
|
||||||
|
@ -194,6 +195,7 @@ static inline void W_LoadDehackedLumpsPK3(UINT16 wadnum)
|
||||||
for (; posStart < posEnd; posStart++)
|
for (; posStart < posEnd; posStart++)
|
||||||
LUA_LoadLump(wadnum, posStart);
|
LUA_LoadLump(wadnum, posStart);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
posStart = W_CheckNumForFolderStartPK3("SOC/", wadnum, 0);
|
posStart = W_CheckNumForFolderStartPK3("SOC/", wadnum, 0);
|
||||||
if (posStart != INT16_MAX)
|
if (posStart != INT16_MAX)
|
||||||
{
|
{
|
||||||
|
@ -793,9 +795,11 @@ UINT16 W_InitFile(const char *filename)
|
||||||
CONS_Printf(M_GetText("Loading SOC from %s\n"), wadfile->filename);
|
CONS_Printf(M_GetText("Loading SOC from %s\n"), wadfile->filename);
|
||||||
DEH_LoadDehackedLumpPwad(numwadfiles - 1, 0);
|
DEH_LoadDehackedLumpPwad(numwadfiles - 1, 0);
|
||||||
break;
|
break;
|
||||||
|
#ifdef HAVE_BLUA
|
||||||
case RET_LUA:
|
case RET_LUA:
|
||||||
LUA_LoadLump(numwadfiles - 1, 0);
|
LUA_LoadLump(numwadfiles - 1, 0);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,6 +182,7 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\am_map.c" />
|
<ClCompile Include="..\am_map.c" />
|
||||||
|
<ClCompile Include="..\apng.c" />
|
||||||
<ClCompile Include="..\blua\lapi.c" />
|
<ClCompile Include="..\blua\lapi.c" />
|
||||||
<ClCompile Include="..\blua\lauxlib.c" />
|
<ClCompile Include="..\blua\lauxlib.c" />
|
||||||
<ClCompile Include="..\blua\lbaselib.c" />
|
<ClCompile Include="..\blua\lbaselib.c" />
|
||||||
|
@ -330,6 +331,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\am_map.h" />
|
<ClInclude Include="..\am_map.h" />
|
||||||
|
<ClInclude Include="..\apng.h" />
|
||||||
<ClInclude Include="..\blua\lapi.h" />
|
<ClInclude Include="..\blua\lapi.h" />
|
||||||
<ClInclude Include="..\blua\lauxlib.h" />
|
<ClInclude Include="..\blua\lauxlib.h" />
|
||||||
<ClInclude Include="..\blua\lcode.h" />
|
<ClInclude Include="..\blua\lcode.h" />
|
||||||
|
|
|
@ -2851,6 +2851,50 @@
|
||||||
RelativePath="..\m_misc.h"
|
RelativePath="..\m_misc.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions=""
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\apng.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\m_queue.c"
|
RelativePath="..\m_queue.c"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in a new issue