From e516d09ae453f575c2e10f2bee116e00caef913e Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 5 Feb 2018 20:10:20 -0500 Subject: [PATCH 1/6] Colored boom Not tested *yet* --- src/k_kart.c | 7 ++++++- src/k_kart.h | 2 +- src/p_enemy.c | 5 ++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index c0b297d2..098ee4ea 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2171,7 +2171,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 } // Spawns the purely visual explosion -void K_SpawnBobombExplosion(mobj_t *source) +void K_SpawnBobombExplosion(mobj_t *source, UINT8 color) { INT32 i, radius, height; mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING); @@ -2183,6 +2183,9 @@ void K_SpawnBobombExplosion(mobj_t *source) radius = source->radius>>FRACBITS; height = source->height>>FRACBITS; + if (!color) + color = SKINCOLOR_RED; + for (i = 0; i < 32; i++) { dust = P_SpawnMobj(source->x, source->y, source->z, MT_SMOKE); @@ -2202,6 +2205,7 @@ void K_SpawnBobombExplosion(mobj_t *source) truc->momy = P_RandomRange(-speed, speed)*FRACUNIT; speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS; truc->momz = P_RandomRange(-speed, speed)*FRACUNIT; + truc->color = color; } for (i = 0; i < 16; i++) @@ -2228,6 +2232,7 @@ void K_SpawnBobombExplosion(mobj_t *source) if (P_RandomChance(FRACUNIT/2)) truc->momz = -truc->momz; truc->tics = TICRATE*2; + truc->color = color; } } diff --git a/src/k_kart.h b/src/k_kart.h index 11ec63c6..5ea8efa5 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -27,7 +27,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); -void K_SpawnBobombExplosion(mobj_t *source); +void K_SpawnBobombExplosion(mobj_t *source, UINT8 color); void K_SpawnDriftTrail(player_t *player); void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); diff --git a/src/p_enemy.c b/src/p_enemy.c index e2c027d3..7c8c898a 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8270,7 +8270,10 @@ void A_BobombExplode(mobj_t *actor) for (d = 0; d < 16; d++) K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), true, false, actor->target); // 32 <-> 64 - K_SpawnBobombExplosion(actor); + if (actor->target->player) + K_SpawnBobombExplosion(actor, actor->target->player->skincolor); + else + K_SpawnBobombExplosion(actor, SKINCOLOR_RED); P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND); From 6b63e44ff912e9e9d29db365781db280477b7466 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 5 Feb 2018 20:23:09 -0500 Subject: [PATCH 2/6] Forgotten --- src/p_mobj.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/p_mobj.c b/src/p_mobj.c index b8a3e93f..ce104999 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6727,6 +6727,7 @@ void P_MobjThinker(mobj_t *mobj) P_SetMobjState(smoke, S_QUICKBOOM1); smoke->scale = mobj->scale/2; smoke->destscale = mobj->scale; + smoke->color = mobj->color; } else { From 858a7adcb3773c0d5fce821f1c366b48327cd804 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Thu, 8 Feb 2018 15:46:07 +0000 Subject: [PATCH 3/6] The main explosion particles bounce off the floor too --- src/dehacked.c | 1 + src/info.c | 27 +++++++++++++++++++++++++++ src/info.h | 1 + src/k_kart.c | 3 +-- src/p_mobj.c | 13 ++++++++++++- 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 05762fce..1b89ac1a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7017,6 +7017,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_BOMBEXPLOSIONSOUND", "MT_SMOLDERING", // New explosion + "MT_BOOMEXPLODE", "MT_BOOMPARTICLE", "MT_BLUELIGHTNING", // Lightning stuff diff --git a/src/info.c b/src/info.c index 2b38bada..b9a51ee1 100644 --- a/src/info.c +++ b/src/info.c @@ -15056,6 +15056,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BOOMEXPLODE + -1, // doomednum + S_SLOWBOOM1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 0, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_BOUNCE|MF_SCENERY, // flags + S_NULL // raisestate + }, + { // MT_BOOMPARTICLE -1, // doomednum S_INVISIBLE, // spawnstate diff --git a/src/info.h b/src/info.h index fa751c7a..d7ec70b5 100644 --- a/src/info.h +++ b/src/info.h @@ -3999,6 +3999,7 @@ typedef enum mobj_type MT_BOMBEXPLOSIONSOUND, MT_SMOLDERING, // New explosion + MT_BOOMEXPLODE, MT_BOOMPARTICLE, MT_BLUELIGHTNING, // Lightning stuff diff --git a/src/k_kart.c b/src/k_kart.c index 098ee4ea..64ddf99a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2196,10 +2196,9 @@ void K_SpawnBobombExplosion(mobj_t *source, UINT8 color) truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT, source->y + P_RandomRange(-radius, radius)*FRACUNIT, - source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOSSEXPLODE); + source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMEXPLODE); truc->scale = source->scale*2; truc->destscale = source->scale*6; - P_SetMobjState(truc, S_SLOWBOOM1); speed = FixedMul(10*FRACUNIT, source->scale)>>FRACBITS; truc->momx = P_RandomRange(-speed, speed)*FRACUNIT; truc->momy = P_RandomRange(-speed, speed)*FRACUNIT; diff --git a/src/p_mobj.c b/src/p_mobj.c index ce104999..30323023 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3038,11 +3038,22 @@ static boolean P_SceneryZMovement(mobj_t *mo) switch (mo->type) { + case MT_BOOMEXPLODE: case MT_BOOMPARTICLE: if ((mo->flags & MF_BOUNCE) && (mo->z <= mo->floorz || mo->z+mo->height >= mo->ceilingz)) { + // set standingslope + P_TryMove(mo, mo->x, mo->y, true); mo->momz = -mo->momz; - mo->z += mo->momz; +#ifdef ESLOPE + if (mo->standingslope) + { + if (mo->flags & MF_NOCLIPHEIGHT) + mo->standingslope = NULL; + else if (!P_IsObjectOnGround(mo)) + P_SlopeLaunch(mo); + } +#endif S_StartSound(mo, mo->info->activesound); } break; From dbc27e9c9e1e3dee85d5cece519e9f7f49d16ae9 Mon Sep 17 00:00:00 2001 From: Sryder Date: Fri, 23 Feb 2018 01:04:52 +0000 Subject: [PATCH 4/6] It's SINT8 not INT8 --- src/d_netcmd.c | 16 ++++++++-------- src/d_netcmd.h | 2 +- src/doomstat.h | 6 +++--- src/g_game.c | 8 ++++---- src/y_inter.c | 8 ++++---- src/y_inter.h | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 10ce175e..b7b67f2c 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1973,7 +1973,7 @@ void D_SetupVote(void) SendNetXCmd(XD_SETUPVOTE, buf, p - buf); } -void D_ModifyClientVote(INT8 voted) +void D_ModifyClientVote(SINT8 voted) { XBOXSTATIC UINT8 buf[1]; buf[0] = (UINT8)(voted+1); @@ -4599,14 +4599,14 @@ static void Got_SetupVotecmd(UINT8 **cp, INT32 playernum) static void Got_ModifyVotecmd(UINT8 **cp, INT32 playernum) { - INT8 voted = READUINT8(*cp); - votes[playernum] = (INT8)(voted-1); + SINT8 voted = READSINT8(*cp); + votes[playernum] = (SINT8)(voted-1); } static void Got_PickVotecmd(UINT8 **cp, INT32 playernum) { - INT8 pick = READUINT8(*cp); - INT8 level = READUINT8(*cp); + SINT8 pick = READSINT8(*cp); + SINT8 level = READSINT8(*cp); if (playernum != serverplayer && !IsPlayerAdmin(playernum)) { @@ -4622,7 +4622,7 @@ static void Got_PickVotecmd(UINT8 **cp, INT32 playernum) return; } - Y_SetupVoteFinish((INT8)pick, (INT8)level); + Y_SetupVoteFinish((SINT8)pick, (SINT8)level); } /** Prints the number of the displayplayer. @@ -4712,7 +4712,7 @@ static void Command_RestartAudio_f(void) I_ShutdownSound(); I_StartupSound(); I_InitMusic(); - + // These must be called or no sound and music until manually set. I_SetSfxVolume(cv_soundvolume.value); @@ -4720,7 +4720,7 @@ static void Command_RestartAudio_f(void) I_SetMIDIMusicVolume(cv_midimusicvolume.value); if (Playing()) // Gotta make sure the player is in a level P_RestoreMusic(&players[consoleplayer]); - + } /** Quits a game and returns to the title screen. diff --git a/src/d_netcmd.h b/src/d_netcmd.h index f1c6790c..53132d74 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -252,7 +252,7 @@ void Command_Retry_f(void); void D_GameTypeChanged(INT32 lastgametype); // not a real _OnChange function anymore void D_MapChange(INT32 pmapnum, INT32 pgametype, boolean pultmode, boolean presetplayers, INT32 pdelay, boolean pskipprecutscene, boolean pfromlevelselect); void D_SetupVote(void); -void D_ModifyClientVote(INT8 voted); +void D_ModifyClientVote(SINT8 voted); void D_PickVote(void); void ObjectPlace_OnChange(void); boolean IsPlayerAdmin(INT32 playernum); diff --git a/src/doomstat.h b/src/doomstat.h index 785998ae..41a3656f 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -254,7 +254,7 @@ typedef struct // SRB2kart //boolean automap; ///< Displays a level's white map outline in modified games - fixed_t mobj_scale; ///< Replacement for TOL_ERZ3 + fixed_t mobj_scale; ///< Replacement for TOL_ERZ3 // Lua stuff. // (This is not ifdeffed so the map header structure can stay identical, just in case.) @@ -450,8 +450,8 @@ extern boolean comebackshowninfo; extern tic_t curlap, bestlap; extern INT16 votelevels[4]; -extern INT8 votes[MAXPLAYERS]; -extern INT8 pickedvote; +extern SINT8 votes[MAXPLAYERS]; +extern SINT8 pickedvote; extern tic_t hidetime; diff --git a/src/g_game.c b/src/g_game.c index 7582006b..3d7d5d42 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -249,8 +249,8 @@ boolean comeback; // Battle Mode's karma comeback is on/off // Voting system INT16 votelevels[4]; // Levels that were rolled by the host -INT8 votes[MAXPLAYERS]; // Each player's vote -INT8 pickedvote; // What vote the host rolls +SINT8 votes[MAXPLAYERS]; // Each player's vote +SINT8 pickedvote; // What vote the host rolls // Client-sided variables (NEVER use in anything that needs to be synced with other players) boolean legitimateexit; // Did this client actually finish the match? @@ -1407,7 +1407,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) // drift button if (InputDown(gc_drift, ssplayer)) cmd->buttons |= BT_DRIFT; - + // Lua scriptable buttons if (InputDown(gc_custom1, ssplayer)) cmd->buttons |= BT_CUSTOM1; @@ -3142,7 +3142,7 @@ INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignoreb } } } - + if (isokmap) okmaps[numokmaps++] = ix; } diff --git a/src/y_inter.c b/src/y_inter.c index 26c52051..e1bf1e5e 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -177,7 +177,7 @@ typedef struct typedef struct { - INT8 selection; + SINT8 selection; UINT8 delay; UINT8 ranim; UINT8 rtics; @@ -1351,7 +1351,7 @@ void Y_StartIntermission(void) { // setup time data data.coop.tics = players[consoleplayer].realtime; - + // Update visitation flags mapvisited[gamemap-1] |= MV_BEATEN; if (ALL7EMERALDS(emeralds)) @@ -1364,7 +1364,7 @@ void Y_StartIntermission(void) if (modeattacking == ATTACKING_RECORD) Y_UpdateRecordReplays(); } - + // Calculate who won Y_CalculateTournamentPoints(); @@ -2497,7 +2497,7 @@ static void Y_UnloadVoteData(void) // // Y_SetupVoteFinish // -void Y_SetupVoteFinish(INT8 pick, INT8 level) +void Y_SetupVoteFinish(SINT8 pick, SINT8 level) { if (pickedvote == -1) { diff --git a/src/y_inter.h b/src/y_inter.h index 6ba83583..6171f42b 100644 --- a/src/y_inter.h +++ b/src/y_inter.h @@ -21,7 +21,7 @@ void Y_VoteDrawer(void); void Y_VoteTicker(void); void Y_StartVote(void); void Y_EndVote(void); -void Y_SetupVoteFinish(INT8 pick, INT8 level); +void Y_SetupVoteFinish(SINT8 pick, SINT8 level); typedef enum { From 387f6b904cda9995d000887f2bf780d1092dd0c8 Mon Sep 17 00:00:00 2001 From: Sryder Date: Fri, 23 Feb 2018 01:11:31 +0000 Subject: [PATCH 5/6] I don't see a reason for this to be in caps, but it stops me compiling DEVELOP on linux so fix --- src/m_cheat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m_cheat.c b/src/m_cheat.c index 6ad31d5b..b468d733 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -111,7 +111,7 @@ static UINT8 cheatf_devmode(void) G_SetGameModified(false); for (i = 0; i < MAXUNLOCKABLES; i++) unlockables[i].unlocked = true; - devparm = TRUE; + devparm = true; cv_debug |= 0x8000; // Refresh secrets menu existing. From 0454293baeca6681ab479ec898480797f82e5429 Mon Sep 17 00:00:00 2001 From: Sryder Date: Fri, 23 Feb 2018 01:53:30 +0000 Subject: [PATCH 6/6] Hopefully a few more fixes and sanity changes for map voting --- src/d_netcmd.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index b7b67f2c..09fa39ff 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1956,12 +1956,10 @@ void D_MapChange(INT32 mapnum, INT32 newgametype, boolean pultmode, boolean rese void D_SetupVote(void) { - XBOXSTATIC char buf[8]; - char *p; + char buf[8]; + char *p = buf; INT32 i; - p = buf; - for (i = 0; i < 4; i++) { if (i == 3) @@ -1975,16 +1973,19 @@ void D_SetupVote(void) void D_ModifyClientVote(SINT8 voted) { - XBOXSTATIC UINT8 buf[1]; - buf[0] = (UINT8)(voted+1); + char buf[1]; + char *p = buf; + + WRITESINT8(p, voted); SendNetXCmd(XD_MODIFYVOTE, &buf, 1); } void D_PickVote(void) { - XBOXSTATIC UINT8 buf[2]; - UINT8 temppicks[MAXPLAYERS]; - UINT8 templevels[MAXPLAYERS]; + char buf[2]; + char* p = buf; + SINT8 temppicks[MAXPLAYERS]; + SINT8 templevels[MAXPLAYERS]; UINT8 numvotes = 0, key = 0; INT32 i; @@ -1994,16 +1995,16 @@ void D_PickVote(void) continue; if (votes[i] != -1) { - temppicks[numvotes] = (UINT8)i; - templevels[numvotes] = (UINT8)votes[i]; + temppicks[numvotes] = i; + templevels[numvotes] = votes[i]; numvotes++; } } key = M_RandomKey(numvotes); - buf[0] = temppicks[key]; - buf[1] = templevels[key]; + WRITESINT8(p, temppicks[key]); + WRITESINT8(p, templevels[key]); SendNetXCmd(XD_PICKVOTE, &buf, 2); } @@ -4600,7 +4601,7 @@ static void Got_SetupVotecmd(UINT8 **cp, INT32 playernum) static void Got_ModifyVotecmd(UINT8 **cp, INT32 playernum) { SINT8 voted = READSINT8(*cp); - votes[playernum] = (SINT8)(voted-1); + votes[playernum] = voted; } static void Got_PickVotecmd(UINT8 **cp, INT32 playernum) @@ -4622,7 +4623,7 @@ static void Got_PickVotecmd(UINT8 **cp, INT32 playernum) return; } - Y_SetupVoteFinish((SINT8)pick, (SINT8)level); + Y_SetupVoteFinish(pick, level); } /** Prints the number of the displayplayer.