summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2022-04-25 02:18:46 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2022-04-25 02:18:46 +0100
commit10214f1cfe8f95849a442932d37bb33217d117eb (patch)
treeb371eb021fc109614ec7b53b9d4ce3f5b2dcf987
parent384f441ad171ed9878a1aec8d44e3857edcb0d6f (diff)
Organise general and game-specific fixes
-rw-r--r--src/fixes.c59
-rw-r--r--src/fixes.h5
2 files changed, 36 insertions, 28 deletions
diff --git a/src/fixes.c b/src/fixes.c
index 4f40183..b2f202c 100644
--- a/src/fixes.c
+++ b/src/fixes.c
@@ -35,8 +35,8 @@ static void unhide(const char *name) {
chflags(name, CON_HIDDEN | CON_DEVONLY, 0);
}
-void fixes_apply(void) {
- // expose all the demo stuff, for games like L4D that hide it for some
+static void generalfixes(void) {
+ // Expose all the demo stuff, for games like L4D that hide it for some
// reason.
unhide("demo_debug");
unhide("demo_fastforwardfinalspeed");
@@ -49,7 +49,7 @@ void fixes_apply(void) {
unhide("demo_quitafterplayback");
unhide("demo_interpolateview");
- // handy console stuff
+ // some handy console stuff
unhide("con_filter_enable");
unhide("con_filter_text");
unhide("con_filter_text_out");
@@ -69,7 +69,9 @@ void fixes_apply(void) {
// a game will want to require demos only (probably not till demos are more
// robust anyway... whatever)
chflags("developer", CON_HIDDEN | CON_DEVONLY, CON_DEMO);
+}
+static void l4d2specific(void) {
// L4D2 doesn't let you set sv_cheats in lobbies, but turns out it skips all
// the lobby checks if this random command is developer-only, presumably
// because that flag is compiled out in debug builds and devs want to be
@@ -88,13 +90,11 @@ void fixes_apply(void) {
// constrain it so we don't enable a configuration that isn't already
// possible on these earlier versions (who knows if that breaks
// something...).
- if (GAMETYPE_MATCHES(L4D2x)) {
- struct con_var *v = con_findvar("mat_queue_mode");
- if (v && !(v->parent->base.flags & CON_ARCHIVE)) { // not already fixed
- v->parent->base.flags = v->parent->base.flags
- & ~(CON_HIDDEN | CON_DEVONLY) | CON_ARCHIVE;
- v->parent->hasmax = true; v->parent->maxval = 0;
- }
+ struct con_var *v = con_findvar("mat_queue_mode");
+ if (v && !(v->parent->base.flags & CON_ARCHIVE)) { // not already fixed
+ v->parent->base.flags = v->parent->base.flags &
+ ~(CON_HIDDEN | CON_DEVONLY) | CON_ARCHIVE;
+ v->parent->hasmax = true; v->parent->maxval = 0;
}
#ifdef _WIN32
@@ -103,29 +103,34 @@ void fixes_apply(void) {
// to detect device IDs to enable it on, but new devices are still broken,
// so just blanket enable it if the primary adapter is Intel, since it
// doesn't seem to break anything else anyway.
- if (GAMETYPE_MATCHES(L4D2x)) {
- struct con_var *v = con_findvar("mat_tonemapping_occlusion_use_stencil");
- if (!v || con_getvari(v)) goto e;
- // considered getting d3d9 object from actual game, but it's way easier
- // to just create another one
- IDirect3D9 *d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
- if (!d3d9) goto e;
- D3DADAPTER_IDENTIFIER9 ident;
- if (IDirect3D9_GetAdapterIdentifier(d3d9, 0, 0, &ident) == D3D_OK &&
- ident.VendorId == 0x8086) { // neat vendor id, btw!
- con_setvari(v, 1);
- }
- IDirect3D9_Release(d3d9);
-e:; }
+ v = con_findvar("mat_tonemapping_occlusion_use_stencil");
+ if (!v || con_getvari(v)) goto e;
+ // considered getting d3d9 object from actual game, but it's way easier
+ // to just create another one
+ IDirect3D9 *d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
+ if (!d3d9) goto e;
+ D3DADAPTER_IDENTIFIER9 ident;
+ if (IDirect3D9_GetAdapterIdentifier(d3d9, 0, 0, &ident) == D3D_OK &&
+ ident.VendorId == 0x8086) { // neat vendor id, btw!
+ con_setvari(v, 1);
+ }
+ IDirect3D9_Release(d3d9);
+e:;
#endif
+}
+static void l4d1specific(void) {
// For some reason, L4D1 hides mat_monitorgamma and doesn't archive it.
// This means on every startup it's necessary to manually set non-default
// values via the menu. This change here brings it in line with pretty much
// all other Source games for convenience.
- if (GAMETYPE_MATCHES(L4D1)) {
- chflags("mat_monitorgamma", CON_HIDDEN | CON_DEVONLY, CON_ARCHIVE);
- }
+ chflags("mat_monitorgamma", CON_HIDDEN | CON_DEVONLY, CON_ARCHIVE);
+}
+
+void fixes_apply(void) {
+ generalfixes();
+ if (GAMETYPE_MATCHES(L4D1)) l4d1specific();
+ else if (GAMETYPE_MATCHES(L4D2x)) l4d2specific();
}
// vi: sw=4 ts=4 noet tw=80 cc=80
diff --git a/src/fixes.h b/src/fixes.h
index 0e6764d..4733957 100644
--- a/src/fixes.h
+++ b/src/fixes.h
@@ -14,7 +14,10 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* Makes a best-effort attempt to fix up random annoyances in some games. */
+/*
+ * Makes a best-effort attempt to fix up random bugs and annoyances in some
+ * games. If anything fails, it's just ignored.
+ */
void fixes_apply(void);
// vi: sw=4 ts=4 noet tw=80 cc=80