google-site-verification: googlebaca44933768a824.html Iterative NoSpread - Old Royal Hack Forum

Announcement

Collapse
No announcement yet.

Iterative NoSpread

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Iterative NoSpread

    THIS MAY NOT APPEAR ELSEWHERE WITHOUT MY PERMISSION, BUT MAY BE LINKED TO. ANY TRACE OF THIS IN SOLD HACKS IS CONSIDERED FAIR GAME AND SUBJECT TO CRACKING UNLESS I AM DULY COMPENSATED.

    Code:
    fSpread[0] = UTIL_SharedRandomFloat ( ( uiRandomSeed + 1 ), -0.5, 0.5 ) + UTIL_SharedRandomFloat ( ( uiRandomSeed + 2 ), -0.5, 0.5 );
    fSpread[1] = UTIL_SharedRandomFloat ( ( uiRandomSeed + 3 ), -0.5, 0.5 ) + UTIL_SharedRandomFloat ( ( uiRandomSeed + 4 ), -0.5, 0.5 );
    
    fSpreadCone = fGetSpread ( fSpeed );
    
    fSpread[0] *= fSpreadCone;
    fSpread[1] *= fSpreadCone;
    	
    AngleVectors ( viewangles, fForward, fRight, fUp );
    
    fSpreadDir[0] = fForward[0] + ( fRight[0] * fSpread[0] ) + ( fUp[0] * fSpread[1] );
    fSpreadDir[1] = fForward[1] + ( fRight[1] * fSpread[0] ) + ( fUp[1] * fSpread[1] );
    fSpreadDir[2] = fForward[2] + ( fRight[2] * fSpread[0] ) + ( fUp[2] * fSpread[1] );
    
    VectorNormalize ( fSpreadDir );
    
    VectorAngles ( fSpreadDir, fNewAngles );
    
    VectorCopy ( viewangles, fStoredAngles );
    
    fUpAngle = 0;
    fRightAngle = 0;
    
    bFound = false;
    
    VectorCopy ( viewangles, flSpreadAngles );
    
    fSmallest = 10000;
    
    flLength = 1;
    			    
    for ( iIterator = 0; iIterator < 10000; iIterator++ )
    {   
        	fStoredAngles[0] += fNewAngles[0];
    	fStoredAngles[1] += fNewAngles[1];
    	fStoredAngles[2] = 0;
    
    	AngleNormalize ( fStoredAngles );
        
    	AngleVectors ( fStoredAngles, fForward, fRight, fUp );
        
    	fSpreadDir[0] = fForward[0] + ( fRight[0] * fSpread[0] ) + ( fUp[0] * fSpread[1] );
    	fSpreadDir[1] = fForward[1] + ( fRight[1] * fSpread[0] ) + ( fUp[1] * fSpread[1] );
    	fSpreadDir[2] = fForward[2] + ( fRight[2] * fSpread[0] ) + ( fUp[2] * fSpread[1] );
            
    	VectorNormalize ( fSpreadDir );
        
    	AngleVectors ( viewangles, fForward, fRight, fUp );
        
    	fForwardAngle = AngleBetweenVectors  ( fSpreadDir, fForward );
    	fRightAngle = AngleBetweenVectors  ( fSpreadDir, fRight );
    	fUpAngle = AngleBetweenVectors  ( fSpreadDir, fUp );
    
    	fCurrent = fForwardAngle;
    
    	if ( fSmallest == 10000 )
    	{
    		fSmallest = fCurrent;
    	}
    	if ( fForwardAngle <= 1e-7 && fRightAngle >= 90 && fUpAngle >= 90 ) // adjust these values as necessary
    	{
    		VectorCopy ( fStoredAngles, viewangles );
    
    		VectorCopy ( fStoredAngles, flSpreadAngles );
    
    		bFound = true;
    
    		break;
    	}
    	if ( fCurrent <= fSmallest )
    	{
    		fSmallest = fCurrent;
    
    		VectorCopy ( fStoredAngles, fBestAngles );
    	}
        
    	fNewAngles[0] = 90 - fUpAngle;
    	fNewAngles[1] = 90 - fRightAngle;
    	fNewAngles[2] = 0;
    }
    
    if ( bFound == false )
    {
    	VectorCopy ( fBestAngles, viewangles );
    
    	VectorCopy ( fBestAngles, fSpreadAngles ); 
    }
    I don't need to say much except perhaps that perfect nospread in 1.6 is impossible and source you have to choose between forcing a seed OR including the ROLL angle.

    #2
    Re: Iterative NoSpread

    This is very interesting from both the coding & maths sides.
    ok bai

    Comment


      #3
      Re: Iterative NoSpread

      Is this hl API?

      Comment

      Working...
      X