diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 0f1f39fa7..ebd58844e 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -3276,17 +3276,17 @@ consvar_t cv_discordinvites = CVAR_INIT ("discordinvites", "Everyone", CV_SAVE|C static CV_PossibleValue_t resynchattempts_cons_t[] = {{1, "MIN"}, {20, "MAX"}, {0, "No"}, {0, NULL}}; -consvar_t cv_resynchattempts = CVAR_INIT ("resynchattempts", "10", CV_SAVE|CV_NETVAR, resynchattempts_cons_t, NULL); +consvar_t cv_resynchattempts = CVAR_INIT ("resynchattempts", "2", CV_SAVE|CV_NETVAR, resynchattempts_cons_t, NULL); consvar_t cv_blamecfail = CVAR_INIT ("blamecfail", "Off", CV_SAVE|CV_NETVAR, CV_OnOff, NULL); // max file size to send to a player (in kilobytes) static CV_PossibleValue_t maxsend_cons_t[] = {{0, "MIN"}, {51200, "MAX"}, {0, NULL}}; -consvar_t cv_maxsend = CVAR_INIT ("maxsend", "4096", CV_SAVE|CV_NETVAR, maxsend_cons_t, NULL); +consvar_t cv_maxsend = CVAR_INIT ("maxsend", "51200", CV_SAVE|CV_NETVAR, maxsend_cons_t, NULL); consvar_t cv_noticedownload = CVAR_INIT ("noticedownload", "Off", CV_SAVE|CV_NETVAR, CV_OnOff, NULL); // Speed of file downloading (in packets per tic) -static CV_PossibleValue_t downloadspeed_cons_t[] = {{0, "MIN"}, {32, "MAX"}, {0, NULL}}; -consvar_t cv_downloadspeed = CVAR_INIT ("downloadspeed", "16", CV_SAVE|CV_NETVAR, downloadspeed_cons_t, NULL); +static CV_PossibleValue_t downloadspeed_cons_t[] = {{1, "MIN"}, {300, "MAX"}, {0, NULL}}; +consvar_t cv_downloadspeed = CVAR_INIT ("downloadspeed", "32", CV_SAVE|CV_NETVAR, downloadspeed_cons_t, NULL); static void Got_AddPlayer(UINT8 **p, INT32 playernum); static void Got_RemovePlayer(UINT8 **p, INT32 playernum); @@ -4944,7 +4944,10 @@ static void GetPackets(void) if (netbuffer->packettype == PT_CLIENTJOIN && server) { - HandleConnect(node); + if (!levelloading) // Otherwise just ignore + { + HandleConnect(node); + } continue; } if (node == servernode && client && cl_mode != CL_SEARCHING) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index eb6e630c0..9dcc990a9 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -409,8 +409,6 @@ consvar_t cv_dualjawz = CVAR_INIT ("dualjawz", "On", CV_NETVAR|CV_CHEAT, C static CV_PossibleValue_t kartminimap_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}}; consvar_t cv_kartminimap = CVAR_INIT ("kartminimap", "4", CV_SAVE, kartminimap_cons_t, NULL); consvar_t cv_kartcheck = CVAR_INIT ("kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL); -static CV_PossibleValue_t kartinvinsfx_cons_t[] = {{0, "Music"}, {1, "SFX"}, {0, NULL}}; -consvar_t cv_kartinvinsfx = CVAR_INIT ("kartinvinsfx", "SFX", CV_SAVE, kartinvinsfx_cons_t, NULL); consvar_t cv_kartspeed = CVAR_INIT ("kartspeed", "Auto", CV_NETVAR|CV_CALL|CV_NOINIT, kartspeed_cons_t, KartSpeed_OnChange); static CV_PossibleValue_t kartbumpers_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}}; consvar_t cv_kartbumpers = CVAR_INIT ("kartbumpers", "3", CV_NETVAR|CV_CHEAT, kartbumpers_cons_t, NULL); @@ -519,9 +517,9 @@ consvar_t cv_allowexitlevel = CVAR_INIT ("allowexitlevel", "No", CV_NETVAR, CV_Y consvar_t cv_netstat = CVAR_INIT ("netstat", "Off", 0, CV_OnOff, NULL); // show bandwidth statistics static CV_PossibleValue_t nettimeout_cons_t[] = {{TICRATE/7, "MIN"}, {60*TICRATE, "MAX"}, {0, NULL}}; -consvar_t cv_nettimeout = CVAR_INIT ("nettimeout", "105", CV_CALL|CV_SAVE, nettimeout_cons_t, NetTimeout_OnChange); +consvar_t cv_nettimeout = CVAR_INIT ("nettimeout", "210", CV_CALL|CV_SAVE, nettimeout_cons_t, NetTimeout_OnChange); //static CV_PossibleValue_t jointimeout_cons_t[] = {{5*TICRATE, "MIN"}, {60*TICRATE, "MAX"}, {0, NULL}}; -consvar_t cv_jointimeout = CVAR_INIT ("jointimeout", "105", CV_CALL|CV_SAVE, nettimeout_cons_t, JoinTimeout_OnChange); +consvar_t cv_jointimeout = CVAR_INIT ("jointimeout", "210", CV_CALL|CV_SAVE, nettimeout_cons_t, JoinTimeout_OnChange); consvar_t cv_maxping = CVAR_INIT ("maxdelay", "20", CV_SAVE, CV_Unsigned, NULL); consvar_t cv_lagless = CVAR_INIT ("lagless", "Off", CV_SAVE|CV_NETVAR|CV_CALL, CV_OnOff, Lagless_OnChange); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 3a67fc458..1cc3a61d4 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -83,7 +83,6 @@ extern consvar_t cv_tripleorbinaut, cv_quadorbinaut, cv_dualjawz; extern consvar_t cv_kartminimap; extern consvar_t cv_kartcheck; -extern consvar_t cv_kartinvinsfx; extern consvar_t cv_kartspeed; extern consvar_t cv_kartbumpers; extern consvar_t cv_kartfrantic; diff --git a/src/d_netfil.c b/src/d_netfil.c index ca2ee3886..dcce1767c 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -1007,7 +1007,6 @@ static void SV_EndFileSend(INT32 node) filestosend--; } -#define PACKETPERTIC net_bandwidth/(TICRATE*software_MAXPACKETLENGTH) #define FILEFRAGMENTSIZE (software_MAXPACKETLENGTH - (FILETXHEADER + BASEPACKETSIZE)) /** Handles file transmission @@ -1040,14 +1039,7 @@ void FileSendTicker(void) if (!filestosend) // No file to send return; - if (cv_downloadspeed.value) // New behavior - packetsent = cv_downloadspeed.value; - else // Old behavior - { - packetsent = PACKETPERTIC; - if (!packetsent) - packetsent = 1; - } + packetsent = cv_downloadspeed.value; netbuffer->packettype = PT_FILEFRAGMENT; diff --git a/src/d_player.h b/src/d_player.h index 396bc7587..7d0f20058 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -268,7 +268,7 @@ typedef enum #define TUMBLEBOUNCES 3 #define TUMBLEGRAVITY (4*FRACUNIT) -#define TRIPWIRETIME (TICRATE) +#define TRIPWIRETIME (15) #define BALLHOGINCREMENT (7) diff --git a/src/deh_tables.c b/src/deh_tables.c index 5fe950e9e..7bb649d2b 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -3759,8 +3759,20 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_GROW_PARTICLE", // Shrink - "S_SHRINK_GUN", + "S_SHRINK_POHBEE", + "S_SHRINK_POHBEE2", + "S_SHRINK_POHBEE3", + "S_SHRINK_POHBEE4", + "S_SHRINK_POHBEE5", + "S_SHRINK_POHBEE6", + "S_SHRINK_POHBEE7", + "S_SHRINK_POHBEE8", + "S_SHRINK_CHAIN", + + "S_SHRINK_GUN", + "S_SHRINK_GUN_OVERLAY", + "S_SHRINK_LASER", "S_SHRINK_PARTICLE", diff --git a/src/info.c b/src/info.c index 186f04022..6774050b6 100644 --- a/src/info.c +++ b/src/info.c @@ -575,7 +575,9 @@ char sprnames[NUMSPRITES + 1][5] = "HYUU", // Hyudoro "GRWP", // Grow "POHB", // Shrink Poh-Bee - "SHRG", // Shrink gun / laser + "POHC", // Shrink Poh-Bee chain + "SHRG", // Shrink gun + "SHRL", // Shrink laser "SINK", // Kitchen Sink "SITR", // Kitchen Sink Trail "KBLN", // Battle Mode Bumper @@ -4319,10 +4321,22 @@ state_t states[NUMSTATES] = {SPR_GRWP, FF_FULLBRIGHT|FF_ANIMATE, 13, {NULL}, 7, 1, S_NULL}, // S_GROW_PARTICLE + {SPR_POHB, 0, 1, {NULL}, 0, 0, S_SHRINK_POHBEE2}, // S_SHRINK_POHBEE + {SPR_POHB, 1, 1, {NULL}, 0, 0, S_SHRINK_POHBEE3}, // S_SHRINK_POHBEE2 + {SPR_POHB, 0, 1, {NULL}, 0, 0, S_SHRINK_POHBEE4}, // S_SHRINK_POHBEE3 + {SPR_POHB, 2, 1, {NULL}, 0, 0, S_SHRINK_POHBEE5}, // S_SHRINK_POHBEE4 + {SPR_POHB, 0, 1, {NULL}, 0, 0, S_SHRINK_POHBEE6}, // S_SHRINK_POHBEE5 + {SPR_POHB, 3, 1, {NULL}, 0, 0, S_SHRINK_POHBEE7}, // S_SHRINK_POHBEE6 + {SPR_POHB, 0, 1, {NULL}, 0, 0, S_SHRINK_POHBEE8}, // S_SHRINK_POHBEE7 + {SPR_POHB, 2, 1, {NULL}, 0, 0, S_SHRINK_POHBEE}, // S_SHRINK_POHBEE8 + + {SPR_POHC, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_CHAIN + {SPR_SHRG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_GUN - {SPR_POHB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_CHAIN - {SPR_SHRG, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_LASER - {SPR_SHRG, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_PARTICLE + {SPR_SHRG, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_GUN_OVERLAY + + {SPR_SHRL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_LASER + {SPR_SHRL, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_PARTICLE {SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK {SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD @@ -24075,7 +24089,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_SHRINK_POHBEE -1, // doomednum - S_HYUDORO, // spawnstate + S_SHRINK_POHBEE, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -24096,7 +24110,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // mass 0, // damage sfx_None, // activesound - MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags + MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP|MF_NOSQUISH, // flags S_NULL // raisestate }, @@ -24216,7 +24230,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_tossed, // seesound 8, // reactiontime sfx_None, // attacksound - 256*FRACUNIT, // painstate + S_NULL, // painstate 100, // painchance sfx_None, // painsound S_NULL, // meleestate diff --git a/src/info.h b/src/info.h index 8acf73ba8..8305e1400 100644 --- a/src/info.h +++ b/src/info.h @@ -1121,7 +1121,9 @@ typedef enum sprite SPR_HYUU, // Hyudoro SPR_GRWP, // Grow SPR_POHB, // Shrink Poh-Bee - SPR_SHRG, // Shrink gun / laser + SPR_POHC, // Shrink Poh-Bee chain + SPR_SHRG, // Shrink gun + SPR_SHRL, // Shrink laser SPR_SINK, // Kitchen Sink SPR_SITR, // Kitchen Sink Trail SPR_KBLN, // Battle Mode Bumper @@ -4752,8 +4754,20 @@ typedef enum state S_GROW_PARTICLE, // Shrink - S_SHRINK_GUN, + S_SHRINK_POHBEE, + S_SHRINK_POHBEE2, + S_SHRINK_POHBEE3, + S_SHRINK_POHBEE4, + S_SHRINK_POHBEE5, + S_SHRINK_POHBEE6, + S_SHRINK_POHBEE7, + S_SHRINK_POHBEE8, + S_SHRINK_CHAIN, + + S_SHRINK_GUN, + S_SHRINK_GUN_OVERLAY, + S_SHRINK_LASER, S_SHRINK_PARTICLE, diff --git a/src/k_kart.c b/src/k_kart.c index e57b01991..e14995d05 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -241,7 +241,6 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartminimap); CV_RegisterVar(&cv_kartcheck); - CV_RegisterVar(&cv_kartinvinsfx); CV_RegisterVar(&cv_kartspeed); CV_RegisterVar(&cv_kartbumpers); CV_RegisterVar(&cv_kartfrantic); @@ -5779,7 +5778,7 @@ void K_DoInvincibility(player_t *player, tic_t time) } else //used to be "if (P_IsDisplayPlayer(player) == false)" { - S_StartSound(player->mo, (cv_kartinvinsfx.value ? sfx_alarmi : sfx_kinvnc)); + S_StartSound(player->mo, sfx_alarmi); } P_RestoreMusic(player); @@ -6999,20 +6998,10 @@ static void K_UpdateInvincibilitySounds(player_t *player) if (player->mo->health > 0 && !P_IsLocalPlayer(player)) // used to be !P_IsDisplayPlayer(player) { - if (cv_kartinvinsfx.value) - { - if (player->invincibilitytimer > 0) // Prioritize invincibility - sfxnum = sfx_alarmi; - else if (player->growshrinktimer > 0) - sfxnum = sfx_alarmg; - } - else - { - if (player->invincibilitytimer > 0) - sfxnum = sfx_kinvnc; - else if (player->growshrinktimer > 0) - sfxnum = sfx_kgrow; - } + if (player->invincibilitytimer > 0) // Prioritize invincibility + sfxnum = sfx_alarmi; + else if (player->growshrinktimer > 0) + sfxnum = sfx_alarmg; } if (sfxnum != sfx_None && !S_SoundPlaying(player->mo, sfxnum)) @@ -7023,8 +7012,6 @@ static void K_UpdateInvincibilitySounds(player_t *player) S_StopSoundByID(player->mo, this); STOPTHIS(sfx_alarmi); STOPTHIS(sfx_alarmg); - STOPTHIS(sfx_kinvnc); - STOPTHIS(sfx_kgrow); #undef STOPTHIS } @@ -8417,7 +8404,7 @@ INT16 K_UpdateSteeringValue(INT16 inputSteering, INT16 destSteering) // player->steering is the turning value, but with easing applied. // Keeps micro-turning from old easing, but isn't controller dependent. - const INT16 amount = KART_FULLTURN/4; + const INT16 amount = KART_FULLTURN/3; INT16 diff = destSteering - inputSteering; INT16 outputSteering = inputSteering; @@ -9516,7 +9503,7 @@ void K_AdjustPlayerFriction(player_t *player) } // Wipeout slowdown - if (player->spinouttimer && player->wipeoutslow) + if (player->speed > 0 && player->spinouttimer && player->wipeoutslow) { if (player->offroad) player->mo->friction -= 4912; @@ -10108,7 +10095,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else //used to be "if (P_IsDisplayPlayer(player) == false)" { - S_StartSound(player->mo, (cv_kartinvinsfx.value ? sfx_alarmg : sfx_kgrow)); + S_StartSound(player->mo, sfx_alarmg); } P_RestoreMusic(player); diff --git a/src/k_menudef.c b/src/k_menudef.c index ed1e33c42..d97083509 100644 --- a/src/k_menudef.c +++ b/src/k_menudef.c @@ -871,9 +871,6 @@ menuitem_t OPTIONS_Sound[] = {IT_STRING | IT_CVAR, "Character Voices", "Set how often to play character voices in game.", NULL, {.cvar = &cv_kartvoices}, 0, 0}, - {IT_STRING | IT_CVAR, "Powerup Warning", "Set how to warn you from other player's powerups such as Invincibility.", - NULL, {.cvar = &cv_kartinvinsfx}, 0, 0}, - {IT_SPACE | IT_NOTHING, NULL, NULL, NULL, {NULL}, 0, 0}, diff --git a/src/objects/shrink.c b/src/objects/shrink.c index 017c19829..241164aa7 100644 --- a/src/objects/shrink.c +++ b/src/objects/shrink.c @@ -34,7 +34,7 @@ // vertical flip // -#define POHBEE_HOVER (256 << FRACBITS) +#define POHBEE_HOVER (128 << FRACBITS) #define POHBEE_SPEED (128 << FRACBITS) #define POHBEE_TIME (30 * TICRATE) #define POHBEE_DIST (4096 << FRACBITS) @@ -58,6 +58,7 @@ enum #define pohbee_waypoint_cur(o) ((o)->extravalue1) #define pohbee_waypoint_dest(o) ((o)->extravalue2) #define pohbee_height(o) ((o)->movefactor) +#define pohbee_destangle(o) ((o)->movedir) #define pohbee_owner(o) ((o)->target) #define pohbee_guns(o) ((o)->hnext) @@ -68,6 +69,7 @@ enum #define gun_pohbee(o) ((o)->target) #define gun_laser(o) ((o)->tracer) #define gun_chains(o) ((o)->hprev) +#define gun_overlay(o) ((o)->itnext) #define chain_index(o) ((o)->extravalue1) @@ -238,12 +240,13 @@ static void PohbeeSpawn(mobj_t *pohbee) } PohbeeMoveTo(pohbee, newX, newY, newZ); - pohbee->angle = K_MomentumAngle(pohbee); + pohbee_destangle(pohbee) = K_MomentumAngle(pohbee); if (finalize == true) { // Move to next state pohbee_mode(pohbee) = POHBEE_MODE_ACT; + pohbee_destangle(pohbee) += ANGLE_180; } if (pathfindsuccess == true) @@ -314,7 +317,7 @@ static void ShrinkLaserThinker(mobj_t *pohbee, mobj_t *gun, mobj_t *laser) mobj_t *particle = NULL; laser->renderflags &= ~RF_DONTDRAW; - laser->color = gun->color; + laser->color = ShrinkLaserColor(pohbee); if (leveltime & 1) { @@ -343,10 +346,20 @@ static void ShrinkLaserThinker(mobj_t *pohbee, mobj_t *gun, mobj_t *laser) particle->destscale = 0; //particle->momz = 2 * particle->scale * P_MobjFlip(particle); + + if (S_SoundPlaying(laser, sfx_beam01) == false) + { + S_StartSound(laser, sfx_beam01); + } } else { laser->renderflags |= RF_DONTDRAW; + + if (S_SoundPlaying(laser, sfx_beam01) == true) + { + S_StopSound(laser); + } } } @@ -386,6 +399,7 @@ static void DoGunChains(mobj_t *gun, mobj_t *pohbee) static void ShrinkGunThinker(mobj_t *gun) { mobj_t *pohbee = gun_pohbee(gun); + skincolornum_t gunColor = SKINCOLOR_GREY; if (pohbee == NULL || P_MobjWasRemoved(pohbee) == true) { @@ -393,8 +407,23 @@ static void ShrinkGunThinker(mobj_t *gun) return; } - gun->angle = pohbee->angle; - gun->color = ShrinkLaserColor(pohbee); + if (pohbee_mode(pohbee) == POHBEE_MODE_SPAWN) + { + gun->angle = pohbee->angle; + } + + if (pohbee_owner(pohbee) != NULL && P_MobjWasRemoved(pohbee_owner(pohbee)) == false + && pohbee_owner(pohbee)->player != NULL) + { + gunColor = pohbee_owner(pohbee)->player->skincolor; + } + + gun->color = gunColor; + + if (gun_overlay(gun) != NULL && P_MobjWasRemoved(gun_overlay(gun)) == false) + { + gun_overlay(gun)->color = ShrinkLaserColor(pohbee); + } DoGunSwing(gun, pohbee); @@ -411,6 +440,7 @@ void Obj_PohbeeThinker(mobj_t *pohbee) mobj_t *gun = NULL; pohbee->momx = pohbee->momy = pohbee->momz = 0; + pohbee->spritexscale = pohbee->spriteyscale = 2*FRACUNIT; switch (pohbee_mode(pohbee)) { @@ -432,6 +462,8 @@ void Obj_PohbeeThinker(mobj_t *pohbee) break; } + pohbee->angle += AngleDeltaSigned(pohbee_destangle(pohbee), pohbee->angle) / 8; + gun = pohbee_guns(pohbee); while (gun != NULL && P_MobjWasRemoved(gun) == false) { @@ -530,7 +562,7 @@ boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim) } else //used to be "if (P_IsDisplayPlayer(victim->player) == false)" { - S_StartSound(victim, (cv_kartinvinsfx.value ? sfx_alarmg : sfx_kgrow)); + S_StartSound(victim, sfx_alarmg); } P_RestoreMusic(victim->player); @@ -654,6 +686,7 @@ static void CreatePohbee(player_t *owner, waypoint_t *start, waypoint_t *end, UI const UINT8 numSegs = segVal * (i + 1); mobj_t *gun = P_SpawnMobjFromMobj(pohbee, 0, 0, 0, MT_SHRINK_GUN); + mobj_t *overlay = NULL; mobj_t *laser = NULL; mobj_t *prevChain = NULL; @@ -663,6 +696,13 @@ static void CreatePohbee(player_t *owner, waypoint_t *start, waypoint_t *end, UI gun_numsegs(gun) = numSegs; gun_offset(gun) = P_RandomKey(GUN_SWINGTIME); + overlay = P_SpawnMobjFromMobj(gun, 0, 0, 0, MT_OVERLAY); + + P_SetTarget(&overlay->target, gun); + P_SetTarget(&gun_overlay(gun), overlay); + + P_SetMobjState(overlay, S_SHRINK_GUN_OVERLAY); + laser = P_SpawnMobjFromMobj(gun, 0, 0, 0, MT_SHRINK_LASER); P_SetTarget(&gun_laser(gun), laser); diff --git a/src/p_user.c b/src/p_user.c index 299d42a4b..1e1cfcbcb 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1197,7 +1197,7 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprite2 = mobj->sprite2; ghost->frame = mobj->frame; ghost->tics = -1; - ghost->renderflags |= tr_trans50 << RF_TRANSSHIFT; + ghost->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|RF_TRANS50; ghost->fuse = ghost->info->damage; ghost->skin = mobj->skin; ghost->standingslope = mobj->standingslope; @@ -1207,6 +1207,11 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprzoff = mobj->sprzoff; ghost->rollangle = mobj->rollangle; + ghost->spritexscale = mobj->spritexscale; + ghost->spriteyscale = mobj->spriteyscale; + ghost->spritexoffset = mobj->spritexoffset; + ghost->spriteyoffset = mobj->spriteyoffset; + if (mobj->flags2 & MF2_OBJECTFLIP) ghost->flags |= MF2_OBJECTFLIP; diff --git a/src/r_things.c b/src/r_things.c index c0e727fd9..c76f77129 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1788,8 +1788,14 @@ static void R_ProjectSprite(mobj_t *thing) if (spriterotangle && !(splat && !(thing->renderflags & RF_NOSPLATROLLANGLE))) { - rollangle = R_GetRollAngle(vflip - ? InvAngle(spriterotangle) : spriterotangle); + if ((papersprite && ang >= ANGLE_180) != vflip) + { + rollangle = R_GetRollAngle(InvAngle(spriterotangle)); + } + else + { + rollangle = R_GetRollAngle(spriterotangle); + } rotsprite = Patch_GetRotatedSprite(sprframe, (thing->frame & FF_FRAMEMASK), rot, flip, false, sprinfo, rollangle); if (rotsprite != NULL) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index ad0452898..2361a5349 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -106,8 +106,10 @@ rendermode_t chosenrendermode = render_none; // set by command line arguments boolean highcolor = false; +static void Impl_SetVsync(void); + // synchronize page flipping with screen refresh -consvar_t cv_vidwait = CVAR_INIT ("vid_wait", "On", CV_SAVE, CV_OnOff, NULL); +consvar_t cv_vidwait = CVAR_INIT ("vid_wait", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, Impl_SetVsync); static consvar_t cv_stretch = CVAR_INIT ("stretch", "Off", CV_SAVE|CV_NOSHOWHELP, CV_OnOff, NULL); static consvar_t cv_alwaysgrabmouse = CVAR_INIT ("alwaysgrabmouse", "Off", CV_SAVE, CV_OnOff, NULL); @@ -2002,3 +2004,11 @@ UINT32 I_GetRefreshRate(void) // trouble querying mode over and over again. return refresh_rate; } + +static void Impl_SetVsync(void) +{ +#if SDL_VERSION_ATLEAST(2,0,18) + if (renderer) + SDL_RenderSetVSync(renderer, cv_vidwait.value); +#endif +} diff --git a/src/sounds.c b/src/sounds.c index 351e1553f..1cff40633 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1054,8 +1054,6 @@ sfxinfo_t S_sfx[NUMSFX] = {"kpogos", false, 96, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Pogo Spring use {"alarmi", false, 255, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Invincibility alarm {"alarmg", false, 255, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Grow alarm - {"kinvnc", false, 255, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Invincibility music - {"kgrow", false, 255, 8, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Grow music {"itrol1", true, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Roulette spinning {"itrol2", true, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"itrol3", true, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, @@ -1115,7 +1113,10 @@ sfxinfo_t S_sfx[NUMSFX] = {"ffbonc", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // Shout message sound effect - {"sysmsg", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Server notification"}, + {"sysmsg", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Server notification"}, + + // Shrink laser beam + {"beam01", false, 32, 64, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // SRB2Kart - Engine sounds // Engine class A diff --git a/src/sounds.h b/src/sounds.h index e7248a369..cb9d3b671 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -1118,8 +1118,6 @@ typedef enum sfx_kpogos, sfx_alarmi, sfx_alarmg, - sfx_kinvnc, - sfx_kgrow, sfx_itrol1, sfx_itrol2, sfx_itrol3, @@ -1182,6 +1180,9 @@ typedef enum // Shout message sound effect sfx_sysmsg, + // Shrink laser + sfx_beam01, + // Next up: UNIQUE ENGINE SOUNDS! Hoooooo boy... // Engine class A - Low Speed, Low Weight sfx_krta00,