diff options
author | Willian Henrique <wsimanbrazil@yahoo.com.br> | 2022-11-15 21:19:47 -0300 |
---|---|---|
committer | Michael Smith <mikesmiffy128@gmail.com> | 2023-05-04 23:49:27 +0100 |
commit | 245f63c4a58b36dc46731758063c03aba2d3ec06 (patch) | |
tree | b93dd8bffa00e1f1208bc05be1aa429022f7807a /src | |
parent | ab485b730f6407c668fc26e5e9c665d03650960a (diff) |
Improve L4D2 and Portal gametype detection
Adds tags for L4D2 2147 and Portal 3420. Committer's note: really the
gamedata system might benefit from improvement in the future to support
things like numerical ranges, but this will do for now.
Diffstat (limited to 'src')
-rw-r--r-- | src/engineapi.c | 21 | ||||
-rw-r--r-- | src/gametype.h | 6 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/engineapi.c b/src/engineapi.c index 0511c7d..d4ee742 100644 --- a/src/engineapi.c +++ b/src/engineapi.c @@ -1,5 +1,6 @@ /* * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com> + * Copyright © 2023 Willian Henrique <wsimanbrazil@yahoo.com.br> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -44,8 +45,6 @@ void *inputsystem, *vgui; DECL_VFUNC_DYN(void *, GetAllServerClasses) -DECL_VFUNC(int, GetEngineBuildNumber_newl4d2, 99) // duping gamedata entry, yuck - #include <entpropsinit.gen.h> bool engineapi_init(int pluginver) { @@ -88,16 +87,18 @@ bool engineapi_init(int pluginver) { // detect p1 for the benefit of specific features if (!GAMETYPE_MATCHES(Portal2) && con_findcmd("upgrade_portalgun")) { _gametype_tag |= _gametype_tag_Portal1; + if (!con_findvar("tf_arena_max_streak")) { + _gametype_tag |= _gametype_tag_Portal1_3420; + } } - // Ugly HACK: we want to call GetEngineBuildNumber to find out if we're on a - // Last Stand version (because they changed entity vtables for some reason), - // but that function also got moved in 2.0.4.1 which means we can't call it - // till gamedata is set up, so we have to have a bit of redundant logic here - // to bootstrap things. - if (GAMETYPE_MATCHES(L4D2) && GAMETYPE_MATCHES(Client013) && - GetEngineBuildNumber_newl4d2(engclient) >= 2200) { - _gametype_tag |= _gametype_tag_TheLastStand; + if (GAMETYPE_MATCHES(L4D2)) { + if (con_findvar("director_cs_weapon_spawn_chance")) { + _gametype_tag |= _gametype_tag_TheLastStand; + } + else if (con_findvar("sv_zombie_touch_trigger_delay")) { + _gametype_tag |= _gametype_tag_L4D2_2147; + } } // need to do this now; ServerClass network table iteration requires diff --git a/src/gametype.h b/src/gametype.h index 2464000..ad6d67d 100644 --- a/src/gametype.h +++ b/src/gametype.h @@ -1,5 +1,6 @@ /* * Copyright © 2022 Michael Smith <mikesmiffy128@gmail.com> + * Copyright © 2023 Willian Henrique <wsimanbrazil@yahoo.com.br> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -49,7 +50,10 @@ extern u64 _gametype_tag; #define _gametype_tag_SrvDLL009 (1 << 14) // 2013-ish #define _gametype_tag_SrvDLL005 (1 << 15) // mostly everything else, it seems -#define _gametype_tag_TheLastStand (1 << 16) /* The JAiZ update */ +/* games needing version-specific stuff */ +#define _gametype_tag_Portal1_3420 (1 << 16) +#define _gametype_tag_L4D2_2147 (1 << 17) +#define _gametype_tag_TheLastStand (1 << 18) /* The JAiZ update */ /* Matches for any multiple possible tags */ #define _gametype_tag_L4D (_gametype_tag_L4D1 | _gametype_tag_L4D2) |