borgware-2d/animations/programm.c

431 lines
7.5 KiB
C

#include "../config.h"
#include "../random/prng.h"
#include "../pixel.h"
#include "../util.h"
#define RANDOM8() (random8())
#ifdef ANIMATION_TESTS
void test1(){
unsigned char x,y;
for (y=0;y<NUM_ROWS;y++){
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, 3);
wait(100);
}
}
}
void test_level1(){
unsigned char x,y;
for (y=0;y<NUM_ROWS;y++){
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, 1);
wait(5);
}
}
wait(2000);
}
void test_level2(){
unsigned char x,y;
for (y=0;y<NUM_ROWS;y++){
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, 2);
wait(5);
}
}
wait(2000);
}
void test_level3(){
unsigned char x,y;
for (y=0;y<NUM_ROWS;y++){
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, 3);
wait(5);
}
}
wait(2000);
}
void test_levels(){
unsigned char x,y,b;
for(b=1;b<4;b++){
for (y=0;y<NUM_ROWS;y++){
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, b);
wait(5);
}
}
}
}
void test_palette(){
unsigned char x,y,b;
for (y=0;y<NUM_ROWS;y++){
b=y%4;
for (x=0;x<NUM_COLS;x++){
setpixel((pixel){x,y}, b);
// wait(1);
}
}
wait(2000);
}
void test_palette2(){
unsigned char x,y,b;
for (x=0;x<NUM_COLS;x++){
b=x%4;
for (y=0;y<NUM_ROWS;y++){
setpixel((pixel){x,y}, b);
// wait(1);
}
}
wait(1000);
for (x=0;x<NUM_COLS;x++){
// shift image right
shift_pixmap_l();
wait(30);
}
}
#endif
#ifdef ANIMATION_MHERWEG
void checkbox(){
unsigned char x, delay=250;
// quadrat aus linien
line((pixel){0,0}, (pixel){7,0} ,3);
wait(delay);
line((pixel){7,0}, (pixel){7,7} ,3);
wait(delay);
line((pixel){7,7}, (pixel){0,7} ,3);
wait(delay);
line((pixel){0,7}, (pixel){0,0} ,3);
wait(delay);
// 2 diagonale lininen
line((pixel){7,7}, (pixel){0,0} ,3);
wait(delay);
line((pixel){0,7}, (pixel){7,0} ,3);
wait(delay);
wait(delay);
wait(delay);
for (x=0;x<NUM_COLS;x++){
// shift image right
shift_pixmap_l();
wait(30);
}
}
void movinglines(){
unsigned char x,y,n;
line((pixel){NUM_COLS-1,NUM_ROWS-1}, (pixel){NUM_COLS-1,0} ,3);
// linie wandert nach rechts
for (x=0;x<NUM_COLS;x++){
shift_pixmap_l();
wait(100);
}
// von unten nach oben
for (y=NUM_ROWS-1;y!=255;y--){
line((pixel){0,y}, (pixel){NUM_COLS-1,y} ,3);
wait(100);
line((pixel){0,y}, (pixel){NUM_COLS-1,y} ,0);
//wait(10);
}
//eine linie von rechts nach links und
//1-8 mal von oben nach unten
// je nach display format
// das ganze 4 mal
for (n=0;n<4;n++){
for (x=0;x<NUM_COLS-1;x++){
y=x%NUM_ROWS;
line((pixel){0,y}, (pixel){NUM_COLS-1,y} ,3);
line((pixel){x,0}, (pixel){x,NUM_ROWS-1} ,3);
wait(50);
line((pixel){0,y}, (pixel){NUM_COLS-1,y} ,0);
line((pixel){x,0}, (pixel){x,NUM_ROWS-1} ,0);
//wait(10);
}
}
}
//rechteckmuster mit helligkeitsstufen
void rectangle1(){
unsigned char x,value,xcenter,ycenter,size;
unsigned int delay=500;
xcenter = NUM_COLS/2;
ycenter = NUM_ROWS/2;
clear_screen(0);
size=NUM_ROWS;
value=3;
for (x=8;x>0;x--){
if (value<NUMPLANE)
value++;
else
value=0;
filled_rectangle((pixel){(xcenter-x),(ycenter-x)},size,size,value);
wait(delay);
size-=2;
}
wait(delay);
wait(delay);
wait(delay);
}
// zufallsrechtecke
void rectangles(){
unsigned char value,n,x,y,h,w;
clear_screen(0);
for (n=0;n<60;n++){
x = RANDOM8()%NUM_COLS;
y = RANDOM8()%NUM_ROWS;
h = RANDOM8()%NUM_COLS/2;
w = RANDOM8()%NUM_ROWS/2;
value= RANDOM8()%(NUMPLANE+1);
filled_rectangle((pixel){x,y},w,h,value);
wait(500+RANDOM8()%3000);
}
}
// schräge linien die aufblitzen
void lines1(){
unsigned char value,n,x,y,h,w;
unsigned int delay=500;
clear_screen(0);
for (n=0;n<200;n++){
x = RANDOM8()%NUM_COLS;
y = RANDOM8()%NUM_ROWS;
h = RANDOM8()%NUM_COLS;
w = RANDOM8()%NUM_ROWS;
value= RANDOM8()%(NUMPLANE+1);
line((pixel){x,y},(pixel){w,h},value);
wait(RANDOM8()%delay);
line((pixel){x,y},(pixel){w,h},0);
}
}
// random dots
void dots1(){
unsigned char delay=100,n,x,y;
clear_screen(0);
for (n=0;n<50;n++){
x = RANDOM8()%NUM_COLS;
y = RANDOM8()%NUM_ROWS;
setpixel((pixel){x,y} , 1);
wait(delay);
setpixel((pixel){x,y} , 2);
wait(delay);
setpixel((pixel){x,y} , 3);
wait(delay);
setpixel((pixel){x,y} , 2);
wait(delay);
setpixel((pixel){x,y} , 1);
wait((RANDOM8()%255)*10);
}
}
#endif
#ifdef ANIMATION_OFF
void off()
{
clear_screen(0);
while(1)
wait(100);
}
#endif
#ifdef ANIMATION_SPIRALE
void walk(cursor* cur, unsigned char steps, unsigned int delay){
unsigned char x;
for(x=0;x<steps;x++){
set_cursor(cur, next_pixel(cur->pos, cur->dir));
wait(delay);
}
}
void spirale(unsigned int delay){
clear_screen(0);
cursor cur;
cur.dir = right;
cur.mode = set;
set_cursor (&cur, (pixel){NUM_COLS-1,0});
unsigned char clearbit=0;
while(clearbit == 0){
clearbit = 1;
while (!get_next_pixel(cur.pos, cur.dir)){
clearbit = 0;
walk(&cur, 1, delay);
}
cur.dir = direction_r(cur.dir);
}
cur.mode = clear;
set_cursor(&cur, (pixel){(NUM_COLS/2)-1,(NUM_ROWS/2)-1});
for(clearbit=0;clearbit==0;){
if( get_next_pixel(cur.pos, direction_r(cur.dir)) ){
cur.dir = direction_r(cur.dir);
}
if( get_next_pixel(cur.pos, cur.dir) == 1 ){
walk(&cur , 1, delay);
}else{
clearbit = 1;
}
}
}
#endif
#ifdef ANIMATION_JOERN1
void joern1(){
unsigned char i, j, x;
unsigned char rolr=0x01 , rol;
clear_screen(3);
for(i = 0; i< 80;i++){
rol = rolr;
for(j = 0 ;j < NUM_ROWS; j++){
for(x=0;x<LINEBYTES;x++)
pixmap[2][j][x] = rol;
if((rol<<=1)==0)rol = 0x01;
}
if((rolr<<=1) == 0) rolr = 1;
wait(100);
}
}
#endif
#ifdef ANIMATION_SCHACHBRETT
void schachbrett(unsigned char times){
clear_screen(0);
unsigned char j;
for(j=0;j<times;j++){
unsigned char i, x;
for(i = 0; i<NUM_ROWS; i++){
for(x=0;x<LINEBYTES;x++)
pixmap[2][i][x] = 0x55<<(i&0x01);
}
wait(200);
for(i = 0; i<NUM_ROWS; i++){
for(x=0;x<LINEBYTES;x++)
pixmap[2][i][x] = 0xAA>>(i&0x01);
}
wait(200);
}
}
#endif
#ifdef ANIMATION_FEUER
#define FEUER_Y (NUM_ROWS + 3)
void feuer()
{
unsigned char y, x;
unsigned int t;
unsigned char world[NUM_COLS][FEUER_Y]; // double buffer
for(t=0; t<800; t++) {
// diffuse
for(y=1; y<FEUER_Y; y++) {
for(x=1; x<NUM_COLS-1; x++) {
world[x][y-1] = (FEUER_N*world[x-1][y] + FEUER_S*world[x][y] + FEUER_N*world[x+1][y]) / FEUER_DIV;
};
world[0][y-1] = (FEUER_N*world[NUM_COLS-1][y] + FEUER_S*world[0][y] + FEUER_N*world[1][y]) / FEUER_DIV;
world[NUM_COLS-1][y-1] = (FEUER_N*world[0][y] + FEUER_S*world[NUM_COLS-1][y] + FEUER_N*world[NUM_COLS-2][y]) / FEUER_DIV;
};
// update lowest line
for(x=0; x<NUM_COLS; x++) {
world[x][FEUER_Y-1] = RANDOM8();
};
// copy to screen
for(y=0; y<NUM_ROWS; y++) {
for(x=0; x<NUM_COLS; x++) {
setpixel( (pixel){x,y}, (world[x][y] >> 5) );
}
};
wait(FEUER_DELAY);
}
}
#endif
#ifdef ANIMATION_RANDOM_BRIGHT
/**
* void random_bright(void)
* by Daniel Otte
*
*
*/
void random_bright(unsigned cycles){
uint8_t t,x,y;
while(cycles--){
for(y=0; y<NUM_ROWS; ++y)
for(x=0; x<NUM_COLS/4; ++x){
t=random8();
setpixel((pixel){x*4+0, y}, 0x3&(t>>0));
setpixel((pixel){x*4+1, y}, 0x3&(t>>2));
setpixel((pixel){x*4+2, y}, 0x3&(t>>4));
setpixel((pixel){x*4+3, y}, 0x3&(t>>6));
}
wait(200);
}
}
#endif