Black Mesa support - #78
MyGamepedia wants to merge 11 commits into
Conversation
AMBuildScript: - now compiles black mesa. configure.py - should work now AMBuilder: - split bms and tf2 things, tf2 gameruls and tf2 nav/area to tf2, bms nav/area to bms cbasenpc_internal.cpp: - tf2 gamerules stuff is now under macro extension.cpp: - tf2 stuff under tf2 macro - proper unload so if it doesn't load it doesn't crash the game helpers.cpp: - iirc the changes for 1.12 compile natives.cpp: - removed double basecombatcharacter::setup natives\bms: - black mesa has custom classes for CNavMesh/CNavArea with CBlackMesa prefix. entityfactory.cpp, behavior.cpp: - changed context->GetContext() to context so it can compile nav.cpp: - split bms and tf2 nav.cpp version via macro takedamageinfo.cpp: - throw error for black mesa if used GettDamageForForceCalc/SetDamageForForceCalc serialrefresher.cpp: - used different algorithm to get framesnapshotmanager in bms baseanimating.cpp, baseanimating.h: - bms wil use offset for CBaseAnimating::mSequenceDuration - used different algorithm to get GetAnimationEvent in bms baseentity.cpp, baseentity.h: - new code to get CBaseEntity::PhysicsMarkEntitiesAsTouching and g_TouchTrace. - black mesa will use trigger_auto_crouch for BEGIN_VAR instead of trigger_stun. - added CBaseEntity::SDK_OnUnload() for proper unload. bms_nav_area.h: - CBlackMesaNavArea class. nav_mesh.cpp: - will give more info when unloaded for CNavMesh::Load reasons. takedamageinfo.cpp: - m_flDamageForForce moved as tf2 only. toolsnav_mesh.h: - added "vstdlib/random.h" to compile. cbasenpc.txt: - new data + fixes to prev commit PackageScript: - bms folder included bms\nav.inc: - methodmap for CBlackMesaNavArea
black mesa doesn't always use lowercase only classnames, so newlights and gonarch doesn't appear, newlight_point will appear but newLight_Point won't (the second case used by maps). this fixes the issue.
nav area map crash fix, fixed offsets for UpdateLastKnownArea and OnNavAreaChanged, nextbot spawn crashes
- fixed "Host_Error: DLL_SetView: not a client" error, the reason is silly... the sign was for OnRestore and not for LookupPoseParameter, i wasted my entire day on this... - cbasenpc_example.sp now will compile. - added bmsnavtest.sp for black mesa nav mesh/area test goals.
- Now the compiler will split Black Mesa and TF2 features, this is taked from SourceCoop. By default, TF2 version compiled. Currently this affect activity.inc file include and damage crit type natives. - Moved TF2 activity.inc version to tf subfolder. - moved bmsnavtest.sp. - added cbasenpc_bmsnavtest.sp to AMBuilder from scripting folder.
Even if it's half broken/no linux support, PR like these are always a welcomed addition. I'm quite busy currently, so I'm going to review the PR over several days. Still thanks for your work! |
Kenzzer
left a comment
There was a problem hiding this comment.
And here's the review, thank you for your work.
Added Kenzzer requested changes, added Devin (AI) review red flag requested changes (see pluginentityfactory.cpp list of changes), fixed plugin compile time issues. I also reworked a bit the way extension loads itself, so it can be safe and work properly for SourceMod forks that support very early plugin loads (before a valid map is available). Full list of changes: cbasenpc.inc: - All things like "const Thing INVALID_THING= view_as<Thing>(-1);" are now replaced with "#define INVALID_THING view_as<Thing>(-1)", so 1.13 can compile. - Added forward OnCBaseNPCInitialized() that fires when all offsets and data are loaded, fired only once, allows safe classes setup for plugins. baseanimating.inc: - Solved compile error caused by using "tf2/activity.inc" and not "tf/activity.inc". baseanimatingoverlay.inc: - Now CAnimationOverlay doesn't prevent 1.13 compile due to some errors. baseentity.inc: - Removed RefreshNetwork native, because removed entire serialrefresher (asked by Kenzzer). takedamageinfo.inc: - Changed returrn value from float to int for GetDamageCustom(), this is duplicate of TF2-DMB#79. cbasenpc.txt: - Removed everything related to snapshot manager. - Reworked the way TheNavAreas and TheNavMesh are loaded. - Removed sign of CBaseAnimating::SequenceDuration for Black Mesa. Not used. AMBuilder: - Removed serialrefresher.cpp from the list. extension: - Reworked how extension loads in case engine doesn't provide entity slots when it's loaded, this is needed for SourceMod forks that can launch extensions and plugins before a valid map is available, otherwise the entire game will crash with "ED_Alloc: No edicts yet" engine error, because extension attempts to create a few entities for data. If engine->GetEntityCount() < 1, extension creates a temp hook on IServerGameDLL::LevelInit, once it happens - it loads data that needs an active server with valid map, this still happens before entity lump read. The hook removes itself once fired. - Dummy NPC test is moved to TestDummyNPC() method, I also added nullptr checks to make it safe. - SDK_OnUnload() now removes hook (in case it isn't), checks if certain data loaded. - Data load that needs a valid map is moved now to Initialize(char* error, size_t maxlength) method. - Added a few blanks for IntervalTimer datamap, so extension can be compiled for Black Mesa. extension.h: - Added new methods and m_iLevelInitHookID var that stores LevelInit hook ID, used to remove the hook later. \NextBotGroundLocomotion.h: - Removed hack for fixed timer size under Black Mesa. nav_mesh.cpp/.h: - New load method for TheNavMesh and TheNavAreas. - CNavMesh::SDK_OnUnload renamed to CNavMesh::Unload. nav_area.h: - Used the same code to get m_hidingSpots for for TF2 and Black Mesa. baseentity.cpp/.h: - Used trigger entity for both TF2 and Black Mesa instead of using trigger_auto_crouch for Black Mesa and trigger_stun for TF2. - CBaseEntity::SDK_OnUnload renamed to CBaseEntity::Unload. serialrefresher.cpp/.h: - Both files are now removed, requested by reviewer. pluginentityfactory.cpp: - CPluginEntityFactories::CPluginEntityFactories now sets nulls for m_FactoryType, m_fwdInstalledFactory, m_fwdUninstalledFactory. - CPluginEntityFactories::Init now removes hooks in case registration returned 0. - CPluginEntityFactories::SDK_OnAllLoaded fires OnCBaseNPCInitialized as the save point for all plugins, this ensures that all necessary data is loaded and new classes creation will be safe. - CPluginEntityFactories::SDK_OnUnload nulls some data and removes hooks. takedamageinfo.cpp: - Changed "CTakeDamageInfo.GetDamageForForceCalc is only supported in TF2." to "Not supported for this mod.". cbasenpc.cpp: - Now it checks if it's safe to create base_npc (just in case). baseentity.cpp: - Removed RefreshNetwork native. helpers.cpp/.h: - Removed GetFunctionByNameEx.
|
@Kenzzer I'm sorry for such a long delay, I was doing some things that made this project not a priority for me, although I made half of the changes from the previous ones a long time ago. |
Full Black Mesa support, a couple of bug fixes, added Black Mesa nav mesh/area features. Compiles under SourceMod 1.12.
Everything was tested on Windows build, the Linux build needs some tests (cuz i was unable):
It's also better to check if TF2 build is working without errors.
Includes cbasenpc_bmsnavtest, so you can test bms nav features pretty quickly.
I expect this needs a review, I'm not too familiar with how extensions are coded, so I guess some things could be done better, but at very least, the Windows build is working pretty well. Didn't test absolutely everything, but overall I'm happy with how it works. Here is demo I used for the extension abilities showcase in Crowbar/HECU Collective discord servers: https://youtu.be/zxkjcR4G7MQ
Full changes log:
cbasenpc.txt:
AMBuildScript:
configure.py:
AMBuilder:
cbasenpc_internal.cpp:
extension.cpp:
helpers.cpp:
natives.cpp:
natives\bms:
entityfactory.cpp, behavior.cpp:
nav.cpp:
takedamageinfo.cpp:
serialrefresher.cpp:
baseanimating.cpp, baseanimating.h:
baseentity.cpp, baseentity.h:
bms_nav_area.h:
nav_mesh.cpp:
takedamageinfo.cpp:
toolsnav_mesh.h:
cbasenpc.txt:
PackageScript:
bms\nav.inc:
pluginentityfactory.h:
NextBotEventResponderInterface.h:
nav_area.h:
NextBotGroundLocomotion.h:
bms/activity.inc:
cbasenpc.inc:
baseanimating.inc:
takedamageinfo.inc:
cbasenpc_bmsnavtest.sp:
Update:
Added Kenzzer requested changes, added Devin (AI) review red flag requested changes (see pluginentityfactory.cpp list of changes), fixed plugin compile time issues. I also reworked a bit the way extension loads itself, so it can be safe and work properly for SourceMod forks that support very early plugin loads (before a valid map is available).
Full list of changes:
cbasenpc.inc:
baseanimating.inc:
baseanimatingoverlay.inc:
baseentity.inc:
takedamageinfo.inc:
cbasenpc.txt:
AMBuilder:
extension:
extension.h:
\NextBotGroundLocomotion.h:
nav_mesh.cpp/.h:
nav_area.h:
baseentity.cpp/.h:
serialrefresher.cpp/.h:
pluginentityfactory.cpp:
takedamageinfo.cpp:
cbasenpc.cpp:
baseentity.cpp:
helpers.cpp/.h: