/* You "Adam include" this because you want the wallpaper routine to stay in mem even if this task is killed. <CTRL-t> to see the hidden text needed for sprite elements. <CTRL-r> to add a sprite to a document. */ <1>/* Graphics Not Rendered in HTML */ <2>/* Graphics Not Rendered in HTML */ <3>/* Graphics Not Rendered in HTML */ <4>/* Graphics Not Rendered in HTML */ <5>/* Graphics Not Rendered in HTML */ <6>/* Graphics Not Rendered in HTML */ <7>/* Graphics Not Rendered in HTML */ <8>/* Graphics Not Rendered in HTML */ <9>/* Graphics Not Rendered in HTML */ #define TYPES_OF_CRITTERS 3 #define FRAMES_PER_CRITTER 4 U8 *imgs[TYPES_OF_CRITTERS][FRAMES_PER_CRITTER]={ {<1>,<2>,<3>,<2>}, {<4>,<5>,<6>,<5>}, {<7>,<8>,<9>,<8>} }; #define CRITTERS_NUM 16 class Critter { I64 x,y,dx,dy,type; F64 t_offset; } wall_crits[CRITTERS_NUM]; U0 (*old_wall_paper)(CTask *task); U0 WallPaperFish(CTask *task) { I64 i,j,x,y; CDC *dc=DCAlias(gr.dc2,task); Critter *c=wall_crits; task->text_attr=CYAN<<4+WHITE; dc->color=BROWN; for (i=0;i<GR_HEIGHT;i+=20) { j=16*Tri(tS*10,20); GrLine(dc,0,GR_HEIGHT-i-j,GR_HEIGHT-i-j,GR_HEIGHT); } for (i=0;i<CRITTERS_NUM;i++,c++) { j=(tS*4+c->t_offset)%FRAMES_PER_CRITTER; x=c->x>>16%GR_WIDTH; if (x<0) x+=GR_WIDTH; y=c->y>>16%GR_HEIGHT; if (y<0) y+=GR_HEIGHT; if (c->dx<0) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; DCSymmetrySet(dc,x,y-1,x,y+1); } else dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); Sprite3(dc,x,y,0,imgs[c->type][j]); c->x+=c->dx; c->y+=c->dy; } DCDel(dc); //Uncomment the following if you wish. //old_wall_paper(task); } U0 WallInit() { I64 i; Critter *c; if (Fs!=adam_task) { "Must be Adam Included with SHIFT-F5.\n" "(Would crash when code mem was freed.)\n"; return; } old_wall_paper=gr.fp_wall_paper; c=wall_crits; for (i=0;i<CRITTERS_NUM;i++,c++) { c->x=(RandU16%GR_WIDTH)<<16; c->y=(RandU16%GR_HEIGHT)<<16; c->type=RandU16%TYPES_OF_CRITTERS; c->dx=RandI16; if (c->dx<0) c->dx-=0x4000; else c->dx+=0x4000; c->dy=RandI16; c->t_offset=Rand*FRAMES_PER_CRITTER; } gr.fp_wall_paper=&WallPaperFish; } WallInit;