function coreValidTorpedoScore( address _player_address , GameVar_s gamevar) private
    {
    
        PlayerData_s storage  _PlayerData = PlayerData[ _player_address];
                
        require((gamevar.torpedoBatchID != 0) && (gamevar.torpedoBatchID == _PlayerData.torpedoBatchID) && ( _PlayerData.lockedCredit>0 ));
                
        gamevar.madehigh = false;

	
        if (block.number>=_PlayerData.torpedoBatchBlockTimeout || (ecrecover(keccak256(abi.encodePacked( gamevar.score,gamevar.torpedoBatchID )) , gamevar.v, gamevar.r, gamevar.s) != signerAuthority))
        {
            gamevar.score = 0;
        }
		
		if (gamevar.score<0) gamevar.score = 0;
				            
        gamevar.scoreMultiplied = uint256(gamevar.score) * uint256(_PlayerData.packedData[0]);
        
        if (gamevar.score>0xffffffff) gamevar.score = 0xffffffff;
        if (gamevar.scoreMultiplied>0xffffffff) gamevar.scoreMultiplied = 0xffffffff;
   		
		
		if (gamevar.scoreMultiplied > uint256( GameRoundData.extraData[0] ))
		{
			GameRoundData.extraData[0] = uint32( gamevar.scoreMultiplied );
			
			GameRoundData.currentJackpotWinner = _player_address;
			
 			gamevar.madehigh = true;
			 
		}
		
		
		 GameRoundData.extraData[1]++;
		
		
		if (GameRoundData.extraData[1]>=GameRoundData.extraData[3])
		{
			payJackpot();
		}
		
	
		
		
		uint256 _winning =0;
		uint256 _average = uint256( GameRoundData.extraData[2]);
		uint256 _top = _average*3;
		
		uint256 _score = uint256(gamevar.score);
		
		if (_score >=_average )
		{
			
			
			_winning = _PlayerData.lockedCredit;
			
			
					
			if (_score > _top) _score = _top;
		
			_score -= _average;
			_top -= _average;
		
			
			
			uint256 _gains = GameRoundData.treasureAmount.mul( _score * uint256( _PlayerData.packedData[0] )) / 100;
			
			
			
			_gains = _gains.mul( GameRoundData.extraData[6] );
			_gains /= 100;
			
			
			_gains /= (1+_top);
			
			
			GameRoundData.treasureAmount = GameRoundData.treasureAmount.sub( _gains );
									
			_winning = _winning.add( _gains );
		}
		else
		{
			
		
			if (_average>0)
			{
				_winning = _PlayerData.lockedCredit.mul( _score ) / _average;
			}
		}
		
		
		_PlayerData.chest = _PlayerData.chest.add( _winning );
		
		
		
		
		if (_PlayerData.lockedCredit> _winning)
		{
			
			AddJackpotTreasure( _PlayerData.lockedCredit - _winning );
		}
		
		
				
		_score = uint256(gamevar.score);
		
		uint32 maximumScore = GameRoundData.extraData[4];
		
		
		
		
		if (_score>_average/2)
		{
			_score = _score.add( _average * 99 );
			_score /= 100;
			
			if (_score< maximumScore/6 ) _score = maximumScore/6;
			if (_score > maximumScore/3) _score = maximumScore/3;
			
			GameRoundData.extraData[2] = uint32( _score );
		}

		
   
        
        _PlayerData.torpedoBatchID = 0;
        _PlayerData.lockedCredit = 0;
		
        emit onNewScore( gamevar.scoreMultiplied , _player_address , gamevar.madehigh , _winning , _PlayerData.packedData[0] );


    }