diff --git a/src/d_main.c b/src/d_main.c index 397406293295211dfb4a9749c391c8a237544711..c4e22ed8a8c5ba1e9989ad77a815ebd583f384e7 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -649,14 +649,6 @@ void D_SRB2Loop(void) } else if (rendertimeout < entertic) // in case the server hang or netsplit { - // Lagless camera! Yay! - if (gamestate == GS_LEVEL && netgame) - { - if (splitscreen && camera2.chase) - P_MoveChaseCamera(&players[secondarydisplayplayer], &camera2, false); - if (camera.chase) - P_MoveChaseCamera(&players[displayplayer], &camera, false); - } D_Display(); if (moviemode) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index e80d07b767b6874cd99d83b7e651446b90b0ef69..0dbcb1c048c7a3f270cb786ed9c0f5fef55504d1 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -373,7 +373,7 @@ consvar_t cv_runscripts = {"runscripts", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL consvar_t cv_pause = {"pausepermission", "Server", CV_NETVAR, pause_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; +consvar_t cv_sleep = {"cpusleep", "0", CV_SAVE|CV_NOSHOWHELP, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; char timedemo_name[256]; boolean timedemo_csv; diff --git a/src/doomdef.h b/src/doomdef.h index d13ff9bc04542a69d3a9fae40b506bd63fa077b4..5b3721fd82975f6d0024d925a2f618207be7f531 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -370,7 +370,7 @@ typedef enum // State updates, number of tics / second. // NOTE: used to setup the timer rate, see I_StartupTimer(). #define TICRATE 35 -#define NEWTICRATERATIO 1 // try 4 for 140 fps :) +#define NEWTICRATERATIO 2 // try 4 for 140 fps :) #define NEWTICRATE (TICRATE*NEWTICRATERATIO) #define MUSICRATE 1000 // sound timing is calculated by milliseconds diff --git a/src/f_wipe.c b/src/f_wipe.c index b0982a957a8525a69bc5d38c7aefc0e3852b2dcf..a695003c63da979e28f240ba161c554290fda2bc 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -416,7 +416,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) for (;;) { // get fademask first so we can tell if it exists or not - fmask = F_GetFadeMask(wipetype, wipeframe++); + fmask = F_GetFadeMask(wipetype, wipeframe); if (!fmask) break; @@ -425,6 +425,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) I_Sleep(); lastwipetic = nowtime; + if (nowtime % NEWTICRATERATIO == 0) + wipeframe++; + #ifdef HWRENDER if (rendermode == render_opengl) { diff --git a/src/g_game.c b/src/g_game.c index 2a12dd298093c091338762fba50b59c711c8eb19..38187ece0284d32892d9a4f2eca2a11cf549127e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -979,7 +979,7 @@ angle_t localangle, localangle2; static fixed_t forwardmove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16}; static fixed_t sidemove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16}; // faster! -static fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn +static fixed_t angleturn[3] = {640/NEWTICRATERATIO, 1280/NEWTICRATERATIO, 320/NEWTICRATERATIO}; // + slow turn void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) { diff --git a/src/g_game.h b/src/g_game.h index e7f4a4677c2a95c19edde0c76a15471a495e6081..f89fd1e2cf6cf08a93586ef76c6e451c9b1d81bc 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -79,7 +79,7 @@ extern consvar_t cv_ghost_bestscore, cv_ghost_besttime, cv_ghost_bestrings, cv_g // mouseaiming (looking up/down with the mouse or keyboard) #define KB_LOOKSPEED (1<<25) #define MAXPLMOVE (50) -#define SLOWTURNTICS (6) +#define SLOWTURNTICS (6*NEWTICRATERATIO) // build an internal map name MAPxx from map number const char *G_BuildMapName(INT32 map); diff --git a/src/p_local.h b/src/p_local.h index 286d7201f341504b2832932ea0c90b1ac1b993c7..d7191cb559f96c96eaeb38bdc968e5cc1006afca 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -280,6 +280,7 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state); void P_RunShields(void); void P_RunOverlays(void); void P_HandleMinecartSegments(mobj_t *mobj); +void P_ClearShieldsAndOverlays(void); void P_MobjThinker(mobj_t *mobj); boolean P_RailThinker(mobj_t *mobj); void P_PushableThinker(mobj_t *mobj); diff --git a/src/p_mobj.c b/src/p_mobj.c index dea4a7a4d2528217d12b62f44cd5726ad2506bfd..bbb43c63b9005fa9d968e834f383fc998252897a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -482,6 +482,9 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state) for (;(state = seenstate[i]) > S_NULL; i = state - 1) seenstate[i] = S_NULL; // erase memory of states +#if NEWTICRATERATIO != 1 + mobj->tics *= NEWTICRATERATIO; +#endif return true; } @@ -1523,6 +1526,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd = -gravityadd; mo->eflags ^= MFE_VERTICALFLIP; } + +#if NEWTICRATERATIO != 1 + gravityadd /= NEWTICRATERATIO; +#endif + if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way P_PlayerFlip(mo); } @@ -1673,8 +1681,13 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy) if (twodlevel || player->mo->flags2 & MF2_TWOD) // Otherwise handled in P_3DMovement { const fixed_t ns = FixedDiv(549*ORIG_FRICTION,500*FRACUNIT); +#if NEWTICRATERATIO != 1 + mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - ns) / NEWTICRATERATIO); + mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - ns) / NEWTICRATERATIO); +#else mo->momx = FixedMul(mo->momx, ns); mo->momy = FixedMul(mo->momy, ns); +#endif } } else if (abs(player->rmomx) < FixedMul(STOPSPEED, mo->scale) @@ -1693,6 +1706,18 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy) } else if (!(mo->eflags & MFE_SPRUNG)) { +#if NEWTICRATERATIO != 1 + if (oldx == mo->x && oldy == mo->y) // didn't go anywhere + { + mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - ORIG_FRICTION) / NEWTICRATERATIO); + mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - ORIG_FRICTION) / NEWTICRATERATIO); + } + else + { + mo->momx = FixedMul(mo->momx, FRACUNIT - (FRACUNIT - mo->friction) / NEWTICRATERATIO); + mo->momy = FixedMul(mo->momy, FRACUNIT - (FRACUNIT - mo->friction) / NEWTICRATERATIO); + } +#else if (oldx == mo->x && oldy == mo->y) // didn't go anywhere { mo->momx = FixedMul(mo->momx, ORIG_FRICTION); @@ -1703,6 +1728,7 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy) mo->momx = FixedMul(mo->momx, mo->friction); mo->momy = FixedMul(mo->momy, mo->friction); } +#endif mo->friction = ORIG_FRICTION; } @@ -1861,6 +1887,14 @@ void P_XYMovement(mobj_t *mo) xmove = mo->momx; ymove = mo->momy; +#if NEWTICRATERATIO != 1 + if (player) + { + xmove /= NEWTICRATERATIO; + ymove /= NEWTICRATERATIO; + } +#endif + oldx = mo->x; oldy = mo->y; @@ -2910,7 +2944,7 @@ static void P_PlayerZMovement(mobj_t *mo) mo->eflags &= ~MFE_APPLYPMOMZ; } - mo->z += mo->momz; + mo->z += mo->momz / NEWTICRATERATIO; onground = P_IsObjectOnGround(mo); // Have player fall through floor? @@ -6866,9 +6900,9 @@ void P_RunShields(void) for (i = 0; i < numshields; i++) { P_ShieldLook(shields[i], shields[i]->threshold); - P_SetTarget(&shields[i], NULL); + //P_SetTarget(&shields[i], NULL); } - numshields = 0; + //numshields = 0; } static boolean P_AddShield(mobj_t *thing) @@ -6917,7 +6951,7 @@ void P_RunOverlays(void) // grab next in chain, then unset the chain target next = mo->hnext; - P_SetTarget(&mo->hnext, NULL); + //P_SetTarget(&mo->hnext, NULL); if (!mo->target) continue; @@ -6976,7 +7010,7 @@ void P_RunOverlays(void) P_SetThingPosition(mo); P_CheckPosition(mo, mo->x, mo->y); } - P_SetTarget(&overlaycap, NULL); + //P_SetTarget(&overlaycap, NULL); } // Called only when MT_OVERLAY thinks. @@ -7015,6 +7049,27 @@ static void P_RemoveOverlay(mobj_t *thing) } } +void P_ClearShieldsAndOverlays(void) +{ + INT32 i; + mobj_t *mo, *next = NULL; + + // clear overlay list + for (mo = overlaycap; mo; mo = next) + { + // grab next in chain, then unset the chain target + next = mo->hnext; + P_SetTarget(&mo->hnext, NULL); + } + P_SetTarget(&overlaycap, NULL); + + // clear shields list + for (i = 0; i < numshields; i++) + P_SetTarget(&shields[i], NULL); + + numshields = 0; +} + void A_BossDeath(mobj_t *mo); // AI for the Koopa boss. static void P_KoopaThinker(mobj_t *koopa) diff --git a/src/p_tick.c b/src/p_tick.c index e0f60bd2256d74455de893c85fac2584d94fda75..68a03bf8762bdf8167ba0040e2a828384950917c 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -334,6 +334,14 @@ static inline void P_RunThinkers(void) } +static inline void P_RunPlayerThinkers(void) +{ + UINT8 i; + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i] && players[i].mo) + players[i].mo->thinker.function.acp1(players[i].mo); +} + // // P_DoAutobalanceTeams() // @@ -618,21 +626,18 @@ void P_Ticker(boolean run) if (!S_MusicPaused()) S_AdjustMusicStackTics(); - postimgtype = postimgtype2 = postimg_none; - P_MapStart(); - if (run) - { - if (demorecording) - G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0); - if (demoplayback) - G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0); + postimgtype = postimgtype2 = postimg_none; - for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) - P_PlayerThink(&players[i]); - } + if (demorecording) + G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0); + if (demoplayback) + G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0); + + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) + P_PlayerThink(&players[i]); // Keep track of how long they've been playing! if (!demoplayback) // Don't increment if a demo is playing. @@ -643,20 +648,23 @@ void P_Ticker(boolean run) if (runemeraldmanager) P_EmeraldManager(); // Power stone mode - + if (run) { + P_ClearShieldsAndOverlays(); P_RunThinkers(); + } + else + P_RunPlayerThinkers(); - // Run any "after all the other thinkers" stuff - for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) - P_PlayerAfterThink(&players[i]); + // Run any "after all the other thinkers" stuff + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) + P_PlayerAfterThink(&players[i]); #ifdef HAVE_BLUA - LUAh_ThinkFrame(); + LUAh_ThinkFrame(); #endif - } // Run shield positioning P_RunShields(); @@ -728,6 +736,12 @@ void P_Ticker(boolean run) G_GhostTicker(); } + // Always move the camera. + if (splitscreen && camera2.chase) + P_MoveChaseCamera(&players[secondarydisplayplayer], &camera2, false); + if (camera.chase) + P_MoveChaseCamera(&players[displayplayer], &camera, false); + P_MapEnd(); // Z_CheckMemCleanup(); @@ -761,6 +775,7 @@ void P_PreTicker(INT32 frames) memcpy(&players[i].cmd, &temptic, sizeof(ticcmd_t)); } + P_ClearShieldsAndOverlays(); P_RunThinkers(); // Run any "after all the other thinkers" stuff diff --git a/src/p_user.c b/src/p_user.c index ea42a2c360b86449c688133c33631d8508b44e77..1f6ba72fb8323633f0cbc282db9e54e67a291d22 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5699,6 +5699,9 @@ static void P_2dMovement(player_t *player) angle_t movepushangle = 0; fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale); + if ((gametic % NEWTICRATERATIO) != 0) + return; + cmd = &player->cmd; if (player->exiting || player->pflags & PF_STASIS) @@ -5885,6 +5888,9 @@ static void P_3dMovement(player_t *player) totalthrust.z = FRACUNIT*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes #endif // ESLOPE + if ((gametic % NEWTICRATERATIO) != 0) + return; + // Get the old momentum; this will be needed at the end of the function! -SH oldMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0); @@ -7106,9 +7112,9 @@ static void P_NiGHTSMovement(player_t *player) if (player->drillmeter > 96*20) player->drillmeter = 96*20; - - if (player->drilldelay) - player->drilldelay--; + if (gametic % NEWTICRATERATIO == 0) + if (player->drilldelay) + player->drilldelay--; if (!(cmd->buttons & BT_JUMP)) { @@ -7135,14 +7141,16 @@ static void P_NiGHTSMovement(player_t *player) && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1] && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6]) && !player->exiting) - player->nightstime--; + if (gametic % NEWTICRATERATIO == 0) + player->nightstime--; } else if (gametype != GT_RACE && gametype != GT_COMPETITION && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1] && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS6]) && !(player->capsule && player->capsule->reactiontime) && !player->exiting) - player->nightstime--; + if (gametic % NEWTICRATERATIO == 0) + player->nightstime--; if (!player->nightstime) { @@ -7405,9 +7413,11 @@ static void P_NiGHTSMovement(player_t *player) { if (player->speed < MAXDRILLSPEED) player->speed += 150; - - if (--player->drillmeter == 0) - player->drilldelay = TICRATE*2; + if (gametic % NEWTICRATERATIO == 0) + { + if (--player->drillmeter == 0) + player->drilldelay = TICRATE * 2; + } } if (player->speed < 0) @@ -10248,8 +10258,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall } else { - thiscam->momx = FixedMul(x - thiscam->x, camspeed); - thiscam->momy = FixedMul(y - thiscam->y, camspeed); + thiscam->momx = FixedMul(x - thiscam->x, camspeed / NEWTICRATERATIO); + thiscam->momy = FixedMul(y - thiscam->y, camspeed / NEWTICRATERATIO); if (GETSECSPECIAL(thiscam->subsector->sector->special, 1) == 6 && thiscam->z < thiscam->subsector->sector->floorheight + 256*FRACUNIT @@ -10258,7 +10268,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall thiscam->momz = 0; // Don't go down a death pit } else - thiscam->momz = FixedMul(z - thiscam->z, camspeed); + thiscam->momz = FixedMul(z - thiscam->z, camspeed / NEWTICRATERATIO); } // compute aming to look the viewed point @@ -11421,7 +11431,8 @@ void P_PlayerThink(player_t *player) // If it is set, start subtracting // Don't allow it to go back to 0 if (player->exiting > 1 && player->exiting < 3*TICRATE) - player->exiting--; + if (gametic % NEWTICRATERATIO == 0) + player->exiting--; if (player->exiting && countdown2) player->exiting = 5; @@ -11617,8 +11628,11 @@ void P_PlayerThink(player_t *player) if (player->linktimer && !player->powers[pw_nights_linkfreeze]) { - if (--player->linktimer <= 0) // Link timer - player->linkcount = 0; + if (gametic % NEWTICRATERATIO == 0) + { + if (--player->linktimer <= 0) // Link timer + player->linkcount = 0; + } } // Move around. @@ -11922,6 +11936,10 @@ void P_PlayerThink(player_t *player) // Counters, time dependent power ups. // Time Bonus & Ring Bonus count settings + // Only do these counters at 35 FPS + if ((gametic % NEWTICRATERATIO) != 0) + return; + if (player->ammoremovaltimer) { if (--player->ammoremovaltimer == 0) @@ -12214,12 +12232,6 @@ void P_PlayerAfterThink(player_t *player) if (player->playerstate == PST_DEAD) { - // camera may still move when guy is dead - //if (!netgame) - { - if (thiscam && thiscam->chase) - P_MoveChaseCamera(player, thiscam, false); - } if (player->followmobj) { P_RemoveMobj(player->followmobj); @@ -12619,8 +12631,6 @@ void P_PlayerAfterThink(player_t *player) player->viewz = player->mo->z + player->mo->height - player->viewheight; else player->viewz = player->mo->z + player->viewheight; - if (server || addedtogame) - P_MoveChaseCamera(player, thiscam, false); // calculate the camera movement } } diff --git a/src/screen.c b/src/screen.c index 3c4b2bc62181405a5438bb7e0dc6a1f8736d038b..3b2c8e24cebf8d42a1d6316e7abe45344060baef 100644 --- a/src/screen.c +++ b/src/screen.c @@ -397,7 +397,7 @@ boolean SCR_IsAspectCorrect(INT32 width, INT32 height) // XMOD FPS display // moved out of os-specific code for consistency -static boolean fpsgraph[TICRATE]; +static boolean fpsgraph[NEWTICRATE]; static tic_t lasttic; void SCR_DisplayTicRate(void) @@ -408,22 +408,22 @@ void SCR_DisplayTicRate(void) INT32 ticcntcolor = 0; const INT32 h = vid.height-(8*vid.dupy); - for (i = lasttic + 1; i < TICRATE+lasttic && i < ontic; ++i) - fpsgraph[i % TICRATE] = false; + for (i = lasttic + 1; i < NEWTICRATE+lasttic && i < ontic; ++i) + fpsgraph[i % NEWTICRATE] = false; - fpsgraph[ontic % TICRATE] = true; + fpsgraph[ontic % NEWTICRATE] = true; - for (i = 0;i < TICRATE;++i) + for (i = 0;i < NEWTICRATE;++i) if (fpsgraph[i]) ++totaltics; - if (totaltics <= TICRATE/2) ticcntcolor = V_REDMAP; - else if (totaltics == TICRATE) ticcntcolor = V_GREENMAP; + if (totaltics <= NEWTICRATE/2) ticcntcolor = V_REDMAP; + else if (totaltics == NEWTICRATE) ticcntcolor = V_GREENMAP; V_DrawString(vid.width-(72*vid.dupx), h, V_YELLOWMAP|V_NOSCALESTART|V_USERHUDTRANS, "FPS:"); V_DrawString(vid.width-(40*vid.dupx), h, - ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, va("%02d/%02u", totaltics, TICRATE)); + ticcntcolor|V_NOSCALESTART|V_USERHUDTRANS, va("%02d/%02u", totaltics, NEWTICRATE)); lasttic = ontic; } diff --git a/src/sdl/Srb2SDL-vc10.vcxproj b/src/sdl/Srb2SDL-vc10.vcxproj index 0d1fa1a4b5df7947be1559b1663175c592a087d3..33b33f66b6ae6dfe873f4bdd236cce5875d729ec 100644 --- a/src/sdl/Srb2SDL-vc10.vcxproj +++ b/src/sdl/Srb2SDL-vc10.vcxproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|ARM"> @@ -440,7 +440,7 @@ </ClCompile> <ClCompile Include="..\r_main.c" /> <ClCompile Include="..\r_plane.c" /> - <ClCompile Include="..\r_patch.c" /> + <ClCompile Include="..\r_patch.c" /> <ClCompile Include="..\r_portal.c" /> <ClCompile Include="..\r_segs.c" /> <ClCompile Include="..\r_sky.c" /> diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index c876a323f3fbbce1b4a716994cc92a34a09c8913..a3d316c17a8738fd60d663dce7d0e8856c90dcbf 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -96,7 +96,7 @@ rendermode_t rendermode=render_soft; boolean highcolor = false; // synchronize page flipping with screen refresh -consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_vidwait = {"vid_wait", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static consvar_t cv_stretch = {"stretch", "Off", CV_SAVE|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; UINT8 graphics_started = 0; // Is used in console.c and screen.c diff --git a/src/v_video.c b/src/v_video.c index 0e741df9fc3dc003549aa8b8c1a24d3a4c01b71a..22b398f10ec67cd84c8cce1e63ea070ede6b5da3 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -3147,7 +3147,7 @@ void V_DoPostProcessor(INT32 view, postimg_t type, INT32 param) UINT8 *tmpscr = screens[4]; UINT8 *srcscr = screens[0]; INT32 y; - angle_t disStart = (leveltime * 128) & FINEMASK; // in 0 to FINEANGLE + angle_t disStart = (leveltime * 128 / NEWTICRATERATIO) & FINEMASK; // in 0 to FINEANGLE INT32 newpix; INT32 sine; //UINT8 *transme = transtables + ((tr_trans50-1)<<FF_TRANSSHIFT);