OSDN Git Service

GF_ICE属性の攻撃に対し、目には目を等の反撃ダメージが発動しないバグを修正。
[hengband/hengband.git] / src / z-term.c
index 2b98f59..ab8d46f 100644 (file)
 
 #include "z-virt.h"
 
+/* Special flags in the attr data */
+#define AF_BIGTILE2 0xf0
+#define AF_TILE1   0x80
 
 #ifdef JP
-#define KANJI1  0x10
-#define KANJI2  0x20
-#define KANJIC  0x0f
+#define AF_KANJI1  0x10
+#define AF_KANJI2  0x20
+#define AF_KANJIC  0x0f
 /*
  * Á´³Ñʸ»úÂбþ¡£
  * Â°À­¤ËÁ´³Ñʸ»ú¤Î£±¥Ð¥¤¥ÈÌÜ¡¢£²¥Ð¥¤¥ÈÌܤ⵭²±¡£
@@ -422,10 +425,6 @@ errr Term_xtra(int n, int v)
        /* Verify the hook */
        if (!Term->xtra_hook) return (-1);
 
-#ifdef CHUUKEI
-       if( n == TERM_XTRA_CLEAR || n == TERM_XTRA_FRESH || n == TERM_XTRA_SHAPE )
-         send_xtra_to_chuukei_server(n);
-#endif
        /* Call the hook */
        return ((*Term->xtra_hook)(n, v));
 }
