typedef struct
{
0 int id;
4 int version;
8 char name[64];
72 int length;
76 vec3_t eyeposition; // ideal eye position
88 vec3_t min; // ideal movement hull size
100 vec3_t max;
112 vec3_t bbmin; // clipping bounding box
124 vec3_t bbmax;
136 int flags;
140 int numbones; // bones
144 int boneindex;
148 int numbonecontrollers; // bone controllers
152 int bonecontrollerindex;
156 int numhitboxes; // complex bounding boxes
160 int hitboxindex;
164 int numseq; // animation sequences
168 int seqindex;
172 int numseqgroups; // demand loaded sequences
176 int seqgroupindex;
int numtextures; // raw textures
int textureindex;
int texturedataindex;
int numskinref; // replaceable textures
int numskinfamilies;
int skinindex;
int numbodyparts;
int bodypartindex;
int numattachments; // queryable attachable points
int attachmentindex;
int soundtable;
int soundindex;
int soundgroups;
int soundgroupindex;
int numtransitions; // animation node to animation node transition graph
int transitionindex;
} studiohdr_t;
// sequence descriptions
typedef struct
{
0 char label[32]; // sequence label
32 float fps; // frames per second
36 int flags; // looping/non-looping flags
40 int activity;
44 int actweight;
48 int numevents;
52 int eventindex;
56 int numframes; // number of frames per sequence
60 int numpivots; // number of foot pivots
64 int pivotindex;
68 int motiontype;
72 int motionbone;
76 vec3_t linearmovement;
88 int automoveposindex;
92 int automoveangleindex;
96 vec3_t bbmin; // per sequence bounding box
108 vec3_t bbmax;
120 int numblends;
124 int animindex; // mstudioanim_t pointer relative to start of sequence group data
// [blend][bone][X, Y, Z, XR, YR, ZR]
128 int blendtype[2]; // X, Y, Z, XR, YR, ZR
136 float blendstart[2]; // starting value
144 float blendend[2]; // ending value
152 int blendparent;
156 int seqgroup; // sequence group for demand loading
160 int entrynode; // transition node at entry
164 int exitnode; // transition node at exit
168 int nodeflags; // transition rules
172 int nextseq; // auto advancing sequences
} mstudioseqdesc_t;
//----- (00082CD4) --------------------------------------------------------
void StudioSetupBones( struct model_s *pModel, float frame, int sequence, const vec3_t angles, const vec3_t origin, const byte *pcontroller, const byte *pblending, int iBone, const edict_t *pEdict );
int __usercall SV_StudioSetupBones
//int __usercall SV_StudioSetupBones
{
int v11; // edi@4
int v12; // ecx@4
int v13; // esi@6
signed int v14; // eax@20
signed int v15; // esi@24
int v16; // ST1FC_4@25
signed int v18; // eax@26
__int16 v19; // fps@27
char v20; // c0@27
char v21; // c2@27
char v22; // c3@27
long double v23; // fst6@28
int v24; // edx@31
int v25; // edi@31
int v26; // ST1B4_4@31
int v27; // esi@31
int v29; // edi@32
int v30; // edx@32
int v31; // ecx@33
int v32; // esi@34
int v33; // edx@44
int v34; // edi@44
int v35; // ST1A4_4@44
int v36; // esi@44
int v38; // edi@45
int v39; // edx@45
int v40; // ecx@46
int v41; // esi@47
int v42; // edx@57
int v43; // edi@57
int v44; // ST194_4@57
int v45; // esi@57
int v47; // edi@58
int v48; // edx@58
int v49; // ecx@59
int v50; // esi@60
int v51; // edx@70
int v52; // edi@70
int v53; // ST184_4@70
int v54; // esi@70
int v56; // edi@72
int v57; // edx@72
int v58; // ecx@73
int v59; // esi@74
int v60; // edx@84
int v61; // edi@84
int v62; // ST168_4@84
int v63; // esi@84
int v65; // edi@85
int v66; // edx@85
int v67; // ecx@86
int v68; // esi@87
int v69; // edx@97
int v70; // edi@97
int v71; // ST158_4@97
int v72; // esi@97
int v74; // edi@98
int v75; // edx@98
int v76; // ecx@99
int v77; // esi@100
int v78; // edx@110
int v79; // edi@110
int v80; // ST148_4@110
int v81; // esi@110
int v83; // edi@111
int v84; // edx@111
int v85; // ecx@112
int v86; // esi@113
int v87; // edx@123
int v88; // edi@123
int v89; // ST138_4@123
int v90; // esi@123
long double v92; // fst6@125
int v93; // edi@126
int v94; // edx@126
int v95; // ecx@127
int v96; // esi@128
int v97; // edx@138
int v98; // edi@138
int v99; // ST11C_4@138
int v100; // esi@138
int v102; // edi@139
int v103; // edx@139
int v104; // ecx@140
int v105; // esi@141
int v106; // edx@151
int v107; // edi@151
int v108; // ST10C_4@151
int v109; // esi@151
int v111; // edi@152
int v112; // edx@152
int v113; // ecx@153
int v114; // esi@154
int v115; // edx@164
int v116; // edi@164
int v117; // STFC_4@164
int v118; // esi@164
int v120; // edi@165
int v121; // edx@165
int v122; // ecx@166
int v123; // esi@167
int v124; // edx@177
int v125; // edi@177
int v126; // STEC_4@177
int v127; // esi@177
int v129; // edi@179
int v130; // edx@179
int v131; // ecx@180
int v132; // esi@181
int v133; // edx@191
int v134; // edi@191
int v135; // STD0_4@191
int v136; // esi@191
int v138; // edi@192
int v139; // edx@192
int v140; // ecx@193
int v141; // esi@194
int v142; // edx@204
int v143; // edi@204
int v144; // STC0_4@204
int v145; // esi@204
int v147; // edi@205
int v148; // edx@205
int v149; // ecx@206
int v150; // esi@207
int v151; // edx@217
int v152; // edi@217
int v153; // STB0_4@217
int v154; // esi@217
int v156; // edi@218
int v157; // edx@218
int v158; // ecx@219
int v159; // esi@220
int v160; // edx@230
int v161; // edi@230
int v162; // STA0_4@230
int v163; // esi@230
float v165; // ST1C8_4@231
float v166; // ST1CC_4@231
int v167; // ecx@233
int v168; // edi@235
int v169; // ST1FC_4@242
int v171; // ecx@249
int *v172; // esi@250
int v173; // edi@252
int v174; // esi@252
int v175; // edx@252
int v176; // esi@254
int v177; // edx@260
int v178; // edi@260
int v179; // ST74_4@260
int v180; // esi@260
char v182; // zf@262
signed int v183; // ecx@262
int v184; // edi@262
int v185; // esi@262
char v186; // zf@268
signed int v187; // ecx@268
int v188; // edi@268
int v189; // esi@268
int v190; // eax@275
int v191; // eax@275
int v192; // eax@278
int result; // eax@280
int v194; // eax@282
int v196; // [sp-20h] [bp-478h]@231
int v197; // [sp-1Ch] [bp-474h]@231
int v198; // [sp-18h] [bp-470h]@231
int v199; // [sp-14h] [bp-46Ch]@231
float v200; // [sp-10h] [bp-468h]@231
char *v201; // [sp-Ch] [bp-464h]@282
int v202; // [sp-8h] [bp-460h]@282
int v203; // [sp+1Ch] [bp-43Ch]@29
int v204; // [sp+20h] [bp-438h]@29
int v205; // [sp+24h] [bp-434h]@29
int v206; // [sp+28h] [bp-430h]@29
float *v207; // [sp+2Ch] [bp-42Ch]@15
int v208; // [sp+30h] [bp-428h]@29
int v209; // [sp+34h] [bp-424h]@29
int v210; // [sp+38h] [bp-420h]@29
int v211; // [sp+3Ch] [bp-41Ch]@29
int v212; // [sp+44h] [bp-414h]@23
char *v213; // [sp+48h] [bp-410h]@15
int v214; // [sp+58h] [bp-400h]@259
signed int v215; // [sp+68h] [bp-3F0h]@249
signed int v216; // [sp+6Ch] [bp-3ECh]@241
int v217; // [sp+78h] [bp-3E0h]@233
signed int v218; // [sp+7Ch] [bp-3DCh]@229
int v219; // [sp+84h] [bp-3D4h]@228
int v220; // [sp+88h] [bp-3D0h]@218
signed int v221; // [sp+8Ch] [bp-3CCh]@216
int v222; // [sp+94h] [bp-3C4h]@215
int v223; // [sp+98h] [bp-3C0h]@205
signed int v224; // [sp+9Ch] [bp-3BCh]@203
int v225; // [sp+A4h] [bp-3B4h]@202
int v226; // [sp+A8h] [bp-3B0h]@192
signed int v227; // [sp+ACh] [bp-3ACh]@190
int v228; // [sp+B4h] [bp-3A4h]@189
int v229; // [sp+C4h] [bp-394h]@179
signed int v230; // [sp+C8h] [bp-390h]@176
int v231; // [sp+D0h] [bp-388h]@175
int v232; // [sp+D4h] [bp-384h]@165
signed int v233; // [sp+D8h] [bp-380h]@163
int v234; // [sp+E0h] [bp-378h]@162
int v235; // [sp+E4h] [bp-374h]@152
signed int v236; // [sp+E8h] [bp-370h]@150
int v237; // [sp+F0h] [bp-368h]@149
int v238; // [sp+F4h] [bp-364h]@139
signed int v239; // [sp+F8h] [bp-360h]@137
int v240; // [sp+100h] [bp-358h]@136
int v241; // [sp+110h] [bp-348h]@126
signed int v242; // [sp+114h] [bp-344h]@122
int v243; // [sp+11Ch] [bp-33Ch]@121
int v244; // [sp+120h] [bp-338h]@111
signed int v245; // [sp+124h] [bp-334h]@109
int v246; // [sp+12Ch] [bp-32Ch]@108
int v247; // [sp+130h] [bp-328h]@98
signed int v248; // [sp+134h] [bp-324h]@96
int v249; // [sp+13Ch] [bp-31Ch]@95
int v250; // [sp+140h] [bp-318h]@85
signed int v251; // [sp+144h] [bp-314h]@83
int v252; // [sp+14Ch] [bp-30Ch]@82
int v253; // [sp+15Ch] [bp-2FCh]@72
signed int v254; // [sp+160h] [bp-2F8h]@69
int v255; // [sp+168h] [bp-2F0h]@68
int v256; // [sp+16Ch] [bp-2ECh]@58
signed int v257; // [sp+170h] [bp-2E8h]@56
int v258; // [sp+178h] [bp-2E0h]@55
int v259; // [sp+17Ch] [bp-2DCh]@45
signed int v260; // [sp+180h] [bp-2D8h]@43
int v261; // [sp+188h] [bp-2D0h]@42
int v262; // [sp+18Ch] [bp-2CCh]@32
signed int v263; // [sp+190h] [bp-2C8h]@30
int v264; // [sp+198h] [bp-2C0h]@29
float v265; // [sp+1A8h] [bp-2B0h]@27
float v266; // [sp+1A8h] [bp-2B0h]@29
float v267; // [sp+1ACh] [bp-2ACh]@27
float v268; // [sp+1ACh] [bp-2ACh]@28
int v269; // [sp+1BCh] [bp-29Ch]@4
int v270; // [sp+1C0h] [bp-298h]@1
int v271; // [sp+1C4h] [bp-294h]@5
int v272; // [sp+1C4h] [bp-294h]@40
int v273; // [sp+1C4h] [bp-294h]@53
int v274; // [sp+1C4h] [bp-294h]@66
int v275; // [sp+1C4h] [bp-294h]@80
int v276; // [sp+1C4h] [bp-294h]@93
int v277; // [sp+1C4h] [bp-294h]@106
int v278; // [sp+1C4h] [bp-294h]@119
int v279; // [sp+1C4h] [bp-294h]@134
int v280; // [sp+1C4h] [bp-294h]@147
int v281; // [sp+1C4h] [bp-294h]@160
int v282; // [sp+1C4h] [bp-294h]@173
int v283; // [sp+1C4h] [bp-294h]@187
int v284; // [sp+1C4h] [bp-294h]@200
int v285; // [sp+1C4h] [bp-294h]@213
int v286; // [sp+1C4h] [bp-294h]@226
int v287; // [sp+1C4h] [bp-294h]@234
int v288; // [sp+1C4h] [bp-294h]@240
int v289; // [sp+1C4h] [bp-294h]@253
int v290; // [sp+1C8h] [bp-290h]@4
int v291; // [sp+1C8h] [bp-290h]@252
int v292; // [sp+1CCh] [bp-28Ch]@4
float v293; // [sp+1D0h] [bp-288h]@23
float v294; // [sp+1D4h] [bp-284h]@21
int v295; // [sp+1D8h] [bp-280h]@23
int v296; // [sp+1D8h] [bp-280h]@240
int v297; // [sp+1D8h] [bp-280h]@280
int v298; // [sp+1DCh] [bp-27Ch]@15
int v299; // [sp+1DCh] [bp-27Ch]@18
int i; // [sp+1DCh] [bp-27Ch]@261
int v301; // [sp+1DCh] [bp-27Ch]@281
float v302; // [sp+1E0h] [bp-278h]@15
float v303; // [sp+1E4h] [bp-274h]@277
float v304; // [sp+1E8h] [bp-270h]@277
__int16 v305; // [sp+1F0h] [bp-268h]@30
__int16 v306; // [sp+1F2h] [bp-266h]@30
__int16 v307; // [sp+1F4h] [bp-264h]@23
__int16 v308; // [sp+1F6h] [bp-262h]@23
float v309; // [sp+200h] [bp-258h]@243
int v310; // [sp+204h] [bp-254h]@22
int boneused[MAXSTUDIOBONES]; //int v311[128]; // [sp+208h] [bp-250h]@16
char v312; // [sp+408h] [bp-50h]@281
float v313; // [sp+414h] [bp-44h]@281
float v314; // [sp+424h] [bp-34h]@281
float v315; // [sp+434h] [bp-24h]@281
char v316; // [sp+438h] [bp-20h]@15
float v317; // [sp+464h] [bp+Ch]@22
/*
//comments
(studiohdr_t *)IEngineStudio.Mod_Extradata (pModel) == (*(int (__cdecl **)(int))&IEngineStudio[12])(a2);
g_pstudiohdr->numbones == *(_DWORD *)(g_pstudiohdr + 140)
g_pstudiohdr->numseq == *(_DWORD *)(g_pstudiohdr + 164) )
g_pstudiohdr->seqindex == *(_DWORD *)(g_pstudiohdr + 168) )
*/
numbones = 0; //v270
g_pstudiohdr = (studiohdr_t *)IEngineStudio.Mod_Extradata (pModel);
if ( sequence < 0 || sequence >= g_pstudiohdr->numseq )
{
sequence = 0;
}
// block 01 start
/*
v11 = g_pstudiohdr;
v290 = 176 * a4 + *(_DWORD *)(g_pstudiohdr + 168) + g_pstudiohdr;
v292 = *(_DWORD *)(v11 + 144) + v11;
v12 = pseqdesc->seqgroup;
v269 = *(_DWORD *)(v11 + 176) + v11 + 104 * v12;
*/
// end
// block 01 start
pseqdesc = (mstudioseqdesc_t *)((byte *)mod_studiohdr + mod_studiohdr->seqindex) + sequence; // v290 = 176 * sequence + g_pstudiohdr->seqindex + g_pstudiohdr;
pbones = (mstudiobone_t *)((byte *)g_pstudiohdr + g_pstudiohdr->boneindex); //v292
v12 = pseqdesc->seqgroup; //pseqdesc->seqgroup;
v269 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v12;
// end
if ( v12 )
{
v13 = *(_DWORD *)(pModel + 124);
if ( !v13 )
{
v13 = (*(int (__cdecl **)(signed int, signed int))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v13;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v13 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v269 + 32, v13 + 4 * pseqdesc->seqgroup);
v271 = *(_DWORD *)(v13 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v271 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( iBone < -1 || iBone >= iBone >= g_pstudiohdr->numbones )
{
iBone = 0;
}
if ( iBone == -1 )
{
numbones = g_pstudiohdr->numbones;
int i = 0;
v213 = &v316; //???
v207 = &v302; //???
if ( numbones > 0 )
{
do
{
boneused[numbones-i-1] = i;
++i;
}
while ( i < g_pstudiohdr->numbones );
}
}
else
{
int i = iBone;
v213 = &v316; //???
v207 = &v302; //???
do
{
boneused[numbones++] = i;
i = pbones[i].parent;
// i = *(_DWORD *)(v292 + 112 * v299 + 32);
}
while ( i != -1 );
}
//comments
v14 = pseqdesc->numframes; // v14 = *(_DWORD *)(v290 + 56);
if ( v14 > 1 )
{
v310 = v14 - 1;
v317 = (long double)(v14 - 1) * frame;
a1 = 0.00390625 * v317;
v294 = a1;
}
else
{
LODWORD(v294) = 0;
}
v307 = v308 | 0xC00;
v310 = (signed int)v294;
v293 = v294 - (long double)v310;
StudioCalcBoneAdj(0.0, v213, pcontroller, pcontroller, 0);
v295 = numbones - 1;
v212 = numbones - 1;
if ( numbones-1 >= 0 )
{
v15 = (signed int)v294;
do
{
v16 = v311[v295];
StudioCalcBoneQuaterion(v15, v293, v292 + 112 * v16, 12 * v16 + v271, v213, &q_454[16 * v16]);
StudioCalcBonePosition(v15, v293, v292 + 112 * v16, 12 * v16 + v271, v213, &pos_453[12 * v16]);
}
while ( v295-- - 1 >= 0 );
}
// blending 9way
if ( pseqdesc->numblends == 9 )
{
float s = GetPlayerYaw(pEdict); //v267
float t = GetPlayerPitch(pEdict); //v265
UNDEF(v19); //???
v20 = 127.0 < v267;
v21 = 0;
v22 = 127.0 == v267;
if ( (HIBYTE(v19) & 0x45) == 1 )
{
v268 = v267 - 127.0 + v267 - 127.0;
v92 = v265;
if ( v265 > 127.0 )
{
v266 = v92 - 127.0 + v92 - 127.0;
v129 = g_pstudiohdr;
v130 = pseqdesc->seqgroup;
v229 = *(_DWORD *)(v129 + 176) + v129 + 104 * v130;
if ( v130 )
{
v132 = *(_DWORD *)(pModel + 124);
if ( !v132 )
{
v132 = (*(int (__cdecl **)(signed int, signed int))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v132;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v132 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v229 + 32, v132 + 4 * pseqdesc->seqgroup);
v131 = *(_DWORD *)(v132 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v131 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 4 )
v283 = v131 + 48 * *(_DWORD *)(v129 + 140);
else
v283 = v131;
v228 = numbones - 1;
v206 = (int)q_454;
v208 = (int)pos_453;
v203 = (int)pos2_455;
v209 = (int)q2_456;
v211 = (int)pos3_457;
v204 = (int)q3_458;
v205 = (int)pos4_459;
v210 = (int)q4_460;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v227 = (signed int)v294;
do
{
v133 = v311[v228];
v134 = 12 * v133;
v135 = 12 * v133 + v283;
v136 = v292 + 112 * v133;
StudioCalcBoneQuaterion(v227, v293, v292 + 112 * v133, 12 * v133 + v283, v213, &q_454[16 * v311[v228]]);
StudioCalcBonePosition(v227, v293, v136, v135, v213, &pos_453[v134]);
}
while ( v228-- - 1 >= 0 );
}
v138 = g_pstudiohdr;
v139 = pseqdesc->seqgroup;
v226 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v139;
if ( v139 )
{
v141 = *(_DWORD *)(pModel + 124);
if ( !v141 )
{
v141 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v141;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v141 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v226 + 32, v141 + 4 * pseqdesc->seqgroup);
v140 = *(_DWORD *)(v141 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v140 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 5 )
v284 = v140 + 60 * *(_DWORD *)(v138 + 140);
else
v284 = v140;
v225 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v224 = (signed int)v294;
do
{
v142 = v311[v225];
v143 = 12 * v142;
v144 = 12 * v142 + v284;
v145 = v292 + 112 * v142;
StudioCalcBoneQuaterion(v224, v293, v292 + 112 * v142, 12 * v142 + v284, v213, &q2_456[16 * v311[v225]]);
StudioCalcBonePosition(v224, v293, v145, v144, v213, &pos2_455[v143]);
}
while ( v225-- - 1 >= 0 );
}
v147 = g_pstudiohdr;
v148 = pseqdesc->seqgroup;
v223 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v148;
if ( v148 )
{
v150 = *(_DWORD *)(pModel + 124);
if ( !v150 )
{
v150 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v150;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v150 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v223 + 32, v150 + 4 * pseqdesc->seqgroup);
v149 = *(_DWORD *)(v150 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v149 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 7 )
v285 = v149 + 84 * *(_DWORD *)(v147 + 140);
else
v285 = v149;
v222 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v221 = (signed int)v294;
do
{
v151 = v311[v222];
v152 = 12 * v151;
v153 = 12 * v151 + v285;
v154 = v292 + 112 * v151;
StudioCalcBoneQuaterion(v221, v293, v292 + 112 * v151, 12 * v151 + v285, v213, &q3_458[16 * v311[v222]]);
StudioCalcBonePosition(v221, v293, v154, v153, v213, &pos3_457[v152]);
}
while ( v222-- - 1 >= 0 );
}
v156 = g_pstudiohdr;
v157 = pseqdesc->seqgroup;
v220 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v157;
if ( v157 )
{
v159 = *(_DWORD *)(pModel + 124);
if ( !v159 )
{
v159 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v159;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v159 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v220 + 32, v159 + 4 * pseqdesc->seqgroup);
v158 = *(_DWORD *)(v159 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v158 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 8 )
v286 = v158 + 96 * *(_DWORD *)(v156 + 140);
else
v286 = v158;
v219 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v218 = (signed int)v294;
do
{
v160 = v311[v219];
v161 = 12 * v160;
v162 = 12 * v160 + v286;
v163 = v292 + 112 * v160;
StudioCalcBoneQuaterion(v218, v293, v292 + 112 * v160, 12 * v160 + v286, v213, &q4_460[16 * v311[v219]]);
StudioCalcBonePosition(v218, v293, v163, v162, v213, &pos4_459[v161]);
}
while ( v219-- - 1 >= 0 );
}
}
else
{
v266 = v92 + v92;
v93 = g_pstudiohdr;
v94 = pseqdesc->seqgroup;
v241 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v94;
if ( v94 )
{
v96 = *(_DWORD *)(pModel + 124);
if ( !v96 )
{
v96 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v96;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v96 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v241 + 32, v96 + 4 * pseqdesc->seqgroup);
v95 = *(_DWORD *)(v96 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v95 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 1 )
v279 = v95 + 12 * *(_DWORD *)(v93 + 140);
else
v279 = v95;
v240 = numbones - 1;
v206 = (int)q_454;
v208 = (int)pos_453;
v203 = (int)pos2_455;
v209 = (int)q2_456;
v211 = (int)pos3_457;
v204 = (int)q3_458;
v205 = (int)pos4_459;
v210 = (int)q4_460;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v239 = (signed int)v294;
do
{
v97 = v311[v240];
v98 = 12 * v97;
v99 = 12 * v97 + v279;
v100 = v292 + 112 * v97;
StudioCalcBoneQuaterion(v239, v293, v292 + 112 * v97, 12 * v97 + v279, v213, &q_454[16 * v311[v240]]);
StudioCalcBonePosition(v239, v293, v100, v99, v213, &pos_453[v98]);
}
while ( v240-- - 1 >= 0 );
}
v102 = g_pstudiohdr;
v103 = pseqdesc->seqgroup;
v238 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v103;
if ( v103 )
{
v105 = *(_DWORD *)(pModel + 124);
if ( !v105 )
{
v105 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v105;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v105 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v238 + 32, v105 + 4 * pseqdesc->seqgroup);
v104 = *(_DWORD *)(v105 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v104 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 2 )
v280 = v104 + 24 * *(_DWORD *)(v102 + 140);
else
v280 = v104;
v237 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v236 = (signed int)v294;
do
{
v106 = v311[v237];
v107 = 12 * v106;
v108 = 12 * v106 + v280;
v109 = v292 + 112 * v106;
StudioCalcBoneQuaterion(v236, v293, v292 + 112 * v106, 12 * v106 + v280, v213, &q2_456[16 * v311[v237]]);
StudioCalcBonePosition(v236, v293, v109, v108, v213, &pos2_455[v107]);
}
while ( v237-- - 1 >= 0 );
}
v111 = g_pstudiohdr;
v112 = pseqdesc->seqgroup;
v235 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v112;
if ( v112 )
{
v114 = *(_DWORD *)(pModel + 124);
if ( !v114 )
{
v114 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v114;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v114 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v235 + 32, v114 + 4 * pseqdesc->seqgroup);
v113 = *(_DWORD *)(v114 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v113 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 4 )
v281 = v113 + 48 * *(_DWORD *)(v111 + 140);
else
v281 = v113;
v234 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v233 = (signed int)v294;
do
{
v115 = v311[v234];
v116 = 12 * v115;
v117 = 12 * v115 + v281;
v118 = v292 + 112 * v115;
StudioCalcBoneQuaterion(v233, v293, v292 + 112 * v115, 12 * v115 + v281, v213, &q3_458[16 * v311[v234]]);
StudioCalcBonePosition(v233, v293, v118, v117, v213, &pos3_457[v116]);
}
while ( v234-- - 1 >= 0 );
}
v120 = g_pstudiohdr;
v121 = pseqdesc->seqgroup;
v232 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v121;
if ( v121 )
{
v123 = *(_DWORD *)(pModel + 124);
if ( !v123 )
{
v123 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v123;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v123 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v232 + 32, v123 + 4 * pseqdesc->seqgroup);
v122 = *(_DWORD *)(v123 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v122 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 5 )
v282 = v122 + 60 * *(_DWORD *)(v120 + 140);
else
v282 = v122;
v231 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v230 = (signed int)v294;
do
{
v124 = v311[v231];
v125 = 12 * v124;
v126 = 12 * v124 + v282;
v127 = v292 + 112 * v124;
StudioCalcBoneQuaterion(v230, v293, v292 + 112 * v124, 12 * v124 + v282, v213, &q4_460[16 * v311[v231]]);
StudioCalcBonePosition(v230, v293, v127, v126, v213, &pos4_459[v125]);
}
while ( v231-- - 1 >= 0 );
}
}
}
else
{
v268 = v267 + v267;
v23 = v265;
if ( v265 > 127.0 )
{
v266 = v23 - 127.0 + v23 - 127.0;
v56 = g_pstudiohdr;
v57 = pseqdesc->seqgroup;
v253 = *(_DWORD *)(v56 + 176) + v56 + 104 * v57;
if ( v57 )
{
v59 = *(_DWORD *)(pModel + 124);
if ( !v59 )
{
v59 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v59;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v59 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v253 + 32, v59 + 4 * pseqdesc->seqgroup);
v58 = *(_DWORD *)(v59 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v58 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 3 )
v275 = v58 + 36 * *(_DWORD *)(v56 + 140);
else
v275 = v58;
v252 = numbones - 1;
v206 = (int)q_454;
v208 = (int)pos_453;
v203 = (int)pos2_455;
v209 = (int)q2_456;
v211 = (int)pos3_457;
v204 = (int)q3_458;
v205 = (int)pos4_459;
v210 = (int)q4_460;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v251 = (signed int)v294;
do
{
v60 = v311[v252];
v61 = 12 * v60;
v62 = 12 * v60 + v275;
v63 = v292 + 112 * v60;
StudioCalcBoneQuaterion(v251, v293, v292 + 112 * v60, 12 * v60 + v275, v213, &q_454[16 * v311[v252]]);
StudioCalcBonePosition(v251, v293, v63, v62, v213, &pos_453[v61]);
}
while ( v252-- - 1 >= 0 );
}
v65 = g_pstudiohdr;
v66 = pseqdesc->seqgroup;
v250 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v66;
if ( v66 )
{
v68 = *(_DWORD *)(pModel + 124);
if ( !v68 )
{
v68 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v68;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v68 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v250 + 32, v68 + 4 * pseqdesc->seqgroup);
v67 = *(_DWORD *)(v68 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v67 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 4 )
v276 = v67 + 48 * *(_DWORD *)(v65 + 140);
else
v276 = v67;
v249 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v248 = (signed int)v294;
do
{
v69 = v311[v249];
v70 = 12 * v69;
v71 = 12 * v69 + v276;
v72 = v292 + 112 * v69;
StudioCalcBoneQuaterion(v248, v293, v292 + 112 * v69, 12 * v69 + v276, v213, &q2_456[16 * v311[v249]]);
StudioCalcBonePosition(v248, v293, v72, v71, v213, &pos2_455[v70]);
}
while ( v249-- - 1 >= 0 );
}
v74 = g_pstudiohdr;
v75 = pseqdesc->seqgroup;
v247 = *(_DWORD *)(v74 + 176) + v74 + 104 * v75;
if ( v75 )
{
v77 = *(_DWORD *)(pModel + 124);
if ( !v77 )
{
v77 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v77;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v77 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v247 + 32, v77 + 4 * pseqdesc->seqgroup);
v76 = *(_DWORD *)(v77 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v76 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 6 )
v277 = v76 + 72 * *(_DWORD *)(v74 + 140);
else
v277 = v76;
v246 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v245 = (signed int)v294;
do
{
v78 = v311[v246];
v79 = 12 * v78;
v80 = 12 * v78 + v277;
v81 = v292 + 112 * v78;
StudioCalcBoneQuaterion(v245, v293, v292 + 112 * v78, 12 * v78 + v277, v213, &q3_458[16 * v311[v246]]);
StudioCalcBonePosition(v245, v293, v81, v80, v213, &pos3_457[v79]);
}
while ( v246-- - 1 >= 0 );
}
v83 = g_pstudiohdr;
v84 = pseqdesc->seqgroup;
v244 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v84;
if ( v84 )
{
v86 = *(_DWORD *)(pModel + 124);
if ( !v86 )
{
v86 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v86;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v86 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v244 + 32, v86 + 4 * pseqdesc->seqgroup);
v85 = *(_DWORD *)(v86 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v85 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 7 )
v278 = v85 + 84 * *(_DWORD *)(v83 + 140);
else
v278 = v85;
v243 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v242 = (signed int)v294;
do
{
v87 = v311[v243];
v88 = 12 * v87;
v89 = 12 * v87 + v278;
v90 = v292 + 112 * v87;
StudioCalcBoneQuaterion(v242, v293, v292 + 112 * v87, 12 * v87 + v278, v213, &q4_460[16 * v311[v243]]);
StudioCalcBonePosition(v242, v293, v90, v89, v213, &pos4_459[v88]);
}
while ( v243-- - 1 >= 0 );
}
}
else
{
v264 = numbones - 1;
v206 = (int)q_454;
v208 = (int)pos_453;
v203 = (int)pos2_455;
v209 = (int)q2_456;
v211 = (int)pos3_457;
v204 = (int)q3_458;
v205 = (int)pos4_459;
v210 = (int)q4_460;
v266 = v23 + v23;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v263 = (signed int)v294;
do
{
v24 = v311[v264];
v25 = 12 * v24;
v26 = 12 * v24 + v271;
v27 = v292 + 112 * v24;
StudioCalcBoneQuaterion(v263, v293, v292 + 112 * v24, 12 * v24 + v271, v213, &q_454[16 * v311[v264]]);
StudioCalcBonePosition(v263, v293, v27, v26, v213, &pos_453[v25]);
}
while ( v264-- - 1 >= 0 );
}
v29 = g_pstudiohdr;
v30 = pseqdesc->seqgroup;
v262 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v30;
if ( v30 )
{
v32 = *(_DWORD *)(pModel + 124);
if ( !v32 )
{
v32 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v32;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v32 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v262 + 32, v32 + 4 * pseqdesc->seqgroup);
v31 = *(_DWORD *)(v32 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v31 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 1 )
v272 = v31 + 12 * *(_DWORD *)(v29 + 140);
else
v272 = v31;
v261 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v260 = (signed int)v294;
do
{
v33 = v311[v261];
v34 = 12 * v33;
v35 = 12 * v33 + v272;
v36 = v292 + 112 * v33;
StudioCalcBoneQuaterion(v260, v293, v292 + 112 * v33, 12 * v33 + v272, v213, &q2_456[16 * v311[v261]]);
StudioCalcBonePosition(v260, v293, v36, v35, v213, &pos2_455[v34]);
}
while ( v261-- - 1 >= 0 );
}
v38 = g_pstudiohdr;
v39 = pseqdesc->seqgroup;
v259 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v39;
if ( v39 )
{
v41 = *(_DWORD *)(pModel + 124);
if ( !v41 )
{
v41 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v41;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v41 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v259 + 32, v41 + 4 * pseqdesc->seqgroup);
v40 = *(_DWORD *)(v41 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v40 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 3 )
v273 = v40 + 36 * *(_DWORD *)(v38 + 140);
else
v273 = v40;
v258 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v257 = (signed int)v294;
do
{
v42 = v311[v258];
v43 = 12 * v42;
v44 = 12 * v42 + v273;
v45 = v292 + 112 * v42;
StudioCalcBoneQuaterion(v257, v293, v292 + 112 * v42, 12 * v42 + v273, v213, &q3_458[16 * v311[v258]]);
StudioCalcBonePosition(v257, v293, v45, v44, v213, &pos3_457[v43]);
}
while ( v258-- - 1 >= 0 );
}
v47 = g_pstudiohdr;
v48 = pseqdesc->seqgroup;
v256 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v48;
if ( v48 )
{
v50 = *(_DWORD *)(pModel + 124);
if ( !v50 )
{
v50 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v50;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v50 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v256 + 32, v50 + 4 * pseqdesc->seqgroup);
v49 = *(_DWORD *)(v50 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v49 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
if ( *(_DWORD *)(v290 + 120) - 1 >= 4 )
v274 = v49 + 48 * *(_DWORD *)(v47 + 140);
else
v274 = v49;
v255 = numbones - 1;
if ( v212 >= 0 )
{
v305 = v306 | 0xC00;
v254 = (signed int)v294;
do
{
v51 = v311[v255];
v52 = 12 * v51;
v53 = 12 * v51 + v274;
v54 = v292 + 112 * v51;
StudioCalcBoneQuaterion(v254, v293, v292 + 112 * v51, 12 * v51 + v274, v213, &q4_460[16 * v311[v255]]);
StudioCalcBonePosition(v254, v293, v54, v53, v213, &pos4_459[v52]);
}
while ( v255-- - 1 >= 0 );
}
}
}
a1 = 0.00392156862745098 * v268;
v165 = 0.00392156862745098 * v266;
v166 = a1;
StudioSlerpBones(v206, v208, v209, v203, v166);
StudioSlerpBones(v204, v211, v210, v205, v166);
v200 = v165;
v199 = v211;
v198 = v204;
v197 = v208;
v196 = v206;
}
// END BLENDING 9WAY
else
{
if ( pseqdesc->numblends <= 1 )
goto LABEL_245;
v290 = 176 * sequence + *(_DWORD *)(g_pstudiohdr + 168) + g_pstudiohdr;
v167 = pseqdesc->seqgroup;
v217 = *(_DWORD *)(g_pstudiohdr + 176) + g_pstudiohdr + 104 * v167;
if ( v167 )
{
v168 = *(_DWORD *)(pModel + 124);
if ( !v168 )
{
v168 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v168;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v168 + 4 * pseqdesc->seqgroup) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v217 + 32, v168 + 4 * pseqdesc->seqgroup);
v287 = *(_DWORD *)(v168 + 4 * pseqdesc->seqgroup) + *(_DWORD *)(v290 + 124);
}
else
{
v287 = *(_DWORD *)(v290 + 124) + g_pstudiohdr;
}
v288 = v287 + 12 * *(_DWORD *)(g_pstudiohdr + 140);
v296 = numbones - 1;
if ( v212 >= 0 )
{
v307 = v308 | 0xC00;
v216 = (signed int)v294;
do
{
v169 = v311[v296];
StudioCalcBoneQuaterion(v216, v293, v292 + 112 * v169, 12 * v169 + v288, v213, &q2_456[16 * v169]);
StudioCalcBonePosition(v216, v293, v292 + 112 * v169, 12 * v169 + v288, v213, &pos2_455[12 * v169]);
}
while ( v296-- - 1 >= 0 );
}
v310 = *(_BYTE *)pblending;
v309 = (long double)v310 * 0.00392156862745098;
v200 = v309;
v199 = (int)pos2_455;
v198 = (int)q2_456;
v197 = (int)pos_453;
v196 = (int)q_454;
}
StudioSlerpBones(v196, v197, v198, v199, v200);
LABEL_245:
if ( *(_DWORD *)(v290 + 120) == 9 )
{
if ( sequence <= 100 )
{
if ( sequence != 8 )
{
if ( sequence != 9 )
{
v215 = 1;
v171 = GetPlayerGaitsequence(pEdict);
if ( v171 < 0 || (v172 = &g_pstudiohdr, v171 >= g_pstudiohdr->numseq) )
{
v172 = &g_pstudiohdr;
v171 = 0;
}
v174 = *v172;
v291 = 176 * v171 + *(_DWORD *)(v174 + 168) + v174;
v175 = *(_DWORD *)(v291 + 156);
v173 = *(_DWORD *)(v174 + 176) + v174 + 104 * v175;
if ( v175 )
{
v176 = *(_DWORD *)(pModel + 124);
if ( !v176 )
{
v176 = (*(int (__cdecl **)(_DWORD, _DWORD))IEngineStudio)(16, 4);
*(_DWORD *)(pModel + 124) = v176;
}
if ( !(*(int (__cdecl **)(int))&IEngineStudio[4])(v176 + 4 * *(_DWORD *)(v291 + 156)) )
(*(void (__cdecl **)(int, int))&IEngineStudio[8])(v173 + 32, v176 + 4 * *(_DWORD *)(v291 + 156));
v289 = *(_DWORD *)(v176 + 4 * *(_DWORD *)(v291 + 156)) + *(_DWORD *)(v291 + 124);
}
else
{
v289 = *(_DWORD *)(v291 + 124) + v174;
}
v214 = numbones - 1;
if ( v212 >= 0 )
{
do
{
v177 = v311[v214];
v178 = 12 * v177;
v179 = 12 * v177 + v289;
v180 = v292 + 112 * v177;
StudioCalcBoneQuaterion(0, 0.0, v292 + 112 * v177, 12 * v177 + v289, v213, &q2_456[16 * v311[v214]]);
StudioCalcBonePosition(0, 0.0, v180, v179, v213, &pos2_455[v178]);
}
while ( v214-- - 1 >= 0 );
}
for ( i = 0; i < *(_DWORD *)(g_pstudiohdr + 140); ++i )
{
v185 = v292 + 112 * i;
v184 = (int)"Bip01 Spine";
v183 = 12;
v182 = 1;
do
{
if ( !v183 )
break;
v182 = *(_BYTE *)v185++ == *(_BYTE *)v184++;
--v183;
}
while ( v182 );
if ( v182 )
{
v215 = 0;
}
else
{
v188 = (int)"Bip01 Pelvis";
v187 = 13;
v189 = 112 * *(_DWORD *)(v292 + 112 * i + 32) + v292;
v186 = 1;
do
{
if ( !v187 )
break;
v186 = *(_BYTE *)v189++ == *(_BYTE *)v188++;
--v187;
}
while ( v186 );
if ( v186 )
v215 = 1;
if ( v215 )
{
v190 = 12 * i;
*(_DWORD *)&pos_453[12 * i] = *(_DWORD *)&pos2_455[12 * i];
*(_DWORD *)&pos_453[v190 + 4] = *(_DWORD *)&pos2_455[v190 + 4];
*(_DWORD *)&pos_453[v190 + 8] = *(_DWORD *)&pos2_455[v190 + 8];
v191 = 16 * i;
*(_DWORD *)&q_454[16 * i] = *(_DWORD *)&q2_456[16 * i];
*(_DWORD *)&q_454[v191 + 4] = *(_DWORD *)&q2_456[v191 + 4];
*(_DWORD *)&q_454[v191 + 8] = *(_DWORD *)&q2_456[v191 + 8];
*(_DWORD *)&q_454[16 * i + 12] = *(_DWORD *)&q2_456[16 * i + 12];
}
}
}
}
}
}
}
v302 = *(float *)angles;
v303 = *(float *)(angles + 4);
v304 = *(float *)(angles + 8);
if ( pEdict )
{
v192 = (*(int (__fastcall **)(int))&g_engfuncs[284])(angles);
UTIL_GetPlayerGaitYaw(v192);
v303 = a1;
if ( a1 < 0.0 )
v303 = a1 + 360.0;
}
AngleMatrix(v207, g_pRotationMatrix);
*(float *)(g_pRotationMatrix + 12) = *(float *)origin;
*(float *)(g_pRotationMatrix + 28) = *(float *)(origin + 4);
result = g_pRotationMatrix;
*(float *)(g_pRotationMatrix + 44) = *(float *)(origin + 8);
v297 = numbones - 1;
if ( v212 >= 0 )
{
do
{
v301 = v311[v297];
QuaternionMatrix(&q_454[16 * v301], &v312);
v313 = *(float *)&pos_453[12 * v301];
v314 = *(float *)&pos_453[12 * v301 + 4];
v315 = *(float *)&pos_453[12 * v301 + 8];
if ( *(_DWORD *)(v292 + 112 * v301 + 32) == -1 )
{
v202 = g_pBoneTransform + 48 * v301;
v201 = &v312;
v194 = g_pRotationMatrix;
}
else
{
v202 = g_pBoneTransform + 48 * v301;
v201 = &v312;
v194 = g_pBoneTransform + 48 * *(_DWORD *)(v292 + 112 * v301 + 32);
}
result = ConcatTransforms(v194, v201, v202);
}
while ( v297-- - 1 >= 0 );
}
return result;
}
// 7949C: using guessed type _DWORD __cdecl AngleMatrix(_DWORD, _DWORD);
// 7A88C: using guessed type _DWORD __cdecl StudioCalcBonePosition(_DWORD, float, _DWORD, _DWORD, _DWORD, _DWORD);
// 7B7CC: using guessed type _DWORD __cdecl GetPlayerYaw(_DWORD);
// 7BA6C: using guessed type _DWORD __cdecl GetPlayerGaitsequence(_DWORD);
// 7BF9C: using guessed type _DWORD __cdecl QuaternionMatrix(_DWORD, _DWORD);
// 7BFEC: using guessed type _DWORD __cdecl StudioCalcBoneQuaterion(_DWORD, float, _DWORD, _DWORD, _DWORD, _DWORD);
// 7CE8C: using guessed type _DWORD __cdecl ConcatTransforms(_DWORD, _DWORD, _DWORD);
// 7CF1C: using guessed type _DWORD __cdecl StudioSlerpBones(_DWORD, _DWORD, _DWORD, _DWORD, float);
// 7D13C: using guessed type _DWORD __cdecl UTIL_GetPlayerGaitYaw(_DWORD);
// 7E2FC: using guessed type _DWORD __cdecl StudioCalcBoneAdj(float, _DWORD, _DWORD, _DWORD, char);
// 7EF0C: using guessed type _DWORD __cdecl GetPlayerPitch(_DWORD);
// 1E9110: using guessed type int g_pstudiohdr;
// 1E9114: using guessed type int g_pRotationMatrix;
// 1E9118: using guessed type int g_pBoneTransform;
// 82CD4: using guessed type int var_250[128];
//----- (000EF884) --------------------------------------------------------
long double __cdecl GetPlayerYaw(int a1)
{
int v1; // eax@2
int v2; // ST04_4@3
int v3; // ST08_4@3
int v4; // ST0C_4@3
int v5; // eax@4
long double result; // fst7@7
if ( a1
&& ((v1 = *(_DWORD *)(a1 + 648), !v1)
&& (v1 = (*(int (__stdcall **)(_DWORD, int, int, int))&g_engfuncs[276])(0, v2, v3, v4), !v1) ? (v5 = 0) : (v5 = *(_DWORD *)(v1 + 124)),
v5) )
result = *(float *)(v5 + 2048);
else
result = 0.0;
return result;
}
//----- (000EF824) --------------------------------------------------------
long double __cdecl GetPlayerPitch(int a1)
{
int v1; // eax@2
int v2; // ST04_4@3
int v3; // ST08_4@3
int v4; // ST0C_4@3
int v5; // eax@4
long double result; // fst7@7
if ( a1
&& ((v1 = *(_DWORD *)(a1 + 648), !v1)
&& (v1 = (*(int (__stdcall **)(_DWORD, int, int, int))&g_engfuncs[276])(0, v2, v3, v4), !v1) ? (v5 = 0) : (v5 = *(_DWORD *)(v1 + 124)),
v5) )
result = *(float *)(v5 + 2044);
else
result = 0.0;
return result;
}