Lines Matching refs:wp

220 	watorstruct *wp = &wators[MI_SCREEN(mi)];  in drawcell()  local
230 if (wp->neighbors == 6) { in drawcell()
233 if (wp->vertical) { in drawcell()
234 wp->shape.hexagon[0].x = wp->xb + ccol * wp->xs; in drawcell()
235 wp->shape.hexagon[0].y = wp->yb + crow * wp->ys; in drawcell()
237 wp->shape.hexagon[0].y = wp->xb + ccol * wp->xs; in drawcell()
238 wp->shape.hexagon[0].x = wp->yb + crow * wp->ys; in drawcell()
240 if (wp->xs == 1 && wp->ys == 1) in drawcell()
242 wp->shape.hexagon[0].x, in drawcell()
243 wp->shape.hexagon[0].y); in drawcell()
246 wp->shape.hexagon, 6, in drawcell()
253 wp->shape.hexagon, 6, in drawcell()
256 if (wp->vertical) { in drawcell()
257 wp->shape.hexagon[0].x -= wp->xs; in drawcell()
258 wp->shape.hexagon[0].y += wp->ys / 4; in drawcell()
259 sx = 2 * wp->xs - 6; in drawcell()
260 sy = 2 * wp->ys - 2; in drawcell()
261 if (wp->xs <= 6 || wp->ys <= 2) { in drawcell()
267 wp->shape.hexagon[0].y -= wp->xs; in drawcell()
268 wp->shape.hexagon[0].x += wp->ys / 4; in drawcell()
269 sy = 2 * wp->xs - 6; in drawcell()
270 sx = 2 * wp->ys - 2; in drawcell()
271 if (wp->xs <= 6 || wp->ys <= 2) { in drawcell()
277 if (wp->xs <= 6 || wp->ys <= 2) in drawcell()
279 wp->shape.hexagon[0].x + ix, in drawcell()
280 wp->shape.hexagon[0].y + iy, in drawcell()
281 wp->xs, wp->ys); in drawcell()
284 wp->shape.hexagon[0].x + ix, in drawcell()
285 wp->shape.hexagon[0].y + iy, in drawcell()
289 } else if (wp->neighbors == 4 || wp->neighbors == 8) { in drawcell()
290 if (wp->pixelmode) { in drawcell()
291 if (bitmap >= KINDBITMAPS || (wp->xs <= 2 || wp->ys <= 2) || !alive) in drawcell()
293 wp->xb + wp->xs * col, in drawcell()
294 wp->yb + wp->ys * row, in drawcell()
295 wp->xs - (wp->xs > 3), in drawcell()
296 wp->ys - (wp->ys > 3)); in drawcell()
300 wp->xb + wp->xs * col, in drawcell()
301 wp->yb + wp->ys * row, in drawcell()
302 wp->xs, wp->ys); in drawcell()
305 wp->xb + wp->xs * col, in drawcell()
306 wp->yb + wp->ys * row, in drawcell()
307 wp->xs - 1, wp->ys - 1, in drawcell()
313 wp->xb + wp->xs * col, wp->yb + wp->ys * row, in drawcell()
317 Bool small = (wp->xs <= 3 || wp->ys <= 3); in drawcell()
320 if (wp->vertical) { in drawcell()
321 wp->shape.triangle[orient][0].x = wp->xb + col * wp->xs; in drawcell()
322 wp->shape.triangle[orient][0].y = wp->yb + row * wp->ys; in drawcell()
324 wp->shape.triangle[orient][0].x += in drawcell()
327 wp->shape.triangle[orient][0].x += in drawcell()
328 (wp->xs / 2 - 1) * ((orient) ? 1 : -1); in drawcell()
330 wp->shape.triangle[orient][0].y = wp->xb + col * wp->xs; in drawcell()
331 wp->shape.triangle[orient][0].x = wp->yb + row * wp->ys; in drawcell()
333 wp->shape.triangle[orient][0].y += in drawcell()
336 wp->shape.triangle[orient][0].y += in drawcell()
337 (wp->xs / 2 - 1) * ((orient) ? 1 : -1); in drawcell()
341 wp->shape.triangle[orient][0].x, in drawcell()
342 wp->shape.triangle[orient][0].y); in drawcell()
346 wp->shape.triangle[orient], 3, in drawcell()
351 wp->shape.triangle[orient], 3, in drawcell()
354 if (wp->vertical) { in drawcell()
355 wp->shape.triangle[orient][0].x += -4 * wp->xs / 5 + in drawcell()
356 ((orient) ? wp->xs / 3 : 3 * wp->xs / 5); in drawcell()
357 wp->shape.triangle[orient][0].y += -wp->ys / 2 + 1; in drawcell()
358 ix = ((orient) ? -wp->xs / 2 : wp->xs / 2); in drawcell()
360 wp->shape.triangle[orient][0].y += -4 * wp->xs / 5 + in drawcell()
361 ((orient) ? wp->xs / 3 : 3 * wp->xs / 5); in drawcell()
362 wp->shape.triangle[orient][0].x += -wp->ys / 2 + 1; in drawcell()
363 iy = ((orient) ? -wp->xs / 2 : wp->xs / 2); in drawcell()
366 wp->shape.triangle[orient][0].x + ix, in drawcell()
367 wp->shape.triangle[orient][0].y + iy, in drawcell()
368 wp->ys - 3, wp->ys - 3, in drawcell()
376 init_kindlist(watorstruct * wp, int kind) in init_kindlist() argument
380 if (((wp->lastkind[kind] = (CellList *) malloc(sizeof (CellList))) == in init_kindlist()
382 ((wp->firstkind[kind] = (CellList *) malloc(sizeof (CellList))) == in init_kindlist()
386 wp->firstkind[kind]->previous = wp->lastkind[kind]->next = in init_kindlist()
388 wp->firstkind[kind]->next = wp->lastkind[kind]->previous = in init_kindlist()
390 wp->firstkind[kind]->next = wp->lastkind[kind]; in init_kindlist()
391 wp->lastkind[kind]->previous = wp->firstkind[kind]; in init_kindlist()
396 addto_kindlist(watorstruct * wp, int kind, cellstruct info) in addto_kindlist() argument
398 if ((wp->currkind = (CellList *) malloc(sizeof (CellList))) == NULL) { in addto_kindlist()
401 wp->lastkind[kind]->previous->next = wp->currkind; in addto_kindlist()
402 wp->currkind->previous = wp->lastkind[kind]->previous; in addto_kindlist()
403 wp->currkind->next = wp->lastkind[kind]; in addto_kindlist()
404 wp->lastkind[kind]->previous = wp->currkind; in addto_kindlist()
405 wp->currkind->info = info; in addto_kindlist()
410 removefrom_kindlist(watorstruct * wp, CellList * ptr) in removefrom_kindlist() argument
414 wp->arr[ptr->info.col + ptr->info.row * wp->ncols] = 0; in removefrom_kindlist()
419 dupin_kindlist(watorstruct * wp) in dupin_kindlist() argument
426 temp->previous = wp->babykind; in dupin_kindlist()
427 temp->next = wp->babykind->next; in dupin_kindlist()
428 wp->babykind->next = temp; in dupin_kindlist()
430 temp->info = wp->babykind->info; in dupin_kindlist()
431 wp->babykind = temp; in dupin_kindlist()
440 cutfrom_kindlist(watorstruct * wp) in cutfrom_kindlist() argument
442 wp->babykind = wp->currkind; in cutfrom_kindlist()
443 wp->currkind = wp->currkind->previous; in cutfrom_kindlist()
444 wp->currkind->next = wp->babykind->next; in cutfrom_kindlist()
445 wp->babykind->next->previous = wp->currkind; in cutfrom_kindlist()
446 wp->babykind->next = wp->lastkind[KINDS]; in cutfrom_kindlist()
447 wp->babykind->previous = wp->lastkind[KINDS]->previous; in cutfrom_kindlist()
448 wp->babykind->previous->next = wp->babykind; in cutfrom_kindlist()
449 wp->babykind->next->previous = wp->babykind; in cutfrom_kindlist()
453 reattach_kindlist(watorstruct * wp, int kind) in reattach_kindlist() argument
455 wp->currkind = wp->lastkind[kind]->previous; in reattach_kindlist()
456 wp->currkind->next = wp->firstkind[KINDS]->next; in reattach_kindlist()
457 wp->currkind->next->previous = wp->currkind; in reattach_kindlist()
458 wp->lastkind[kind]->previous = wp->lastkind[KINDS]->previous; in reattach_kindlist()
459 wp->lastkind[KINDS]->previous->next = wp->lastkind[kind]; in reattach_kindlist()
460 wp->lastkind[KINDS]->previous = wp->firstkind[KINDS]; in reattach_kindlist()
461 wp->firstkind[KINDS]->next = wp->lastkind[KINDS]; in reattach_kindlist()
465 flush_kindlist(watorstruct * wp, int kind) in flush_kindlist() argument
467 while (wp->lastkind[kind]->previous != wp->firstkind[kind]) { in flush_kindlist()
468 wp->currkind = wp->lastkind[kind]->previous; in flush_kindlist()
469 wp->currkind->previous->next = wp->lastkind[kind]; in flush_kindlist()
470 wp->lastkind[kind]->previous = wp->currkind->previous; in flush_kindlist()
472 free(wp->currkind); in flush_kindlist()
477 positionOfNeighbor(watorstruct * wp, int n, int col, int row) in positionOfNeighbor() argument
479 int dir = n * (360 / wp->neighbors); in positionOfNeighbor()
481 if (wp->polygon == 4 || wp->polygon == 6) { in positionOfNeighbor()
484 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
487 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
488 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
492 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
493 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
496 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
500 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
501 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
504 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
505 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
508 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
511 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
512 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
516 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
517 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
520 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
524 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
525 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
528 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
529 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
534 } else if (wp->polygon == 3) { in positionOfNeighbor()
538 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
542 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
543 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
546 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
547 if (row + 1 == wp->nrows) in positionOfNeighbor()
549 else if (row + 2 == wp->nrows) in positionOfNeighbor()
556 if (row + 1 == wp->nrows) in positionOfNeighbor()
558 else if (row + 2 == wp->nrows) in positionOfNeighbor()
564 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
568 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
569 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
572 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
576 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
577 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
580 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
585 row = wp->nrows - 2; in positionOfNeighbor()
587 row = wp->nrows - 1; in positionOfNeighbor()
592 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
594 row = wp->nrows - 2; in positionOfNeighbor()
596 row = wp->nrows - 1; in positionOfNeighbor()
602 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
603 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
612 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
616 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
617 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
620 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
622 row = wp->nrows - 2; in positionOfNeighbor()
624 row = wp->nrows - 1; in positionOfNeighbor()
631 row = wp->nrows - 2; in positionOfNeighbor()
633 row = wp->nrows - 1; in positionOfNeighbor()
638 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
642 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
643 row = (!row) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
646 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
650 col = (!col) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
651 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
654 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
658 if (row + 1 == wp->nrows) in positionOfNeighbor()
660 else if (row + 2 == wp->nrows) in positionOfNeighbor()
666 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
667 if (row + 1 == wp->nrows) in positionOfNeighbor()
669 else if (row + 2 == wp->nrows) in positionOfNeighbor()
676 col = (col + 1 == wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
677 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
695 col = (col + 2 >= wp->ncols) ? 0 : col + 2; in positionOfNeighbor()
698 col = (col + 3 >= wp->ncols) ? 1 : col + 3; in positionOfNeighbor()
699 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
704 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
708 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
711 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
712 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
716 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
730 col = (col == 1) ? wp->ncols - 1 : col - 2; in positionOfNeighbor()
733 col = (col == 1) ? wp->ncols - 2 : col - 3; in positionOfNeighbor()
734 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
739 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
743 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
746 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
747 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
751 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
761 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
765 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
769 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
770 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
774 col = (col == 0) ? wp->ncols - 2 : col - 2; in positionOfNeighbor()
778 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
781 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
782 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
786 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
800 col = (col == 0) ? wp->ncols - 1 : col - 1; in positionOfNeighbor()
801 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
804 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
805 row = (row + 1 == wp->nrows) ? 0 : row + 1; in positionOfNeighbor()
809 col = (col + 2 >= wp->ncols) ? 1 : col + 2; in positionOfNeighbor()
813 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
816 col = (col + 1 >= wp->ncols) ? 0 : col + 1; in positionOfNeighbor()
817 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
821 row = (row == 0) ? wp->nrows - 1 : row - 1; in positionOfNeighbor()
834 return (row * wp->ncols + col); in positionOfNeighbor()
838 free_wator_screen(watorstruct *wp) in free_wator_screen() argument
842 if (wp == NULL) { in free_wator_screen()
846 if (wp->firstkind[kind] != NULL) { in free_wator_screen()
847 flush_kindlist(wp, kind); in free_wator_screen()
848 free(wp->firstkind[kind]); in free_wator_screen()
849 wp->firstkind[kind] = (struct _CellList *) NULL; in free_wator_screen()
851 if (wp->lastkind[kind] != NULL) { in free_wator_screen()
852 free(wp->lastkind[kind]); in free_wator_screen()
853 wp->lastkind[kind] = (struct _CellList *) NULL; in free_wator_screen()
856 if (wp->arr != NULL) { in free_wator_screen()
857 free(wp->arr); in free_wator_screen()
858 wp->arr = (CellList **) NULL; in free_wator_screen()
860 wp = NULL; in free_wator_screen()
869 watorstruct *wp; in init_wator() local
872 wp = &wators[MI_SCREEN(mi)]; in init_wator()
874 wp->generation = 0; in init_wator()
875 if (!wp->firstkind[0]) { /* Genesis */ in init_wator()
881 if (!init_kindlist(wp, kind)) { in init_wator()
882 free_wator_screen(wp); in init_wator()
892 flush_kindlist(wp, i); in init_wator()
894 wp->vertical = (Bool) (LRAND() & 1); in init_wator()
896 wp->vertical = vertical; in init_wator()
898 wp->width = MI_WIDTH(mi); in init_wator()
899 wp->height = MI_HEIGHT(mi); in init_wator()
900 if (wp->width < 2) in init_wator()
901 wp->width = 2; in init_wator()
902 if (wp->height < 2) in init_wator()
903 wp->height = 2; in init_wator()
907 wp->neighbors = neighbors; in init_wator()
912 wp->neighbors = plots[NRAND(NEIGHBORKINDS)]; in init_wator()
913 wp->neighbors = (LRAND() & 1) ? 4 : 8; in init_wator()
915 wp->neighbors = 4; in init_wator()
921 if (wp->neighbors == 6) { in init_wator()
924 wp->polygon = 6; in init_wator()
925 if (!wp->vertical) { in init_wator()
926 wp->height = MI_WIDTH(mi); in init_wator()
927 wp->width = MI_HEIGHT(mi); in init_wator()
929 if (wp->width < 8) in init_wator()
930 wp->width = 8; in init_wator()
931 if (wp->height < 8) in init_wator()
932 wp->height = 8; in init_wator()
934 wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
938 wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / MINGRIDSIZE); in init_wator()
940 wp->ys = MINSIZE; in init_wator()
942 wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
944 wp->xs = wp->ys; in init_wator()
945 wp->pixelmode = True; in init_wator()
946 nccols = MAX(wp->width / wp->xs - 2, 2); in init_wator()
947 ncrows = MAX(wp->height / wp->ys - 1, 4); in init_wator()
948 wp->ncols = nccols / 2; in init_wator()
949 wp->nrows = 2 * (ncrows / 4); in init_wator()
950 wp->xb = (wp->width - wp->xs * nccols) / 2 + wp->xs / 2; in init_wator()
951 wp->yb = (wp->height - wp->ys * (ncrows / 2) * 2) / 2 + in init_wator()
952 wp->ys / 3; in init_wator()
954 if (wp->vertical) { in init_wator()
955 wp->shape.hexagon[sides].x = in init_wator()
956 (wp->xs - 1) * hexagonUnit[sides].x; in init_wator()
957 wp->shape.hexagon[sides].y = in init_wator()
958 ((wp->ys - 1) * hexagonUnit[sides].y / in init_wator()
961 wp->shape.hexagon[sides].y = in init_wator()
962 (wp->xs - 1) * hexagonUnit[sides].x; in init_wator()
963 wp->shape.hexagon[sides].x = in init_wator()
964 ((wp->ys - 1) * hexagonUnit[sides].y / in init_wator()
968 } else if (wp->neighbors == 4 || wp->neighbors == 8) { in init_wator()
969 wp->polygon = 4; in init_wator()
970 if (wp->width < 2) in init_wator()
971 wp->width = 2; in init_wator()
972 if (wp->height < 2) in init_wator()
973 wp->height = 2; in init_wator()
975 MINGRIDSIZE * size > wp->width || MINGRIDSIZE * size > wp->height) { in init_wator()
976 if (wp->width > MINGRIDSIZE * icon_width && in init_wator()
977 wp->height > MINGRIDSIZE * icon_height) { in init_wator()
978 wp->pixelmode = False; in init_wator()
979 wp->xs = icon_width; in init_wator()
980 wp->ys = icon_height; in init_wator()
982 wp->pixelmode = True; in init_wator()
983 wp->xs = wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
987 wp->pixelmode = True; in init_wator()
989 wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
992 wp->ys = MINSIZE; in init_wator()
994 wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
996 wp->xs = wp->ys; in init_wator()
998 wp->ncols = MAX(wp->width / wp->xs, 2); in init_wator()
999 wp->nrows = MAX(wp->height / wp->ys, 2); in init_wator()
1000 wp->xb = (wp->width - wp->xs * wp->ncols) / 2; in init_wator()
1001 wp->yb = (wp->height - wp->ys * wp->nrows) / 2; in init_wator()
1005 wp->polygon = 3; in init_wator()
1006 if (!wp->vertical) { in init_wator()
1007 wp->height = MI_WIDTH(mi); in init_wator()
1008 wp->width = MI_HEIGHT(mi); in init_wator()
1010 if (wp->width < 2) in init_wator()
1011 wp->width = 2; in init_wator()
1012 if (wp->height < 2) in init_wator()
1013 wp->height = 2; in init_wator()
1015 wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
1019 wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / MINGRIDSIZE); in init_wator()
1021 wp->ys = MINSIZE; in init_wator()
1023 wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) / in init_wator()
1025 wp->xs = (int) (1.52 * wp->ys); in init_wator()
1026 wp->pixelmode = True; in init_wator()
1027 wp->ncols = (MAX(wp->width / wp->xs - 1, 2) / 2) * 2; in init_wator()
1028 wp->nrows = (MAX(wp->height / wp->ys - 1, 2) / 2) * 2; in init_wator()
1029 wp->xb = (wp->width - wp->xs * wp->ncols) / 2 + wp->xs / 2; in init_wator()
1030 wp->yb = (wp->height - wp->ys * wp->nrows) / 2 + wp->ys / 2; in init_wator()
1033 if (wp->vertical) { in init_wator()
1034 wp->shape.triangle[orient][sides].x = in init_wator()
1035 (wp->xs - 2) * triangleUnit[orient][sides].x; in init_wator()
1036 wp->shape.triangle[orient][sides].y = in init_wator()
1037 (wp->ys - 2) * triangleUnit[orient][sides].y; in init_wator()
1039 wp->shape.triangle[orient][sides].y = in init_wator()
1040 (wp->xs - 2) * triangleUnit[orient][sides].x; in init_wator()
1041 wp->shape.triangle[orient][sides].x = in init_wator()
1042 (wp->ys - 2) * triangleUnit[orient][sides].y; in init_wator()
1048 wp->positions = wp->ncols * wp->nrows; in init_wator()
1050 if (wp->arr != NULL) in init_wator()
1051 free(wp->arr); in init_wator()
1052 if ((wp->arr = (CellList **) calloc(wp->positions, in init_wator()
1054 free_wator_screen(wp); in init_wator()
1059 wp->nkind[FISH] = wp->positions / 3; in init_wator()
1060 wp->nkind[SHARK] = wp->nkind[FISH] / 10; in init_wator()
1061 wp->kind = FISH; in init_wator()
1062 if (!wp->nkind[SHARK]) in init_wator()
1063 wp->nkind[SHARK] = 1; in init_wator()
1064 wp->breed[FISH] = MI_COUNT(mi); in init_wator()
1065 wp->breed[SHARK] = 10; in init_wator()
1066 if (wp->breed[FISH] < 1) in init_wator()
1067 wp->breed[FISH] = 1; in init_wator()
1068 else if (wp->breed[FISH] > wp->breed[SHARK]) in init_wator()
1069 wp->breed[FISH] = 4; in init_wator()
1070 wp->sstarve = 3; in init_wator()
1073 wp->painted = False; in init_wator()
1077 while (i < wp->nkind[kind]) { in init_wator()
1078 col = NRAND(wp->ncols); in init_wator()
1079 row = NRAND(wp->nrows); in init_wator()
1080 colrow = col + row * wp->ncols; in init_wator()
1081 if (!wp->arr[colrow]) { in init_wator()
1084 info.age = NRAND(wp->breed[kind]); in init_wator()
1085 info.food = NRAND(wp->sstarve); in init_wator()
1093 if (!addto_kindlist(wp, kind, info)) { in init_wator()
1094 free_wator_screen(wp); in init_wator()
1097 wp->arr[colrow] = wp->currkind; in init_wator()
1099 wp->currkind->info.color, wp->currkind->info.direction, True); in init_wator()
1114 watorstruct *wp; in draw_wator() local
1118 wp = &wators[MI_SCREEN(mi)]; in draw_wator()
1119 if (wp->arr == NULL) in draw_wator()
1123 wp->painted = True; in draw_wator()
1125 wp->kind = (wp->kind + 1) % KINDS; in draw_wator()
1127 wp->currkind = wp->firstkind[wp->kind]->next; in draw_wator()
1129 while (wp->currkind != wp->lastkind[wp->kind]) { in draw_wator()
1130 col = wp->currkind->info.col; in draw_wator()
1131 row = wp->currkind->info.row; in draw_wator()
1132 colrow = col + row * wp->ncols; in draw_wator()
1134 if (wp->kind == SHARK) { /* Scan for fish */ in draw_wator()
1135 for (i = 0; i < wp->neighbors; i++) { in draw_wator()
1136 position = positionOfNeighbor(wp, i, col, row); in draw_wator()
1137 if (wp->arr[position] && wp->arr[position]->info.kind == FISH) { in draw_wator()
1144 wp->nkind[FISH]--; in draw_wator()
1146 removefrom_kindlist(wp, wp->arr[cr]); in draw_wator()
1147 wp->arr[cr] = wp->currkind; in draw_wator()
1148 if (wp->neighbors == 4) { in draw_wator()
1149 wp->currkind->info.direction = (5 - acell[i].dir) % ORIENTS + in draw_wator()
1150 ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS; in draw_wator()
1151 } else if (wp->neighbors == 8) { in draw_wator()
1152 wp->currkind->info.direction = (char) (5 - (acell[i].dir / 2 + in draw_wator()
1154 ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS; in draw_wator()
1156 wp->currkind->info.direction = wp->kind * KINDBITMAPS; in draw_wator()
1157 wp->currkind->info.col = acell[i].pos % wp->ncols; in draw_wator()
1158 wp->currkind->info.row = acell[i].pos / wp->ncols; in draw_wator()
1159 wp->currkind->info.food = wp->sstarve; in draw_wator()
1160 drawcell(mi, wp->currkind->info.col, wp->currkind->info.row, in draw_wator()
1161 wp->currkind->info.color, wp->currkind->info.direction, True); in draw_wator()
1162 if (++(wp->currkind->info.age) >= wp->breed[wp->kind]) { /* breed */ in draw_wator()
1163 cutfrom_kindlist(wp); /* This rotates out who goes first */ in draw_wator()
1164 wp->babykind->info.age = 0; in draw_wator()
1165 if (!dupin_kindlist(wp)) { in draw_wator()
1166 free_wator_screen(wp); in draw_wator()
1169 wp->arr[colrow] = wp->babykind; in draw_wator()
1170 wp->babykind->info.col = col; in draw_wator()
1171 wp->babykind->info.row = row; in draw_wator()
1172 wp->babykind->info.age = -1; /* Make one a little younger */ in draw_wator()
1176 if (++(wp->babykind->info.color) >= MI_NPIXELS(mi)) in draw_wator()
1177 wp->babykind->info.color = 0; in draw_wator()
1179 wp->nkind[wp->kind]++; in draw_wator()
1181 wp->arr[colrow] = 0; in draw_wator()
1185 if (wp->currkind->info.food-- < 0) { /* Time to die, Jaws */ in draw_wator()
1187 wp->currkind = wp->currkind->previous; in draw_wator()
1188 removefrom_kindlist(wp, wp->arr[colrow]); in draw_wator()
1189 wp->arr[colrow] = 0; in draw_wator()
1191 wp->nkind[wp->kind]--; in draw_wator()
1197 for (i = 0; i < wp->neighbors; i++) { in draw_wator()
1198 position = positionOfNeighbor(wp, i, col, row); in draw_wator()
1199 if (!wp->arr[position]) { /* Found an empty spot */ in draw_wator()
1206 wp->arr[acell[i].pos] = wp->currkind; in draw_wator()
1207 if (wp->neighbors == 4) { in draw_wator()
1208 wp->currkind->info.direction = (5 - acell[i].dir) % ORIENTS + in draw_wator()
1209 ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS; in draw_wator()
1210 } else if (wp->neighbors == 8) { in draw_wator()
1211 wp->currkind->info.direction = (char) (5 - (acell[i].dir / 2 + in draw_wator()
1213 ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS; in draw_wator()
1215 wp->currkind->info.direction = wp->kind * KINDBITMAPS; in draw_wator()
1216 wp->currkind->info.col = acell[i].pos % wp->ncols; in draw_wator()
1217 wp->currkind->info.row = acell[i].pos / wp->ncols; in draw_wator()
1219 wp->currkind->info.col, wp->currkind->info.row, in draw_wator()
1220 wp->currkind->info.color, wp->currkind->info.direction, True); in draw_wator()
1221 if (++(wp->currkind->info.age) >= wp->breed[wp->kind]) { /* breed */ in draw_wator()
1222 cutfrom_kindlist(wp); /* This rotates out who goes first */ in draw_wator()
1223 wp->babykind->info.age = 0; in draw_wator()
1224 if (!dupin_kindlist(wp)) { in draw_wator()
1225 free_wator_screen(wp); in draw_wator()
1228 wp->arr[colrow] = wp->babykind; in draw_wator()
1229 wp->babykind->info.col = col; in draw_wator()
1230 wp->babykind->info.row = row; in draw_wator()
1231 wp->babykind->info.age = -1; /* Make one a little younger */ in draw_wator()
1232 wp->nkind[wp->kind]++; in draw_wator()
1234 wp->arr[colrow] = 0; in draw_wator()
1239 wp->currkind->info.direction = in draw_wator()
1240 (wp->currkind->info.direction + ORIENTS) % KINDBITMAPS + in draw_wator()
1241 wp->kind * KINDBITMAPS; in draw_wator()
1242 drawcell(mi, col, row, wp->currkind->info.color, in draw_wator()
1243 wp->currkind->info.direction, True); in draw_wator()
1246 wp->currkind = wp->currkind->next; in draw_wator()
1248 reattach_kindlist(wp, wp->kind); in draw_wator()
1251 if ((wp->nkind[FISH] >= wp->positions) || in draw_wator()
1252 (!wp->nkind[FISH] && !wp->nkind[SHARK]) || in draw_wator()
1253 wp->generation >= MI_CYCLES(mi)) { in draw_wator()
1256 if (wp->kind == SHARK) in draw_wator()
1257 wp->generation++; in draw_wator()
1277 watorstruct *wp; in refresh_wator() local
1281 wp = &wators[MI_SCREEN(mi)]; in refresh_wator()
1283 if (wp->painted) { in refresh_wator()
1285 wp->painted = False; in refresh_wator()