Index: src/d_netcmd.c =================================================================== --- src/d_netcmd.c (revision 3385) +++ src/d_netcmd.c (working copy) @@ -365,9 +365,15 @@ static CV_PossibleValue_t timelimit_cons_t[] = {{0, "MIN"}, {30, "MAX"}, {0, NULL}}; consvar_t cv_timelimit = {"timelimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, timelimit_cons_t, TimeLimit_OnChange, 0, NULL, NULL, 0, 0, NULL}; +#ifdef SCALECVAR +static CV_PossibleValue_t numlump_cons_t[] = {{1, "MIN"}, {400, "MAX"}, {0, NULL}}; +consvar_t cv_numlaps = {"scale", "100", CV_NETVAR|CV_CALL|CV_NOINIT, numlump_cons_t, + NumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL}; +#else static CV_PossibleValue_t numlump_cons_t[] = {{0, "MIN"}, {50, "MAX"}, {0, NULL}}; consvar_t cv_numlaps = {"numlaps", "4", CV_NETVAR|CV_CALL|CV_NOINIT, numlump_cons_t, NumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL}; +#endif consvar_t cv_forceskin = {"forceskin", "No", CV_NETVAR|CV_CALL, CV_YesNo, ForceSkin_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_downloading = {"downloading", "On", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -3059,10 +3065,18 @@ static void NumLaps_OnChange(void) { +#ifdef SCALECVAR + if (players[0].mo) + { + // Set the destscale to resize player. + players[0].mo->destscale = cv_numlaps.value; + } +#else if (gametype != GT_RACE) return; // Just don't be verbose CONS_Printf("Number of laps set to %d\n", cv_numlaps.value); +#endif } static void NetTimeout_OnChange(void) Index: src/doomdef.h =================================================================== --- src/doomdef.h (revision 3385) +++ src/doomdef.h (working copy) @@ -93,6 +93,16 @@ #endif #ifdef SMASH +#define SCALESIZE // Copied from SRB2JTE made by JTE. +#define SCALESPEEDS // Copied from SRB2JTE made by JTE. +#define SCALEGRAVITY // Copied from SRB2JTE made by JTE. +#define SCALECVAR // Changed "numlaps" to "scale". Disable for RELEASE. Turtle Man + +#if (defined SCALESIZE || defined SCALESPEEDS || defined SCALEGRAVITY) +#define FIXEDSCALE(x,y) FixedDiv(FixedMul((y)<momz = spring->info->speed; +#ifdef SCALEGRAVITY + // Scale spring power too? + if (object->scale != 100) + object->momz = FIXEDSCALE(object->momz,object->scale); +#endif + P_TryMove(object, object->x, object->y, true); if (spring->info->damage) @@ -2087,6 +2093,10 @@ if (!(thing->flags & MF_NOCLIP)) { fixed_t maxstep = MAXSTEPMOVE; +#ifdef SCALESIZE + if (thing->scale != 100) + maxstep = FIXEDSCALE(MAXSTEPMOVE, thing->scale); +#endif if (thing->player) { @@ -2160,7 +2170,11 @@ if (!allowdropoff) if (!(thing->flags & (MF_FLOAT)) && thing->type != MT_SKIM && !tmfloorthing +#ifdef SCALESIZE + && tmfloorz - tmdropoffz > maxstep) +#else && tmfloorz - tmdropoffz > MAXSTEPMOVE) +#endif return false; // don't stand over a dropoff } Index: src/p_mobj.c =================================================================== --- src/p_mobj.c (revision 3385) +++ src/p_mobj.c (working copy) @@ -492,6 +492,11 @@ } } +#ifdef SCALEGRAVITY + if (mo->scale != 100) + gravityadd = FIXEDSCALE(gravityadd,mo->scale); +#endif + if (affect) mo->momz += gravityadd/NEWTICRATERATIO; @@ -1521,6 +1526,10 @@ { mo->player->deltaviewheight = mo->momz>>3; } +#ifdef SCALESIZE + if (mo->scale != 100) + mo->player->deltaviewheight = FIXEDSCALE(mo->player->deltaviewheight,mo->scale); +#endif } if (mo->eflags & MF_VERTICALFLIP) @@ -1862,18 +1871,34 @@ || rover->flags & FF_SOLID) continue; +#ifdef SCALESIZE if (mobj->eflags & MF_VERTICALFLIP) { + if (*rover->topheight < (mobj->z + FIXEDSCALE(mobj->info->height/2,mobj->scale)) + || *rover->bottomheight > (mobj->z + mobj->info->height)) + continue; + } + else if (*rover->topheight < mobj->z + || *rover->bottomheight > (mobj->z + FIXEDSCALE(mobj->info->height/2,mobj->scale))) +#else + if (mobj->eflags & MF_VERTICALFLIP) + { if (*rover->topheight < (mobj->z + (mobj->info->height/2)) || *rover->bottomheight > (mobj->z + mobj->info->height)) continue; } else if (*rover->topheight < mobj->z || *rover->bottomheight > (mobj->z + (mobj->info->height/2))) +#endif continue; +#ifdef SCALESIZE if (((mobj->eflags & MF_VERTICALFLIP) && mobj->z < *rover->bottomheight) + || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z + FIXEDSCALE(mobj->info->height,mobj->scale) > *rover->topheight)) +#else + if (((mobj->eflags & MF_VERTICALFLIP) && mobj->z < *rover->bottomheight) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z + mobj->info->height > *rover->topheight)) +#endif mobj->eflags |= MF_TOUCHWATER; else mobj->eflags &= ~MF_TOUCHWATER; @@ -1882,8 +1907,13 @@ mobj->watertop = *rover->topheight; mobj->waterbottom = *rover->bottomheight; +#ifdef SCALESIZE + if (((mobj->eflags & MF_VERTICALFLIP) && mobj->z + FIXEDSCALE(mobj->info->height/2,mobj->scale) > *rover->bottomheight) + || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z + FIXEDSCALE(mobj->info->height/2,mobj->scale) < *rover->topheight)) +#else if (((mobj->eflags & MF_VERTICALFLIP) && mobj->z + (mobj->info->height/2) > *rover->bottomheight) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z + (mobj->info->height/2) < *rover->topheight)) +#endif { mobj->eflags |= MF_UNDERWATER; @@ -1930,10 +1960,18 @@ // Check to make sure you didn't just cross into a sector to jump out of // that has shallower water than the block you were originally in. +#ifdef SCALESIZE + if (!(mobj->eflags & MF_VERTICALFLIP) && mobj->watertop-mobj->floorz <= FIXEDSCALE(mobj->info->height,mobj->scale)>>1) +#else if (!(mobj->eflags & MF_VERTICALFLIP) && mobj->watertop-mobj->floorz <= mobj->info->height>>1) +#endif return; +#ifdef SCALESIZE + if ((mobj->eflags & MF_VERTICALFLIP) && mobj->ceilingz-mobj->waterbottom <= FIXEDSCALE(mobj->info->height,mobj->scale)>>1) +#else if ((mobj->eflags & MF_VERTICALFLIP) && mobj->ceilingz-mobj->waterbottom <= mobj->info->height>>1) +#endif return; if (wasinwater && ((mobj->eflags & MF_VERTICALFLIP && mobj->momz < 0) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->momz > 0))) @@ -1945,8 +1983,13 @@ if ((mobj->eflags & MF_VERTICALFLIP && mobj->momz > 0) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->momz < 0)) { +#ifdef SCALESIZE + if ((mobj->eflags & MF_VERTICALFLIP && mobj->z+(FIXEDSCALE(mobj->info->height,mobj->scale)>>1)-mobj->momz <= mobj->waterbottom) + || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z+(FIXEDSCALE(mobj->info->height,mobj->scale)>>1)-mobj->momz >= mobj->watertop)) +#else if ((mobj->eflags & MF_VERTICALFLIP && mobj->z+(mobj->info->height>>1)-mobj->momz <= mobj->waterbottom) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z+(mobj->info->height>>1)-mobj->momz >= mobj->watertop)) +#endif { // Spawn a splash if (mobj->eflags & MF_VERTICALFLIP) @@ -1970,8 +2013,13 @@ } else if ((mobj->eflags & MF_VERTICALFLIP && mobj->momz < 0) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->momz > 0)) { +#ifdef SCALESIZE + if ((mobj->eflags & MF_VERTICALFLIP && mobj->z+(FIXEDSCALE(mobj->info->height,mobj->scale)>>1)-mobj->momz > mobj->waterbottom) + || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z+(FIXEDSCALE(mobj->info->height,mobj->scale)>>1)-mobj->momz < mobj->watertop)) +#else if ((mobj->eflags & MF_VERTICALFLIP && mobj->z+(mobj->info->height>>1)-mobj->momz > mobj->waterbottom) || (!(mobj->eflags & MF_VERTICALFLIP) && mobj->z+(mobj->info->height>>1)-mobj->momz < mobj->watertop)) +#endif { // Spawn a splash if (mobj->eflags & MF_VERTICALFLIP) @@ -2048,10 +2096,18 @@ if (!(rover->flags & FF_EXISTS) || !(rover->flags & FF_SWIMMABLE) || rover->flags & FF_SOLID) continue; if (*rover->topheight <= mobj->z +#ifdef SCALESIZE + || *rover->bottomheight > (mobj->z + (FIXEDSCALE(mobj->info->height,mobj->scale) >> 1))) +#else || *rover->bottomheight > (mobj->z + (mobj->info->height >> 1))) +#endif continue; +#ifdef SCALESIZE + if (mobj->z + FIXEDSCALE(mobj->info->height,mobj->scale) > *rover->topheight) +#else if (mobj->z + mobj->info->height > *rover->topheight) +#endif mobj->eflags |= MF_TOUCHWATER; else mobj->eflags &= ~MF_TOUCHWATER; @@ -2060,7 +2116,11 @@ mobj->watertop = *rover->topheight; mobj->waterbottom = *rover->bottomheight; +#ifdef SCALESIZE + if (mobj->z + (FIXEDSCALE(mobj->info->height,mobj->scale) >> 1) < *rover->topheight) +#else if (mobj->z + (mobj->info->height >> 1) < *rover->topheight) +#endif mobj->eflags |= MF_UNDERWATER; else mobj->eflags &= ~MF_UNDERWATER; @@ -2129,6 +2189,10 @@ { (void)onmobj; mo->player->deltaviewheight = mo->momz>>3; +#ifdef SCALESIZE + if (mo->scale != 100) + mo->player->deltaviewheight = FIXEDSCALE(mo->player->deltaviewheight,mo->scale); +#endif } // P_CameraThinker @@ -3147,14 +3211,64 @@ // void P_SetScale(mobj_t *mobj, USHORT newscale) { +#if (defined SCALEGRAVITY || defined SCALESPEEDS || defined SCALESIZE) + player_t *player; +#endif if (!mobj || newscale == mobj->scale) return; mobj->scale = newscale; -/*#ifdef SMASH + +#ifdef SCALESIZE mobj->radius = FIXEDSCALE(mobj->info->radius,newscale); mobj->height = FIXEDSCALE(mobj->info->height,newscale); -#endif*/ +#endif + +#if (defined SCALEGRAVITY || defined SCALESPEEDS || defined SCALESIZE) + if ((player = mobj->player) != NULL) + { +#ifdef SCALEGRAVITY + player->jumpfactor = FIXEDSCALE(atoi(skins[player->skin].jumpfactor),newscale); +#endif +#ifdef SCALESPEEDS + if (FIXEDSCALE(atoi(skins[player->skin].normalspeed),newscale) < MAXMOVE) + player->normalspeed = FIXEDSCALE(atoi(skins[player->skin].normalspeed),newscale); + else + player->normalspeed = MAXMOVE; + //player->thrustfactor = FIXEDUNSCALE(atoi(skins[player->skin].thrustfactor),newscale); + //player->accelstart = FIXEDUNSCALE(atoi(skins[player->skin].accelstart),newscale); + //player->acceleration = FIXEDUNSCALE(atoi(skins[player->skin].acceleration),newscale); + player->runspeed = FIXEDSCALE(atoi(skins[player->skin].runspeed),newscale); +#endif +#ifdef SCALESIZE + if (player-players == displayplayer && !twodlevel +#ifdef SCALEMARIO + && !mariomode +#endif + ) + { + if (FIXEDSCALE(atoi(cv_viewheight.defaultvalue),newscale) < 0) + cv_viewheight.value = 0; + else + cv_viewheight.value = FIXEDSCALE(atoi(cv_viewheight.defaultvalue),newscale); + + if (FIXEDSCALE(atoi(cv_cam_dist.defaultvalue),newscale) < 5) + CV_SetValue(&cv_cam_dist,5); + else + CV_SetValue(&cv_cam_dist,FIXEDSCALE(atoi(cv_cam_dist.defaultvalue),newscale)); + + if (FIXEDSCALE(atoi(cv_cam_height.defaultvalue),newscale) < 0) + CV_SetValue(&cv_cam_height,0); + else + CV_SetValue(&cv_cam_height,FIXEDSCALE(atoi(cv_cam_height.defaultvalue),newscale)); + +#define FLOATSCALE(x,y) ((y)*(x)/100.0f) + CV_Set(&cv_cam_speed,va("%f",FLOATSCALE(atof(cv_cam_speed.defaultvalue),(float)(abs(100-newscale)+100)))); +#undef FLOATSCALE + } +#endif + } +#endif } // Returns true if no boss with health is in the level. Index: src/p_user.c =================================================================== --- src/p_user.c (revision 3385) +++ src/p_user.c (working copy) @@ -144,6 +144,30 @@ { angle >>= ANGLETOFINESHIFT; +#ifdef SCALESPEEDS + if (mo->scale != 100 && move) + { + if (move > 0) + { + if (mo->scale < 100 && move-FIXEDSCALE(move,mo->scale) > 0) + move = FIXEDSCALE(move,mo->scale); // Then do the scaled move instead. + else if (mo->scale > 100 && FIXEDSCALE(move,mo->scale)-move > 0) + move = FIXEDSCALE(move,mo->scale); // Then do the scaled move instead. + else // Uh oh!1... + move = MAXMOVE; + } + else + { + if (mo->scale < 100 && move-FIXEDSCALE(move,mo->scale) < 0) + move = FIXEDSCALE(move,mo->scale); // Then do the scaled move instead. + else if (mo->scale > 100 && FIXEDSCALE(move,mo->scale)-move < 0) + move = FIXEDSCALE(move,mo->scale); // Then do the scaled move instead. + else // Uh oh!1... + move = -MAXMOVE; + } + } +#endif + mo->momx = FixedMul(move, FINECOSINE(angle)); if (!(twodlevel || (mo->flags2 & MF2_TWOD))) @@ -1933,6 +1957,10 @@ if (player->climbing) { player->mo->momz = FixedDiv(cmd->forwardmove*FRACUNIT,10*FRACUNIT); +#ifdef SCALESPEEDS + if (player->mo->scale != 100) + player->mo->momz = FIXEDSCALE(player->mo->momz, player->mo->scale); +#endif } else if (player->powers[pw_sneakers] || player->powers[pw_super]) // super sneakers? movepushforward = cmd->forwardmove * ((thrustfactor*2)*acceleration); @@ -2033,6 +2061,10 @@ // Thrust in the direction of the controls P_InstaThrust(player->mo, player->mo->angle-ANG90, FixedDiv(cmd->sidemove*FRACUNIT,10*FRACUNIT)); player->mo->momz = FixedDiv(cmd->forwardmove*FRACUNIT,10*FRACUNIT); +#ifdef SCALESPEEDS + if (player->mo->scale != 100) + player->mo->momz = FIXEDSCALE(player->mo->momz, player->mo->scale); +#endif } else if (player->powers[pw_sneakers] || player->powers[pw_super]) // super sneakers? @@ -2997,7 +3029,11 @@ player->mo->momz = -20*FRACUNIT; // You can create splashes as you fly across water. +#ifdef SCALESIZE + if (player->mo->z + player->mo->height >= player->mo->watertop && player->mo->z <= player->mo->watertop && player->speed > 9000 && leveltime % (TICRATE/7) == 0) +#else if (player->mo->z + player->mo->info->height >= player->mo->watertop && player->mo->z <= player->mo->watertop && player->speed > 9000 && leveltime % (TICRATE/7) == 0) +#endif S_StartSound(P_SpawnMobj(player->mo->x, player->mo->y, player->mo->watertop, MT_SPLISH), sfx_wslap); // Spawn Sonic's bubbles @@ -4959,6 +4995,11 @@ { if (player->pflags & PF_WALKINGANIM) { +#ifdef SCALESPEEDS // Turtle Man: Change this? + if (player->speed*FRACUNIT > FIXEDSCALE(12*FRACUNIT,player->mo->scale)) + playerstatetics[player-players][player->mo->state->nextstate] = 2*NEWTICRATERATIO; + else if (player->speed*FRACUNIT > FIXEDSCALE(6*FRACUNIT,player->mo->scale)) +#else #ifdef SMASH // Shuffle's BETTER2DMODE thing. if (twodlevel || (player->mo->flags2 & MF2_TWOD)) { @@ -4978,13 +5019,18 @@ if (player->speed > 12) playerstatetics[player-players][player->mo->state->nextstate] = 2*NEWTICRATERATIO; else if (player->speed > 6) +#endif playerstatetics[player-players][player->mo->state->nextstate] = 3*NEWTICRATERATIO; else playerstatetics[player-players][player->mo->state->nextstate] = 4*NEWTICRATERATIO; } else if (player->pflags & PF_RUNNINGANIM) { +#ifdef SCALESPEEDS + if (player->speed*FRACUNIT > FIXEDSCALE(52*FRACUNIT,player->mo->scale)) +#else if (player->speed > 52) +#endif playerstatetics[player-players][player->mo->state->nextstate] = 1*NEWTICRATERATIO; else playerstatetics[player-players][player->mo->state->nextstate] = 2*NEWTICRATERATIO; @@ -6213,7 +6259,11 @@ && (player->rmomy < 5*FRACUNIT/NEWTICRATERATIO && player->rmomy > -5*FRACUNIT/NEWTICRATERATIO)) { +#ifdef SCALESIZE + if (player->mo->subsector->sector->special == 979 || (player->mo->ceilingz - player->mo->floorz < player->mo->height)) +#else if (player->mo->subsector->sector->special == 979 || (player->mo->ceilingz - player->mo->floorz < player->mo->info->height)) +#endif P_InstaThrust(player->mo, player->mo->angle, 10*FRACUNIT); else { @@ -8221,6 +8271,11 @@ else player->mo->height = player->mo->info->height; +#ifdef SCALESIZE + if (player->mo->scale != 100) + player->mo->height = FIXEDSCALE(player->mo->height,player->mo->scale); +#endif + // Crush test... if ((player->mo->ceilingz - player->mo->floorz < player->mo->height) && !(player->mo->flags & MF_NOCLIP)) @@ -10728,6 +10783,11 @@ { player->mo->height = FixedDiv(player->mo->info->height, FixedDiv(14*FRACUNIT,10*FRACUNIT)); +#ifdef SCALESIZE + if (player->mo->scale != 100) + player->mo->height = FIXEDSCALE(player->mo->height,player->mo->scale); +#endif + if (player->mo->eflags & MF_VERTICALFLIP) { if ((player->mo->tracer->z + player->mo->tracer->height + player->mo->height + FRACUNIT) <= player->mo->tracer->ceilingz) Index: src/r_things.c =================================================================== --- src/r_things.c (revision 3385) +++ src/r_things.c (working copy) @@ -149,8 +149,10 @@ static size_t maxframe; static const char *spritename; +#if !(defined FIXEDSCALE && defined FIXEDUNSCALE) #define FIXEDSCALE(x,y) FixedDiv(FixedMul((y)<