From 6a89d3594a60ff068f7d677b9cea8720589f2e25 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 2 Jan 2007 09:51:04 +0000 Subject: [PATCH] - Fixed: The ANIMATED parser must read the bytes for the speed as unsigned bytes. - Fixed: The screen wipe must be disabled for Heretic's underwater ending. If not, the wipe will try to mix pictures with different palettes. SVN r435 (trunk) --- docs/rh-log.txt | 5 + src/c_console.cpp | 2 +- src/d_main.cpp | 4 +- src/f_finale.cpp | 13 +- src/r_anim.cpp | 8 +- src/sdl/st_start.cpp | 378 ++++++++++++++++++++--------------------- src/st_start.h | 2 +- src/win32/st_start.cpp | 14 +- 8 files changed, 216 insertions(+), 210 deletions(-) diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 32d3847ac..94d4afa23 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,8 @@ +January 2, 2007 (Changes by Graf Zahl) +- Fixed: The ANIMATED parser must read the bytes for the speed as unsigned bytes. +- Fixed: The screen wipe must be disabled for Heretic's underwater ending. If + not, the wipe will try to mix pictures with different palettes. + December 31, 2006 (Changes by Graf Zahl) - Fixed: Several actors for Doom were missing their spawn ID. diff --git a/src/c_console.cpp b/src/c_console.cpp index e64c73bc8..26d33aa93 100644 --- a/src/c_console.cpp +++ b/src/c_console.cpp @@ -698,7 +698,7 @@ void AddToConsole (int printlevel, const char *text) worklen = size; } if (work == NULL) - { + { static char oom[] = TEXTCOLOR_RED "*** OUT OF MEMORY ***"; work = oom; worklen = 0; diff --git a/src/d_main.cpp b/src/d_main.cpp index 0ce931ffa..6ba9a2f8d 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -586,7 +586,7 @@ void D_Display (bool screenshot) NetUpdate (); // send out any new accumulation - if (!wipe || screenshot) + if (!wipe || screenshot || NoWipe < 0) { // normal update C_DrawConsole (); // draw console @@ -2273,7 +2273,7 @@ void D_DoomMain (void) // turbo option // [RH] (now a cvar) { - UCVarValue value; + UCVarValue value; static char one_hundred[] = "100"; value.String = Args.CheckValue ("-turbo"); diff --git a/src/f_finale.cpp b/src/f_finale.cpp index eefd7bcf9..d9c6343b1 100644 --- a/src/f_finale.cpp +++ b/src/f_finale.cpp @@ -829,6 +829,7 @@ void F_DemonScroll () = ================== */ +extern int NoWipe; void F_DrawUnderwater(void) { @@ -852,20 +853,19 @@ void F_DrawUnderwater(void) *palette++ = PalEntry (orgpal[0], orgpal[1], orgpal[2]); } screen->UpdatePalette (); - + FinaleStage = 2; + } + // intentional fall-through + case 2: pic = TexMan("E2END"); screen->DrawTexture (pic, 0, 0, DTA_VirtualWidth, pic->GetWidth(), DTA_VirtualHeight, pic->GetHeight(), TAG_DONE); screen->FillBorder (NULL); - FinaleStage = 2; - } - - // intentional fall-through - case 2: paused = false; menuactive = MENU_Off; + NoWipe = -1; break; case 4: @@ -886,6 +886,7 @@ void F_DrawUnderwater(void) DTA_VirtualHeight, pic->GetHeight(), TAG_DONE); screen->FillBorder (NULL); + NoWipe = 0; break; } } diff --git a/src/r_anim.cpp b/src/r_anim.cpp index 574d4cacf..aade753d4 100644 --- a/src/r_anim.cpp +++ b/src/r_anim.cpp @@ -184,10 +184,10 @@ void R_InitPicAnims (void) // Speed is stored as tics, but we want ms so scale accordingly. animspeed = /* .speed */ - Scale ((anim_p[19] << 0) | - (anim_p[20] << 8) | - (anim_p[21] << 16) | - (anim_p[22] << 24), 1000, 35); + Scale ((BYTE(anim_p[19]) << 0) | + (BYTE(anim_p[20]) << 8) | + (BYTE(anim_p[21]) << 16) | + (BYTE(anim_p[22]) << 24), 1000, 35); R_AddSimpleAnim (pic1, pic2 - pic1 + 1, animtype, animspeed); } diff --git a/src/sdl/st_start.cpp b/src/sdl/st_start.cpp index 9bae1d054..0a7f4ca5d 100644 --- a/src/sdl/st_start.cpp +++ b/src/sdl/st_start.cpp @@ -1,52 +1,52 @@ -/* -** st_start.cpp -** Handles the startup screen. -** -**--------------------------------------------------------------------------- -** Copyright 2006 Randy Heit -** 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. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 -#include -#include -#include - -#include "st_start.h" -#include "doomdef.h" -#include "i_system.h" - -static termios OldTermIOS; -static bool DidNetInit; -static int NetProgressMax, NetProgressTicker; -static const char *NetMessage; -static char SpinnyProgressChars[8] = { '|', '/', '-', '\\', '|', '/', '-', '\\' }; - +/* +** st_start.cpp +** Handles the startup screen. +** +**--------------------------------------------------------------------------- +** Copyright 2006 Randy Heit +** 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. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 +#include +#include +#include + +#include "st_start.h" +#include "doomdef.h" +#include "i_system.h" + +static termios OldTermIOS; +static bool DidNetInit; +static int NetProgressMax, NetProgressTicker; +static const char *NetMessage; +static char SpinnyProgressChars[8] = { '|', '/', '-', '\\', '|', '/', '-', '\\' }; + //=========================================================================== // // ST_Init @@ -55,10 +55,10 @@ static char SpinnyProgressChars[8] = { '|', '/', '-', '\\', '|', '/', '-', '\\' // //=========================================================================== -void ST_Init(int maxProgress) -{ -} - +void ST_Init(int maxProgress) +{ +} + //=========================================================================== // // ST_Done @@ -68,10 +68,10 @@ void ST_Init(int maxProgress) // //=========================================================================== -void ST_Done() -{ -} - +void ST_Done() +{ +} + //=========================================================================== // // ST_Progress @@ -80,10 +80,10 @@ void ST_Done() // //=========================================================================== -void ST_Progress() -{ -} - +void ST_Progress() +{ +} + //=========================================================================== // // ST_NetInit @@ -93,38 +93,38 @@ void ST_Progress() // //=========================================================================== -void ST_NetInit(const char *message, int numplayers) -{ - if (!DidNetInit) - { - termios rawtermios; - - fprintf (stderr, "Press 'Q' to abort network game synchronization."); - // Set stdin to raw mode so we can get keypresses in ST_CheckNetAbort() - // immediately without waiting for an EOL. - tcgetattr (STDIN_FILENO, &OldTermIOS); - rawtermios = OldTermIOS; - rawtermios.c_lflag &= ~(ICANON | ECHO); - tcsetattr (STDIN_FILENO, TCSANOW, &rawtermios); - DidNetInit = true; - atterm (ST_NetDone); - } - if (numplayers == 1) - { - // Status message without any real progress info. - fprintf (stderr, "\n%s.", message); - } - else - { - fprintf (stderr, "\n%s: ", message); - } - fflush (stderr); - NetMessage = message; - NetProgressMax = numplayers; - NetProgressTicker = 0; - ST_NetProgress(1); // You always know about yourself -} - +void ST_NetInit(const char *message, int numplayers) +{ + if (!DidNetInit) + { + termios rawtermios; + + fprintf (stderr, "Press 'Q' to abort network game synchronization."); + // Set stdin to raw mode so we can get keypresses in ST_CheckNetAbort() + // immediately without waiting for an EOL. + tcgetattr (STDIN_FILENO, &OldTermIOS); + rawtermios = OldTermIOS; + rawtermios.c_lflag &= ~(ICANON | ECHO); + tcsetattr (STDIN_FILENO, TCSANOW, &rawtermios); + DidNetInit = true; + atterm (ST_NetDone); + } + if (numplayers == 1) + { + // Status message without any real progress info. + fprintf (stderr, "\n%s.", message); + } + else + { + fprintf (stderr, "\n%s: ", message); + } + fflush (stderr); + NetMessage = message; + NetProgressMax = numplayers; + NetProgressTicker = 0; + ST_NetProgress(1); // You always know about yourself +} + //=========================================================================== // // ST_NetDone @@ -132,18 +132,18 @@ void ST_NetInit(const char *message, int numplayers) // Restores the old stdin tty settings. // //=========================================================================== - -void ST_NetDone() -{ - // Restore stdin settings - if (DidNetInit) - { - tcsetattr (STDIN_FILENO, TCSANOW, &OldTermIOS); - printf ("\n"); - DidNetInit = false; - } -} - + +void ST_NetDone() +{ + // Restore stdin settings + if (DidNetInit) + { + tcsetattr (STDIN_FILENO, TCSANOW, &OldTermIOS); + printf ("\n"); + DidNetInit = false; + } +} + //=========================================================================== // // ST_NetMessage @@ -153,18 +153,18 @@ void ST_NetDone() // stream as normal messages. // //=========================================================================== - -void ST_NetMessage(const char *format, ...) -{ - FString str; - va_list argptr; - - va_start (argptr, format); - str.VFormat (format, argptr); - va_end (argptr); - fprintf (stderr, "\r%-40s\n", str.GetChars()); -} - + +void ST_NetMessage(const char *format, ...) +{ + FString str; + va_list argptr; + + va_start (argptr, format); + str.VFormat (format, argptr); + va_end (argptr); + fprintf (stderr, "\r%-40s\n", str.GetChars()); +} + //=========================================================================== // // ST_NetProgress @@ -174,37 +174,37 @@ void ST_NetMessage(const char *format, ...) // //=========================================================================== -void ST_NetProgress(int count) -{ - int i; - - if (count == 0) - { - NetProgressTicker++; - } - else if (count > 0) - { - NetProgressTicker = count; - } - if (NetProgressMax == 0) - { - // Spinny-type progress meter, because we're a guest waiting for the host. - fprintf (stderr, "\r%s: %c", NetMessage, SpinnyProgressChars[NetProgressTicker & 7]); - fflush (stderr); - } - else if (NetProgressMax > 1) - { - // Dotty-type progress meter. - fprintf (stderr, "\r%s: ", NetMessage); - for (i = 0; i < NetProgressTicker; ++i) - { - fputc ('.', stderr); - } - fprintf (stderr, "%*c[%2d/%2d]", NetProgressMax + 1 - NetProgressTicker, ' ', NetProgressTicker, NetProgressMax); - fflush (stderr); - } -} - +void ST_NetProgress(int count) +{ + int i; + + if (count == 0) + { + NetProgressTicker++; + } + else if (count > 0) + { + NetProgressTicker = count; + } + if (NetProgressMax == 0) + { + // Spinny-type progress meter, because we're a guest waiting for the host. + fprintf (stderr, "\r%s: %c", NetMessage, SpinnyProgressChars[NetProgressTicker & 7]); + fflush (stderr); + } + else if (NetProgressMax > 1) + { + // Dotty-type progress meter. + fprintf (stderr, "\r%s: ", NetMessage); + for (i = 0; i < NetProgressTicker; ++i) + { + fputc ('.', stderr); + } + fprintf (stderr, "%*c[%2d/%2d]", NetProgressMax + 1 - NetProgressTicker, ' ', NetProgressTicker, NetProgressMax); + fflush (stderr); + } +} + //=========================================================================== // // ST_NetLoop @@ -219,44 +219,44 @@ void ST_NetProgress(int count) // //=========================================================================== -bool ST_NetLoop(bool (*timer_callback)(void *), void *userdata) -{ - fd_set rfds; - struct timeval tv; - int retval; - char k; - - for (;;) - { - // Don't flood the network with packets on startup. - tv.tv_sec = 0; - tv.tv_usec = 500000; - - FD_ZERO (&rfds); - FD_SET (STDIN_FILENO, &rfds); - - retval = select (1, &rfds, NULL, NULL, &tv); - - if (retval == -1) - { - // Error - } - else if (retval == 0) - { - if (timer_callback (userdata)) - { - fputc ('\n', stderr); - return true; - } - } - else if (read (STDIN_FILENO, &k, 1) == 1) - { - // Check input on stdin - if (k == 'q' || k == 'Q') - { - fprintf (stderr, "\nNetwork game synchronization aborted."); - return false; - } - } - } -} +bool ST_NetLoop(bool (*timer_callback)(void *), void *userdata) +{ + fd_set rfds; + struct timeval tv; + int retval; + char k; + + for (;;) + { + // Don't flood the network with packets on startup. + tv.tv_sec = 0; + tv.tv_usec = 500000; + + FD_ZERO (&rfds); + FD_SET (STDIN_FILENO, &rfds); + + retval = select (1, &rfds, NULL, NULL, &tv); + + if (retval == -1) + { + // Error + } + else if (retval == 0) + { + if (timer_callback (userdata)) + { + fputc ('\n', stderr); + return true; + } + } + else if (read (STDIN_FILENO, &k, 1) == 1) + { + // Check input on stdin + if (k == 'q' || k == 'Q') + { + fprintf (stderr, "\nNetwork game synchronization aborted."); + return false; + } + } + } +} diff --git a/src/st_start.h b/src/st_start.h index eb8bd7834..1e79c3256 100644 --- a/src/st_start.h +++ b/src/st_start.h @@ -38,7 +38,7 @@ extern void ST_Init(int maxProgress); extern void ST_Done(); extern void ST_Progress(); extern void ST_NetInit(const char *message, int numplayers); -extern void ST_NetProgress(int count); +extern void ST_NetProgress(int count); extern void ST_NetMessage(const char *format, ...); // cover for printf() extern void ST_NetDone(); extern bool ST_NetLoop(bool (*timer_callback)(void *), void *userdata); diff --git a/src/win32/st_start.cpp b/src/win32/st_start.cpp index 898803954..94c806cfe 100644 --- a/src/win32/st_start.cpp +++ b/src/win32/st_start.cpp @@ -211,13 +211,13 @@ void ST_NetDone() void ST_NetMessage(const char *format, ...) { - FString str; - va_list argptr; - - va_start (argptr, format); - str.VFormat (format, argptr); - va_end (argptr); - Printf ("%s\n", str.GetChars()); + FString str; + va_list argptr; + + va_start (argptr, format); + str.VFormat (format, argptr); + va_end (argptr); + Printf ("%s\n", str.GetChars()); } //===========================================================================