RenderWireframeSweptBox
0x002898f0 · 1883 bytes · __cdecl
_Z23RenderWireframeSweptBoxRK6VectorS1_RK6QAngleS1_S1_5Colorb
Decompiled
undefined (7 params)
/* RenderWireframeSweptBox(Vector const&, Vector const&, QAngle const&, Vector const&, Vector
const&, Color, bool) */
void RenderWireframeSweptBox
(float *param_1,float *param_2,QAngle *param_3,float *param_4,float *param_5,
undefined4 param_6,char param_7)
{
ushort *puVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
char cVar9;
int *piVar10;
int *piVar11;
undefined4 *puVar12;
undefined4 uVar13;
int iVar14;
uint uVar15;
int iVar16;
float *pfVar17;
int iVar18;
undefined4 *puVar19;
uint uVar20;
uint uVar21;
bool bVar22;
byte bVar23;
float fVar24;
float local_2c0;
float local_2bc;
float local_2b8;
float afStack_2b4 [8];
matrix3x4_t local_294 [48];
float local_264 [24];
undefined4 local_204 [39];
int local_168;
int local_164;
int local_160;
int local_154;
int *local_150;
undefined4 local_14c;
char local_148;
int local_144;
int local_138;
int *local_134;
int local_130;
int local_12c;
int local_128;
int local_124;
undefined4 local_120;
undefined4 local_11c;
undefined4 local_118;
undefined1 local_114;
undefined4 local_110 [19];
undefined4 local_c4;
uint local_c0;
undefined4 local_bc;
undefined4 local_b0;
undefined4 local_ac;
undefined4 local_a4 [8];
undefined4 local_84 [6];
int *local_6c;
undefined1 local_68;
undefined4 local_64;
int local_60;
undefined4 local_5c;
undefined4 local_58;
undefined4 local_54;
undefined4 local_50;
undefined4 local_4c [8];
undefined4 local_2c;
int local_28;
int local_24;
bVar23 = 0;
InitializeStandardMaterials();
piVar10 = (int *)(**(code **)(*g_pMaterialSystem + 0x180))(g_pMaterialSystem);
if (piVar10 != (int *)0x0) {
/* try { // try from 00289926 to 00289928 has its CatchHandler @ 0028a06b */
(**(code **)(*piVar10 + 8))(piVar10);
}
uVar13 = s_pWireframe;
if (param_7 == '\0') {
uVar13 = s_pWireframeIgnoreZ;
}
/* try { // try from 00289954 to 002899c7 has its CatchHandler @ 0028a0b5 */
(**(code **)(*piVar10 + 0x24))(piVar10,uVar13,0);
AngleMatrix(param_3,local_294);
piVar11 = (int *)(**(code **)(*piVar10 + 0xe8))(piVar10,1,0,0,0);
local_134 = (int *)0x0;
local_130 = 0;
local_12c = 0;
local_124 = 0;
local_120 = 0;
local_11c = 0xffffffff;
local_118 = 0;
local_6c = (int *)0x0;
local_28 = -1;
local_24 = 0;
local_60 = 0;
local_5c = 0;
local_64 = 0;
local_2c = 0;
local_c4 = 0xffffffff;
local_148 = '\x01';
local_14c = 1;
/* try { // try from 00289a81 to 00289e91 has its CatchHandler @ 0028a087 */
local_150 = piVar11;
(**(code **)(*piVar11 + 0x30))(piVar11,1);
(**(code **)(*local_150 + 0x4c))(local_150,0x3c,0x3c,local_204);
local_6c = piVar11;
local_68 = 0;
puVar12 = local_204;
puVar19 = local_110;
for (iVar14 = 0x29; iVar14 != 0; iVar14 = iVar14 + -1) {
*puVar19 = *puVar12;
puVar12 = puVar12 + (uint)bVar23 * -2 + 1;
puVar19 = puVar19 + (uint)bVar23 * -2 + 1;
}
local_134 = piVar11 + 1;
local_12c = 0;
local_144 = local_160;
local_130 = 0x3c;
local_114 = 0;
local_128 = local_168;
local_138 = local_154;
local_124 = 0;
local_64 = 0x3c;
local_60 = 0;
local_c0 = ~-(uint)(local_c0 == 0) & 2;
if (local_28 == -1) {
local_2c = 0;
local_24 = local_168;
local_28 = local_164;
}
local_5c = 0;
local_58 = local_bc;
local_54 = local_b0;
puVar12 = local_a4;
do {
puVar19 = puVar12 + 1;
puVar12[0x16] = *puVar12;
puVar12 = puVar19;
} while (puVar19 != local_84);
pfVar17 = local_264;
uVar15 = 0;
uVar20 = 0;
local_50 = local_ac;
fVar2 = *param_2;
fVar3 = *param_1;
fVar4 = param_2[1];
fVar5 = param_1[1];
fVar6 = param_2[2];
fVar7 = param_1[2];
do {
if ((uVar15 & 1) == 0) {
local_2c0 = *param_4;
if ((uVar15 & 2) == 0) goto LAB_00289cc3;
LAB_00289c10:
local_2bc = param_5[1];
if ((uVar15 & 4) != 0) goto LAB_00289c29;
LAB_00289cdc:
local_2b8 = param_4[2];
}
else {
local_2c0 = *param_5;
if ((uVar15 & 2) != 0) goto LAB_00289c10;
LAB_00289cc3:
local_2bc = param_4[1];
if ((uVar15 & 4) == 0) goto LAB_00289cdc;
LAB_00289c29:
local_2b8 = param_5[2];
}
VectorRotate(&local_2c0,local_294,pfVar17);
fVar24 = (fVar4 - fVar5) * pfVar17[1] + (fVar2 - fVar3) * *pfVar17 +
(fVar6 - fVar7) * pfVar17[2];
afStack_2b4[uVar15] = fVar24;
if (fVar24 < afStack_2b4[uVar20]) {
uVar20 = uVar15;
}
uVar15 = uVar15 + 1;
pfVar17 = pfVar17 + 3;
if (uVar15 == 8) {
DrawAxes(param_1,local_264,uVar20,param_6,local_204);
DrawAxes(param_2,local_264,uVar20 ^ 7,param_6,local_204);
iVar14 = 1;
do {
iVar18 = iVar14 + 1;
uVar21 = 1 << ((char)iVar14 + (char)(iVar14 / 3) * -3 & 0x1fU);
uVar15 = 1 << ((char)iVar18 + (char)(iVar18 / 3) * -3 & 0x1fU);
uVar8 = -uVar21;
if ((uVar20 & uVar21) == 0) {
uVar8 = uVar21;
}
if ((uVar20 & uVar15) != 0) {
uVar15 = -uVar15;
}
iVar16 = uVar20 + uVar8 + uVar15;
DrawExtrusionFace(param_1,param_2,local_264,uVar20 + uVar8,iVar16,param_6,local_204);
DrawExtrusionFace(param_1,param_2,local_264,uVar20 + uVar15,iVar16,param_6,local_204);
bVar22 = iVar14 != 3;
iVar14 = iVar18;
} while (bVar22);
if (local_148 != '\0') {
switch(local_14c) {
case 4:
iVar14 = local_60 * 2 + -2;
break;
case 5:
iVar14 = local_60 * 2;
break;
case 6:
iVar14 = local_60 * 3 + -6;
break;
case 7:
iVar18 = local_60 * 6;
iVar14 = iVar18 + 3;
if (-1 < iVar18) {
iVar14 = iVar18;
}
iVar14 = iVar14 >> 2;
break;
default:
iVar14 = local_60;
break;
case 9:
iVar14 = 0;
}
if (local_138 != 0) {
if (local_130 - local_124 < iVar14) {
iVar14 = local_130 - local_124;
}
if (iVar14 != 0) {
puVar1 = (ushort *)(local_144 + local_124 * 2);
switch(local_14c) {
case 0:
case 9:
break;
default:
GenerateSequentialIndexBuffer(puVar1,iVar14,local_128);
break;
case 4:
/* try { // try from 00289fba to 0028a051 has its CatchHandler @ 0028a087 */
GenerateLineStripIndexBuffer(puVar1,iVar14,local_128);
break;
case 5:
GenerateLineLoopIndexBuffer(puVar1,iVar14,local_128);
break;
case 6:
GeneratePolygonIndexBuffer(puVar1,(int)puVar1,iVar14);
break;
case 7:
GenerateQuadIndexBuffer(puVar1,iVar14,local_128);
}
local_124 = local_124 + iVar14 * local_138;
if (local_12c < local_124) {
local_12c = local_124;
}
}
}
}
(**(code **)(*local_150 + 0x58))(local_150,local_60,local_12c,local_204);
local_134 = (int *)0x0;
local_130 = 0;
local_64 = 0;
local_6c = (int *)0x0;
local_c4 = 0xffffffff;
local_150 = (int *)0x0;
(**(code **)(*piVar11 + 0x34))(piVar11,0xffffffff,0);
if ((local_6c != (int *)0x0) &&
(cVar9 = (**(code **)(*local_6c + 0x10))(local_6c), cVar9 != '\0')) {
(**(code **)(*local_6c + 0x18))(local_6c);
}
if ((local_134 != (int *)0x0) &&
(cVar9 = (**(code **)(*local_134 + 0x10))(local_134), cVar9 != '\0')) {
(**(code **)(*local_134 + 0x18))(local_134);
}
if ((piVar10 != (int *)0x0) && ((**(code **)(*piVar10 + 0xc))(piVar10), piVar10 != (int *)0x0)
) {
(**(code **)(*piVar10 + 4))(piVar10);
}
return;
}
} while( true );
}
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.