… | |
… | |
605 | */ |
605 | */ |
606 | |
606 | |
607 | void |
607 | void |
608 | draw_magic_map (object *pl) |
608 | draw_magic_map (object *pl) |
609 | { |
609 | { |
610 | int x, y; |
|
|
611 | char *map_mark = (char *) calloc (MAGIC_MAP_SIZE * MAGIC_MAP_SIZE, 1); |
610 | char *map_mark = (char *)calloc (MAGIC_MAP_SIZE * MAGIC_MAP_SIZE, 1); |
612 | int xmin, xmax, ymin, ymax; |
611 | int xmin, xmax, ymin, ymax; |
613 | SockList sl; |
|
|
614 | |
612 | |
615 | if (pl->type != PLAYER) |
613 | if (pl->type != PLAYER) |
616 | { |
614 | { |
617 | LOG (llevError, "Non player object called draw_map.\n"); |
615 | LOG (llevError, "Non player object called draw_map.\n"); |
618 | return; |
616 | return; |
… | |
… | |
628 | */ |
626 | */ |
629 | xmin = MAGIC_MAP_SIZE; |
627 | xmin = MAGIC_MAP_SIZE; |
630 | ymin = MAGIC_MAP_SIZE; |
628 | ymin = MAGIC_MAP_SIZE; |
631 | xmax = 0; |
629 | xmax = 0; |
632 | ymax = 0; |
630 | ymax = 0; |
|
|
631 | |
633 | for (x = 0; x < MAGIC_MAP_SIZE; x++) |
632 | for (int x = 0; x < MAGIC_MAP_SIZE; x++) |
634 | { |
|
|
635 | for (y = 0; y < MAGIC_MAP_SIZE; y++) |
633 | for (int y = 0; y < MAGIC_MAP_SIZE; y++) |
636 | { |
|
|
637 | if (map_mark[x + MAP_WIDTH (pl->map) * y] | FACE_FLOOR) |
634 | if (map_mark[x + MAP_WIDTH (pl->map) * y] | FACE_FLOOR) |
638 | { |
635 | { |
639 | xmin = x < xmin ? x : xmin; |
636 | xmin = x < xmin ? x : xmin; |
640 | xmax = x > xmax ? x : xmax; |
637 | xmax = x > xmax ? x : xmax; |
641 | ymin = y < ymin ? y : ymin; |
638 | ymin = y < ymin ? y : ymin; |
642 | ymax = y > ymax ? y : ymax; |
639 | ymax = y > ymax ? y : ymax; |
643 | } |
640 | } |
644 | } |
|
|
645 | } |
|
|
646 | |
641 | |
647 | sl.buf = (unsigned char *) malloc (MAXSOCKBUF); |
642 | SockList sl (MAXSOCKBUF); |
648 | snprintf ((char *) sl.buf, MAXSOCKBUF, "magicmap %d %d %d %d ", (xmax - xmin + 1), (ymax - ymin + 1), |
643 | sl.printf ("magicmap %d %d %d %d ", (xmax - xmin + 1), (ymax - ymin + 1), |
649 | MAGIC_MAP_HALF - xmin, MAGIC_MAP_HALF - ymin); |
644 | MAGIC_MAP_HALF - xmin, MAGIC_MAP_HALF - ymin); |
650 | sl.len = strlen ((char *) sl.buf); |
|
|
651 | |
645 | |
652 | for (y = ymin; y <= ymax; y++) |
646 | for (int y = ymin; y <= ymax; y++) |
653 | { |
|
|
654 | for (x = xmin; x <= xmax; x++) |
647 | for (int x = xmin; x <= xmax; x++) |
655 | { |
|
|
656 | sl.buf[sl.len++] = map_mark[x + MAGIC_MAP_SIZE * y] & ~FACE_FLOOR; |
648 | sl << uint8 (map_mark[x + MAGIC_MAP_SIZE * y] & ~FACE_FLOOR); |
657 | } /* x loop */ |
|
|
658 | } /* y loop */ |
|
|
659 | |
649 | |
660 | Send_With_Handling (&pl->contr->socket, &sl); |
650 | Send_With_Handling (&pl->contr->socket, &sl); |
661 | free (sl.buf); |
651 | |
|
|
652 | sl.free (); |
|
|
653 | |
662 | free (map_mark); |
654 | free (map_mark); |
663 | } |
655 | } |
664 | |
656 | |
665 | |
657 | |
666 | /** |
658 | /** |