diff --git a/src/doomdef.h b/src/doomdef.h index a35f3291..0791e07e 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -140,7 +140,7 @@ extern FILE *logstream; #endif -//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 +#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 #ifdef DEVELOP #define VERSION 0 // Game version #define SUBVERSION 0 // more precise version number diff --git a/src/info.c b/src/info.c index 9851ee23..93804b0c 100644 --- a/src/info.c +++ b/src/info.c @@ -15476,7 +15476,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_JAWZ_DEAD1, // deathstate S_JAWZ_DEAD2, // xdeathstate sfx_s3k5d, // deathsound - 7*FRACUNIT, // speed + 64*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -15503,7 +15503,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_JAWZ_DEAD1, // deathstate S_JAWZ_DEAD2, // xdeathstate sfx_s3k5d, // deathsound - 56*FRACUNIT, // speed + 64*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -15773,7 +15773,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_BALLHOG_DEAD, // deathstate S_NULL, // xdeathstate sfx_hogbom, // deathsound - 0, // speed + 64*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset diff --git a/src/k_kart.c b/src/k_kart.c index 935ee987..c7db79fe 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2464,25 +2464,25 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) } } -static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle, INT32 flags2, fixed_t speed) +static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, INT32 flags2, fixed_t speed) { mobj_t *th; - angle_t an; fixed_t x, y, z; fixed_t finalspeed = speed; mobj_t *throwmo; - //INT32 dir; - - // angle at which you fire, is player angle - an = angle; - - //if (source->player->kartstuff[k_throwdir] != 0) - // dir = source->player->kartstuff[k_throwdir]; - //else - // dir = 1; if (source->player && source->player->speed > K_GetKartSpeed(source->player, false)) - finalspeed = FixedMul(speed, FixedDiv(source->player->speed, K_GetKartSpeed(source->player, false))); + { + angle_t input = source->angle - an; + boolean invert = (input > ANGLE_180); + if (invert) + input = InvAngle(input); + + finalspeed = max(speed, FixedMul(speed, FixedMul( + FixedDiv(source->player->speed, K_GetKartSpeed(source->player, false)), // Multiply speed to be proportional to your own, boosted maxspeed. + (((180<x + source->momx + FixedMul(finalspeed, FINECOSINE(an>>ANGLETOFINESHIFT)); y = source->y + source->momy + FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT)); @@ -2499,15 +2499,8 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle th->threshold = 10; -#ifdef WEAPON_SFX - //Since rail and bounce have no thrown objects, this hack is necessary. - //Is creating thrown objects for rail and bounce more or less desirable than this? - if (th->info->seesound && !(th->flags2 & MF2_RAILRING) && !(th->flags2 & MF2_SCATTER)) - S_StartSound(source, th->info->seesound); -#else if (th->info->seesound) S_StartSound(source, th->info->seesound); -#endif P_SetTarget(&th->target, source); @@ -2537,6 +2530,7 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle th->color = source->player->skincolor; else th->color = SKINCOLOR_GREY; + th->movefactor = finalspeed; break; case MT_JAWZ: if (source && source->player) @@ -2546,6 +2540,9 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle /* FALLTHRU */ case MT_JAWZ_DUD: S_StartSound(th, th->info->activesound); + /* FALLTHRU */ + case MT_SPB: + th->movefactor = finalspeed; break; default: break; @@ -2895,17 +2892,29 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map return NULL; // Figure out projectile speed by game speed - switch (gamespeed) + if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability... { - case 0: - PROJSPEED = 68*mapobjectscale; // Avg Speed is 34 - break; - case 2: - PROJSPEED = 96*mapobjectscale; // Avg Speed is 48 - break; - default: - PROJSPEED = 82*mapobjectscale; // Avg Speed is 41 - break; + PROJSPEED = mobjinfo[mapthing].speed; + if (gamespeed == 0) + PROJSPEED = FixedMul(PROJSPEED, FRACUNIT-FRACUNIT/4); + else if (gamespeed == 2) + PROJSPEED = FixedMul(PROJSPEED, FRACUNIT+FRACUNIT/4); + PROJSPEED = FixedMul(PROJSPEED, mapobjectscale); + } + else + { + switch (gamespeed) + { + case 0: + PROJSPEED = 68*mapobjectscale; // Avg Speed is 34 + break; + case 2: + PROJSPEED = 96*mapobjectscale; // Avg Speed is 48 + break; + default: + PROJSPEED = 82*mapobjectscale; // Avg Speed is 41 + break; + } } if (altthrow) @@ -2965,7 +2974,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (dir == -1 && mapthing != MT_SPB) { // Shoot backward - mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/4); + mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/2); } else { diff --git a/src/p_enemy.c b/src/p_enemy.c index f924baa6..fc3ae9d9 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8276,7 +8276,7 @@ void A_JawzChase(mobj_t *actor) ret->frame |= ((leveltime % 10) / 2) + 5; ret->color = actor->cvmem; - P_Thrust(actor, R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y), actor->info->speed); + P_Thrust(actor, R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y), (7*actor->movefactor)/64); return; } else @@ -8348,11 +8348,7 @@ void A_SPBChase(mobj_t *actor) #endif // Default speed - wspeed = FixedMul(actor->info->speed, mapobjectscale); - if (gamespeed == 0) - wspeed = FixedMul(wspeed, FRACUNIT-FRACUNIT/4); - else if (gamespeed == 2) - wspeed = FixedMul(wspeed, FRACUNIT+FRACUNIT/4); + wspeed = actor->movefactor; if (actor->threshold) // Just fired, go straight. { diff --git a/src/p_mobj.c b/src/p_mobj.c index 565d0d18..91e1795d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8025,15 +8025,10 @@ void P_MobjThinker(mobj_t *mobj) } else { - fixed_t finalspeed = mobj->info->speed; + fixed_t finalspeed = mobj->movefactor; P_SpawnGhostMobj(mobj); - if (gamespeed == 0) - finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4); - else if (gamespeed == 2) - finalspeed = FixedMul(finalspeed, FRACUNIT+FRACUNIT/4); - mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); if (mobj->health <= 5) { @@ -8041,7 +8036,7 @@ void P_MobjThinker(mobj_t *mobj) for (i = 5; i >= mobj->health; i--) finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4); } - finalspeed = FixedMul(finalspeed, mapobjectscale); + P_InstaThrust(mobj, mobj->angle, finalspeed); if (grounded) @@ -8064,7 +8059,7 @@ void P_MobjThinker(mobj_t *mobj) case MT_JAWZ: { sector_t *sec2; - fixed_t topspeed = 64*mapobjectscale; + fixed_t topspeed = mobj->movefactor; fixed_t distbarrier = 512*mapobjectscale; fixed_t distaway; @@ -8076,15 +8071,9 @@ void P_MobjThinker(mobj_t *mobj) S_StartSound(mobj, mobj->info->activesound); if (gamespeed == 0) - { - topspeed = FixedMul(topspeed, FRACUNIT-FRACUNIT/4); distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4); - } else if (gamespeed == 2) - { - topspeed = FixedMul(topspeed, FRACUNIT+FRACUNIT/4); distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4); - } if (G_RaceGametype() && mobj->tracer) { @@ -8143,7 +8132,7 @@ void P_MobjThinker(mobj_t *mobj) { P_SpawnGhostMobj(mobj); mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); - P_InstaThrust(mobj, mobj->angle, mobj->info->speed); + P_InstaThrust(mobj, mobj->angle, mobj->movefactor); if (grounded) {