From 1d8a6768aaf8cb7a4528e5a21791191010878d1c Mon Sep 17 00:00:00 2001 From: Giegue Date: Mon, 24 Apr 2023 01:30:52 -0300 Subject: [PATCH] Fix monster blood not working. Fix monster hitboxes not working. --- src/dlls/combat.cpp | 19 +++++++++---------- src/dlls/dllapi.cpp | 13 +++++++++---- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/dlls/combat.cpp b/src/dlls/combat.cpp index ecb3e57..b38ebd7 100644 --- a/src/dlls/combat.cpp +++ b/src/dlls/combat.cpp @@ -30,8 +30,7 @@ #include "weapons.h" #include "func_break.h" -const Vector g_vecZero = Vector(0,0,0); -Vector g_vecAttackDir; +extern DLL_GLOBAL Vector g_vecAttackDir; entvars_t *g_pevLastInflictor; #define HUMAN_GIB_COUNT 6 @@ -1322,33 +1321,33 @@ void CMBaseMonster :: TraceAttack( entvars_t *pevAttacker, float flDamage, Vecto if ( pev->takedamage ) { m_LastHitGroup = ptr->iHitgroup; - -/*jlb + + // do we need the hitboxes to be customizable? use vanilla HL skill.cfg for now switch ( ptr->iHitgroup ) { case HITGROUP_GENERIC: break; case HITGROUP_HEAD: - flDamage *= gSkillData.monHead; + flDamage *= 3; //gSkillData.monHead; break; case HITGROUP_CHEST: - flDamage *= gSkillData.monChest; + flDamage *= 1; //gSkillData.monChest; break; case HITGROUP_STOMACH: - flDamage *= gSkillData.monStomach; + flDamage *= 1; //gSkillData.monStomach; break; case HITGROUP_LEFTARM: case HITGROUP_RIGHTARM: - flDamage *= gSkillData.monArm; + flDamage *= 1; //gSkillData.monArm; break; case HITGROUP_LEFTLEG: case HITGROUP_RIGHTLEG: - flDamage *= gSkillData.monLeg; + flDamage *= 1; //gSkillData.monLeg; break; default: break; } -jlb*/ + SpawnBlood(ptr->vecEndPos, BloodColor(), flDamage);// a little surface blood. TraceBleed( flDamage, vecDir, ptr, bitsDamageType ); AddMultiDamage( pevAttacker, this->edict(), flDamage, bitsDamageType ); diff --git a/src/dlls/dllapi.cpp b/src/dlls/dllapi.cpp index 410db05..78eb2e4 100644 --- a/src/dlls/dllapi.cpp +++ b/src/dlls/dllapi.cpp @@ -298,7 +298,7 @@ void check_monster_hurt(edict_t *pAttacker) vecSpot = vecSrc + gpGlobals->v_forward * distance; // trace a line ignoring enemies body... - UTIL_TraceLine ( vecSrc, vecSpot, dont_ignore_monsters, pent, &tr ); + UTIL_TraceLine ( vecSrc, vecSpot, dont_ignore_monsters, pAttacker, &tr ); damage = pent->v.fuser4 - pent->v.health; @@ -795,7 +795,6 @@ void check_respawn(void) } } - DLL_GLOBAL short g_sModelIndexFireball;// holds the index for the fireball DLL_GLOBAL short g_sModelIndexSmoke;// holds the index for the smoke cloud DLL_GLOBAL short g_sModelIndexTinySpit;// holds the index for the spore grenade explosion @@ -807,6 +806,11 @@ DLL_GLOBAL short g_sModelIndexLaser;// holds the index for the laser beam DLL_GLOBAL const char *g_pModelNameLaser = "sprites/laserbeam.spr"; DLL_GLOBAL short g_sModelIndexLaserDot;// holds the index for the laser beam dot +// globals.cpp +DLL_GLOBAL const Vector g_vecZero = Vector(0, 0, 0); // null vector +DLL_GLOBAL Vector g_vecAttackDir; // attack direction + + void world_precache(void) { g_sModelIndexFireball = PRECACHE_MODELINDEX("sprites/zerogxplode.spr");// fireball @@ -1254,10 +1258,11 @@ int mmDispatchSpawn( edict_t *pent ) } // free any allocated keyvalue memory - for (index = 0; index < monster_spawn_count; index++) + for (index = 0; index < MAX_MONSTERS; index++) { - if (monster_spawnpoint[index].keyvalue) + if (monster_spawnpoint[index].keyvalue != NULL) free(monster_spawnpoint[index].keyvalue); + monster_spawnpoint[index].keyvalue = NULL; } // do level initialization stuff here...