From 135e9b97971b8b0fcfb7fe7ce96de4578dd9ac3d Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 11 Aug 2020 23:13:25 -0400 Subject: [PATCH] f_finale now compiles --- src/b_bot.c | 586 ---------------------- src/b_bot.h | 18 - src/dehacked.c | 4 - src/f_finale.c | 1060 +++------------------------------------ src/f_finale.h | 4 +- src/g_game.c | 8 +- src/g_input.h | 2 + src/hardware/hw3sound.c | 18 +- src/hardware/hw_draw.c | 48 +- src/hardware/hw_main.c | 4 +- src/hu_stuff.c | 6 - src/m_cheat.c | 2 +- src/p_maputl.c | 16 +- src/p_mobj.c | 431 ---------------- src/p_setup.c | 12 +- src/p_spec.c | 6 +- src/p_user.c | 45 +- src/r_main.c | 2 +- src/st_stuff.c | 11 +- src/v_video.c | 60 +-- 20 files changed, 195 insertions(+), 2148 deletions(-) delete mode 100644 src/b_bot.c delete mode 100644 src/b_bot.h diff --git a/src/b_bot.c b/src/b_bot.c deleted file mode 100644 index 4397938c1..000000000 --- a/src/b_bot.c +++ /dev/null @@ -1,586 +0,0 @@ -// SONIC ROBO BLAST 2 -//----------------------------------------------------------------------------- -// Copyright (C) 2007-2016 by John "JTE" Muniz. -// Copyright (C) 2011-2020 by Sonic Team Junior. -// -// This program is free software distributed under the -// terms of the GNU General Public License, version 2. -// See the 'LICENSE' file for more details. -//----------------------------------------------------------------------------- -/// \file b_bot.c -/// \brief Basic bot handling - -#include "doomdef.h" -#include "d_player.h" -#include "g_game.h" -#include "r_main.h" -#include "p_local.h" -#include "b_bot.h" -#include "lua_hook.h" - -// If you want multiple bots, variables like this will -// have to be stuffed in something accessible through player_t. -static boolean lastForward = false; -static boolean lastBlocked = false; -static boolean blocked = false; - -static boolean jump_last = false; -static boolean spin_last = false; -static UINT8 anxiety = 0; -static boolean panic = false; -static UINT8 flymode = 0; -static boolean spinmode = false; -static boolean thinkfly = false; - -static inline void B_ResetAI(void) -{ - jump_last = false; - spin_last = false; - anxiety = 0; - panic = false; - flymode = 0; - spinmode = false; - thinkfly = false; -} - -static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd) -{ - boolean forward=false, backward=false, left=false, right=false, jump=false, spin=false; - - player_t *player = sonic->player, *bot = tails->player; - ticcmd_t *pcmd = &player->cmd; - boolean water = tails->eflags & MFE_UNDERWATER; - SINT8 flip = P_MobjFlip(tails); - boolean _2d = (tails->flags2 & MF2_TWOD) || twodlevel; - fixed_t scale = tails->scale; - - fixed_t dist = P_AproxDistance(sonic->x - tails->x, sonic->y - tails->y); - fixed_t zdist = flip * (sonic->z - tails->z); - angle_t ang = sonic->angle; - fixed_t pmom = P_AproxDistance(sonic->momx, sonic->momy); - fixed_t bmom = P_AproxDistance(tails->momx, tails->momy); - fixed_t followmax = 128 * 8 * scale; // Max follow distance before AI begins to enter "panic" state - fixed_t followthres = 92 * scale; // Distance that AI will try to reach - fixed_t followmin = 32 * scale; - fixed_t comfortheight = 96 * scale; - fixed_t touchdist = 24 * scale; - boolean stalled = (bmom < scale >> 1) && dist > followthres; // Helps to see if the AI is having trouble catching up - boolean samepos = (sonic->x == tails->x && sonic->y == tails->y); - - if (!samepos) - ang = R_PointToAngle2(tails->x, tails->y, sonic->x, sonic->y); - - // We can't follow Sonic if he's not around! - if (!sonic || sonic->health <= 0) - return; - - // Lua can handle it! - if (LUAh_BotAI(sonic, tails, cmd)) - return; - - if (tails->player->powers[pw_carry] == CR_MACESPIN || tails->player->powers[pw_carry] == CR_GENERIC) - { - boolean isrelevant = (sonic->player->powers[pw_carry] == CR_MACESPIN || sonic->player->powers[pw_carry] == CR_GENERIC); - dist = P_AproxDistance(tails->x-sonic->x, tails->y-sonic->y); - if (sonic->player->cmd.buttons & BT_JUMP && (sonic->player->pflags & PF_JUMPED) && isrelevant) - cmd->buttons |= BT_JUMP; - if (isrelevant) - { - cmd->forwardmove = sonic->player->cmd.forwardmove; - cmd->angleturn = abs((signed)(tails->angle - sonic->angle))>>16; - if (sonic->angle < tails->angle) - cmd->angleturn = -cmd->angleturn; - } else if (dist > FixedMul(512*FRACUNIT, tails->scale)) - cmd->buttons |= BT_JUMP; - return; - } - - // Adapted from CobaltBW's tails_AI.wad - - // Check water - if (water) - { - followmin = 0; - followthres = 16*scale; - followmax >>= 1; - thinkfly = false; - } - - // Check anxiety - if (spinmode) - { - anxiety = 0; - panic = false; - } - else if (dist > followmax || zdist > comfortheight || stalled) - { - anxiety = min(anxiety + 2, 70); - if (anxiety >= 70) - panic = true; - } - else - { - anxiety = max(anxiety - 1, 0); - panic = false; - } - - // Orientation - if (bot->pflags & (PF_SPINNING|PF_STARTDASH)) - { - cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT - } - else if (flymode == 2) - { - cmd->angleturn = sonic->player->cmd.angleturn - (tails->angle >> 16); - } - else - { - cmd->angleturn = (ang - tails->angle) >> 16; // NOT FRACBITS DAMNIT - } - - // ******** - // FLY MODE - // spinmode check - if (spinmode || player->exiting) - thinkfly = false; - else - { - // Activate co-op flight - if (thinkfly && player->pflags & PF_JUMPED) - { - if (!jump_last) - { - jump = true; - flymode = 1; - thinkfly = false; - bot->pflags |= PF_CANCARRY; - } - } - - // Check positioning - // Thinker for co-op flight - if (!(water || pmom || bmom) - && (dist < touchdist && !samepos) - && !(pcmd->forwardmove || pcmd->sidemove || player->dashspeed) - && P_IsObjectOnGround(sonic) && P_IsObjectOnGround(tails) - && !(player->pflags & PF_STASIS) - && bot->charability == CA_FLY) - thinkfly = true; - else - thinkfly = false; - - // Set carried state - if (player->powers[pw_carry] == CR_PLAYER && sonic->tracer == tails) - { - flymode = 2; - } - - // Ready for takeoff - if (flymode == 1) - { - thinkfly = false; - if (zdist < -64*scale || (flip * tails->momz) > scale) // Make sure we're not too high up - spin = true; - else if (!jump_last) - jump = true; - - // Abort if the player moves away or spins - if (dist > followthres || player->dashspeed) - flymode = 0; - } - // Read player inputs while carrying - else if (flymode == 2) - { - cmd->forwardmove = pcmd->forwardmove; - cmd->sidemove = pcmd->sidemove; - if (pcmd->buttons & BT_USE) - { - spin = true; - jump = false; - } - else if (!jump_last) - jump = true; - // End flymode - if (player->powers[pw_carry] != CR_PLAYER) - { - flymode = 0; - } - } - } - - if (flymode && P_IsObjectOnGround(tails) && !(pcmd->buttons & BT_JUMP)) - flymode = 0; - - // ******** - // SPINNING - if (panic || flymode || !(player->pflags & PF_SPINNING) || (player->pflags & PF_JUMPED)) - spinmode = false; - else - { - if (!_2d) - { - // Spindash - if (player->dashspeed) - { - if (dist < followthres && dist > touchdist) // Do positioning - { - cmd->angleturn = (ang - tails->angle) >> 16; // NOT FRACBITS DAMNIT - cmd->forwardmove = 50; - spinmode = true; - } - else if (dist < touchdist) - { - if (!bmom && (!(bot->pflags & PF_SPINNING) || (bot->dashspeed && bot->pflags & PF_SPINNING))) - { - cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT - spin = true; - } - spinmode = true; - } - else - spinmode = false; - } - // Spin - else if (player->dashspeed == bot->dashspeed && player->pflags & PF_SPINNING) - { - if (bot->pflags & PF_SPINNING || !spin_last) - { - spin = true; - cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT - cmd->forwardmove = MAXPLMOVE; - spinmode = true; - } - else - spinmode = false; - } - } - // 2D mode - else - { - if (((player->dashspeed && !bmom) || (player->dashspeed == bot->dashspeed && (player->pflags & PF_SPINNING))) - && ((bot->pflags & PF_SPINNING) || !spin_last)) - { - spin = true; - spinmode = true; - } - } - } - - // ******** - // FOLLOW - if (!(flymode || spinmode)) - { - // Too far - if (panic || dist > followthres) - { - if (!_2d) - cmd->forwardmove = MAXPLMOVE; - else if (sonic->x > tails->x) - cmd->sidemove = MAXPLMOVE; - else - cmd->sidemove = -MAXPLMOVE; - } - // Within threshold - else if (!panic && dist > followmin && abs(zdist) < 192*scale) - { - if (!_2d) - cmd->forwardmove = FixedHypot(pcmd->forwardmove, pcmd->sidemove); - else - cmd->sidemove = pcmd->sidemove; - } - // Below min - else if (dist < followmin) - { - // Copy inputs - cmd->angleturn = (sonic->angle - tails->angle) >> 16; // NOT FRACBITS DAMNIT - bot->drawangle = ang; - cmd->forwardmove = 8 * pcmd->forwardmove / 10; - cmd->sidemove = 8 * pcmd->sidemove / 10; - } - } - - // ******** - // JUMP - if (!(flymode || spinmode)) - { - // Flying catch-up - if (bot->pflags & PF_THOKKED) - { - cmd->forwardmove = min(MAXPLMOVE, (dist/scale)>>3); - if (zdist < -64*scale) - spin = true; - else if (zdist > 0 && !jump_last) - jump = true; - } - - // Just landed - if (tails->eflags & MFE_JUSTHITFLOOR) - jump = false; - // Start jump - else if (!jump_last && !(bot->pflags & PF_JUMPED) //&& !(player->pflags & PF_SPINNING) - && ((zdist > 32*scale && player->pflags & PF_JUMPED) // Following - || (zdist > 64*scale && panic) // Vertical catch-up - || (stalled && anxiety > 20 && bot->powers[pw_carry] == CR_NONE) - //|| (bmom < scale>>3 && dist > followthres && !(bot->powers[pw_carry])) // Stopped & not in carry state - || (bot->pflags & PF_SPINNING && !(bot->pflags & PF_JUMPED)))) // Spinning - jump = true; - // Hold jump - else if (bot->pflags & PF_JUMPED && jump_last && tails->momz*flip > 0 && (zdist > 0 || panic)) - jump = true; - // Start flying - else if (bot->pflags & PF_JUMPED && panic && !jump_last && bot->charability == CA_FLY) - jump = true; - } - - // ******** - // HISTORY - jump_last = jump; - spin_last = spin; - - // Turn the virtual keypresses into ticcmd_t. - B_KeysToTiccmd(tails, cmd, forward, backward, left, right, false, false, jump, spin); - - // Update our status - lastForward = forward; - lastBlocked = blocked; - blocked = false; -} - -void B_BuildTiccmd(player_t *player, ticcmd_t *cmd) -{ - // Can't build a ticcmd if we aren't spawned... - if (!player->mo) - return; - - if (player->playerstate == PST_DEAD) - { - if (B_CheckRespawn(player)) - cmd->buttons |= BT_JUMP; - return; - } - - // Bot AI isn't programmed in analog. - CV_SetValue(&cv_analog[1], false); - - // Let Lua scripts build ticcmds - if (LUAh_BotTiccmd(player, cmd)) - return; - - // We don't have any main character AI, sorry. D: - if (player-players == consoleplayer) - return; - - // Basic Tails AI - B_BuildTailsTiccmd(players[consoleplayer].mo, player->mo, cmd); -} - -void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin) -{ - // don't try to do stuff if your sonic is in a minecart or something - if (players[consoleplayer].powers[pw_carry] && players[consoleplayer].powers[pw_carry] != CR_PLAYER) - return; - // Turn the virtual keypresses into ticcmd_t. - if (twodlevel || mo->flags2 & MF2_TWOD) { - if (players[consoleplayer].climbing - || mo->player->pflags & PF_GLIDING) { - // Don't mess with bot inputs during these unhandled movement conditions. - // The normal AI doesn't use abilities, so custom AI should be sending us exactly what it wants anyway. - if (forward) - cmd->forwardmove += MAXPLMOVE<>16; - if (backward) - cmd->forwardmove -= MAXPLMOVE<>16; - if (left || strafeleft) - cmd->sidemove -= MAXPLMOVE<>16; - if (right || straferight) - cmd->sidemove += MAXPLMOVE<>16; - } else { - // In standard 2D mode, interpret "forward" as "the way you're facing" and everything else as "the way you're not facing" - if (left || right) - backward = true; - left = right = false; - if (forward) { - if (mo->angle < ANGLE_90 || mo->angle > ANGLE_270) - right = true; - else - left = true; - } else if (backward) { - if (mo->angle < ANGLE_90 || mo->angle > ANGLE_270) - left = true; - else - right = true; - } - if (left || strafeleft) - cmd->sidemove -= MAXPLMOVE<>16; - if (right || straferight) - cmd->sidemove += MAXPLMOVE<>16; - } - } else { - angle_t angle; - if (forward) - cmd->forwardmove += MAXPLMOVE<>16; - if (backward) - cmd->forwardmove -= MAXPLMOVE<>16; - if (left) - cmd->angleturn += 1280; - if (right) - cmd->angleturn -= 1280; - if (strafeleft) - cmd->sidemove -= MAXPLMOVE<>16; - if (straferight) - cmd->sidemove += MAXPLMOVE<>16; - - // cap inputs so the bot can't accelerate faster diagonally - angle = R_PointToAngle2(0, 0, cmd->sidemove << FRACBITS, cmd->forwardmove << FRACBITS); - { - INT32 maxforward = abs(P_ReturnThrustY(NULL, angle, MAXPLMOVE)); - INT32 maxside = abs(P_ReturnThrustX(NULL, angle, MAXPLMOVE)); - cmd->forwardmove = max(min(cmd->forwardmove, maxforward), -maxforward); - cmd->sidemove = max(min(cmd->sidemove, maxside), -maxside); - } - } - if (jump) - cmd->buttons |= BT_JUMP; - if (spin) - cmd->buttons |= BT_USE; -} - -void B_MoveBlocked(player_t *player) -{ - (void)player; - blocked = true; -} - -boolean B_CheckRespawn(player_t *player) -{ - mobj_t *sonic = players[consoleplayer].mo; - mobj_t *tails = player->mo; - - // We can't follow Sonic if he's not around! - if (!sonic || sonic->health <= 0) - return false; - - // B_RespawnBot doesn't do anything if the condition above this isn't met - { - UINT8 shouldForce = LUAh_BotRespawn(sonic, tails); - - if (P_MobjWasRemoved(sonic) || P_MobjWasRemoved(tails)) - return (shouldForce == 1); // mobj was removed - - if (shouldForce == 1) - return true; - else if (shouldForce == 2) - return false; - } - - // Check if Sonic is busy first. - // If he's doing any of these things, he probably doesn't want to see us. - if (sonic->player->pflags & (PF_GLIDING|PF_SLIDING|PF_BOUNCING) - || (sonic->player->panim != PA_IDLE && sonic->player->panim != PA_WALK) - || (sonic->player->powers[pw_carry] && sonic->player->powers[pw_carry] != CR_PLAYER)) - return false; - - // Low ceiling, do not want! - if (sonic->eflags & MFE_VERTICALFLIP) - { - if (sonic->z - sonic->floorz < (sonic->player->exiting ? 5 : 2)*sonic->height) - return false; - } - else if (sonic->ceilingz - sonic->z < (sonic->player->exiting ? 6 : 3)*sonic->height) - return false; - - // If you're dead, wait a few seconds to respawn. - if (player->playerstate == PST_DEAD) { - if (player->deadtimer > 4*TICRATE) - return true; - return false; - } - - // If you can't see Sonic, I guess we should? - if (!P_CheckSight(sonic, tails) && P_AproxDistance(P_AproxDistance(tails->x-sonic->x, tails->y-sonic->y), tails->z-sonic->z) > FixedMul(1024*FRACUNIT, tails->scale)) - return true; - return false; -} - -void B_RespawnBot(INT32 playernum) -{ - player_t *player = &players[playernum]; - fixed_t x,y,z; - mobj_t *sonic = players[consoleplayer].mo; - mobj_t *tails; - - if (!sonic || sonic->health <= 0) - return; - - B_ResetAI(); - - player->bot = 1; - P_SpawnPlayer(playernum); - tails = player->mo; - - x = sonic->x; - y = sonic->y; - if (sonic->eflags & MFE_VERTICALFLIP) { - tails->eflags |= MFE_VERTICALFLIP; - z = sonic->z - (512*sonic->scale); - if (z < sonic->floorz) - z = sonic->floorz; - } else { - z = sonic->z + sonic->height + (512*sonic->scale); - if (z > sonic->ceilingz - sonic->height) - z = sonic->ceilingz - sonic->height; - } - - if (sonic->flags2 & MF2_OBJECTFLIP) - tails->flags2 |= MF2_OBJECTFLIP; - if (sonic->flags2 & MF2_TWOD) - tails->flags2 |= MF2_TWOD; - if (sonic->eflags & MFE_UNDERWATER) - tails->eflags |= MFE_UNDERWATER; - player->powers[pw_underwater] = sonic->player->powers[pw_underwater]; - player->powers[pw_spacetime] = sonic->player->powers[pw_spacetime]; - player->powers[pw_gravityboots] = sonic->player->powers[pw_gravityboots]; - player->powers[pw_nocontrol] = sonic->player->powers[pw_nocontrol]; - player->acceleration = sonic->player->acceleration; - player->accelstart = sonic->player->accelstart; - player->thrustfactor = sonic->player->thrustfactor; - player->normalspeed = sonic->player->normalspeed; - player->pflags |= PF_AUTOBRAKE|(sonic->player->pflags & PF_DIRECTIONCHAR); - - P_TeleportMove(tails, x, y, z); - if (player->charability == CA_FLY) - { - P_SetPlayerMobjState(tails, S_PLAY_FLY); - tails->player->powers[pw_tailsfly] = (UINT16)-1; - } - else - P_SetPlayerMobjState(tails, S_PLAY_FALL); - P_SetScale(tails, sonic->scale); - tails->destscale = sonic->destscale; -} - -void B_HandleFlightIndicator(player_t *player) -{ - mobj_t *tails = player->mo; - - if (!tails) - return; - - if (thinkfly && player->bot == 1 && tails->health) - { - if (!tails->hnext) - { - P_SetTarget(&tails->hnext, P_SpawnMobjFromMobj(tails, 0, 0, 0, MT_OVERLAY)); - if (tails->hnext) - { - P_SetTarget(&tails->hnext->target, tails); - P_SetTarget(&tails->hnext->hprev, tails); - P_SetMobjState(tails->hnext, S_FLIGHTINDICATOR); - } - } - } - else if (tails->hnext && tails->hnext->type == MT_OVERLAY && tails->hnext->state == states+S_FLIGHTINDICATOR) - { - P_RemoveMobj(tails->hnext); - P_SetTarget(&tails->hnext, NULL); - } -} diff --git a/src/b_bot.h b/src/b_bot.h deleted file mode 100644 index 2806bd68f..000000000 --- a/src/b_bot.h +++ /dev/null @@ -1,18 +0,0 @@ -// SONIC ROBO BLAST 2 -//----------------------------------------------------------------------------- -// Copyright (C) 2007-2016 by John "JTE" Muniz. -// Copyright (C) 2012-2020 by Sonic Team Junior. -// -// This program is free software distributed under the -// terms of the GNU General Public License, version 2. -// See the 'LICENSE' file for more details. -//----------------------------------------------------------------------------- -/// \file b_bot.h -/// \brief Basic bot handling - -void B_BuildTiccmd(player_t *player, ticcmd_t *cmd); -void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward, boolean left, boolean right, boolean strafeleft, boolean straferight, boolean jump, boolean spin); -boolean B_CheckRespawn(player_t *player); -void B_MoveBlocked(player_t *player); -void B_RespawnBot(INT32 playernum); -void B_HandleFlightIndicator(player_t *player); diff --git a/src/dehacked.c b/src/dehacked.c index 0a7038ff8..03acbe65a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -2553,8 +2553,6 @@ static void readmenu(MYFILE *f, INT32 num) { if (fastcmp(word2, "USER")) menupres[num].ttmode = TTMODE_USER; - else if (fastcmp(word2, "ALACROIX")) - menupres[num].ttmode = TTMODE_ALACROIX; else if (fastcmp(word2, "HIDE") || fastcmp(word2, "HIDDEN") || fastcmp(word2, "NONE")) { menupres[num].ttmode = TTMODE_USER; @@ -4067,8 +4065,6 @@ static void readmaincfg(MYFILE *f) { if (fastcmp(word2, "USER")) ttmode = TTMODE_USER; - else if (fastcmp(word2, "ALACROIX")) - ttmode = TTMODE_ALACROIX; else if (fastcmp(word2, "HIDE") || fastcmp(word2, "HIDDEN") || fastcmp(word2, "NONE")) { ttmode = TTMODE_USER; diff --git a/src/f_finale.c b/src/f_finale.c index 184129b0b..3d12f30d9 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -50,7 +50,6 @@ INT32 titlescrollyspeed = 0; UINT8 titlemapinaction = TITLEMAP_OFF; static INT32 timetonext; // Delay between screen changes -static INT32 continuetime; // Short delay when continuing static tic_t animtimer; // Used for some animation timings static tic_t credbgtimer; // Credits background @@ -77,7 +76,7 @@ boolean hidetitlemap; // WARNING: set to false by M_SetupNextMenu and M_ClearMe #if 0 static UINT8 laststaff = 0; #endif -static UINT8 curDemo = 0; +//static UINT8 curDemo = 0; static UINT32 demoDelayLeft; static UINT32 demoIdleLeft; @@ -103,82 +102,16 @@ INT16 curttloop; UINT16 curtttics; // ttmode old +/* static patch_t *ttbanner; // SONIC ROBO BLAST 2 static patch_t *ttkart; // *vroom* KART static patch_t *ttcheckers; // *vroom* KART static patch_t *ttkflash; // flash screen +*/ static patch_t *driver[2]; // Driving character on the waiting screen static UINT8 *waitcolormap; // colormap for the spinning character -// ttmode alacroix -static SINT8 testttscale = 0; -static SINT8 activettscale = 0; -boolean ttavailable[6]; -boolean ttloaded[6]; - -static patch_t *ttribb[6][TTMAX_ALACROIX]; -static patch_t *ttsont[6][TTMAX_ALACROIX]; -static patch_t *ttrobo[6][TTMAX_ALACROIX]; -static patch_t *tttwot[6][TTMAX_ALACROIX]; -static patch_t *ttembl[6][TTMAX_ALACROIX]; -static patch_t *ttrbtx[6][TTMAX_ALACROIX]; -static patch_t *ttsoib[6][TTMAX_ALACROIX]; -static patch_t *ttsoif[6][TTMAX_ALACROIX]; -static patch_t *ttsoba[6][TTMAX_ALACROIX]; -static patch_t *ttsobk[6][TTMAX_ALACROIX]; -static patch_t *ttsodh[6][TTMAX_ALACROIX]; -static patch_t *tttaib[6][TTMAX_ALACROIX]; -static patch_t *tttaif[6][TTMAX_ALACROIX]; -static patch_t *tttaba[6][TTMAX_ALACROIX]; -static patch_t *tttabk[6][TTMAX_ALACROIX]; -static patch_t *tttabt[6][TTMAX_ALACROIX]; -static patch_t *tttaft[6][TTMAX_ALACROIX]; -static patch_t *ttknib[6][TTMAX_ALACROIX]; -static patch_t *ttknif[6][TTMAX_ALACROIX]; -static patch_t *ttknba[6][TTMAX_ALACROIX]; -static patch_t *ttknbk[6][TTMAX_ALACROIX]; -static patch_t *ttkndh[6][TTMAX_ALACROIX]; - -#define TTEMBL (ttembl[activettscale-1]) -#define TTRIBB (ttribb[activettscale-1]) -#define TTSONT (ttsont[activettscale-1]) -#define TTROBO (ttrobo[activettscale-1]) -#define TTTWOT (tttwot[activettscale-1]) -#define TTRBTX (ttrbtx[activettscale-1]) -#define TTSOIB (ttsoib[activettscale-1]) -#define TTSOIF (ttsoif[activettscale-1]) -#define TTSOBA (ttsoba[activettscale-1]) -#define TTSOBK (ttsobk[activettscale-1]) -#define TTSODH (ttsodh[activettscale-1]) -#define TTTAIB (tttaib[activettscale-1]) -#define TTTAIF (tttaif[activettscale-1]) -#define TTTABA (tttaba[activettscale-1]) -#define TTTABK (tttabk[activettscale-1]) -#define TTTABT (tttabt[activettscale-1]) -#define TTTAFT (tttaft[activettscale-1]) -#define TTKNIB (ttknib[activettscale-1]) -#define TTKNIF (ttknif[activettscale-1]) -#define TTKNBA (ttknba[activettscale-1]) -#define TTKNBK (ttknbk[activettscale-1]) -#define TTKNDH (ttkndh[activettscale-1]) - -static boolean sonic_blink = false; -static boolean sonic_blink_twice = false; -static boolean sonic_blinked_already = false; -static INT32 sonic_idle_start = 0; -static INT32 sonic_idle_end = 0; -static boolean tails_blink = false; -static boolean tails_blink_twice = false; -static boolean tails_blinked_already = false; -static INT32 tails_idle_start = 0; -static INT32 tails_idle_end = 0; -static boolean knux_blink = false; -static boolean knux_blink_twice = false; -static boolean knux_blinked_already = false; -static INT32 knux_idle_start = 0; -static INT32 knux_idle_end = 0; - // ttmode user static patch_t *ttuser[TTMAX_USER]; static INT32 ttuser_count = 0; @@ -296,8 +229,9 @@ static void F_NewCutscene(const char *basetext) } // -// F_SkyScroll +// F_TitleBGScroll // +/* static void F_TitleBGScroll(INT32 scrollspeed) { INT32 x, y, w; @@ -337,6 +271,7 @@ static void F_TitleBGScroll(INT32 scrollspeed) W_UnlockCachedPatch(pat); W_UnlockCachedPatch(pat2); } +*/ // ============= // INTRO SCENE @@ -728,8 +663,7 @@ static struct { // This Tyler52 gag is troublesome // Alignment should be ((spaces+1 * 100) + (headers+1 * 38) + (lines * 15)) // Current max image spacing: (200*17) - {112, (15*100)+(17*38)+(88*15), "TYLER52", SKINCOLOR_NONE}, - {0, 0, NULL, SKINCOLOR_NONE} + {112, (15*100)+(17*38)+(88*15), "TYLER52", SKINCOLOR_NONE} }; #undef CREDITS_LEFT @@ -779,7 +713,7 @@ void F_CreditDrawer(void) V_DrawSciencePatch(320<>1; @@ -1227,26 +1161,9 @@ static void F_CacheEnding(void) // so we only need to check once if ((goodending = ALL7EMERALDS(emeralds))) { - UINT8 skinnum = players[consoleplayer].skin; - spritedef_t *sprdef; - spriteframe_t *sprframe; - if (skins[skinnum].sprites[SPR2_XTRA].numframes > (XTRA_ENDING+2)) - { - sprdef = &skins[skinnum].sprites[SPR2_XTRA]; - // character head, skin specific - sprframe = &sprdef->spriteframes[XTRA_ENDING]; - endfwrk[0] = W_CachePatchNum(sprframe->lumppat[0], PU_PATCH); - sprframe = &sprdef->spriteframes[XTRA_ENDING+1]; - endfwrk[1] = W_CachePatchNum(sprframe->lumppat[0], PU_PATCH); - sprframe = &sprdef->spriteframes[XTRA_ENDING+2]; - endfwrk[2] = W_CachePatchNum(sprframe->lumppat[0], PU_PATCH); - } - else // Show a star if your character doesn't have an ending firework display. (Basically the MISSINGs for this) - { - endfwrk[0] = W_CachePatchName("ENDFWRK3", PU_PATCH); - endfwrk[1] = W_CachePatchName("ENDFWRK4", PU_PATCH); - endfwrk[2] = W_CachePatchName("ENDFWRK5", PU_PATCH); - } + endfwrk[0] = W_CachePatchName("ENDFWRK3", PU_PATCH); + endfwrk[1] = W_CachePatchName("ENDFWRK4", PU_PATCH); + endfwrk[2] = W_CachePatchName("ENDFWRK5", PU_PATCH); endbrdr[0] = W_CachePatchName("ENDBRDR2", PU_PATCH); } @@ -1630,7 +1547,7 @@ void F_EndingDrawer(void) col = SKINCOLOR_BLUE; break; case 3: - col = SKINCOLOR_SKY; + col = SKINCOLOR_CYAN; break; case 4: col = SKINCOLOR_ORANGE; @@ -1891,25 +1808,6 @@ static void F_CacheTitleScreen(void) { case TTMODE_OLD: case TTMODE_NONE: - ttbanner = W_CachePatchName("TTBANNER", PU_LEVEL); - ttwing = W_CachePatchName("TTWING", PU_LEVEL); - ttsonic = W_CachePatchName("TTSONIC", PU_LEVEL); - ttswave1 = W_CachePatchName("TTSWAVE1", PU_LEVEL); - ttswave2 = W_CachePatchName("TTSWAVE2", PU_LEVEL); - ttswip1 = W_CachePatchName("TTSWIP1", PU_LEVEL); - ttsprep1 = W_CachePatchName("TTSPREP1", PU_LEVEL); - ttsprep2 = W_CachePatchName("TTSPREP2", PU_LEVEL); - ttspop1 = W_CachePatchName("TTSPOP1", PU_LEVEL); - ttspop2 = W_CachePatchName("TTSPOP2", PU_LEVEL); - ttspop3 = W_CachePatchName("TTSPOP3", PU_LEVEL); - ttspop4 = W_CachePatchName("TTSPOP4", PU_LEVEL); - ttspop5 = W_CachePatchName("TTSPOP5", PU_LEVEL); - ttspop6 = W_CachePatchName("TTSPOP6", PU_LEVEL); - ttspop7 = W_CachePatchName("TTSPOP7", PU_LEVEL); - break; - - // don't load alacroix gfx yet; we do that upon first draw. - case TTMODE_ALACROIX: break; case TTMODE_USER: @@ -1933,19 +1831,8 @@ void F_StartTitleScreen(void) if (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS) { - ttuser_count =\ - ttloaded[0] = ttloaded[1] = ttloaded[2] = ttloaded[3] = ttloaded[4] = ttloaded[5] =\ - testttscale = activettscale =\ - sonic_blink = sonic_blink_twice = sonic_idle_start = sonic_idle_end =\ - tails_blink = tails_blink_twice = tails_idle_start = tails_idle_end =\ - knux_blink = knux_blink_twice = knux_idle_start = knux_idle_end = 0; - - sonic_blinked_already = tails_blinked_already = knux_blinked_already = 1; // don't blink on the first idle cycle - - if (curttmode == TTMODE_ALACROIX) - finalecount = -3; // hack so that frames don't advance during the entry wipe - else - finalecount = 0; + ttuser_count = 0; + finalecount = 0; wipetypepost = menupres[MN_MAIN].enterwipe; } else @@ -1970,7 +1857,7 @@ void F_StartTitleScreen(void) if (!titlemap) return; - players[displayplayer].playerstate = PST_DEAD; // Don't spawn the player in dummy (I'm still a filthy cheater) + players[displayplayers[0]].playerstate = PST_DEAD; // Don't spawn the player in dummy (I'm still a filthy cheater) // Set Default Position if (playerstarts[0]) @@ -1982,25 +1869,25 @@ void F_StartTitleScreen(void) if (startpos) { - camera.x = startpos->x << FRACBITS; - camera.y = startpos->y << FRACBITS; - camera.subsector = R_PointInSubsector(camera.x, camera.y); - camera.z = camera.subsector->sector->floorheight + (startpos->z << FRACBITS); - camera.angle = (startpos->angle % 360)*ANG1; - camera.aiming = 0; + camera[0].x = startpos->x << FRACBITS; + camera[0].y = startpos->y << FRACBITS; + camera[0].subsector = R_PointInSubsector(camera[0].x, camera[0].y); + camera[0].z = camera[0].subsector->sector->floorheight + (startpos->z << FRACBITS); + camera[0].angle = (startpos->angle % 360)*ANG1; + camera[0].aiming = 0; } else { - camera.x = camera.y = camera.z = camera.angle = camera.aiming = 0; - camera.subsector = NULL; // toast is filthy too + camera[0].x = camera[0].y = camera[0].z = camera[0].angle = camera[0].aiming = 0; + camera[0].subsector = NULL; // toast is filthy too } - camera.chase = true; - camera.height = 0; + camera[0].chase = true; + camera[0].height = 0; // Run enter linedef exec for MN_MAIN, since this is where we start if (menupres[MN_MAIN].entertag) - P_LinedefExecute(menupres[MN_MAIN].entertag, players[displayplayer].mo, NULL); + P_LinedefExecute(menupres[MN_MAIN].entertag, players[displayplayers[0]].mo, NULL); wipegamestate = prevwipegamestate; } @@ -2023,169 +1910,15 @@ void F_StartTitleScreen(void) F_CacheTitleScreen(); } -static void F_UnloadAlacroixGraphics(SINT8 oldttscale) -{ - // This all gets freed by PU_LEVEL when exiting the menus. - // When re-visiting the menus (e.g., from exiting in-game), the gfx are force-reloaded. - // So leftover addresses here should not be a problem. - - UINT16 i; - oldttscale--; // zero-based index - for (i = 0; i < TTMAX_ALACROIX; i++) - { - if(ttembl[oldttscale][i]) { Z_Free(ttembl[oldttscale][i]); ttembl[oldttscale][i] = 0; } - if(ttribb[oldttscale][i]) { Z_Free(ttribb[oldttscale][i]); ttribb[oldttscale][i] = 0; } - if(ttsont[oldttscale][i]) { Z_Free(ttsont[oldttscale][i]); ttsont[oldttscale][i] = 0; } - if(ttrobo[oldttscale][i]) { Z_Free(ttrobo[oldttscale][i]); ttrobo[oldttscale][i] = 0; } - if(tttwot[oldttscale][i]) { Z_Free(tttwot[oldttscale][i]); tttwot[oldttscale][i] = 0; } - if(ttrbtx[oldttscale][i]) { Z_Free(ttrbtx[oldttscale][i]); ttrbtx[oldttscale][i] = 0; } - if(ttsoib[oldttscale][i]) { Z_Free(ttsoib[oldttscale][i]); ttsoib[oldttscale][i] = 0; } - if(ttsoif[oldttscale][i]) { Z_Free(ttsoif[oldttscale][i]); ttsoif[oldttscale][i] = 0; } - if(ttsoba[oldttscale][i]) { Z_Free(ttsoba[oldttscale][i]); ttsoba[oldttscale][i] = 0; } - if(ttsobk[oldttscale][i]) { Z_Free(ttsobk[oldttscale][i]); ttsobk[oldttscale][i] = 0; } - if(ttsodh[oldttscale][i]) { Z_Free(ttsodh[oldttscale][i]); ttsodh[oldttscale][i] = 0; } - if(tttaib[oldttscale][i]) { Z_Free(tttaib[oldttscale][i]); tttaib[oldttscale][i] = 0; } - if(tttaif[oldttscale][i]) { Z_Free(tttaif[oldttscale][i]); tttaif[oldttscale][i] = 0; } - if(tttaba[oldttscale][i]) { Z_Free(tttaba[oldttscale][i]); tttaba[oldttscale][i] = 0; } - if(tttabk[oldttscale][i]) { Z_Free(tttabk[oldttscale][i]); tttabk[oldttscale][i] = 0; } - if(tttabt[oldttscale][i]) { Z_Free(tttabt[oldttscale][i]); tttabt[oldttscale][i] = 0; } - if(tttaft[oldttscale][i]) { Z_Free(tttaft[oldttscale][i]); tttaft[oldttscale][i] = 0; } - if(ttknib[oldttscale][i]) { Z_Free(ttknib[oldttscale][i]); ttknib[oldttscale][i] = 0; } - if(ttknif[oldttscale][i]) { Z_Free(ttknif[oldttscale][i]); ttknif[oldttscale][i] = 0; } - if(ttknba[oldttscale][i]) { Z_Free(ttknba[oldttscale][i]); ttknba[oldttscale][i] = 0; } - if(ttknbk[oldttscale][i]) { Z_Free(ttknbk[oldttscale][i]); ttknbk[oldttscale][i] = 0; } - if(ttkndh[oldttscale][i]) { Z_Free(ttkndh[oldttscale][i]); ttkndh[oldttscale][i] = 0; } - } - ttloaded[oldttscale] = false; -} - -static void F_LoadAlacroixGraphics(SINT8 newttscale) -{ - UINT16 i, j; - lumpnum_t lumpnum; - char lumpname[9]; - char names[22][5] = { - "EMBL", - "RIBB", - "SONT", - "ROBO", - "TWOT", - "RBTX", - "SOIB", - "SOIF", - "SOBA", - "SOBK", - "SODH", - "TAIB", - "TAIF", - "TABA", - "TABK", - "TABT", - "TAFT", - "KNIB", - "KNIF", - "KNBA", - "KNBK", - "KNDH" - }; - char lumpnames[22][7]; - - newttscale--; // 0-based index - - if (!ttloaded[newttscale]) - { - for (j = 0; j < 22; j++) - sprintf(&lumpnames[j][0], "T%.1hu%s", (UINT16)( (UINT8)newttscale+1 ), names[j]); - - LOADTTGFX(ttembl[newttscale], lumpnames[0], TTMAX_ALACROIX) - LOADTTGFX(ttribb[newttscale], lumpnames[1], TTMAX_ALACROIX) - LOADTTGFX(ttsont[newttscale], lumpnames[2], TTMAX_ALACROIX) - LOADTTGFX(ttrobo[newttscale], lumpnames[3], TTMAX_ALACROIX) - LOADTTGFX(tttwot[newttscale], lumpnames[4], TTMAX_ALACROIX) - LOADTTGFX(ttrbtx[newttscale], lumpnames[5], TTMAX_ALACROIX) - LOADTTGFX(ttsoib[newttscale], lumpnames[6], TTMAX_ALACROIX) - LOADTTGFX(ttsoif[newttscale], lumpnames[7], TTMAX_ALACROIX) - LOADTTGFX(ttsoba[newttscale], lumpnames[8], TTMAX_ALACROIX) - LOADTTGFX(ttsobk[newttscale], lumpnames[9], TTMAX_ALACROIX) - LOADTTGFX(ttsodh[newttscale], lumpnames[10], TTMAX_ALACROIX) - LOADTTGFX(tttaib[newttscale], lumpnames[11], TTMAX_ALACROIX) - LOADTTGFX(tttaif[newttscale], lumpnames[12], TTMAX_ALACROIX) - LOADTTGFX(tttaba[newttscale], lumpnames[13], TTMAX_ALACROIX) - LOADTTGFX(tttabk[newttscale], lumpnames[14], TTMAX_ALACROIX) - LOADTTGFX(tttabt[newttscale], lumpnames[15], TTMAX_ALACROIX) - LOADTTGFX(tttaft[newttscale], lumpnames[16], TTMAX_ALACROIX) - LOADTTGFX(ttknib[newttscale], lumpnames[17], TTMAX_ALACROIX) - LOADTTGFX(ttknif[newttscale], lumpnames[18], TTMAX_ALACROIX) - LOADTTGFX(ttknba[newttscale], lumpnames[19], TTMAX_ALACROIX) - LOADTTGFX(ttknbk[newttscale], lumpnames[20], TTMAX_ALACROIX) - LOADTTGFX(ttkndh[newttscale], lumpnames[21], TTMAX_ALACROIX) - - ttloaded[newttscale] = true; - } -} - -#undef LOADTTGFX - -static void F_FigureActiveTtScale(void) -{ - SINT8 newttscale = max(1, min(6, vid.dupx)); - SINT8 oldttscale = activettscale; - - if (needpatchrecache) - ttloaded[0] = ttloaded[1] = ttloaded[2] = ttloaded[3] = ttloaded[4] = ttloaded[5] = 0; - else - { - if (newttscale == testttscale) - return; - - // We have a new ttscale, so load gfx - if(oldttscale > 0) - F_UnloadAlacroixGraphics(oldttscale); - } - - // music is started in the ticker - if (!demo.fromtitle) // SRB2Kart: Don't reset music if the right track is already playing - S_StopMusic(); - demo.fromtitle = false; - - testttscale = newttscale; - - // If ttscale is unavailable: look for lower scales, then higher scales. - for (; newttscale >= 1; newttscale--) - { - if (ttavailable[newttscale-1]) - break; - } - - for (; newttscale <= 6; newttscale++) - { - if (ttavailable[newttscale-1]) - break; - } - - activettscale = (newttscale >= 1 && newttscale <= 6) ? newttscale : 0; - - ttbanner = W_CachePatchName("TTKBANNR", PU_LEVEL); - ttkart = W_CachePatchName("TTKART", PU_LEVEL); - ttcheckers = W_CachePatchName("TTCHECK", PU_LEVEL); - ttkflash = W_CachePatchName("TTKFLASH", PU_LEVEL); - - if(activettscale > 0) - F_LoadAlacroixGraphics(activettscale); -} - // (no longer) De-Demo'd Title Screen void F_TitleScreenDrawer(void) { - boolean hidepics; - fixed_t sc = FRACUNIT / max(1, curttscale); - INT32 whitefade = 0; - UINT8 *whitecol[2] = {NULL, NULL}; + boolean hidepics = false; if (modeattacking) return; // We likely came here from retrying. Don't do a damn thing. - if (needpatchrecache && (curttmode != TTMODE_ALACROIX)) + if (needpatchrecache) F_CacheTitleScreen(); // Draw that sky! @@ -2197,11 +1930,12 @@ void F_TitleScreenDrawer(void) // Don't draw outside of the title screen, or if the patch isn't there. if (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS) return; - } // Don't draw if title mode is set to Old/None and the patch isn't there + /* if (!ttwing && (curttmode == TTMODE_OLD || curttmode == TTMODE_NONE)) return; + */ // rei|miru: use title pics? hidepics = curhidepics; @@ -2212,6 +1946,7 @@ void F_TitleScreenDrawer(void) { case TTMODE_OLD: case TTMODE_NONE: +/* if (finalecount < 50) { V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); @@ -2235,8 +1970,6 @@ void F_TitleScreenDrawer(void) if (finalecount <= (50+(9<<1))) transval = (finalecount - 50)>>1; - F_SkyScroll(titlescrollspeed); - V_DrawSciencePatch(0, 0 - FixedMul(40< 29 && finalecount < 35) - V_DrawFadeScreen(0, (whitefade = 9)); - else if (finalecount > 34 && 44-finalecount > 0 && 44-finalecount < 10) - V_DrawFadeScreen(0, 44-finalecount); - if (39-finalecount > 0) - { - whitefade = (9 - (39-finalecount))<= 0) - V_DrawSciencePatch(89< 9) - { - INT32 fadeval = 0; - - // Fade between tic 10 and tic 29. - if (finalecount < 30) - { - UINT8 fadecounter = 30-finalecount; - switch(fadecounter) - { - case 20: case 19: fadeval = V_90TRANS; break; - case 18: case 17: fadeval = V_80TRANS; break; - case 16: case 15: fadeval = V_70TRANS; break; - case 14: case 13: fadeval = V_60TRANS; break; - case 12: case 11: fadeval = V_TRANSLUCENT; break; - case 10: case 9: fadeval = V_40TRANS; break; - case 8: case 7: fadeval = V_30TRANS; break; - case 6: case 5: fadeval = V_20TRANS; break; - case 4: case 3: fadeval = V_10TRANS; break; - default: break; - } - } - V_DrawSciencePatch(79< 15) - V_DrawSciencePatch(106<= KNUXIDLE) - { - if (!knux_idle_start || finalecount - knux_idle_start >= knux_idle_end) - { - if (knux_blink) - { - knux_blink = false; // don't run the cycle twice in a row - knux_blinked_already = true; - } - else if (knux_blinked_already) // or after the first non-blink cycle, either. - knux_blinked_already = false; - else - { - // make this chance higher than Sonic/Tails because Knux's idle cycle is longer - knux_blink = !(M_RandomKey(100) % 2); - knux_blink_twice = knux_blink ? !(M_RandomKey(100) % 5) : false; - } - knux_idle_start = finalecount; - } - - knux_idle_end = knux_blink ? (knux_blink_twice ? 17 : 7) : 46; - } - - if (finalecount >= TAILSIDLE) - { - if (!tails_idle_start || finalecount - tails_idle_start >= tails_idle_end) - { - if (tails_blink) - { - tails_blink = false; // don't run the cycle twice in a row - tails_blinked_already = true; - } - else if (tails_blinked_already) // or after the first non-blink cycle, either. - tails_blinked_already = false; - else - { - tails_blink = !(M_RandomKey(100) % 3); - tails_blink_twice = tails_blink ? !(M_RandomKey(100) % 5) : false; - } - tails_idle_start = finalecount; - } - - // Tails does not actually have a non-blink idle cycle, but make up a number - // so he can still blink. - tails_idle_end = tails_blink ? (tails_blink_twice ? 17 : 7) : 30; - } - - if (finalecount >= SONICIDLE) - { - if (!sonic_idle_start || finalecount - sonic_idle_start >= sonic_idle_end) - { - if (sonic_blink) - { - sonic_blink = false; // don't run the cycle twice in a row - sonic_blinked_already = true; - } - else if (sonic_blinked_already) // or after the first non-blink cycle, either. - sonic_blinked_already = false; - else - { - sonic_blink = !(M_RandomKey(100) % 3); - sonic_blink_twice = sonic_blink ? !(M_RandomKey(100) % 5) : false; - } - sonic_idle_start = finalecount; - } - - sonic_idle_end = sonic_blink ? (sonic_blink_twice ? 17 : 7) : 25; - } - - - // - // BACK TAIL LAYER - // - - if (finalecount >= TAILSSTART) - { - if (finalecount >= TAILSIDLE) - { - // - // Tails Back Tail Layer Idle - // - SINT8 taftcount = (finalecount - (TAILSIDLE)) % 41; - if (taftcount >= 0 && taftcount < 5 ) - V_DrawSciencePatch(TAILSX<= 5 && taftcount < 9 ) - V_DrawSciencePatch(TAILSX<= 9 && taftcount < 12 ) - V_DrawSciencePatch(TAILSX<= 12 && taftcount < 14 ) - V_DrawSciencePatch(TAILSX<= 14 && taftcount < 17 ) - V_DrawSciencePatch(TAILSX<= 17 && taftcount < 21 ) - V_DrawSciencePatch(TAILSX<= 21 && taftcount < 24 ) - V_DrawSciencePatch(TAILSX<= 24 && taftcount < 25 ) - V_DrawSciencePatch(TAILSX<= 25 && taftcount < 28 ) - V_DrawSciencePatch(TAILSX<= 28 && taftcount < 31 ) - V_DrawSciencePatch(TAILSX<= 31 && taftcount < 35 ) - V_DrawSciencePatch(TAILSX<= 35 && taftcount < 41 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART) - { - if (finalecount >= TAILSIDLE) - { - // - // Tails Front Tail Layer Idle - // - SINT8 tabtcount = (finalecount - (TAILSIDLE)) % 41; - if (tabtcount >= 0 && tabtcount < 6 ) - V_DrawSciencePatch(TAILSX<= 6 && tabtcount < 11 ) - V_DrawSciencePatch(TAILSX<= 11 && tabtcount < 15 ) - V_DrawSciencePatch(TAILSX<= 15 && tabtcount < 18 ) - V_DrawSciencePatch(TAILSX<= 18 && tabtcount < 19 ) - V_DrawSciencePatch(TAILSX<= 19 && tabtcount < 22 ) - V_DrawSciencePatch(TAILSX<= 22 && tabtcount < 27 ) - V_DrawSciencePatch(TAILSX<= 27 && tabtcount < 30 ) - V_DrawSciencePatch(TAILSX<= 30 && tabtcount < 31 ) - V_DrawSciencePatch(TAILSX<= 31 && tabtcount < 34 ) - V_DrawSciencePatch(TAILSX<= 34 && tabtcount < 37 ) - V_DrawSciencePatch(TAILSX<= 37 && tabtcount < 41 ) - V_DrawSciencePatch(TAILSX<= KNUXSTART) - { - if (finalecount < KNUXIDLE) - { - // - // Knux Back Layer Intro - // - if (finalecount >= KNUXSTART+0 && finalecount < KNUXSTART+6 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+6 && finalecount < KNUXSTART+10 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+10 && finalecount < KNUXSTART+13 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+13 && finalecount < KNUXSTART+15 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+15 && finalecount < KNUXSTART+18 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+18 && finalecount < KNUXSTART+22 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+22 && finalecount < KNUXSTART+28 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+28 && finalecount < KNUXSTART+32 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+32 && finalecount < KNUXSTART+35 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+35 && finalecount < KNUXSTART+40 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+40 && finalecount < KNUXSTART+41 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+41 && finalecount < KNUXSTART+44 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+44 && finalecount < KNUXSTART+50 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+50 && finalecount < KNUXSTART+56 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+56 && finalecount < KNUXSTART+57 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+57 && finalecount < KNUXSTART+60 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+60 && finalecount < KNUXSTART+63 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+63 && finalecount < KNUXSTART+67 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+67 && finalecount < KNUXSTART+70 ) - V_DrawSciencePatch(KNUXX<= 0 && idlecount < 2 ) - V_DrawSciencePatch(KNUXX<= 2 && idlecount < 6 ) - V_DrawSciencePatch(KNUXX<= 6 && idlecount < 7 ) - V_DrawSciencePatch(KNUXX<= 7 && idlecount < 10) - V_DrawSciencePatch(KNUXX<= 10 && idlecount < 12) - V_DrawSciencePatch(KNUXX<= 12 && idlecount < 16) - V_DrawSciencePatch(KNUXX<= 16 && idlecount < 17) - V_DrawSciencePatch(KNUXX<= TAILSSTART) - { - if (finalecount < TAILSIDLE) - { - // - // Tails Back Layer Intro - // - if (finalecount >= TAILSSTART+0 && finalecount < TAILSSTART+6 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+6 && finalecount < TAILSSTART+10 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+10 && finalecount < TAILSSTART+12 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+12 && finalecount < TAILSSTART+16 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+16 && finalecount < TAILSSTART+22 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+22 && finalecount < TAILSSTART+23 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+23 && finalecount < TAILSSTART+26 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+26 && finalecount < TAILSSTART+30 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+30 && finalecount < TAILSSTART+35 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+35 && finalecount < TAILSSTART+41 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+41 && finalecount < TAILSSTART+43 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+43 && finalecount < TAILSSTART+47 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+47 && finalecount < TAILSSTART+51 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+51 && finalecount < TAILSSTART+53 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+53 && finalecount < TAILSSTART+56 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+56 && finalecount < TAILSSTART+60 ) - V_DrawSciencePatch(TAILSX<= +0 && idlecount < +2 ) - V_DrawSciencePatch(TAILSX<= +2 && idlecount < +6 ) - V_DrawSciencePatch(TAILSX<= +6 && idlecount < +7 ) - V_DrawSciencePatch(TAILSX<= +7 && idlecount < +10) - V_DrawSciencePatch(TAILSX<= +10 && idlecount < +12) - V_DrawSciencePatch(TAILSX<= +12 && idlecount < +16) - V_DrawSciencePatch(TAILSX<= +16 && idlecount < +17) - V_DrawSciencePatch(TAILSX<= SONICSTART) - { - if (finalecount < SONICIDLE) - { - // - // Sonic Back Layer Intro - // - if (finalecount >= SONICSTART+0 && finalecount < SONICSTART+6 ) - V_DrawSciencePatch(SONICX<= SONICSTART+6 && finalecount < SONICSTART+11 ) - V_DrawSciencePatch(SONICX<= SONICSTART+11 && finalecount < SONICSTART+14 ) - V_DrawSciencePatch(SONICX<= SONICSTART+14 && finalecount < SONICSTART+18 ) - V_DrawSciencePatch(SONICX<= SONICSTART+18 && finalecount < SONICSTART+19 ) - V_DrawSciencePatch(SONICX<= SONICSTART+19 && finalecount < SONICSTART+27 ) - V_DrawSciencePatch(SONICX<= SONICSTART+27 && finalecount < SONICSTART+31 ) - V_DrawSciencePatch(SONICX<= SONICSTART+31 && finalecount < SONICSTART+33 ) - // Frame is blank - // V_DrawSciencePatch(SONICX<= SONICSTART+33 && finalecount < SONICSTART+36 ) - V_DrawSciencePatch(SONICX<= SONICSTART+36 && finalecount < SONICSTART+40 ) - V_DrawSciencePatch(SONICX<= SONICSTART+40 && finalecount < SONICSTART+44 ) - V_DrawSciencePatch(SONICX<= SONICSTART+44 && finalecount < SONICSTART+47 ) - V_DrawSciencePatch(SONICX<= SONICSTART+47 && finalecount < SONICSTART+49 ) - V_DrawSciencePatch(SONICX<= SONICSTART+49 && finalecount < SONICSTART+50 ) - V_DrawSciencePatch(SONICX<= SONICSTART+50 && finalecount < SONICSTART+53 ) - V_DrawSciencePatch(SONICX<= SONICSTART+53 && finalecount < SONICSTART+57 ) - V_DrawSciencePatch(SONICX<= 0 && idlecount < 2 ) - V_DrawSciencePatch(SONICX<= 2 && idlecount < 6 ) - V_DrawSciencePatch(SONICX<= 6 && idlecount < 7 ) - V_DrawSciencePatch(SONICX<= 7 && idlecount < 10) - V_DrawSciencePatch(SONICX<= 10 && idlecount < 12) - V_DrawSciencePatch(SONICX<= 12 && idlecount < 16) - V_DrawSciencePatch(SONICX<= 16 && idlecount < 17) - V_DrawSciencePatch(SONICX< 29) - V_DrawSciencePatch(39<= KNUXSTART) - { - if (finalecount < KNUXIDLE) - { - // - // Knux Front Layer Intro - // - if (finalecount >= KNUXSTART+22 && finalecount < KNUXSTART+28 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+28 && finalecount < KNUXSTART+32 ) - V_DrawSciencePatch(KNUXX<= KNUXSTART+32 && finalecount < KNUXSTART+35 ) - V_DrawSciencePatch(KNUXX<= 0 && idlecount < 5 ) - V_DrawSciencePatch(KNUXX<= 5 && idlecount < 10) - V_DrawSciencePatch(KNUXX<= 10 && idlecount < 13) - V_DrawSciencePatch(KNUXX<= 13 && idlecount < 14) - V_DrawSciencePatch(KNUXX<= 14 && idlecount < 17) - V_DrawSciencePatch(KNUXX<= 17 && idlecount < 21) - V_DrawSciencePatch(KNUXX<= 21 && idlecount < 27) - V_DrawSciencePatch(KNUXX<= 27 && idlecount < 32) - V_DrawSciencePatch(KNUXX<= 32 && idlecount < 34) - V_DrawSciencePatch(KNUXX<= 34 && idlecount < 37) - V_DrawSciencePatch(KNUXX<= 37 && idlecount < 39) - V_DrawSciencePatch(KNUXX<= 39 && idlecount < 42) - V_DrawSciencePatch(KNUXX<= 42 && idlecount < 46) - V_DrawSciencePatch(KNUXX<= TAILSSTART) - { - if (finalecount < TAILSIDLE) - { - // - // Tails Front Layer Intro - // - if (finalecount >= TAILSSTART+26 && finalecount < TAILSSTART+30 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+30 && finalecount < TAILSSTART+35 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+35 && finalecount < TAILSSTART+41 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+41 && finalecount < TAILSSTART+43 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+43 && finalecount < TAILSSTART+47 ) - V_DrawSciencePatch(TAILSX<= TAILSSTART+47 && finalecount < TAILSSTART+51 ) - V_DrawSciencePatch(TAILSX<= SONICSTART) - { - if (finalecount < SONICIDLE) - { - // - // Sonic Front Layer Intro - // - if (finalecount >= SONICSTART+19 && finalecount < SONICSTART+27 ) - V_DrawSciencePatch(SONICX<= SONICSTART+27 && finalecount < SONICSTART+31 ) - V_DrawSciencePatch(SONICX<= SONICSTART+31 && finalecount < SONICSTART+33 ) - V_DrawSciencePatch(SONICX<= SONICSTART+33 && finalecount < SONICSTART+36 ) - V_DrawSciencePatch(SONICX<= SONICSTART+36 && finalecount < SONICSTART+40 ) - V_DrawSciencePatch(SONICX<= SONICSTART+40 && finalecount < SONICSTART+44 ) - V_DrawSciencePatch(SONICX<= SONICSTART+44 && finalecount < SONICSTART+47 ) - V_DrawSciencePatch(SONICX<= SONICSTART+53 && finalecount < SONICSTART+57 ) - V_DrawSciencePatch(SONICX<= 0 && idlecount < 5 ) - V_DrawSciencePatch(SONICX<= 5 && idlecount < 8 ) - V_DrawSciencePatch(SONICX<= 8 && idlecount < 9 ) - V_DrawSciencePatch(SONICX<= 9 && idlecount < 12) - V_DrawSciencePatch(SONICX<= 12 && idlecount < 17) - V_DrawSciencePatch(SONICX<= 17 && idlecount < 19) - V_DrawSciencePatch(SONICX<= 19 && idlecount < 21) - V_DrawSciencePatch(SONICX<= 21 && idlecount < 22) - V_DrawSciencePatch(SONICX<= 22 && idlecount < 25) - V_DrawSciencePatch(SONICX<x; - camera.y = cameraref->y; - camera.z = cameraref->z; - camera.angle = cameraref->angle; - camera.aiming = cameraref->cusval; - camera.subsector = cameraref->subsector; + camera[0].x = cameraref->x; + camera[0].y = cameraref->y; + camera[0].z = cameraref->z; + camera[0].angle = cameraref->angle; + camera[0].aiming = cameraref->cusval; + camera[0].subsector = cameraref->subsector; } else { // Default behavior: Do a lil' camera spin if a title map is loaded; - camera.angle += titlescrollxspeed*ANG1/64; + camera[0].angle += titlescrollxspeed*ANG1/64; } } @@ -3068,12 +2142,14 @@ void F_TitleScreenTicker(boolean run) } // Replay intro when done cycling through demos - /*if (curDemo == numDemos) -- uuuh... we have a LOT of maps AND a big devteam... probably not gonna see a repeat unless you're super unlucky :V + /* + if (curDemo == numDemos) -- uuuh... we have a LOT of maps AND a big devteam... probably not gonna see a repeat unless you're super unlucky :V { curDemo = 0; F_StartIntro(); return; - }*/ + } + */ mapname = G_BuildMapName(G_RandMap(TOL_RACE, -2, false, 0, false, NULL)+1); @@ -3129,6 +2205,7 @@ void F_StartWaitingPlayers(void) { INT32 i; INT32 randskin; + spritedef_t *sprdef; spriteframe_t *sprframe; wipegamestate = GS_TITLESCREEN; // technically wiping from title screen @@ -3141,10 +2218,12 @@ void F_StartWaitingPlayers(void) waitcolormap = R_GetTranslationColormap(randskin, skins[randskin].prefcolor, 0); + sprdef = &skins[randskin].sprites[P_GetSkinSprite2(&skins[randskin], SPR2_FSTN, NULL)]; + for (i = 0; i < 2; i++) { - sprframe = &skins[randskin].spritedef.spriteframes[(6+(i*3)) & FF_FRAMEMASK]; - driver[i] = W_CachePatchNum(sprframe->lumppat[1], PU_LEVEL); + sprframe = &sprdef->spriteframes[i]; + driver[i] = W_CachePatchNum(sprframe->lumppat[0], PU_LEVEL); } } @@ -3848,10 +2927,8 @@ void F_TextPromptDrawer(void) players[j].powers[pw_nocontrol] = 1;\ if (players[j].mo)\ {\ - if (players[j].mo->state == states+S_PLAY_STND && players[j].mo->tics != -1)\ + if (players[j].mo->state == states+S_KART_STILL && players[j].mo->tics != -1)\ players[j].mo->tics++;\ - else if (players[j].mo->state == states+S_PLAY_WAIT)\ - P_SetPlayerMobjState(players[j].mo, S_PLAY_STND);\ }\ } @@ -3879,15 +2956,19 @@ void F_TextPromptTicker(void) { if (netgame && i != serverplayer && !IsPlayerAdmin(i)) continue; - else if (splitscreen) { + else + { + UINT8 j; + // Both players' controls are locked, // But only consoleplayer can advance the prompt. // \todo Proper per-player splitscreen support (individual prompts) - if (i == consoleplayer || i == secondarydisplayplayer) - nocontrolallowed(i) + for (j = 0; j < g_localplayers[j]; j++) + { + if (i == g_localplayers[j]) + nocontrolallowed(i) + } } - else if (i == consoleplayer) - nocontrolallowed(i) if (!splitscreen) break; @@ -3910,14 +2991,17 @@ void F_TextPromptTicker(void) { if (netgame && i != serverplayer && !IsPlayerAdmin(i)) continue; - else if (splitscreen) { + else + { + UINT8 j; + + players[i].powers[pw_nocontrol] = 1; + // Both players' controls are locked, // But only the triggering player can advance the prompt. - if (i == consoleplayer || i == secondarydisplayplayer) + for (j = 0; j <= splitscreen; j++) { - players[i].powers[pw_nocontrol] = 1; - - if (callplayer == consoleplayer || callplayer == secondarydisplayplayer) + if (callplayer == g_localplayers[j]) { if (i != callplayer) continue; @@ -3925,15 +3009,9 @@ void F_TextPromptTicker(void) else if (i != consoleplayer) continue; } - else - continue; } - else if (i == consoleplayer) - nocontrolallowed(i) - else - continue; - if ((players[i].cmd.buttons & BT_USE) || (players[i].cmd.buttons & BT_JUMP)) + if (players[i].cmd.buttons & (BT_ACCELERATE|BT_BRAKE|BT_DRIFT)) { if (timetonext > 1) timetonext--; @@ -3956,7 +3034,7 @@ void F_TextPromptTicker(void) } keypressed = true; // prevent repeat events } - else if (!(players[i].cmd.buttons & BT_USE) && !(players[i].cmd.buttons & BT_JUMP)) + else if (!(players[i].cmd.buttons & (BT_ACCELERATE|BT_BRAKE|BT_DRIFT))) keypressed = false; if (!splitscreen) diff --git a/src/f_finale.h b/src/f_finale.h index 6d3b85cbc..ac0147de9 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -86,8 +86,8 @@ typedef enum { TTMODE_NONE = 0, TTMODE_OLD, - TTMODE_ALACROIX, - TTMODE_USER + TTMODE_USER, + //TTMODE_RINGRACERS } ttmode_enum; #define TTMAX_ALACROIX 30 // max frames for SONIC typeface, plus one for NULL terminating entry diff --git a/src/g_game.c b/src/g_game.c index 395a49410..e579fed03 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3880,11 +3880,6 @@ void G_LoadGameData(void) //For records tic_t rectime; tic_t reclap; - //UINT32 recscore; - //UINT16 recrings; - - //UINT8 recmares; - //INT32 curmare; // Clear things so previously read gamedata doesn't transfer // to new gamedata @@ -4049,8 +4044,7 @@ void G_SaveGameData(boolean force) for (i = 0; i < PWRLV_NUMTYPES; i++) WRITEUINT16(save_p, vspowerlevel[i]); - btemp = (UINT8)(savemoddata); // what used to be here was profoundly dunderheaded - WRITEUINT8(save_p, btemp); + WRITEUINT8(save_p, (UINT8)savemoddata); // TODO put another cipher on these things? meh, I don't care... for (i = 0; i < NUMMAPS; i++) diff --git a/src/g_input.h b/src/g_input.h index 2467633dd..a778213fa 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -128,6 +128,7 @@ extern INT32 gamecontroldefault[MAXSPLITSCREENPLAYERS][num_gamecontrolschemes][n #define num_gcl_accelerate 1 #define num_gcl_brake 1 +#define num_gcl_drift 1 #define num_gcl_spindash 3 #define num_gcl_movement 5 #define num_gcl_item 3 @@ -135,6 +136,7 @@ extern INT32 gamecontroldefault[MAXSPLITSCREENPLAYERS][num_gamecontrolschemes][n extern const INT32 gcl_accelerate[num_gcl_accelerate]; extern const INT32 gcl_brake[num_gcl_brake]; +extern const INT32 gcl_drift[num_gcl_drift]; extern const INT32 gcl_spindash[num_gcl_spindash]; extern const INT32 gcl_movement[num_gcl_movement]; extern const INT32 gcl_item[num_gcl_item]; diff --git a/src/hardware/hw3sound.c b/src/hardware/hw3sound.c index 79b4bb7ff..cd16c6511 100644 --- a/src/hardware/hw3sound.c +++ b/src/hardware/hw3sound.c @@ -783,18 +783,18 @@ static void HW3S_UpdateListener(mobj_t *listener) if (!listener || !listener->player) return; - if (camera.chase) + if (camera[0].chase) { - data.x = FIXED_TO_FLOAT(camera.x); - data.y = FIXED_TO_FLOAT(camera.y); - data.z = FIXED_TO_FLOAT(camera.z + camera.height - (5 * FRACUNIT)); + data.x = FIXED_TO_FLOAT(camera[0].x); + data.y = FIXED_TO_FLOAT(camera[0].y); + data.z = FIXED_TO_FLOAT(camera[0].z + camera[0].height - (5 * FRACUNIT)); - data.f_angle = ANGLE2DEG(camera.angle); - data.h_angle = ANGLE2DEG(camera.aiming); + data.f_angle = ANGLE2DEG(camera[0].angle); + data.h_angle = ANGLE2DEG(camera[0].aiming); - data.momx = TPS(FIXED_TO_FLOAT(camera.momx)); - data.momy = TPS(FIXED_TO_FLOAT(camera.momy)); - data.momz = TPS(FIXED_TO_FLOAT(camera.momz)); + data.momx = TPS(FIXED_TO_FLOAT(camera[0].momx)); + data.momy = TPS(FIXED_TO_FLOAT(camera[0].momy)); + data.momz = TPS(FIXED_TO_FLOAT(camera[0].momz)); } else { diff --git a/src/hardware/hw_draw.c b/src/hardware/hw_draw.c index 612deadee..10fdf5893 100644 --- a/src/hardware/hw_draw.c +++ b/src/hardware/hw_draw.c @@ -216,7 +216,7 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t float adjustx = ((option & V_NOSCALESTART) ? vid.width : BASEVIDWIDTH)/2.0f; fscalew /= 2; cx /= 2; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -224,7 +224,7 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t perplayershuffle |= 4; option &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -233,7 +233,7 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t cx += adjustx; option &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -242,7 +242,7 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t cy += adjusty; option &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -257,13 +257,13 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle = 1; option &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(option & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle = 2; @@ -719,7 +719,7 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac fixed_t adjustx = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -727,7 +727,7 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac perplayershuffle |= 4; color &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -736,7 +736,7 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac x += adjustx; color &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -745,7 +745,7 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac y += adjusty; color &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -760,13 +760,13 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; color &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1198,7 +1198,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 fixed_t adjustx = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1206,7 +1206,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 perplayershuffle |= 4; color &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1215,7 +1215,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 x += adjustx; color &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1224,7 +1224,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 y += adjusty; color &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1239,13 +1239,13 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32 #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; color &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1369,7 +1369,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) fixed_t adjustx = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1377,7 +1377,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) perplayershuffle |= 4; color &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1386,7 +1386,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) x += adjustx; color &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1395,7 +1395,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) y += adjusty; color &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1410,13 +1410,13 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; color &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(color & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index b73dd82e2..9a85aa1eb 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5726,7 +5726,7 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player) // Make a viewangle int so we can render things based on mouselook if (player == &players[consoleplayer]) viewangle = localaiming; - else if (splitscreen && player == &players[secondarydisplayplayer]) + else if (splitscreen && player == &players[displayplayers[1]]) viewangle = localaiming2; // Handle stuff when you are looking farther up or down. @@ -5948,7 +5948,7 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player) // Make a viewangle int so we can render things based on mouselook if (player == &players[consoleplayer]) viewangle = localaiming; - else if (splitscreen && player == &players[secondarydisplayplayer]) + else if (splitscreen && player == &players[displayplayers[1]]) viewangle = localaiming2; // Handle stuff when you are looking farther up or down. diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 3ee9d51e5..3f18b7360 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1972,12 +1972,6 @@ static void HU_DrawCEcho(void) *line = '\0'; V_DrawCenteredString(BASEVIDWIDTH/2, y, realflags, echoptr); - if (splitscreen) - { - stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]); - V_DrawCenteredString(BASEVIDWIDTH/2, y, realflags, echoptr); - stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]); - } y += ((realflags & V_RETURN8) ? 8 : 12); echoptr = line; diff --git a/src/m_cheat.c b/src/m_cheat.c index 2ed257e6f..a62ab2e69 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -1480,7 +1480,7 @@ void Command_ObjectPlace_f(void) op_oldmomy = players[0].mo->momy; op_oldmomz = players[0].mo->momz; op_oldheight = players[0].mo->height; - op_oldstate = S_KART_STILL1; // SRB2kart - was S_PLAY_STND + op_oldstate = S_KART_STILL; op_oldcolor = players[0].mo->color; // save color too in case of super/fireflower // Remove ALL flags and motion. diff --git a/src/p_maputl.c b/src/p_maputl.c index 7012b7736..0ae0b0dbc 100644 --- a/src/p_maputl.c +++ b/src/p_maputl.c @@ -304,14 +304,14 @@ void P_CameraLineOpening(line_t *linedef) if (front->camsec >= 0) { // SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope) - frontfloor = P_GetSectorFloorZAt (§ors[front->camsec], camera.x, camera.y); - frontceiling = P_GetSectorCeilingZAt(§ors[front->camsec], camera.x, camera.y); + frontfloor = P_GetSectorFloorZAt (§ors[front->camsec], camera[0].x, camera[0].y); + frontceiling = P_GetSectorCeilingZAt(§ors[front->camsec], camera[0].x, camera[0].y); } else if (front->heightsec >= 0) { // SRB2CBTODO: ESLOPE (sectors[front->heightsec].f_slope) - frontfloor = P_GetSectorFloorZAt (§ors[front->heightsec], camera.x, camera.y); - frontceiling = P_GetSectorCeilingZAt(§ors[front->heightsec], camera.x, camera.y); + frontfloor = P_GetSectorFloorZAt (§ors[front->heightsec], camera[0].x, camera[0].y); + frontceiling = P_GetSectorCeilingZAt(§ors[front->heightsec], camera[0].x, camera[0].y); } else { @@ -322,14 +322,14 @@ void P_CameraLineOpening(line_t *linedef) if (back->camsec >= 0) { // SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope) - backfloor = P_GetSectorFloorZAt (§ors[back->camsec], camera.x, camera.y); - backceiling = P_GetSectorCeilingZAt(§ors[back->camsec], camera.x, camera.y); + backfloor = P_GetSectorFloorZAt (§ors[back->camsec], camera[0].x, camera[0].y); + backceiling = P_GetSectorCeilingZAt(§ors[back->camsec], camera[0].x, camera[0].y); } else if (back->heightsec >= 0) { // SRB2CBTODO: ESLOPE (sectors[back->heightsec].f_slope) - backfloor = P_GetSectorFloorZAt (§ors[back->heightsec], camera.x, camera.y); - backceiling = P_GetSectorCeilingZAt(§ors[back->heightsec], camera.x, camera.y); + backfloor = P_GetSectorFloorZAt (§ors[back->heightsec], camera[0].x, camera[0].y); + backceiling = P_GetSectorCeilingZAt(§ors[back->heightsec], camera[0].x, camera[0].y); } else { diff --git a/src/p_mobj.c b/src/p_mobj.c index ada8c8053..080c5f1aa 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6605,134 +6605,6 @@ static void P_RemoveOverlay(mobj_t *thing) } } -void A_BossDeath(mobj_t *mo); -// AI for the Koopa boss. -static void P_KoopaThinker(mobj_t *koopa) -{ - P_MobjCheckWater(koopa); - - if (koopa->watertop > koopa->z + koopa->height + FixedMul(128*FRACUNIT, koopa->scale) && koopa->health > 0) - { - A_BossDeath(koopa); - P_RemoveMobj(koopa); - return; - } - - // Koopa moves ONLY on the X axis! - if (koopa->threshold > 0) - { - koopa->threshold--; - koopa->momx = FixedMul(FRACUNIT, koopa->scale); - - if (!koopa->threshold) - koopa->threshold = -TICRATE*2; - } - else if (koopa->threshold < 0) - { - koopa->threshold++; - koopa->momx = FixedMul(-FRACUNIT, koopa->scale); - - if (!koopa->threshold) - koopa->threshold = TICRATE*2; - } - else - koopa->threshold = TICRATE*2; - - P_XYMovement(koopa); - - if (P_RandomChance(FRACUNIT/32) && koopa->z <= koopa->floorz) - koopa->momz = FixedMul(5*FRACUNIT, koopa->scale); - - if (koopa->z > koopa->floorz) - koopa->momz += FixedMul(FRACUNIT/4, koopa->scale); - - if (P_RandomChance(FRACUNIT/64)) - { - mobj_t *flame; - flame = P_SpawnMobj(koopa->x - koopa->radius + FixedMul(5*FRACUNIT, koopa->scale), koopa->y, koopa->z + (P_RandomByte()<<(FRACBITS-2)), MT_KOOPAFLAME); - flame->momx = -FixedMul(flame->info->speed, flame->scale); - S_StartSound(flame, sfx_koopfr); - } - else if (P_RandomChance(5*FRACUNIT/256)) - { - mobj_t *hammer; - hammer = P_SpawnMobj(koopa->x - koopa->radius, koopa->y, koopa->z + koopa->height, MT_HAMMER); - hammer->momx = FixedMul(-5*FRACUNIT, hammer->scale); - hammer->momz = FixedMul(7*FRACUNIT, hammer->scale); - } -} - -// Spawns and chains the minecart sides. -static void P_SpawnMinecartSegments(mobj_t *mobj, boolean mode) -{ - fixed_t x = mobj->x; - fixed_t y = mobj->y; - fixed_t z = mobj->z; - mobj_t *prevseg = mobj; - mobj_t *seg; - UINT8 i; - - for (i = 0; i < 4; i++) - { - seg = P_SpawnMobj(x, y, z, MT_MINECARTSEG); - P_SetMobjState(seg, (statenum_t)(S_MINECARTSEG_FRONT + i)); - if (i >= 2) - seg->extravalue1 = (i == 2) ? -18 : 18; // make -20/20 when papersprite projection fixed - else - { - seg->extravalue2 = (i == 0) ? 24 : -24; - seg->cusval = -90; - } - if (!mode) - seg->frame &= ~FF_ANIMATE; - P_SetTarget(&prevseg->tracer, seg); - prevseg = seg; - } -} - -// Updates the chained segments. -static void P_UpdateMinecartSegments(mobj_t *mobj) -{ - mobj_t *seg = mobj->tracer; - fixed_t x = mobj->x; - fixed_t y = mobj->y; - fixed_t z = mobj->z; - angle_t ang = mobj->angle; - angle_t fa = (ang >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t c = FINECOSINE(fa); - fixed_t s = FINESINE(fa); - INT32 dx, dy; - INT32 sang; - - while (seg) - { - dx = seg->extravalue1; - dy = seg->extravalue2; - sang = seg->cusval; - P_TeleportMove(seg, x + s*dx + c*dy, y - c*dx + s*dy, z); - seg->angle = ang + FixedAngle(FRACUNIT*sang); - seg->flags2 = (seg->flags2 & ~MF2_DONTDRAW) | (mobj->flags2 & MF2_DONTDRAW); - seg = seg->tracer; - } -} - -void P_HandleMinecartSegments(mobj_t *mobj) -{ - if (!mobj->tracer) - P_SpawnMinecartSegments(mobj, (mobj->type == MT_MINECART)); - P_UpdateMinecartSegments(mobj); -} - -static void P_PyreFlyBurn(mobj_t *mobj, fixed_t hoffs, INT16 vrange, mobjtype_t mobjtype, fixed_t momz) -{ - angle_t fa = (FixedAngle(P_RandomKey(360)*FRACUNIT) >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t xoffs = FixedMul(FINECOSINE(fa), mobj->radius + hoffs); - fixed_t yoffs = FixedMul(FINESINE(fa), mobj->radius + hoffs); - fixed_t zoffs = P_RandomRange(-vrange, vrange)*FRACUNIT; - mobj_t *particle = P_SpawnMobjFromMobj(mobj, xoffs, yoffs, zoffs, mobjtype); - particle->momz = momz; -} - static void P_MobjScaleThink(mobj_t *mobj) { fixed_t oldheight = mobj->height; @@ -6833,43 +6705,6 @@ static void P_MaceSceneryThink(mobj_t *mobj) P_MaceRotate(mobj, mobj->movedir, oldmovedir); } -static boolean P_DrownNumbersSceneryThink(mobj_t *mobj) -{ - if (!mobj->target) - { - P_RemoveMobj(mobj); - return false; - } - if (!mobj->target->player || !(mobj->target->player->powers[pw_underwater] || mobj->target->player->powers[pw_spacetime])) - { - P_RemoveMobj(mobj); - return false; - } - mobj->x = mobj->target->x; - mobj->y = mobj->target->y; - - mobj->destscale = mobj->target->destscale; - P_SetScale(mobj, mobj->target->scale); - - if (mobj->target->eflags & MFE_VERTICALFLIP) - { - mobj->z = mobj->target->z - FixedMul(16*FRACUNIT, mobj->target->scale) - mobj->height; - if (mobj->target->player->pflags & PF_FLIPCAM) - mobj->eflags |= MFE_VERTICALFLIP; - } - else - mobj->z = mobj->target->z + (mobj->target->height) + FixedMul(8*FRACUNIT, mobj->target->scale); // Adjust height for height changes - - if (mobj->threshold <= 35) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - if (mobj->threshold <= 30) - mobj->threshold = 40; - mobj->threshold--; - return true; -} - static void P_FlameJetSceneryThink(mobj_t *mobj) { mobj_t *flame; @@ -7009,218 +6844,6 @@ static boolean P_ParticleGenSceneryThink(mobj_t *mobj) return true; } -static void P_RosySceneryThink(mobj_t *mobj) -{ - UINT8 i; - fixed_t pdist = 1700*mobj->scale, work, actualwork; - player_t *player = NULL; - statenum_t stat = (mobj->state - states); - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i]) - continue; - if (!players[i].mo) - continue; - if (players[i].bot) - continue; - if (!players[i].mo->health) - continue; - actualwork = work = FixedHypot(mobj->x - players[i].mo->x, mobj->y - players[i].mo->y); - if (player) - { - if (players[i].skin == 0 || players[i].skin == 5) - work = (2*work)/3; - if (work >= pdist) - continue; - } - pdist = actualwork; - player = &players[i]; - } - - if (stat == S_ROSY_JUMP || stat == S_ROSY_PAIN) - { - if (P_IsObjectOnGround(mobj)) - { - mobj->momx = mobj->momy = 0; - if (player && mobj->cvmem < (-2*TICRATE)) - stat = S_ROSY_UNHAPPY; - else - stat = S_ROSY_WALK; - P_SetMobjState(mobj, stat); - } - else if (P_MobjFlip(mobj)*mobj->momz < 0) - mobj->frame = mobj->state->frame + mobj->state->var1; - } - - if (!player) - { - if ((stat < S_ROSY_IDLE1 || stat > S_ROSY_IDLE4) && stat != S_ROSY_JUMP) - { - mobj->momx = mobj->momy = 0; - P_SetMobjState(mobj, S_ROSY_IDLE1); - } - } - else - { - boolean dojump = false, targonground, love, makeheart = false; - if (mobj->target != player->mo) - P_SetTarget(&mobj->target, player->mo); - // Tatsuru: Don't try to hug them if they're above or below you! - targonground = (P_IsObjectOnGround(mobj->target) && (player->panim == PA_IDLE || player->panim == PA_WALK || player->panim == PA_RUN) && player->mo->z == mobj->z); - love = (player->skin == 0 || player->skin == 5); - - switch (stat) - { - case S_ROSY_IDLE1: - case S_ROSY_IDLE2: - case S_ROSY_IDLE3: - case S_ROSY_IDLE4: - dojump = true; - break; - case S_ROSY_JUMP: - case S_ROSY_PAIN: - // handled above - break; - case S_ROSY_WALK: - { - fixed_t x = mobj->x, y = mobj->y, z = mobj->z; - angle_t angletoplayer = R_PointToAngle2(x, y, mobj->target->x, mobj->target->y); - boolean allowed = P_TryMove(mobj, mobj->target->x, mobj->target->y, false); - - P_UnsetThingPosition(mobj); - mobj->x = x; - mobj->y = y; - mobj->z = z; - P_SetThingPosition(mobj); - - if (allowed) - { - fixed_t mom, max; - P_Thrust(mobj, angletoplayer, (3*FRACUNIT) >> 1); - mom = FixedHypot(mobj->momx, mobj->momy); - max = pdist; - if ((--mobj->extravalue1) <= 0) - { - if (++mobj->frame > mobj->state->frame + mobj->state->var1) - mobj->frame = mobj->state->frame; - if (mom > 12*mobj->scale) - mobj->extravalue1 = 2; - else if (mom > 6*mobj->scale) - mobj->extravalue1 = 3; - else - mobj->extravalue1 = 4; - } - if (max < (mobj->radius + mobj->target->radius)) - { - mobj->momx = mobj->target->player->cmomx; - mobj->momy = mobj->target->player->cmomy; - if ((mobj->cvmem > TICRATE && !player->exiting) || !targonground) - P_SetMobjState(mobj, (stat = S_ROSY_STND)); - else - { - mobj->target->momx = mobj->momx; - mobj->target->momy = mobj->momy; - P_SetMobjState(mobj, (stat = S_ROSY_HUG)); - S_StartSound(mobj, sfx_cdpcm6); - mobj->angle = angletoplayer; - } - } - else - { - max /= 3; - if (max > 30*mobj->scale) - max = 30*mobj->scale; - if (mom > max && max > mobj->scale) - { - max = FixedDiv(max, mom); - mobj->momx = FixedMul(mobj->momx, max); - mobj->momy = FixedMul(mobj->momy, max); - } - if (abs(mobj->momx) > mobj->scale || abs(mobj->momy) > mobj->scale) - mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); - } - } - else - dojump = true; - } - break; - case S_ROSY_HUG: - if (targonground) - { - player->pflags |= PF_STASIS; - if (mobj->cvmem < 5*TICRATE) - mobj->cvmem++; - if (love && !(leveltime & 7)) - makeheart = true; - } - else - { - if (mobj->cvmem < (love ? 5*TICRATE : 0)) - { - P_SetMobjState(mobj, (stat = S_ROSY_PAIN)); - S_StartSound(mobj, sfx_cdpcm7); - } - else - P_SetMobjState(mobj, (stat = S_ROSY_JUMP)); - var1 = var2 = 0; - A_DoNPCPain(mobj); - mobj->cvmem -= TICRATE; - } - break; - case S_ROSY_STND: - if ((pdist > (mobj->radius + mobj->target->radius + 3*(mobj->scale + mobj->target->scale)))) - P_SetMobjState(mobj, (stat = S_ROSY_WALK)); - else if (!targonground) - ; - else - { - if (love && !(leveltime & 15)) - makeheart = true; - if (player->exiting || --mobj->cvmem < TICRATE) - { - P_SetMobjState(mobj, (stat = S_ROSY_HUG)); - S_StartSound(mobj, sfx_cdpcm6); - mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->target->x, mobj->target->y); - mobj->target->momx = mobj->momx; - mobj->target->momy = mobj->momy; - } - } - break; - case S_ROSY_UNHAPPY: - default: - break; - } - - if (stat == S_ROSY_HUG) - { - if (player->panim != PA_IDLE) - P_SetPlayerMobjState(mobj->target, S_PLAY_STND); - player->pflags |= PF_STASIS; - } - - if (dojump) - { - P_SetMobjState(mobj, S_ROSY_JUMP); - mobj->z += P_MobjFlip(mobj); - mobj->momx = mobj->momy = 0; - P_SetObjectMomZ(mobj, 6 << FRACBITS, false); - S_StartSound(mobj, sfx_cdfm02); - } - - if (makeheart) - { - mobj_t *cdlhrt = P_SpawnMobjFromMobj(mobj, 0, 0, mobj->height, MT_CDLHRT); - cdlhrt->destscale = (5*mobj->scale) >> 4; - P_SetScale(cdlhrt, cdlhrt->destscale); - cdlhrt->fuse = (5*TICRATE) >> 1; - cdlhrt->momz = mobj->scale; - P_SetTarget(&cdlhrt->target, mobj); - cdlhrt->extravalue1 = mobj->x; - cdlhrt->extravalue2 = mobj->y; - } - } -} - static void P_MobjSceneryThink(mobj_t *mobj) { if (LUAh_MobjThinker(mobj)) @@ -11319,32 +10942,6 @@ static boolean P_FuseThink(mobj_t *mobj) else switch (mobj->type) { // gargoyle and snowman handled in P_PushableThinker, not here - case MT_THROWNGRENADE: - case MT_CYBRAKDEMON_NAPALM_BOMB_LARGE: - P_SetMobjState(mobj, mobj->info->deathstate); - break; - case MT_LHRT: - P_KillMobj(mobj, NULL, NULL, 0); - break; - case MT_BLUEFLAG: - case MT_REDFLAG: - P_FlagFuseThink(mobj); - P_RemoveMobj(mobj); - return false; - case MT_FANG: - if (mobj->flags2 & MF2_SLIDEPUSH) - { - var1 = 0; - var2 = 0; - A_BossDeath(mobj); - return false; - } - P_SetMobjState(mobj, mobj->state->nextstate); - if (P_MobjWasRemoved(mobj)) - return false; - break; - case MT_METALSONIC_BATTLE: - break; // don't remove case MT_SPIKE: P_SetMobjState(mobj, mobj->state->nextstate); mobj->fuse = mobj->info->speed; @@ -11357,9 +10954,6 @@ static boolean P_FuseThink(mobj_t *mobj) if (mobj->spawnpoint) mobj->fuse += (mobj->spawnpoint->angle / 360); break; - case MT_NIGHTSCORE: - P_RemoveMobj(mobj); - return false; case MT_LAVAFALL: if (mobj->state - states == S_LAVAFALL_DORMANT) { @@ -11381,31 +10975,6 @@ static boolean P_FuseThink(mobj_t *mobj) S_StopSound(mobj); } return false; - case MT_PYREFLY: - if (mobj->health <= 0) - break; - - mobj->extravalue2 = (mobj->extravalue2 + 1) % 3; - if (mobj->extravalue2 == 0) - { - P_SetMobjState(mobj, mobj->info->spawnstate); - mobj->fuse = 100; - S_StopSound(mobj); - S_StartSound(mobj, sfx_s3k8c); - } - else if (mobj->extravalue2 == 1) - { - mobj->fuse = 50; - S_StartSound(mobj, sfx_s3ka3); - } - else - { - P_SetMobjState(mobj, mobj->info->meleestate); - mobj->fuse = 100; - S_StopSound(mobj); - S_StartSound(mobj, sfx_s3kc2l); - } - return false; case MT_RANDOMITEM: if ((gametyperules & GTR_BUMPERS) && (mobj->threshold != 70)) { diff --git a/src/p_setup.c b/src/p_setup.c index b83698f16..f1cfb3674 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3742,18 +3742,18 @@ static void P_SetupCamera(UINT8 pnum, camera_t *cam) { mapthing_t *thing; - if (gametyperules & GTR_DEATHMATCHSTARTS) + if (gametyperules & GTR_BATTLESTARTS) thing = deathmatchstarts[0]; else thing = playerstarts[0]; if (thing) { - camera.x = thing->x; - camera.y = thing->y; - camera.z = thing->z; - camera.angle = FixedAngle((fixed_t)thing->angle << FRACBITS); - camera.subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18) + camera[0].x = thing->x; + camera[0].y = thing->y; + camera[0].z = thing->z; + camera[0].angle = FixedAngle((fixed_t)thing->angle << FRACBITS); + camera[0].subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18) } } } diff --git a/src/p_spec.c b/src/p_spec.c index 165a48679..31ece0383 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2571,12 +2571,14 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) else { UINT8 i = 0; - mobj_t* camobj = players[displayplayer].mo; + mobj_t* camobj; ffloor_t *rover; boolean foundit = false; - for (i = 0; i < 2; camobj = players[secondarydisplayplayer].mo, i++) + for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) { + camobj = players[displayplayers[i]].mo; + if (!camobj) continue; diff --git a/src/p_user.c b/src/p_user.c index f00db15d0..306685a4a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4675,33 +4675,50 @@ void P_SetPlayerAngle(player_t *player, angle_t angle) void P_SetLocalAngle(player_t *player, angle_t angle) { INT16 delta = (INT16)((angle - P_GetLocalAngle(player)) >> 16); + UINT8 i; P_ForceLocalAngle(player, P_GetLocalAngle(player) + (angle_t)(delta << 16)); - if (player == &players[consoleplayer]) - ticcmd_oldangleturn[0] += delta; - else if (player == &players[secondarydisplayplayer]) - ticcmd_oldangleturn[1] += delta; + for (i = 0; i <= splitscreen; i++) + { + if (player == &players[g_localplayers[i]]) + { + ticcmd_oldangleturn[i] += delta; + break; + } + } } angle_t P_GetLocalAngle(player_t *player) { - if (player == &players[consoleplayer]) - return localangle; - else if (player == &players[secondarydisplayplayer]) - return localangle2; - else - return 0; + // this function is from vanilla srb2. can you tell? + // (hint: they have separate variables for all of this shit instead of arrays) + + UINT8 i; + + for (i = 0; i <= splitscreen; i++) + { + if (player == &players[g_localplayers[i]]) + return localangle[i]; + } + + return 0; } void P_ForceLocalAngle(player_t *player, angle_t angle) { + UINT8 i; + angle = angle & ~UINT16_MAX; - if (player == &players[consoleplayer]) - localangle = angle; - else if (player == &players[secondarydisplayplayer]) - localangle2 = angle; + for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) + { + if (player == &players[g_localplayers[i]]) + { + localangle[i] = angle; + break; + } + } } boolean P_PlayerFullbright(player_t *player) diff --git a/src/r_main.c b/src/r_main.c index 85e64fbbd..285410e4c 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -690,7 +690,7 @@ void R_CheckViewMorph(void) float fisheyemap[MAXVIDWIDTH/2 + 1]; #endif - angle_t rollangle = players[displayplayer].viewrollangle; + angle_t rollangle = players[displayplayers[0]].viewrollangle; #ifdef WOUGHMP_WOUGHMP fixed_t fisheye = cv_cam2_turnmultiplier.value; // temporary test value #endif diff --git a/src/st_stuff.c b/src/st_stuff.c index 42d830f96..af63ff87e 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -773,7 +773,7 @@ void ST_drawTitleCard(void) if (lvlttlxpos < 0) lvlttlxpos = 0; - if (!splitscreen || (splitscreen && stplyr == &players[displayplayer])) + if (!splitscreen || (splitscreen && stplyr == &players[displayplayers[0]])) { zzticker = lt_ticker; V_DrawMappedPatch(FixedInt(lt_zigzag), (-zzticker) % zigzag->height, V_SNAPTOTOP|V_SNAPTOLEFT, zigzag, colormap); @@ -822,12 +822,11 @@ void ST_preLevelTitleCardDrawer(void) // void ST_drawWipeTitleCard(void) { - stplyr = &players[consoleplayer]; - ST_preDrawTitleCard(); - ST_drawTitleCard(); - if (splitscreen) + UINT8 i; + + for (i = 0; i <= r_splitscreen; i++) { - stplyr = &players[secondarydisplayplayer]; + stplyr = &players[displayplayers[i]]; ST_preDrawTitleCard(); ST_drawTitleCard(); } diff --git a/src/v_video.c b/src/v_video.c index fe0cb9482..86f241215 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -694,7 +694,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca fdup >>= 1; colfrac <<= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -702,7 +702,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca perplayershuffle |= 4; scrn &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -711,7 +711,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca x += adjustx; scrn &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -720,7 +720,7 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca y += adjusty; scrn &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -735,13 +735,13 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle = 1; scrn &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle = 2; @@ -927,7 +927,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ x >>= 1; sx >>= 1; w >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -935,7 +935,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ perplayershuffle |= 4; scrn &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -945,7 +945,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ sx += adjustx; scrn &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -955,7 +955,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ sy += adjusty; scrn &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -972,13 +972,13 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; scrn &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(scrn & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1157,7 +1157,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) fixed_t adjustx = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1165,7 +1165,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) perplayershuffle |= 4; c &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1174,7 +1174,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) x += adjustx; c &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1183,7 +1183,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) y += adjusty; c &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1197,13 +1197,13 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) else // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; c &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1370,7 +1370,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) fixed_t adjustx = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1378,7 +1378,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) perplayershuffle |= 4; c &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1387,7 +1387,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) x += adjustx; c &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1396,7 +1396,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) y += adjusty; c &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1411,13 +1411,13 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c) #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; c &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1655,7 +1655,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U fixed_t adjustx = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1; w >>= 1; x >>= 1; - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1663,7 +1663,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U perplayershuffle |= 4; c &= ~V_SNAPTOBOTTOM|V_SNAPTORIGHT; } - else if (stplyr == &players[secondarydisplayplayer]) + else if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; @@ -1672,7 +1672,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U x += adjustx; c &= ~V_SNAPTOBOTTOM|V_SNAPTOLEFT; } - else if (stplyr == &players[thirddisplayplayer]) + else if (stplyr == &players[displayplayers[2]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1681,7 +1681,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U y += adjusty; c &= ~V_SNAPTOTOP|V_SNAPTORIGHT; } - else //if (stplyr == &players[fourthdisplayplayer]) + else //if (stplyr == &players[displayplayers[3]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2; @@ -1696,13 +1696,13 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U #endif // 2 players { - if (stplyr == &players[displayplayer]) + if (stplyr == &players[displayplayers[0]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 1; c &= ~V_SNAPTOBOTTOM; } - else //if (stplyr == &players[secondarydisplayplayer]) + else //if (stplyr == &players[displayplayers[1]]) { if (!(c & (V_SNAPTOTOP|V_SNAPTOBOTTOM))) perplayershuffle |= 2;