@@ -440,20 +439,31 @@ errr Term_xtra(int n, int v)
  */
 static errr Term_curs_hack(int x, int y)
 {
-       /* Compiler silliness */
-       if (x || y) return (-2);
+       /* Unused */
+       (void)x;
+       (void)y;
 
        /* Oops */
        return (-1);
 }
 
 /*
+ * Hack -- fake hook for "Term_bigcurs()" (see above)
+ */
+static errr Term_bigcurs_hack(int x, int y)
+{
+       return (*Term->curs_hook)(x, y);
+}
+
+/*
  * Hack -- fake hook for "Term_wipe()" (see above)
  */
 static errr Term_wipe_hack(int x, int y, int n)
 {
-       /* Compiler silliness */
-       if (x || y || n) return (-2);
+       /* Unused */
+       (void)x;
+       (void)y;
+       (void)n;
 
        /* Oops */
        return (-1);
@@ -462,15 +472,14 @@ static errr Term_wipe_hack(int x, int y, int n)
 /*
  * Hack -- fake hook for "Term_text()" (see above)
  */
-#ifdef JP
 static errr Term_text_hack(int x, int y, int n, byte a, cptr cp)
-#else
-static errr Term_text_hack(int x, int y, int n, byte a, const char *cp)
-#endif
-
 {
-       /* Compiler silliness */
-       if (x || y || n || a || cp) return (-2);
+       /* Unused */
+       (void)x;
+       (void)y;
+       (void)n;
+       (void)a;
+       (void)cp;
 
        /* Oops */
        return (-1);
@@ -479,10 +488,16 @@ static errr Term_text_hack(int x, int y, int n, byte a, const char *cp)
 /*
  * Hack -- fake hook for "Term_pict()" (see above)
  */
-static errr Term_pict_hack(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp)
+static errr Term_pict_hack(int x, int y, int n, const byte *ap, cptr cp, const byte *tap, cptr tcp)
 {
-       /* Compiler silliness */
-       if (x || y || n || ap || cp || tap || tcp) return (-2);
+       /* Unused */
+       (void)x;
+       (void)y;
+       (void)n;
+       (void)ap;
+       (void)cp;
+       (void)tap;
+       (void)tcp;
 
        /* Oops */
        return (-1);
@@ -527,12 +542,100 @@ void Term_queue_char(int x, int y, byte a, char c, byte ta, char tc)
        if (x < Term->x1[y]) Term->x1[y] = x;
        if (x > Term->x2[y]) Term->x2[y] = x;
 
-       if ((scrn->a[y][x] & 0xf0) == 0xf0)
+#ifdef JP
+       if (((scrn->a[y][x] & AF_BIGTILE2) == AF_BIGTILE2) ||
+           (scrn->a[y][x] & AF_KANJI2))
+#else
+       if ((scrn->a[y][x] & AF_BIGTILE2) == AF_BIGTILE2)
+#endif
                if ((x - 1) < Term->x1[y]) Term->x1[y]--;
 }
 
 
 /*
+ * Bigtile version of Term_queue_char().
+ *
+ * If use_bigtile is FALSE, simply call Term_queue_char().
+ *
+ * Otherwise, mentally draw a pair of attr/char at a given location.
+ *
+ * Assumes given location and values are valid.
+ */
+void Term_queue_bigchar(int x, int y, byte a, char c, byte ta, char tc)
+{
+
+#ifdef JP
+       /*
+        * A table which relates each ascii character to a multibyte
+        * character.
+        *
+        * ¡Ö¢£¡×¤ÏÆóÇÜÉýƦÉå¤ÎÆâÉô¥³¡¼¥É¤Ë»ÈÍÑ¡£
+        */
+       static char ascii_to_zenkaku[] =
+               "¡¡¡ª¡É¡ô¡ð¡ó¡õ¡Ç¡Ê¡Ë¡ö¡Ü¡¤¡Ý¡¥¡¿"
+               "£°£±£²£³£´£µ£¶£·£¸£¹¡§¡¨¡ã¡á¡ä¡©"
+               "¡÷£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï"
+               "£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú¡Î¡À¡Ï¡°¡²"
+               "¡Æ£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï"
+               "£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú¡Ð¡Ã¡Ñ¡Á¢£";
+#endif
+
+       byte a2;
+       char c2;
+
+       /* If non bigtile mode, call orginal function */
+       if (!use_bigtile)
+       {
+               Term_queue_char(x, y, a, c, ta, tc);
+               return;
+       }
+
+       /* A tile becomes a Bigtile */
+       if ((a & AF_TILE1) && (c & 0x80))
+       {
+               /* Mark it as a Bigtile */
+               a2 = AF_BIGTILE2;
+
+               c2 = -1;
+
+               /* Ignore non-tile background */
+               if (!((ta & AF_TILE1) && (tc & 0x80)))
+               {
+                       ta = 0;
+                       tc = 0;
+               }
+       }
+
+#ifdef JP
+       /*
+        * Use a multibyte character instead of a dirty pair of ASCII
+        * characters.
+        */
+       else if (' ' <= c) /* isprint(c) */
+       {
+               c2 = ascii_to_zenkaku[2 * (c - ' ') + 1];
+               c = ascii_to_zenkaku[2 * (c - ' ')];
+
+               /* Mark it as a Kanji */
+               a2 = a | AF_KANJI2;
+               a |= AF_KANJI1;
+       }
+#endif
+
+       else
+       {
+               /* Dirty pair of ASCII characters */
+               a2 = TERM_WHITE;
+               c2 = ' ';
+       }
+
+       /* Display pair of attr/char */
+       Term_queue_char(x, y, a, c, ta, tc);
+       Term_queue_char(x + 1, y, a2, c2, 0, 0);
+}
+
+
+/*
  * Mentally draw a string of attr/chars at a given location
  *
  * Assumes given location and values are valid.
@@ -637,10 +740,10 @@ void Term_queue_chars(int x, int y, int n, byte a, cptr s)
         * ½Å¤Ê¤Ã¤¿Ê¸»ú¤Îº¸Éôʬ¤ò¾Ãµî¡£
         * É½¼¨³«»Ï°ÌÃÖ¤¬º¸Ã¼¤Ç¤Ê¤¤¤È²¾Äê¡£
         */
-       if ((scr_aa[x] & KANJI2) && !(scr_aa[x] & 0x80))
+       if ((scr_aa[x] & AF_KANJI2) && (scr_aa[x] & AF_BIGTILE2) != AF_BIGTILE2)
        {
                scr_cc[x - 1] = ' ';
-               scr_aa[x - 1] &= KANJIC;
+               scr_aa[x - 1] &= AF_KANJIC;
                x1 = x2 = x - 1;
        }
 #endif
@@ -651,13 +754,13 @@ void Term_queue_chars(int x, int y, int n, byte a, cptr s)
                /* Æüìʸ»ú¤È¤·¤ÆMSB¤¬Î©¤Ã¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë */
                /* ¤½¤Î¾ì¹çattr¤ÎMSB¤âΩ¤Ã¤Æ¤¤¤ë¤Î¤Ç¤³¤ì¤Ç¼±Ê̤¹¤ë */
 /* check */
-               if (!(a & 0x80) && iskanji(*s))
+               if (!(a & AF_TILE1) && iskanji(*s))
                {
                        char nc1 = *s++;
                        char nc2 = *s;
 
-                       byte na1 = (a | KANJI1);
-                       byte na2 = (a | KANJI2);
+                       byte na1 = (a | AF_KANJI1);
+                       byte na2 = (a | AF_KANJI2);
 
                        if((--n == 0) || !nc2) break;
 
@@ -712,10 +815,10 @@ void Term_queue_chars(int x, int y, int n, byte a, cptr s)
 
                int w, h;
                Term_get_size(&w, &h);
-               if (x != w && !(scr_aa[x] & 0x80) && (scr_aa[x] & KANJI2))
+               if (x != w && !(scr_aa[x] & AF_TILE1) && (scr_aa[x] & AF_KANJI2))
                {
                        scr_cc[x] = ' ';
-                       scr_aa[x] &= KANJIC;
+                       scr_aa[x] &= AF_KANJIC;
                        if (x1 < 0) x1 = x;
                        x2 = x;
                }
@@ -807,7 +910,7 @@ static void Term_fresh_row_pict(int y, int x1, int x2)
                /* Æüìʸ»ú¤È¤·¤ÆMSB¤¬Î©¤Ã¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë */
                /* ¤½¤Î¾ì¹çattr¤ÎMSB¤âΩ¤Ã¤Æ¤¤¤ë¤Î¤Ç¤³¤ì¤Ç¼±Ê̤¹¤ë */
 /* check */
-               kanji = (iskanji(nc) && !(na & 0x80));
+               kanji = (iskanji(nc) && !(na & AF_TILE1));
 #endif
 
                ota = old_taa[x];
@@ -945,7 +1048,7 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                /* ¤½¤Î¾ì¹çattr¤ÎMSB¤âΩ¤Ã¤Æ¤¤¤ë¤Î¤Ç¤³¤ì¤Ç¼±Ê̤¹¤ë */
 /* check */
 /*             kanji = (iskanji(nc));  */
-               kanji = (iskanji(nc) && !(na & 0x80));
+               kanji = (iskanji(nc) && !(na & AF_TILE1));
 #endif
 
                ota = old_taa[x];
@@ -971,18 +1074,12 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                                /* Draw pending chars (normal) */
                                if (fa || always_text)
                                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                                }
 
                                /* Draw pending chars (black) */
                                else
                                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                                        (void)((*Term->wipe_hook)(fx, y, fn));
                                }
 
@@ -1011,10 +1108,10 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                old_tcc[x] = ntc;
 
                /* 2nd byte of bigtile */
-               if ((na & 0xf0) == 0xf0) continue;
+               if ((na & AF_BIGTILE2) == AF_BIGTILE2) continue;
 
                /* Handle high-bit attr/chars */
-               if ((na & 0x80) && (nc & 0x80))
+               if ((na & AF_TILE1) && (nc & 0x80))
                {
                        /* Flush */
                        if (fn)
@@ -1022,18 +1119,12 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                                /* Draw pending chars (normal) */
                                if (fa || always_text)
                                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                                }
 
                                /* Draw pending chars (black) */
                                else
                                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                                        (void)((*Term->wipe_hook)(fx, y, fn));
                                }
 
