OSDN Git Service

[Feature] fresh_before/after/messageとfresh_onceの競合時の処理
authordis- <dis.rogue@gmail.com>
Sat, 20 Feb 2021 05:01:42 +0000 (14:01 +0900)
committerdis- <dis.rogue@gmail.com>
Sat, 20 Feb 2021 05:01:42 +0000 (14:01 +0900)
これまでfresh_*のオプションの描写タイミングが競合することはなかったが、fresh_onceは描写を制限するため競合することがある。
オプションの選択肢を最大化するため、fresh_onceで描写を制限していてもその他オプションの描画タイミングは強制的に描写を行うよう変更する。
描写回数を最低にしたいプレイヤーはfresh_onceをON、他をOFFにすれば良い。

src/core/player-processor.c
src/dungeon/dungeon-processor.c
src/term/z-term.c
src/term/z-term.h
src/view/display-messages.c

index a515e3f..42bcb88 100644 (file)
@@ -251,7 +251,7 @@ void process_player(player_type *creature_ptr)
         handle_stuff(creature_ptr);
         move_cursor_relative(creature_ptr->y, creature_ptr->x);
         if (fresh_before)
-            term_fresh();
+            term_fresh_force();
 
         pack_overflow(creature_ptr);
         if (!command_new)
index e6e68d3..07bbe6f 100644 (file)
@@ -170,7 +170,7 @@ void process_dungeon(player_type *player_ptr, bool load_game)
 
         move_cursor_relative(player_ptr->y, player_ptr->x);
         if (fresh_after)
-            term_fresh();
+            term_fresh_force();
 
         if (!player_ptr->playing || player_ptr->is_dead)
             break;
@@ -180,7 +180,7 @@ void process_dungeon(player_type *player_ptr, bool load_game)
 
         move_cursor_relative(player_ptr->y, player_ptr->x);
         if (fresh_after)
-            term_fresh();
+            term_fresh_force();
 
         if (!player_ptr->playing || player_ptr->is_dead)
             break;
@@ -190,7 +190,7 @@ void process_dungeon(player_type *player_ptr, bool load_game)
 
         move_cursor_relative(player_ptr->y, player_ptr->x);
         if (fresh_after) {
-            term_fresh();
+            term_fresh_force();
         }
 
         if (!player_ptr->playing || player_ptr->is_dead)
index 7af45f0..46d6c9d 100644 (file)
@@ -11,7 +11,6 @@
 #include "game-option/map-screen-options.h"
 #include "game-option/runtime-arguments.h"
 #include "game-option/special-options.h"
-#include "io/input-key-requester.h"
 #include "term/gameterm.h"
 #include "term/term-color-types.h"
 #include "term/z-virt.h"
@@ -1274,6 +1273,19 @@ errr term_fresh(void)
     return 0;
 }
 
+
+/*
+ * @brief never_freshの値を無視して強制的にterm_freshを行う。
+ */
+errr term_fresh_force(void)
+{
+    bool old = Term->never_fresh;
+    Term->never_fresh = FALSE;
+    errr err = term_fresh();
+    Term->never_fresh = old;
+    return err;
+}
+
 /*** Output routines ***/
 
 /*
index a2a0c3a..5b8682e 100644 (file)
@@ -148,6 +148,7 @@ void term_queue_line(TERM_LEN x, TERM_LEN y, int n, TERM_COLOR *a, char *c, TERM
 bool macro_running(void);
 
 errr term_fresh(void);
+errr term_fresh_force(void);
 errr term_set_cursor(int v);
 errr term_gotoxy(TERM_LEN x, TERM_LEN y);
 errr term_draw(TERM_LEN x, TERM_LEN y, TERM_COLOR a, char c);
index d059bb6..367268a 100644 (file)
@@ -431,7 +431,7 @@ void msg_print(concptr msg)
 #endif
 
     if (fresh_message)
-        term_fresh();
+        term_fresh_force();
 }
 
 /*