Dumb post alert: Ease off the horn

If we're bringing the spice we have to bring the whole pepper
This commit is contained in:
toaster 2025-08-15 22:44:53 +01:00
parent 2618232260
commit 2f6d7230f0
8 changed files with 81 additions and 15 deletions

View file

@ -1048,7 +1048,14 @@ static void SendNameAndColor(const UINT8 n)
WRITESTRINGN(p, cv_playername[n].zstring, MAXPLAYERNAME); WRITESTRINGN(p, cv_playername[n].zstring, MAXPLAYERNAME);
WRITEUINT16(p, sendColor); WRITEUINT16(p, sendColor);
WRITEUINT8(p, (UINT8)cv_skin[n].value); WRITEUINT8(p, (UINT8)cv_skin[n].value);
WRITEINT16(p, (INT16)cv_follower[n].value); if (horngoner)
{
WRITEINT16(p, (-1));
}
else
{
WRITEINT16(p, (INT16)cv_follower[n].value);
}
//CONS_Printf("Sending follower id %d\n", (INT16)cv_follower[n].value); //CONS_Printf("Sending follower id %d\n", (INT16)cv_follower[n].value);
WRITEUINT16(p, sendFollowerColor); WRITEUINT16(p, sendFollowerColor);

View file

@ -32,6 +32,8 @@ follower_t followers[MAXFOLLOWERS];
INT32 numfollowercategories; INT32 numfollowercategories;
followercategory_t followercategories[MAXFOLLOWERCATEGORIES]; followercategory_t followercategories[MAXFOLLOWERCATEGORIES];
boolean horngoner = false;
CV_PossibleValue_t Followercolor_cons_t[MAXSKINCOLORS+3]; // +3 to account for "Match", "Opposite" & NULL CV_PossibleValue_t Followercolor_cons_t[MAXSKINCOLORS+3]; // +3 to account for "Match", "Opposite" & NULL
/*-------------------------------------------------- /*--------------------------------------------------

View file

@ -115,6 +115,8 @@ struct followercategory_t
extern INT32 numfollowercategories; extern INT32 numfollowercategories;
extern followercategory_t followercategories[MAXFOLLOWERCATEGORIES]; extern followercategory_t followercategories[MAXFOLLOWERCATEGORIES];
extern boolean horngoner;
/*-------------------------------------------------- /*--------------------------------------------------
INT32 K_FollowerAvailable(const char *name) INT32 K_FollowerAvailable(const char *name)

View file

@ -1428,6 +1428,8 @@ typedef enum
#define CHAOHOLD_END (3) #define CHAOHOLD_END (3)
#define CHAOHOLD_PADDING (CHAOHOLD_BEGIN + CHAOHOLD_END) #define CHAOHOLD_PADDING (CHAOHOLD_BEGIN + CHAOHOLD_END)
#define EASEOFFHORN 50
extern struct timeattackmenu_s { extern struct timeattackmenu_s {
tic_t ticker; // How long the menu's been open for tic_t ticker; // How long the menu's been open for

View file

@ -1862,6 +1862,9 @@ static boolean M_DrawFollowerSprite(INT16 x, INT16 y, INT32 num, boolean charfli
follower_t *fl; follower_t *fl;
UINT8 rotation = (charflip ? 1 : 7); UINT8 rotation = (charflip ? 1 : 7);
if (horngoner)
return false;
if (p != NULL) if (p != NULL)
followernum = p->followern; followernum = p->followern;
else else
@ -2406,7 +2409,7 @@ void M_DrawProfileCard(INT32 x, INT32 y, boolean greyedout, profile_t *p)
V_DrawMappedPatch(x+14, y+66, 0, faceprefix[skinnum][FACE_RANK], ccolormap); V_DrawMappedPatch(x+14, y+66, 0, faceprefix[skinnum][FACE_RANK], ccolormap);
} }
if (fln >= 0) if (!horngoner && fln >= 0)
{ {
UINT16 fcol = K_GetEffectiveFollowerColor( UINT16 fcol = K_GetEffectiveFollowerColor(
p->followercolor, p->followercolor,
@ -6827,8 +6830,15 @@ static void M_DrawChallengeTile(INT16 i, INT16 j, INT32 x, INT32 y, UINT8 *flash
iconid = 1; iconid = 1;
break; break;
case SECRET_FOLLOWER: case SECRET_FOLLOWER:
bcol = SKINCOLOR_SAPPHIRE; if (horngoner)
iconid = 2; {
bcol = SKINCOLOR_BLACK;
}
else
{
bcol = SKINCOLOR_SAPPHIRE;
iconid = 2;
}
break; break;
case SECRET_COLOR: case SECRET_COLOR:
//bcol = SKINCOLOR_SILVER; //bcol = SKINCOLOR_SILVER;
@ -6890,7 +6900,9 @@ static void M_DrawChallengeTile(INT16 i, INT16 j, INT32 x, INT32 y, UINT8 *flash
} }
#endif #endif
if (categoryside) if (horngoner && ref->type == SECRET_FOLLOWER)
goto drawborder;
else if (categoryside)
{ {
colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SILVER, GTC_MENUCACHE); colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SILVER, GTC_MENUCACHE);
@ -7305,6 +7317,11 @@ static const char* M_DrawChallengePreview(INT32 x, INT32 y)
colormap = R_GetTranslationColormap(TC_BLINK, SKINCOLOR_BLACK, GTC_MENUCACHE); colormap = R_GetTranslationColormap(TC_BLINK, SKINCOLOR_BLACK, GTC_MENUCACHE);
M_DrawCharacterSprite(x, y, skin, SPR2_STIN, 7, 0, 0, colormap); M_DrawCharacterSprite(x, y, skin, SPR2_STIN, 7, 0, 0, colormap);
if (horngoner)
{
return "<a_pressed> <gray>MISSING.";
}
// Draw follower next to them // Draw follower next to them
if (fskin != -1) if (fskin != -1)
{ {
@ -7332,6 +7349,27 @@ static const char* M_DrawChallengePreview(INT32 x, INT32 y)
{ {
actiontext = "<a_animated> <aqua>Play Ancient Melody?"; actiontext = "<a_animated> <aqua>Play Ancient Melody?";
} }
else if (challengesmenu.hornposting >= EASEOFFHORN)
actiontext = "<a> <red>Time to die";
else if (challengesmenu.hornposting >= (EASEOFFHORN-5))
{
if (challengesmenu.hornposting == EASEOFFHORN)
actiontext = "Time to die";
else
actiontext = "I asked politely";
actiontext = va("%s%s",
(M_MenuConfirmPressed(0)
? "<a_pressed> <yellow>"
: "<a> <red>"
), actiontext
);
}
else if (challengesmenu.hornposting >= (EASEOFFHORN-10))
{
actiontext = M_MenuConfirmPressed(0)
? "<a_pressed> <yellow>Ease off the horn"
: "<a> <orange>Ease off the horn";
}
else switch (challengesmenu.hornposting % 4) else switch (challengesmenu.hornposting % 4)
{ {
default: default:

View file

@ -1252,7 +1252,7 @@ boolean M_ChallengesInputs(INT32 ch)
} }
case SECRET_FOLLOWER: case SECRET_FOLLOWER:
{ {
if (M_MenuConfirmPressed(pid)) if (!horngoner && M_MenuConfirmPressed(pid))
{ {
INT32 fskin = M_UnlockableFollowerNum(ref); INT32 fskin = M_UnlockableFollowerNum(ref);
if (fskin != -1) if (fskin != -1)
@ -1274,11 +1274,19 @@ boolean M_ChallengesInputs(INT32 ch)
} }
if (!forceflip) if (!forceflip)
{
challengesmenu.hornposting++; challengesmenu.hornposting++;
if (challengesmenu.hornposting > EASEOFFHORN)
{
challengesmenu.hornposting = 0;
horngoner = true;
S_StartSound(NULL, sfx_s3k72);
}
else
{
S_StartSound(NULL, followers[fskin].hornsound);
} }
S_StartSound(NULL, followers[fskin].hornsound);
M_SetMenuDelay(pid); M_SetMenuDelay(pid);
forceflip = true; forceflip = true;

View file

@ -777,7 +777,7 @@ static boolean M_HandleBeginningColors(setup_player_t *p)
static void M_HandleBeginningFollowers(setup_player_t *p) static void M_HandleBeginningFollowers(setup_player_t *p)
{ {
if (setup_numfollowercategories == 0) if (horngoner || setup_numfollowercategories == 0)
{ {
p->followern = -1; p->followern = -1;
M_HandlePlayerFinalise(p); M_HandlePlayerFinalise(p);
@ -1392,7 +1392,9 @@ static void M_MPConfirmCharacterSelection(void)
CV_StealthSetValue(&cv_playercolor[i], col); CV_StealthSetValue(&cv_playercolor[i], col);
// follower // follower
if (setup_player[i].followern < 0) if (horngoner)
;
else if (setup_player[i].followern < 0)
CV_StealthSet(&cv_follower[i], "None"); CV_StealthSet(&cv_follower[i], "None");
else else
CV_StealthSet(&cv_follower[i], followers[setup_player[i].followern].name); CV_StealthSet(&cv_follower[i], followers[setup_player[i].followern].name);
@ -1457,9 +1459,12 @@ void M_CharacterSelectTick(void)
strcpy(optionsmenu.profile->skinname, skins[setup_player[0].skin]->name); strcpy(optionsmenu.profile->skinname, skins[setup_player[0].skin]->name);
optionsmenu.profile->color = setup_player[0].color; optionsmenu.profile->color = setup_player[0].color;
// save follower if (!horngoner) // so you don't lose your choice after annoying the game
strcpy(optionsmenu.profile->follower, followers[setup_player[0].followern].name); {
optionsmenu.profile->followercolor = setup_player[0].followercolor; // save follower
strcpy(optionsmenu.profile->follower, followers[setup_player[0].followern].name);
optionsmenu.profile->followercolor = setup_player[0].followercolor;
}
// reset setup_player // reset setup_player
memset(setup_player, 0, sizeof(setup_player)); memset(setup_player, 0, sizeof(setup_player));
@ -1475,7 +1480,9 @@ void M_CharacterSelectTick(void)
CV_StealthSet(&cv_skin[i], skins[setup_player[i].skin]->name); CV_StealthSet(&cv_skin[i], skins[setup_player[i].skin]->name);
CV_StealthSetValue(&cv_playercolor[i], setup_player[i].color); CV_StealthSetValue(&cv_playercolor[i], setup_player[i].color);
if (setup_player[i].followern < 0) if (horngoner)
;
else if (setup_player[i].followern < 0)
CV_StealthSet(&cv_follower[i], "None"); CV_StealthSet(&cv_follower[i], "None");
else else
CV_StealthSet(&cv_follower[i], followers[setup_player[i].followern].name); CV_StealthSet(&cv_follower[i], followers[setup_player[i].followern].name);

View file

@ -8099,7 +8099,7 @@ static void P_InitPlayers(void)
skin = 0; skin = 0;
} }
if (netgame) if (netgame || horngoner)
; // shouldn't happen but at least attempt to sync if it does ; // shouldn't happen but at least attempt to sync if it does
else for (i = 0; i < numfollowers; i++) else for (i = 0; i < numfollowers; i++)
{ {