@@ -1050,7 +1141,7 @@ static void Term_fresh_row_both(int y, int x1, int x2)
 
                /* Notice new color */
 #ifdef JP
-               if (fa != (na & KANJIC))
+               if (fa != (na & AF_KANJIC))
 #else
                if (fa != na)
 #endif
@@ -1062,18 +1153,12 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                                /* Draw the pending chars */
                                if (fa || always_text)
                                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                                }
 
                                /* Hack -- Erase "leading" spaces */
                                else
                                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                                        (void)((*Term->wipe_hook)(fx, y, fn));
                                }
 
@@ -1083,7 +1168,7 @@ static void Term_fresh_row_both(int y, int x1, int x2)
 
                        /* Save the new color */
 #ifdef JP
-                       fa = (na & KANJIC);
+                       fa = (na & AF_KANJIC);
 #else
                        fa = na;
 #endif
@@ -1100,18 +1185,12 @@ static void Term_fresh_row_both(int y, int x1, int x2)
                /* Draw pending chars (normal) */
                if (fa || always_text)
                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                }
 
                /* Draw pending chars (black) */
                else
                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                        (void)((*Term->wipe_hook)(fx, y, fn));
                }
        }
@@ -1156,7 +1235,7 @@ static void Term_fresh_row_text(int y, int x1, int x2)
        int kanji = 0;
 
        for (x = 0; x < x1; x++)
