}
#endif
/* Handle printables */
- else if (isprint(*s))
+ else if (isprint((unsigned char)*s))
{
/* Copy */
buf[i++] = *s;
/* No sound */
if (!use_music) return;
+ if(ambush_flag)
+ {
+ play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH);
+ return;
+ }
+
if(p_ptr->wild_mode)
{
play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD);
-/*
- * How many messages are "available"?
+/*!
+ * @brief 保存中の過去ゲームメッセージの数を返す。 / How many messages are "available"?
+ * @return 残っているメッセージの数
*/
s16b message_num(void)
{
}
-
-/*
- * Recall the "text" of a saved message
+/*!
+ * @brief 過去のゲームメッセージを返す。 / Recall the "text" of a saved message
+ * @params age メッセージの世代
+ * @return メッセージの文字列ポインタ
*/
cptr message_str(int age)
{
- s16b x;
- s16b o;
+ s32b x;
+ s32b o;
cptr s;
/* Forgotten messages have no text */
}
-
-/*
- * Add a new message, with great efficiency
+/*!
+ * @brief ゲームメッセージをログに追加する。 / Add a new message, with great efficiency
+ * @params str 保存したいメッセージ
+ * @return なし
*/
void message_add(cptr str)
{
int i, k, x, m, n;
- char u[1024];
+ char u[4096];
char splitted1[81];
cptr splitted2;
/* Important Hack -- Ignore "long" messages */
if (n >= MESSAGE_BUF / 4) return;
- /* extra step -- split the message if n>80. (added by Mogami) */
+ /* extra step -- split the message if n>80.(added by Mogami) */
if (n > 80) {
#ifdef JP
- cptr t = str;
-
- for (n = 0; n < 80; n++, t++)
- if(iskanji(*t)) {
- t++;
- n++;
- }
- if (n == 81) n = 79; /* 最後の文字が漢字半分 */
+ cptr t = str;
+
+ for (n = 0; n < 80; n++, t++)
+ {
+ if(iskanji(*t)) {
+ t++;
+ n++;
+ }
+ }
+ if (n == 81) n = 79; /* 最後の文字が漢字半分 */
#else
- for (n = 80; n > 60; n--)
- if (str[n] == ' ') break;
- if (n == 60)
- n = 80;
+ for (n = 80; n > 60; n--)
+ if (str[n] == ' ') break;
+ if (n == 60) n = 80;
#endif
- splitted2 = str + n;
- strncpy(splitted1, str ,n);
- splitted1[n] = '\0';
- str = splitted1;
+ splitted2 = str + n;
+ strncpy(splitted1, str ,n);
+ splitted1[n] = '\0';
+ str = splitted1;
} else {
- splitted2 = NULL;
+ splitted2 = NULL;
}
- /*** Step 2 -- Attempt to optimize ***/
+ /*** Step 2 -- 最適化の試行 / Attempt to optimize ***/
/* Limit number of messages to check */
m = message_num();
-
k = m / 4;
-
- /* Limit number of messages to check */
if (k > MESSAGE_MAX / 32) k = MESSAGE_MAX / 32;
/* Check previous message */
/* Find multiple */
#ifdef JP
- for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++)
- if( iskanji(*t))t++;
+ for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++)
+ if(iskanji(*t))t++;
#else
for (t = buf; *t && (*t != '<'); t++);
#endif
/* Check the last few messages (if any to count) */
for (i = message__next; k; k--)
{
- u16b q;
-
+ int q;
cptr old;
/* Back up and wrap if needed */
message__head += n + 1;
/* recursively add splitted message (added by Mogami) */
- end_of_message_add:
+end_of_message_add:
if (splitted2 != NULL)
message_add(splitted2);
}
void msg_print(cptr msg)
{
static int p = 0;
-
int n;
-
char *t;
-
char buf[1024];
if (world_monster) return;
p = 0;
}
-
/* No message */
if (!msg) return;
t += split; n -= split;
}
-
/* Display the tail of the message */
Term_putstr(p, 0, n, TERM_WHITE, t);
p += n + 1;
#endif
-
/* Optional refresh */
if (fresh_message) Term_fresh();
}
+void msg_print_wizard(int cheat_type, cptr msg)
+{
+ if (!cheat_room && cheat_type == CHEAT_DUNGEON) return;
+ if (!cheat_peek && cheat_type == CHEAT_OBJECT) return;
+ if (!cheat_hear && cheat_type == CHEAT_MONSTER) return;
+ if (!cheat_xtra && cheat_type == CHEAT_MISC) return;
+
+ cptr cheat_mes[] = {"ITEM", "MONS", "DUNG", "MISC"};
+ char buf[1024];
+ sprintf(buf, "WIZ-%s:%s", cheat_mes[cheat_type], msg);
+ msg_print(buf);
+}
/*
* Hack -- prevent "accidents" in "screen_save()" or "screen_load()"
msg_print(buf);
}
+/*
+ * Display a formatted message, using "vstrnfmt()" and "msg_print()".
+ */
+void msg_format_wizard(int cheat_type, cptr fmt, ...)
+{
+ if(!cheat_room && cheat_type == CHEAT_DUNGEON) return;
+ if(!cheat_peek && cheat_type == CHEAT_OBJECT) return;
+ if(!cheat_hear && cheat_type == CHEAT_MONSTER) return;
+ if(!cheat_xtra && cheat_type == CHEAT_MISC) return;
+
+ va_list vp;
+ char buf[1024];
+
+ /* Begin the Varargs Stuff */
+ va_start(vp, fmt);
+
+ /* Format the args, save the length */
+ (void)vstrnfmt(buf, 1024, fmt, vp);
+
+ /* End the Varargs Stuff */
+ va_end(vp);
+
+ /* Display */
+ msg_print_wizard(cheat_type, buf);
+}
+
/*