/* You "System 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 != sys_task) { "Must be System 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;