+ if (game.options & OPTION_CURSES) {
+ wattron(curwnd, A_REVERSE);
+ }
+}
+
+void commandhook(char *cmd, int before) {
+}
+
+/*
+ * Things past this point have policy implications.
+ */
+
+void drawmaps(short l)
+/* hook to be called after moving to redraw maps */
+{
+ if (game.options & OPTION_CURSES) {
+ if (l == 1)
+ sensor();
+ setwnd(srscan_window);
+ wmove(curwnd, 0, 0);
+ enqueue("no");
+ srscan(SCAN_FULL);
+ if (l != 2) {
+ setwnd(report_window);
+ wclear(report_window);
+ wmove(report_window, 0, 0);
+ srscan(SCAN_NO_LEFTSIDE);
+ setwnd(lrscan_window);
+ wclear(lrscan_window);
+ wmove(lrscan_window, 0, 0);
+ enqueue("l");
+ lrscan();
+ }
+ }
+}
+
+static void put_srscan_sym(int x, int y, char sym)
+{
+ wmove(srscan_window, x+1, y*2+2);
+ waddch(srscan_window, sym);
+ wrefresh(srscan_window);
+}
+
+void boom(int ii, int jj)
+/* enemy fall down, go boom */
+{
+ if (game.options & OPTION_CURSES) {
+ drawmaps(2);
+ setwnd(srscan_window);
+ wattron(srscan_window, A_REVERSE);
+ put_srscan_sym(ii, jj, game.quad[ii][jj]);
+ sound(500);
+ delay(1000);
+ nosound();
+ wattroff(srscan_window, A_REVERSE);
+ put_srscan_sym(ii, jj, game.quad[ii][jj]);
+ delay(500);
+ setwnd(message_window);
+ }
+}
+
+void warble(void)
+/* sound and visual effects for teleportation */
+{
+ if (game.options & OPTION_CURSES) {
+ drawmaps(2);
+ setwnd(message_window);
+ sound(50);
+ }
+ prouts(" . . . . . ");
+ if (game.options & OPTION_CURSES) {
+ delay(1000);
+ nosound();
+ }
+}
+
+void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad)
+/* torpedo-track animation */
+{
+ if (!game.options & OPTION_CURSES) {
+ if (l == 1) {
+ if (n != 1) {
+ skip(1);
+ proutn("Track for torpedo number %d- ", i);
+ }
+ else {
+ skip(1);
+ proutn("Torpedo track- ");
+ }
+ } else if (l==4 || l==9)
+ skip(1);
+ proutn("%d - %d ", ix, iy);