/* 004CF5A0 /$ A1 E43C5101 mov eax, [1513CE4] 004CF5A5 |. F6C4 03 test ah, 3 004CF5A8 |. 0F84 CF000000 je 004CF67D 004CF5AE |. 56 push esi 004CF5AF |. 8B35 D8415101 mov esi, [15141D8] 004CF5B5 |. 69F6 24020000 imul esi, esi, 224 004CF5BB |. 81C6 802A5E01 add esi, 015E2A80 004CF5C1 |. 8B86 20020000 mov eax, [esi+220] 004CF5C7 |. 8B96 F0000000 mov edx, [esi+F0] 004CF5CD |. 8D04C0 lea eax, [eax+eax*8] 004CF5D0 |. C1E0 07 shl eax, 7 004CF5D3 |. 03C2 add eax, edx 004CF5D5 |. 66:8B0445 80B>mov ax, [eax*2+C5BC80] 004CF5DD |. 66:85C0 test ax, ax 004CF5E0 |. 0F84 96000000 je 004CF67C 004CF5E6 |. 0FBFC8 movsx ecx, ax 004CF5E9 |. 6BC9 64 imul ecx, ecx, 64 004CF5EC |. 81C1 009CC200 add ecx, 00C29C00 004CF5F2 |. 0F84 84000000 je 004CF67C 004CF5F8 |. 0FB705 BA3994>movzx eax, word ptr [19439BA] 004CF5FF |. 68 08665101 push 01516608 ;origin 004CF604 |. 56 push esi ;cent 004CF605 |. E8 66D8FFFF call 004CCE70 <------------------------------------ 004CF60A |. 83C4 08 add esp, 8 004CF60D |. 85C0 test eax, eax 004CF60F |. 75 0F jnz short 004CF620 004CF611 |. 68 E45A5B00 push 005B5AE4 ; ASCII 15,"Turret has no bone: t" */ // ---------------------------------------------------------------------- VOID trap_GetOriginForTag( centity_t *cent, DWORD dwTagHandle, vec3_t origin ) { __asm { mov esi, [cent] MOV EAX,DWORD PTR DS:[ESI+0x220] MOV EDX,DWORD PTR DS:[ESI+0xF0] LEA EAX,DWORD PTR DS:[EAX+EAX*8] SHL EAX,7 ADD EAX,EDX MOV AX,WORD PTR DS:[EAX*2 + 0xC5BC80] MOVSX ECX,AX IMUL ECX,ECX,0x64 ADD ECX, 0x00C29C00 MOVZX EAX,WORD PTR DS:[dwTagHandle] push origin push cent mov edx, [Client.orig_CG_GetHeadOrigin] call edx pop eax pop eax } } // ---------------------------------------------------------------------- #define MAX_TAGS 20 BOOL CG_GetEntityOriginForTag( int iEntity, int iTagNum, vec3_t &origin ) { if ( iTagNum < 0 || iTagNum >= MAX_TAGS ) return FALSE; DWORD * Handle = (DWORD*)(Client.dwTagHandleStartOffset + sizeof(WORD) * iTagNum); trap_GetOriginForTag( &Client.pce[iEntity], *Handle, origin ); return TRUE; } // ---------------------------------------------------------------------- void CG_DrawTagsForEntity( int iEntity ) { static vec3_t origin; static FLOAT x, y; static vec4_t color = { 1.0f, 1.0f, 1.0f, 1.0f }; for ( int i = 0; i < MAX_TAGS; i++ ) { CG_GetEntityOriginForTag( iEntity, i, origin ); if ( !CG_WorldCoordToScreenCoord( origin, &x, &y ) ) continue; CG_DrawStringCentered( x, y, 0.7f, color, Client.ftNormal, "." ); } }