Beispiel #1
0
void DoRotate( int player )
{
	MBoolean possible;
	
	EraseSpriteBlobs( player );
	
	blobR[player] = ( blobR[player] + 1 ) % 4;
	possible = CanMoveDirection( player, 0, halfway[player]? 1: 0 );
	StartTweak( player, 0, 1, 0 ); // only rotates clockwise
	
	if( !possible )
	{
		if( blobR[player] == downRotate )
		{
			if( halfway[player] )
				halfway[player] = false;
			else
				blobY[player]--;
				
			if( ++blobSpin[player] >= 4 )
			{
				blobTime[player] = animTime[player] = GameTickCount( );
				role[player] = kLockdownBlobs;
				anim[player] = 0;
				PlayStereoFrequency( player, kPlace, player );
			}
		}
		
		if( blobR[player] == leftRotate )
		{
			if( CanGoRight(player) )
				GoRight( player );
			else
			{
				blobR[player]++;
				StartTweak( player, 0, 2, 0 );
			}
		}
		
		if( blobR[player] == rightRotate  )
		{
			if( CanGoLeft(player) )
				GoLeft( player );
			else
			{
				blobR[player]++;
				StartTweak( player, 0, 2, 0 );
				
				if( !CanMoveDirection( player, 0, halfway[player]? 1: 0 ) )
				{
					if( halfway[player] )
						halfway[player] = false;
					else
						blobY[player]--;

					if( ++blobSpin[player] >= 4 )
					{
						blobTime[player] = animTime[player] = GameTickCount( );
						role[player] = kLockdownBlobs;
						anim[player] = 0;
						PlayStereoFrequency( player, kPlace, player );
					}
				}
			}
		}
	}
	
	DrawSpriteBlobs( player, kNoSuction );
	
	PlayStereo( player, kRotate );
}
Beispiel #2
0
void PlayStereo( short player, short which )
{
	PlayStereoFrequency( player, which, 0 );
}
Beispiel #3
0
void ZapBlobs( int player )
{
	int x, y, cluster, clusterCount = 0, multiplier, amount = 0;
	int zapFocusX = -1, zapFocusY = -1, zapFocusC = 0;


	zapScorePt[player].y = 0;
	zapScoreFrame[player] = 0;

	switch( chain[player] )
	{
		case 1:  multiplier = 1;                  break;
		default: multiplier = 2 << chain[player]; break;
	}

	for( y=kGridDown-1; y>=0; y-- )
	{
		for( x=kGridAcross-1; x>=0; x-- )
		{
			if( grid[player][x][y] >= kFirstBlob &&
				grid[player][x][y] <= kLastBlob &&
				suction[player][x][y] != kInDeath )
			{
				cluster = SizeUp( grid[player], x, y, grid[player][x][y] );
				if( cluster >= kBlobClusterSize )
				{
					clusterCount++;
					zapFocusX = x;
					zapFocusY = y;
					zapFocusC = grid[player][x][y];

					amount += cluster * 10;

					multiplier += cluster - kBlobClusterSize;

					RemoveBlobs( player, x, y, grid[player][x][y], 0 );
				}
			}
		}
	}

	if( clusterCount > 0 )
	{
		switch( clusterCount )
		{
			case 1:                     break;
			case 2:   multiplier += 3;  break;
			case 3:   multiplier += 6;  break;
			case 4:   multiplier += 12; break;
			default:  multiplier += 24; break;
		}

		if( multiplier > 999 ) multiplier = 999;
		CalculateGrays( 1-player, amount * multiplier / difficulty[player] );
		potentialCombo[player].value += amount * multiplier;

		if( players == 1 ) amount *= ((level <= kLevels)? level: 1);
		score[player] += amount * multiplier;

		ZapScoreDisplay( player, amount, multiplier, zapFocusX, zapFocusY, zapFocusC );
	}

	blobTime[player] = GameTickCount( );

	if( clusterCount > 0 )
	{
		chain[player]++;
		role[player] = kKillBlobs;
		PlayStereoFrequency( player, kSquishy, zapIteration[player]++ );
	}
	else
	{
		if( control[player] == kPlayerControl )
		{
			SubmitCombo( &potentialCombo[player] );
		}

		SetupGrays( player );
		role[player] = kDropGrays;

		if( BusyDroppingGrays( player ) )
		{
			PlayStereoFrequency( player, kWhistle, player );
		}
	}
}