home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CDPD Public Domain Collection for CDTV 3
/
CDPDIII.bin
/
pd
/
commodities
/
superdark
/
blankers
/
plasam_cycle.dark.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-16
|
3KB
|
168 lines
/* Fichier plasma_cycle.dark.c */
/* Module appele par le programme principal */
/* pour effectuer un effet defini..appele par */
/* loadseg */
#include <exec/types.h>
#include <dos/dos.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <graphics/gfx.h>
#include <graphics/gfxmacros.h>
#include <graphics/rastport.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include "bug.c"
#include "struct.h"
#include "tom_gadget.h"
extern struct RastPort *rp;
extern struct Screen *s;
extern struct appel_proc *p_data_proc;
#define WIDTH 320
#define HEIGHT 256
char *p_text_info="Effet 'Plasma_Cycle'\nPar T.Landspurg";
#define reg register
extern void __asm MultiPlot(reg __a0 struct Screen *,reg __d0 WORD, reg __d1 WORD,reg __d2 WORD);
struct NewScreen Screen = {
0, 0, WIDTH, HEIGHT, 4, 0,0, 0, CUSTOMSCREEN, NULL, NULL ,NULL, NULL};
UWORD ScreenColors[] = {
0x000,
0xF00,
0xF30,
0xF50,
0xF70,
0xF90,
0xFA0,
0xFB0,
0xFC0,
0xFD0,
0xFE0,
0xFF0,
0xBF0,
0x8F0,
0x7D0,
0x5B0,
0x000,
0x490,
0x360,
0x340,
0x444,
0x555,
0x666,
0x777,
0x888,
0x999,
0xAAA,
0xBBB,
0xCCC,
0xDDD,
0xEEE,
0xFFF,
0x000 };
#define MAX_LEVEL 8
struct tom_gadget my_gadg[]={
{"_Level",SLIDER, 125,14,139,9,1, 1,MAX_LEVEL,0,0},
{0, END_LISTE, 0, 0, 0, 0, 0,0,0,0,0}
};
UBYTE t[1<<MAX_LEVEL][1<<MAX_LEVEL];
unsigned int seed;
void my_text(rp,x,y,p_c)
struct RastPort *rp;
int x,y;
char *p_c;
{
if(rp!=0){
Move(rp,x,y);
Text(rp,p_c,strlen(p_c));
}
}
unsigned int my_rand()
{
seed=25173*seed+138490;
return(seed);
}
void moyenne(int x1,int y1,int x2,int y2,int level)
{
int deltax,deltay,moyenne;
deltax=(x2-x1)/2;
deltay=(y2-y1)/2;
moyenne=(t[x1][y1]+t[x2][y2])/2;
alt=rand()%(level*10)+moyenne;
t[x+deltax][y+deltay]=alt;
MultiPlot(s,(WORD)(x+deltax),(WORD)(y+deltay),alt);
}
void calcul(int x,int y,int pas)
{
pas=pas/2;
if(pas!=pas_min){
if(x==0)moyenne(x,y,x+pas,y,level);
if(y==0)moyenne(x,y,x,y+pas,level);
moyenne(x,y,x+pas,y+pas,level);
moyenne(x+pas,y,x+pas,y+pas,level);
moyenne(x,y+pas,x+pas,y+pas,level);
calcul(x,y,pas);
calcul(x+pas,y,pas);
calcul(x,y+pas,pas);
calcul(x+pas,y+pas,pas);
}
}
/********************************************************** dark ***/
void __saveds dark()
{
int d,i;
if ( NOT( s = OpenScreen(&Screen)))
return;
rp = &(s->RastPort);
d=1<<(s->BitMap.Depth);
LoadRGB4(&s->ViewPort,ScreenColors,d);
SetRast(rp,0);
for(i=0;i<MAX_LEVEL;i++){
for(j=0;j<MAX_LEVEL;j++){
t[i][j]=0;
}
}
pas_min=1;
calcul(0,0,1<<MAX_LEVEL);
wait_end();
CloseScreen(s);
}
void proc_init()
{
seed=VBeamPos();
}
void proc_save()
{
}
void proc_end()
{
}