-               if (!(old_aa[x] & 0x80) && iskanji(old_cc[x]))
+               if (!(old_aa[x] & AF_TILE1) && iskanji(old_cc[x]))
                {
                        if (x == x1 - 1)
                        {
@@ -1191,7 +1270,7 @@ static void Term_fresh_row_text(int y, int x1, int x2)
                /* Æüìʸ»ú¤È¤·¤ÆMSB¤¬Î©¤Ã¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë */
                /* ¤½¤Î¾ì¹çattr¤ÎMSB¤âΩ¤Ã¤Æ¤¤¤ë¤Î¤Ç¤³¤ì¤Ç¼±Ê̤¹¤ë */
 /* check */
-               kanji = (iskanji(nc) && !(na & 0x80));
+               kanji = (iskanji(nc) && !(na & AF_TILE1));
 #endif
                /* Handle unchanged grids */
 #ifdef JP
@@ -1209,18 +1288,12 @@ static void Term_fresh_row_text(int y, int x1, int x2)
                                /* Draw pending chars (normal) */
                                if (fa || always_text)
                                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                                }
 
                                /* Draw pending chars (black) */
                                else
                                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                                        (void)((*Term->wipe_hook)(fx, y, fn));
                                }
 
@@ -1247,7 +1320,7 @@ static void Term_fresh_row_text(int y, int x1, int x2)
 
                /* Notice new color */
 #ifdef JP
-               if (fa != (na & KANJIC))
+               if (fa != (na & AF_KANJIC))
 #else
                if (fa != na)
 #endif
@@ -1259,18 +1332,12 @@ static void Term_fresh_row_text(int y, int x1, int x2)
                                /* Draw the pending chars */
                                if (fa || always_text)
                                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                                }
 
                                /* Hack -- Erase "leading" spaces */
                                else
                                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                                        (void)((*Term->wipe_hook)(fx, y, fn));
                                }
 
@@ -1280,7 +1347,7 @@ static void Term_fresh_row_text(int y, int x1, int x2)
 
                        /* Save the new color */
 #ifdef JP
-                       fa = (na & KANJIC);
+                       fa = (na & AF_KANJIC);
 #else
                        fa = na;
 #endif
@@ -1297,18 +1364,12 @@ static void Term_fresh_row_text(int y, int x1, int x2)
                /* Draw pending chars (normal) */
                if (fa || always_text)
                {
-#ifdef CHUUKEI
-                       send_text_to_chuukei_server(fx, y, fn, fa, &scr_cc[fx]);
-#endif
                        (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx]));
                }
 
                /* Draw pending chars (black) */
                else
                {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(fx, y, fn);
-#endif
                        (void)((*Term->wipe_hook)(fx, y, fn));
                }
        }
@@ -1461,14 +1522,6 @@ errr Term_fresh(void)
        }
 
 
