


//---- Pattern_Fn_XGradient () -> (A result)

pattern_def( Pattern_Fn_XGradient )
{
  pattern_output(PATTERN_A, result, 0);

  int i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<256; i++) {
      result->buf[j][i] = i;
    }
  }
}




//---- Pattern_Fn_YGradient () -> (A result)

pattern_def( Pattern_Fn_YGradient )
{
  pattern_output(PATTERN_A, result, 0);

  int i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<256; i++) {
      result->buf[j][i] = j;
    }
  }
}



//---- Pattern_Fn_SinWave1 ( REAL time ) -> ( ALPHA result )

pattern_def( Pattern_Fn_SinWave1 )
{
  pattern_input(PATTERN_REAL, time, 0);
  pattern_output(PATTERN_A, a, 0);

  int t = time->value * 73.51;

  int i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<256; i++) {
      a->buf[j][i] = (
        pattern_sin[(t*3 + i*5 + j*4)&255] +
        pattern_sin[(t*6 + i*2 + j*5)&255] +
        pattern_sin[(t*5 + i*1 + j*3)&255] +
        pattern_sin[(t*2 + i*3 + j*1)&255]
      ) >> 2;
    }
  }
}



//---- Pattern_Fn_SinWave2 ( REAL time ) -> ( ALPHA result )

pattern_def( Pattern_Fn_SinWave2 )
{
  pattern_input(PATTERN_REAL, time, 0);
  pattern_output(PATTERN_A, a, 0);

  int t = time->value * 57.13;

  int i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<256; i++) {
      a->buf[j][i] = (
        pattern_sin[(t*4 + i*1 + j*1)&255] +
        pattern_sin[(t*3 - i*1 - j*3)&255] +
        pattern_sin[(t*1 - i*3 + j*2)&255] +
        pattern_sin[(t*2 - i*2 - j*1)&255]
      ) >> 2;
    }
  }
}



//---- Pattern_Fn_AlphaFade ( ALPHA fade1, ALPHA fade2, REAL alpha ) -> ( ALPHA result )

pattern_def( Pattern_Fn_AlphaFade )
{
  pattern_input(PATTERN_A, fade1, 0);
  pattern_input(PATTERN_A, fade2, 1);
  pattern_input(PATTERN_REAL, alpha, 2);

  pattern_output(PATTERN_A, result, 0);

  int i, j;

  int a = alpha->value * 255;

  if(a < 0) a = 0;
  if(a > 255) a = 255;

  for(j=0; j<256; j++) {
    for(i=0; i<256; i++) {
      result->buf[j][i] = (fade1->buf[j][i] * (255-a) + fade2->buf[j][i] * a) >> 8;
    }
  }
}




