Studio_SeqAnims
0x00b95330 · 636 bytes · __cdecl
_Z15Studio_SeqAnimsPK10CStudioHdrR16mstudioseqdesc_tiPKfPP17mstudioanimdesc_tPf
Decompiled
undefined (6 params)
/* Studio_SeqAnims(CStudioHdr const*, mstudioseqdesc_t&, int, float const*, mstudioanimdesc_t**,
float*) */
void Studio_SeqAnims(CStudioHdr *param_1,mstudioseqdesc_t *param_2,int param_3,float *param_4,
mstudioanimdesc_t **param_5,float *param_6)
{
int iVar1;
mstudioanimdesc_t *pmVar2;
int iVar3;
int local_2c;
int local_28;
float local_24;
float local_20 [4];
if (param_1 != (CStudioHdr *)0x0) {
iVar1 = CStudioHdr::GetNumSeq(param_1);
if (param_3 < iVar1) {
local_2c = 0;
local_28 = 0;
local_24 = 0.0;
local_20[0] = 0.0;
Studio_LocalPoseParameter(param_1,param_4,param_2,param_3,0,&local_24,&local_2c);
Studio_LocalPoseParameter(param_1,param_4,param_2,param_3,1,local_20,&local_28);
iVar1 = local_2c;
if (*(int *)(param_2 + 0x44) <= local_2c) {
iVar1 = *(int *)(param_2 + 0x44) + -1;
}
iVar3 = local_28;
if (*(int *)(param_2 + 0x48) <= local_28) {
iVar3 = *(int *)(param_2 + 0x48) + -1;
}
iVar1 = CStudioHdr::iRelativeAnim
(param_1,param_3,
(int)*(short *)(param_2 +
*(int *)(param_2 + 0x3c) +
(iVar1 + iVar3 * *(int *)(param_2 + 0x44)) * 2));
pmVar2 = (mstudioanimdesc_t *)CStudioHdr::pAnimdesc(param_1,iVar1);
*param_5 = pmVar2;
*param_6 = (1.0 - local_20[0]) * (1.0 - local_24);
iVar1 = local_2c + 1;
if (*(int *)(param_2 + 0x44) <= local_2c + 1) {
iVar1 = *(int *)(param_2 + 0x44) + -1;
}
iVar3 = local_28;
if (*(int *)(param_2 + 0x48) <= local_28) {
iVar3 = *(int *)(param_2 + 0x48) + -1;
}
iVar1 = CStudioHdr::iRelativeAnim
(param_1,param_3,
(int)*(short *)(param_2 +
*(int *)(param_2 + 0x3c) +
(iVar1 + iVar3 * *(int *)(param_2 + 0x44)) * 2));
pmVar2 = (mstudioanimdesc_t *)CStudioHdr::pAnimdesc(param_1,iVar1);
param_5[1] = pmVar2;
param_6[1] = (1.0 - local_20[0]) * local_24;
iVar1 = local_2c;
if (*(int *)(param_2 + 0x44) <= local_2c) {
iVar1 = *(int *)(param_2 + 0x44) + -1;
}
iVar3 = local_28 + 1;
if (*(int *)(param_2 + 0x48) <= local_28 + 1) {
iVar3 = *(int *)(param_2 + 0x48) + -1;
}
iVar1 = CStudioHdr::iRelativeAnim
(param_1,param_3,
(int)*(short *)(param_2 +
*(int *)(param_2 + 0x3c) +
(iVar1 + iVar3 * *(int *)(param_2 + 0x44)) * 2));
pmVar2 = (mstudioanimdesc_t *)CStudioHdr::pAnimdesc(param_1,iVar1);
param_5[2] = pmVar2;
param_6[2] = (1.0 - local_24) * local_20[0];
iVar1 = local_2c + 1;
if (*(int *)(param_2 + 0x44) <= local_2c + 1) {
iVar1 = *(int *)(param_2 + 0x44) + -1;
}
iVar3 = local_28 + 1;
if (*(int *)(param_2 + 0x48) <= local_28 + 1) {
iVar3 = *(int *)(param_2 + 0x48) + -1;
}
iVar1 = CStudioHdr::iRelativeAnim
(param_1,param_3,
(int)*(short *)(param_2 +
*(int *)(param_2 + 0x3c) +
(iVar1 + iVar3 * *(int *)(param_2 + 0x44)) * 2));
pmVar2 = (mstudioanimdesc_t *)CStudioHdr::pAnimdesc(param_1,iVar1);
param_5[3] = pmVar2;
param_6[3] = local_20[0] * local_24;
return;
}
}
param_6[3] = 0.0;
param_6[2] = 0.0;
param_6[1] = 0.0;
*param_6 = 0.0;
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.