diff --git a/src/d_main.c b/src/d_main.c index fc17a5334..b578373f8 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1061,7 +1061,7 @@ static void IdentifyVersion(void) D_AddFile(startupiwads, va(pandf,srb2waddir,"textures.pk3")); D_AddFile(startupiwads, va(pandf,srb2waddir,"chars.pk3")); D_AddFile(startupiwads, va(pandf,srb2waddir,"maps.pk3")); - + D_AddFile(startupiwads, va(pandf,srb2waddir,"followers.pk3")); #ifdef USE_PATCH_FILE D_AddFile(startupiwads, va(pandf,srb2waddir,"patch.pk3")); @@ -1307,6 +1307,7 @@ void D_SRB2Main(void) mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_TEXTURES_PK3); // textures.pk3 mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_CHARS_PK3); // chars.pk3 mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_MAPS_PK3); // maps.pk3 -- 4 - If you touch this, make sure to touch up the majormods stuff below. + mainwads++; W_VerifyFileMd5(mainwads, ASSET_HASH_FOLLOWERS_PK3); // followers.pk3 #ifdef USE_PATCH_FILE mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_PATCH_PK3); // patch.pk3 #endif @@ -1315,7 +1316,7 @@ void D_SRB2Main(void) mainwads++; // textures.pk3 mainwads++; // chars.pk3 mainwads++; // maps.pk3 - + mainwads++; // followers.pk3 #ifdef USE_PATCH_FILE mainwads++; // patch.pk3 // TODO: DON'T FORGET TO REMOVE THIS ONCE WE DON'T NEED IT ANYMORE. diff --git a/src/d_netfil.c b/src/d_netfil.c index 930662cfa..80f77bd5b 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -459,7 +459,12 @@ INT32 CL_CheckFiles(void) if (modifiedgame) { CONS_Debug(DBG_NETPLAY, "game is modified; only doing basic checks\n"); - for (i = 0, j = mainwads+1; i < fileneedednum || j < numwadfiles;) +#ifdef DEVELOP + j = 0; +#else + j = mainwads + 1; +#endif + for (i = 0; i < fileneedednum || j < numwadfiles;) { if (j < numwadfiles && !wadfiles[j]->important) { diff --git a/src/deh_tables.c b/src/deh_tables.c index d36221b31..33854d522 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -5466,6 +5466,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t // SRB2kart "MT_RANDOMITEM", + "MT_SPHEREBOX", "MT_RANDOMITEMPOP", "MT_FLOATINGITEM", "MT_ITEMCAPSULE", @@ -5806,6 +5807,8 @@ const char *const MOBJFLAG_LIST[] = { "GRENADEBOUNCE", "RUNSPAWNFUNC", "DONTENCOREMAP", + "PICKUPFROMBELOW", + "NOSQUISH", NULL }; diff --git a/src/k_kart.c b/src/k_kart.c index 822e103be..08b54f30b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1969,7 +1969,7 @@ void K_SpawnDashDustRelease(player_t *player) dust->momx = 3*player->mo->momx/5; dust->momy = 3*player->mo->momy/5; - //dust->momz = 3*player->mo->momz/5; + dust->momz = 3*P_GetMobjZMovement(player->mo)/5; K_MatchGenericExtraFlags(dust, player->mo); } @@ -1996,6 +1996,7 @@ void K_SpawnDriftBoostClip(player_t *player) { mobj_t *clip; fixed_t scale = 115*FRACUNIT/100; + fixed_t momz = P_GetMobjZMovement(player->mo); fixed_t z; if (( player->mo->eflags & MFE_VERTICALFLIP )) @@ -2012,8 +2013,8 @@ void K_SpawnDriftBoostClip(player_t *player) clip->fuse = 105; clip->momz = 7 * P_MobjFlip(clip) * clip->scale; - if (player->mo->momz > 0) - clip->momz += player->mo->momz; + if (momz > 0) + clip->momz += momz; P_InstaThrust(clip, player->mo->angle + P_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)), @@ -2045,7 +2046,7 @@ void K_SpawnNormalSpeedLines(player_t *player) fast->angle = K_MomentumAngle(player->mo); fast->momx = 3*player->mo->momx/4; fast->momy = 3*player->mo->momy/4; - fast->momz = 3*player->mo->momz/4; + fast->momz = 3*P_GetMobjZMovement(player->mo)/4; K_MatchGenericExtraFlags(fast, player->mo); @@ -2067,7 +2068,7 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo) fast->momx = 3*mo->momx/4; fast->momy = 3*mo->momy/4; - fast->momz = 3*mo->momz/4; + fast->momz = 3*P_GetMobjZMovement(mo)/4; P_SetTarget(&fast->target, mo); fast->angle = K_MomentumAngle(mo); @@ -4015,6 +4016,7 @@ void K_SpawnDriftElectricSparks(player_t *player) P_SetObjectMomZ(spark, vspeed, false); spark->momx += mo->momx; // copy player speed spark->momy += mo->momy; + spark->momz += P_GetMobjZMovement(mo); sparkangle += ANGLE_90; } @@ -4065,7 +4067,7 @@ static void K_SpawnDriftSparks(player_t *player) spark->momx = player->mo->momx/2; spark->momy = player->mo->momy/2; - //spark->momz = player->mo->momz/2; + spark->momz = P_GetMobjZMovement(player->mo)/2; spark->color = K_DriftSparkColor(player, player->driftcharge); @@ -4208,7 +4210,7 @@ static void K_SpawnAIZDust(player_t *player) spark->momx = (6*player->mo->momx)/5; spark->momy = (6*player->mo->momy)/5; - //spark->momz = player->mo->momz/2; + spark->momz = P_GetMobjZMovement(player->mo); K_MatchGenericExtraFlags(spark, player->mo); } @@ -4366,7 +4368,7 @@ void K_SpawnWipeoutTrail(mobj_t *mo, boolean offroad) { dust->momx = mo->momx/2; dust->momy = mo->momy/2; - dust->momz = mo->momz/2; + dust->momz = P_GetMobjZMovement(mo)/2; } } @@ -4437,7 +4439,7 @@ void K_SpawnDraftDust(mobj_t *mo) dust->momx = (4*mo->momx)/5; dust->momy = (4*mo->momy)/5; - //dust->momz = (4*mo->momz)/5; + dust->momz = (4*P_GetMobjZMovement(mo))/5; P_Thrust(dust, dust->angle, 4*mo->scale); @@ -4967,7 +4969,7 @@ static void K_FlameDashLeftoverSmoke(mobj_t *src) smoke->momx = 3*src->momx/4; smoke->momy = 3*src->momy/4; - smoke->momz = 3*src->momz/4; + smoke->momz = 3*P_GetMobjZMovement(src)/4; P_Thrust(smoke, src->angle + FixedAngle(P_RandomRange(135, 225)<scale); smoke->momz += P_RandomRange(0, 4) * src->scale; @@ -6709,7 +6711,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (gametype == GT_RACE && player->rings <= 0) // spawn ring debt indicator { mobj_t *debtflag = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy, - player->mo->z + player->mo->momz + player->mo->height + (24*player->mo->scale), MT_THOK); + player->mo->z + P_GetMobjZMovement(player->mo) + player->mo->height + (24*player->mo->scale), MT_THOK); P_SetMobjState(debtflag, S_RINGDEBT); P_SetScale(debtflag, (debtflag->destscale = player->mo->scale)); @@ -6741,7 +6743,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) star->flags |= MF_NOGRAVITY; star->momx = player->mo->momx / 2; star->momy = player->mo->momy / 2; - star->momz = player->mo->momz / 2; + star->momz = P_GetMobjZMovement(player->mo) / 2; star->fuse = 12; star->scale = player->mo->scale; star->destscale = star->scale / 2; @@ -8317,7 +8319,7 @@ static void K_KartSpindashWind(mobj_t *parent) wind->momx = 3 * parent->momx / 4; wind->momy = 3 * parent->momy / 4; - wind->momz = 3 * parent->momz / 4; + wind->momz = 3 * P_GetMobjZMovement(parent) / 4; K_MatchGenericExtraFlags(wind, parent); } diff --git a/src/mserv.c b/src/mserv.c index e01c345a2..0bcc18a2d 100644 --- a/src/mserv.c +++ b/src/mserv.c @@ -63,6 +63,8 @@ static void MasterServer_OnChange(void); static void Advertise_OnChange(void); +static void RendezvousServer_OnChange(void); + static CV_PossibleValue_t masterserver_update_rate_cons_t[] = { {2, "MIN"}, {60, "MAX"}, @@ -70,7 +72,7 @@ static CV_PossibleValue_t masterserver_update_rate_cons_t[] = { }; consvar_t cv_masterserver = CVAR_INIT ("masterserver", "https://ms.kartkrew.org/ms/api", CV_SAVE|CV_CALL, NULL, MasterServer_OnChange); -consvar_t cv_rendezvousserver = CVAR_INIT ("rendezvousserver", "jart-dev.jameds.org", CV_SAVE, NULL, NULL); +consvar_t cv_rendezvousserver = CVAR_INIT ("rendezvousserver", "relay.kartkrew.org", CV_SAVE|CV_CALL, NULL, RendezvousServer_OnChange); consvar_t cv_servername = CVAR_INIT ("servername", "SRB2Kart server", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Update_parameters); consvar_t cv_server_contact = CVAR_INIT ("server_contact", "", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Update_parameters); @@ -517,17 +519,6 @@ static void MasterServer_OnChange(void) #ifdef MASTERSERVER UnregisterServer(); - /* - TODO: remove this for v2, it's just a hack - for those coming in with an old config. - */ - if ( - ! cv_masterserver.changed && - strcmp(cv_masterserver.string, "ms.srb2.org:28900") == 0 - ){ - CV_StealthSet(&cv_masterserver, cv_masterserver.defaultvalue); - } - Set_api(cv_masterserver.string); if (Online()) @@ -565,3 +556,16 @@ Advertise_OnChange(void) DRPC_UpdatePresence(); #endif } + +#ifdef DEVELOP +static void +RendezvousServer_OnChange (void) +{ + consvar_t *cvar = &cv_rendezvousserver; + + if (!strcmp(cvar->string, "jart-dev.jameds.org")) + CV_StealthSet(cvar, cvar->defaultvalue); +} +#else +#error "This was an indev thing, remove at release." +#endif diff --git a/src/p_local.h b/src/p_local.h index 227d915f8..bfe8d9e08 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -530,5 +530,6 @@ fixed_t P_ScaleFromMap(fixed_t n, fixed_t scale); fixed_t P_GetMobjHead(const mobj_t *); fixed_t P_GetMobjFeet(const mobj_t *); fixed_t P_GetMobjGround(const mobj_t *); +fixed_t P_GetMobjZMovement(mobj_t *mo); #endif // __P_LOCAL__ diff --git a/src/p_mobj.c b/src/p_mobj.c index afcc87c3e..2981f6110 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3574,7 +3574,8 @@ static void P_CheckFloatbobPlatforms(mobj_t *mobj) static void P_SquishThink(mobj_t *mobj) { - if (!(mobj->eflags & MFE_SLOPELAUNCHED)) + if (!(mobj->flags & MF_NOSQUISH) && + !(mobj->eflags & MFE_SLOPELAUNCHED)) { K_Squish(mobj); } @@ -7401,7 +7402,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) fast->angle = mobj->angle; fast->momx = 3*mobj->target->momx/4; fast->momy = 3*mobj->target->momy/4; - fast->momz = 3*mobj->target->momz/4; + fast->momz = 3*P_GetMobjZMovement(mobj->target)/4; K_MatchGenericExtraFlags(fast, mobj); P_SetMobjState(fast, S_FLAMESHIELDLINE1 + i); @@ -13164,3 +13165,25 @@ fixed_t P_GetMobjGround(const mobj_t *mobj) { return P_IsObjectFlipped(mobj) ? mobj->ceilingz : mobj->floorz; } + +// +// P_GetMobjZMovement +// Returns the Z momentum of the object, accounting for slopes if the object is grounded +// +fixed_t P_GetMobjZMovement(mobj_t *mo) +{ + pslope_t *slope = mo->standingslope; + angle_t angDiff; + fixed_t speed; + + if (!P_IsObjectOnGround(mo)) + return mo->momz; + + if (!slope) + return 0; + + angDiff = R_PointToAngle2(0, 0, mo->momx, mo->momy) - slope->xydirection; + speed = FixedHypot(mo->momx, mo->momy); + + return P_ReturnThrustY(mo, slope->zangle, P_ReturnThrustX(mo, angDiff, speed)); +} \ No newline at end of file diff --git a/src/p_mobj.h b/src/p_mobj.h index 2373bdca4..e5bba25de 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -159,6 +159,8 @@ typedef enum MF_DONTENCOREMAP = 1<<28, // Hitbox extends just as far below as above. MF_PICKUPFROMBELOW = 1<<29, + // Disable momentum-based squash and stretch. + MF_NOSQUISH = 1<<30, // free: to and including 1<<31 } mobjflag_t; diff --git a/src/r_things.c b/src/r_things.c index 09c6b4177..3255d22bf 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -284,14 +284,13 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 // store sprite info in lookup tables //FIXME : numspritelumps do not duplicate sprite replacements + W_ReadLumpHeaderPwad(wadnum, l, &patch, PNG_HEADER_SIZE, 0); + #ifndef NO_PNG_LUMPS { - UINT8 header[PNG_HEADER_SIZE]; size_t len = W_LumpLengthPwad(wadnum, l); - W_ReadLumpHeaderPwad(wadnum, l, header, sizeof header, 0); - - if (Picture_IsLumpPNG(header, len)) + if (Picture_IsLumpPNG((UINT8*)&patch, len)) { UINT8 *png = W_CacheLumpNumPwad(wadnum, l, PU_STATIC); Picture_PNGDimensions((UINT8 *)png, &width, &height, &topoffset, &leftoffset, len); @@ -303,7 +302,6 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 if (!isPNG) #endif { - W_ReadLumpHeaderPwad(wadnum, l, &patch, sizeof(INT16) * 4, 0); width = (INT32)(SHORT(patch.width)); height = (INT32)(SHORT(patch.height)); topoffset = (INT16)(SHORT(patch.topoffset)); @@ -2100,8 +2098,7 @@ static void R_ProjectSprite(mobj_t *thing) // // determine the colormap (lightlevel & special effects) // - if (vis->cut & SC_FULLBRIGHT - && (!vis->extra_colormap || !(vis->extra_colormap->flags & CMF_FADEFULLBRIGHTSPRITES))) + if (vis->cut & SC_FULLBRIGHT) { // full bright: goggles vis->colormap = colormaps;