diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/l4dreset.c | 16 | ||||
| -rw-r--r-- | src/sst.c | 1 | 
2 files changed, 17 insertions, 0 deletions
diff --git a/src/l4dreset.c b/src/l4dreset.c index f5508e6..2de75cd 100644 --- a/src/l4dreset.c +++ b/src/l4dreset.c @@ -344,6 +344,8 @@ static int getffidx(const char *campaign) {  DEF_FEAT_CVAR(sst_l4d_quickreset_fastfwd,  		"Fast-forward through cutscenes when quick-resetting", 1, CON_ARCHIVE) +static int *FinaleEscapeState; +  DEF_FEAT_CCMD_HERE(sst_l4d_quickreset,  		"Reset (or switch) campaign and clear all vote cooldowns", 0) {  	if (cmd->argc > 2) { @@ -374,6 +376,7 @@ DEF_FEAT_CCMD_HERE(sst_l4d_quickreset,  			(ffidx = getffidx(campaign)) != -1) {  		ffdelay = 45; // 1.5s  	} +	if (FinaleEscapeState) *FinaleEscapeState = 0; // see comment in INIT  }  // Note: this returns a pointer to subsequent bytes for find_voteissues() below @@ -497,6 +500,9 @@ ok:	// Director::Update calls UnfreezeTeam after the first jmp instruction  	return false;   } + +DECL_VFUNC_DYN(int, GetEngineBuildNumber) +  INIT {  	struct con_cmd *cmd_listissues = con_findcmd("listissues");  	if_cold (!cmd_listissues) { @@ -565,6 +571,16 @@ INIT {  			errmsg_errorx("couldn't find vote callers list offset");  nocd:		errmsg_note("resetting a first map will not clear vote cooldowns");  		} +		// Additionally, unrelated to cooldown, get a pointer to the director +		// member responsible for the infamous bug at the start of Swamp and +		// Crash Course which gives god mode and prevents idling and voting. +		// We clear the value at the end of the quickreset handler above to +		// replicate Valve's own bugfix (introduced in 2112) which clears it in +		// CDirector::Reset(). +		if (has_vtidx_GetEngineBuildNumber && +				GetEngineBuildNumber(engclient) < 2112) { +			FinaleEscapeState = mem_offset(director, off_FinaleEscapeState); +		}  	}  	return FEAT_OK;  } @@ -277,6 +277,7 @@ static const char *updatenotes = "\  * Increased sst_mouse_factor limit from 20 to 100\n\  * sst_l4d_testwarp now performs the take-control unsticking step by default\n\  * Added sst_l4d_previewwarp to visualise warp unsticking logic\n\ +* sst_l4d_quickreset now fixes the Swamp Fever/Crash Course \"god mode glitch\"\n\  * Added a fix for lag/stuttering in newer L4D2 versions caused by addon loading\n\  * Added a fix for disabling all addons in L4D2 requiring a game restart\n\  * Removed multiplayer chat rate limit in L4D series and Portal 2\n\  | 