-       /* Paranoia -- use "fake" hooks to prevent core dumps */
-       if (!Term->curs_hook) Term->curs_hook = Term_curs_hack;
-       if (!Term->bigcurs_hook) Term->bigcurs_hook = Term->curs_hook;
-       if (!Term->wipe_hook) Term->wipe_hook = Term_wipe_hack;
-       if (!Term->text_hook) Term->text_hook = Term_text_hack;
-       if (!Term->pict_hook) Term->pict_hook = Term_pict_hack;
-
-
        /* Handle "total erase" */
        if (Term->total_erase)
        {
@@ -1539,7 +1592,7 @@ errr Term_fresh(void)
                        char otc = old_tcc[tx];
 
 #ifdef JP
-                       if (tx + 1 < Term->wid && !(old_aa[tx] & 0x80)
+                       if (tx + 1 < Term->wid && !(old_aa[tx] & AF_TILE1)
                            && iskanji(old_cc[tx]))
                                csize = 2;
 #endif
@@ -1550,7 +1603,7 @@ errr Term_fresh(void)
                        }
 
                        /* Hack -- use "Term_pict()" sometimes */
-                       else if (Term->higher_pict && (old_aa[tx] & 0x80) && (old_cc[tx] & 0x80))
+                       else if (Term->higher_pict && (old_aa[tx] & AF_TILE1) && (old_cc[tx] & 0x80))
                        {
                                (void)((*Term->pict_hook)(tx, ty, 1, &old_aa[tx], &old_cc[tx], &ota, &otc));
                        }
@@ -1558,19 +1611,12 @@ errr Term_fresh(void)
                        /* Hack -- restore the actual character */
                        else if (old_aa[tx] || Term->always_text)
                        {
-
-#ifdef CHUUKEI
-                               send_text_to_chuukei_server(tx, ty, csize, (old_aa[tx] & 0xf), &old_cc[tx]);
-#endif
                                (void)((*Term->text_hook)(tx, ty, csize, (unsigned char) (old_aa[tx] & 0xf), &old_cc[tx]));
                        }
 
                        /* Hack -- erase the grid */
                        else
                        {
-#ifdef CHUUKEI
-                       send_wipe_to_chuukei_server(tx, ty, 1);
-#endif
                                (void)((*Term->wipe_hook)(tx, ty, 1));
                        }
                }
