CBaseCombatCharacter::ThrowDirForWeaponStrip
0x005f4130 · 974 bytes · __thiscall
_ZN20CBaseCombatCharacter22ThrowDirForWeaponStripEP17CBaseCombatWeaponRK6VectorPS2_
Decompiled
undefined (4 params)
/* CBaseCombatCharacter::ThrowDirForWeaponStrip(CBaseCombatWeapon*, Vector const&, Vector*) */
void __thiscall
CBaseCombatCharacter::ThrowDirForWeaponStrip
(CBaseCombatCharacter *this,CBaseCombatWeapon *param_1,Vector *param_2,Vector *param_3)
{
float fVar1;
float fVar2;
float fVar3;
char cVar4;
float *pfVar5;
longdouble lVar6;
float local_118;
undefined4 local_114;
undefined4 local_110;
CTraceFilterSimple local_10c [16];
float local_fc;
uint local_f8;
uint local_f4;
float local_f0;
uint local_ec;
uint local_e8;
uint local_e4;
float local_e0;
undefined4 local_dc;
uint local_d8;
float local_d4;
undefined4 local_d0;
float local_cc;
undefined4 local_c8;
undefined4 local_c4;
float local_bc;
float local_b8;
float local_b4;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
VMatrix local_70 [12];
Vector local_64 [32];
float local_44;
char local_39;
if ((*(char **)(param_1 + 0x7c) != "weapon_physcannon") &&
(cVar4 = CBaseEntity::ClassMatchesComplex((CBaseEntity *)param_1,"weapon_physcannon"),
cVar4 == '\0')) {
lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xc2700000,0x42700000);
MatrixBuildRotateZ(local_70,(float)lVar6);
Vector3DMultiply(local_70,param_2,param_3);
lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf000000,0x3f000000);
*(float *)(param_3 + 8) = (float)lVar6;
VectorNormalize(param_3);
return;
}
if (*(int *)(hl2_episodic._28_4_ + 0x30) != 0) {
pfVar5 = &local_fc;
(**(code **)(*(int *)this + 0x234))(&local_118,this);
local_f8 = *(uint *)(param_2 + 4);
local_fc = *(float *)param_2;
local_f4 = *(uint *)(param_2 + 8);
local_f0 = -local_fc;
local_ec = local_f8 ^ 0x80000000;
local_e8 = *(uint *)(param_2 + 8) ^ 0x80000000;
local_e4 = local_f8;
local_e0 = -local_fc;
local_dc = 0;
local_d8 = local_f8 ^ 0x80000000;
local_d4 = local_fc;
local_d0 = 0x80000000;
do {
fVar1 = *pfVar5;
local_94 = 0;
fVar2 = pfVar5[1];
local_88 = 1;
local_bc = fVar1 * 48.0;
fVar3 = pfVar5[2];
local_b8 = fVar2 * 48.0;
local_b4 = fVar3 * 48.0;
local_cc = local_118;
local_c4 = local_110;
local_98 = 0;
local_9c = 0;
local_8c = 0;
local_a4 = 0;
local_a8 = 0;
local_ac = 0;
local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
local_c8 = local_114;
CTraceFilterSimple::CTraceFilterSimple
(local_10c,(IHandleEntity *)this,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,0x400b,local_10c,local_70);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)local_70,local_64,0xff,0,0,true,-1.0);
}
if ((local_39 == '\0') && (local_44 == 1.0)) {
*(float *)param_3 = fVar1;
*(float *)(param_3 + 8) = fVar3;
*(float *)(param_3 + 4) = fVar2;
return;
}
pfVar5 = pfVar5 + 3;
} while (pfVar5 != &local_cc);
}
*(undefined4 *)param_3 = *(undefined4 *)param_2;
*(undefined4 *)(param_3 + 4) = *(undefined4 *)(param_2 + 4);
*(undefined4 *)(param_3 + 8) = *(undefined4 *)(param_2 + 8);
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.