Date: Wed, 21 May 1997 16:18:23 -0400 (EDT) From: Chris Shenton <cshenton@angst.it.hq.nasa.gov> To: hackers@freebsd.org Subject: Dancing daemon saver -- flips left and right PATCH Message-ID: <199705212018.QAA00293@angst.it.hq.nasa.gov>
index | next in thread | raw e-mail
I didn't like how static the dancing daemon was, nor that it "walked"
backward. :-)
The following patch causes the daemon to flip direction when it hits
the wall: it points left when walking left, and right when moving
right. It's a hack but it works OK.
--Chris
*** daemon_saver.c 1997/05/19 16:05:51 1.1
--- daemon_saver.c 1997/05/21 20:11:35
***************
*** 95,103 ****
NULL
};
static void
! draw_daemon(int xpos, int ypos)
{
int x, y;
int attr;
--- 95,122 ----
NULL
};
+ /* Reverse a graphics character, or return unaltered if no mirror;
+ * should do alphanumerics too, but I'm too lazy. <cshenton@it.hq.nasa.gov>
+ */
+
+ static char
+ xflip_symbol(char symbol)
+ {
+ static char lchars[] = "`'(){}[]\\/<>";
+ static char rchars[] = "'`)(}{][/\\><";
+ int pos; /* position in lchars */
+
+ for (pos = 0; lchars[pos] != NULL; pos++) {
+ if (lchars[pos] == symbol) {
+ return rchars[pos];
+ }
+ }
+ return symbol;
+ }
+
static void
! draw_daemon(int xpos, int ypos, int dxdir)
{
int x, y;
int attr;
***************
*** 111,121 ****
case 'W': attr = (FG_LIGHTGREY|BG_BLACK)<<8; break;
case 'C': attr = (FG_CYAN|BG_BLACK)<<8; break;
}
! *((u_short*)(Crtat + (ypos+y)*cur_console->xsize + xpos + x)) =
! scr_map[daemon_pic[y][x]]|attr;
}
}
static void
draw_string(int xpos, int ypos, char *s, int len)
{
--- 130,149 ----
case 'W': attr = (FG_LIGHTGREY|BG_BLACK)<<8; break;
case 'C': attr = (FG_CYAN|BG_BLACK)<<8; break;
}
! if (dxdir < 0) { /* Moving left */
! *((u_short*)(Crtat + (ypos+y)*cur_console->xsize
! + xpos + x)) =
! scr_map[daemon_pic[y][x]]|attr;
! }
! else {
! *((u_short*)(Crtat + (ypos+y)*cur_console->xsize
! + xpos + (DAEMON_MAX_WIDTH - x) )) =
! scr_map[ xflip_symbol(daemon_pic[y][x]) ] |attr;
! }
}
}
+
static void
draw_string(int xpos, int ypos, char *s, int len)
{
***************
*** 176,182 ****
}
txpos += txdir; typos += tydir;
! draw_daemon(dxpos, dypos);
draw_string(txpos, typos, (char *)message, sizeof(message)-1);
} else {
if (scrn_blanked) {
--- 204,210 ----
}
txpos += txdir; typos += tydir;
! draw_daemon(dxpos, dypos, dxdir);
draw_string(txpos, typos, (char *)message, sizeof(message)-1);
} else {
if (scrn_blanked) {
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199705212018.QAA00293>