@@ -1658,17 +1704,13 @@ errr Term_fresh(void)
                /* Draw the cursor */
                if (!scr->cu && scr->cv)
                {
-#ifdef CHUUKEI
-                       send_curs_to_chuukei_server(scr->cx, scr->cy);
-#endif
-
 #ifdef JP
                        if ((scr->cx + 1 < w) &&
-                           ((old->a[scr->cy][scr->cx + 1] == 255) ||
-                            (!(old->a[scr->cy][scr->cx] & 0x80) &&
+                           ((old->a[scr->cy][scr->cx + 1] & AF_BIGTILE2) == AF_BIGTILE2 ||
+                            (!(old->a[scr->cy][scr->cx] & AF_TILE1) &&
                              iskanji(old->c[scr->cy][scr->cx]))))
 #else
-                       if ((scr->cx + 1 < w) && (old->a[scr->cy][scr->cx + 1] == 255))
+                       if ((scr->cx + 1 < w) && (old->a[scr->cy][scr->cx + 1] & AF_BIGTILE2) == AF_BIGTILE2)
 #endif
                        {
                                /* Double width cursor for the Bigtile mode */
@@ -1688,9 +1730,6 @@ errr Term_fresh(void)
                /* The cursor is useless, hide it */
                if (scr->cu)
                {
-#ifdef CHUUKEI
-                 send_curs_to_chuukei_server(w - 1, scr->cy);
-#endif
                        /* Paranoia -- Put the cursor NEAR where it belongs */
                        (void)((*Term->curs_hook)(w - 1, scr->cy));
 
@@ -1701,9 +1740,6 @@ errr Term_fresh(void)
                /* The cursor is invisible, hide it */
                else if (!scr->cv)
                {
-#ifdef CHUUKEI
-                 send_curs_to_chuukei_server(scr->cx, scr->cy);
-#endif
                        /* Paranoia -- Put the cursor where it belongs */
                        (void)((*Term->curs_hook)(scr->cx, scr->cy));
 
@@ -1714,9 +1750,6 @@ errr Term_fresh(void)
                /* The cursor is visible, display it correctly */
                else
                {
-#ifdef CHUUKEI
-                 send_curs_to_chuukei_server(scr->cx, scr->cy);
-#endif
                        /* Put the cursor where it belongs */
                        (void)((*Term->curs_hook)(scr->cx, scr->cy));
 
@@ -1857,6 +1890,41 @@ errr Term_addch(byte a, char c)
 
 
 /*
+ * Bigtile version of Term_addch().
+ *
+ * If use_bigtile is FALSE, simply call Term_addch() .
+ *
+ * Otherwise, queue a pair of attr/char for display at the current
+ * cursor location, and advance the cursor to the right by two.
+ */
+errr Term_add_bigch(byte a, char c)
+{
+       if (!use_bigtile) return Term_addch(a, c);
+
+       /* Handle "unusable" cursor */
+       if (Term->scr->cu) return (-1);
+
+       /* Paranoia -- no illegal chars */
+       if (!c) return (-2);
+
+       /* Queue the given character for display */
+       Term_queue_bigchar(Term->scr->cx, Term->scr->cy, a, c, 0, 0);
+
+       /* Advance the cursor */
+       Term->scr->cx += 2;
+
+       /* Success */
+       if (Term->scr->cx < Term->wid) return (0);
+
+       /* Note "Useless" cursor */
+       Term->scr->cu = 1;
+
+       /* Note "Useless" cursor */
+       return (1);
+}
+
+
+/*
  * At the current location, using an attr, add a string
  *
  * We also take a length "n", using negative values to imply
@@ -2017,10 +2085,10 @@ errr Term_erase(int x, int y, int n)
         * Á´³Ñʸ»ú¤Î±¦È¾Ê¬¤«¤éʸ»ú¤òɽ¼¨¤¹¤ë¾ì¹ç¡¢
         * ½Å¤Ê¤Ã¤¿Ê¸»ú¤Îº¸Éôʬ¤ò¾Ãµî¡£
         */
-       if (n > 0 && (((scr_aa[x] & KANJI2) && !(scr_aa[x] & 0x80))
-                     || ((byte)scr_cc[x] == 255 && scr_aa[x] == 255)))
+       if (n > 0 && (((scr_aa[x] & AF_KANJI2) && !(scr_aa[x] & AF_TILE1))
+                     || (scr_aa[x] & AF_BIGTILE2) == AF_BIGTILE2))
 #else
-       if (n > 0 && (byte)scr_cc[x] == 255 && scr_aa[x] == 255)
+       if (n > 0 && (scr_aa[x] & AF_BIGTILE2) == AF_BIGTILE2)
 #endif
        {
                x--;
@@ -2044,7 +2112,7 @@ errr Term_erase(int x, int y, int n)
                 * 2001/04/29 -- Habu
                 * ¹Ô¤Î±¦Ã¼¤Î¾ì¹ç¤Ï¤³¤Î½èÍý¤ò¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£
                 */
-               if ((oa & KANJI1) && (i + 1) == n && x != w - 1)
+               if ((oa & AF_KANJI1) && (i + 1) == n && x != w - 1)
                        n++;
 #endif
                /* Save the "literal" information */
@@ -2182,12 +2250,12 @@ errr Term_redraw_section(int x1, int y1, int x2, int y2)
    
                if (x1j > 0)
                {
-                       if (Term->scr->a[i][x1j] & KANJI2) x1j--;
+                       if (Term->scr->a[i][x1j] & AF_KANJI2) x1j--;
                }
    
                if (x2j < Term->wid - 1)
                {
-                       if (Term->scr->a[i][x2j] & KANJI1) x2j++;
+                       if (Term->scr->a[i][x2j] & AF_KANJI1) x2j++;
                }
    
                Term->x1[i] = x1j;
@@ -2914,6 +2982,14 @@ errr term_init(term *t, int w, int h, int k)
        t->char_blank = ' ';
 
 
+       /* Prepare "fake" hooks to prevent core dumps */
+       t->curs_hook = Term_curs_hack;
+       t->bigcurs_hook = Term_bigcurs_hack;
+       t->wipe_hook = Term_wipe_hack;
+       t->text_hook = Term_text_hack;
+       t->pict_hook = Term_pict_hack;
+
+
        /* Success */
        return (0);
 }