OSDN Git Service

[Feature] #83 ウェイト値をmsecで0から1000へ選択可能に。セーブデータ含めて型をbyteからint32_tへ。
authorDeskull <61610939+sikabane-works@users.noreply.github.com>
Sat, 2 Oct 2021 03:04:24 +0000 (12:04 +0900)
committerDeskull <61610939+sikabane-works@users.noreply.github.com>
Sat, 2 Oct 2021 04:48:57 +0000 (13:48 +0900)
src/cmd-io/cmd-gameoption.cpp
src/combat/shoot.cpp
src/effect/effect-processor.cpp
src/game-option/special-options.cpp
src/game-option/special-options.h
src/load/option-loader.cpp
src/mind/mind-mirror-master.cpp
src/object-use/throw-execution.cpp
src/save/info-writer.cpp
src/spell-kind/spells-genocide.cpp

index d337c01..d55f5ee 100644 (file)
@@ -2,6 +2,7 @@
 #include "autopick/autopick.h"
 #include "cmd-io/cmd-autopick.h"
 #include "cmd-io/cmd-dump.h"
+#include "core/asking-player.h"
 #include "core/player-redraw-types.h"
 #include "core/show-file.h"
 #include "core/window-redrawer.h"
@@ -546,23 +547,9 @@ void do_cmd_options(player_type *player_ptr)
         case 'D':
         case 'd': {
             clear_from(18);
-            prt(_("コマンド: 基本ウェイト量", "Command: Base Delay Factor"), 19, 0);
-            while (true) {
-                int msec = delay_factor * delay_factor * delay_factor;
-                prt(format(_("現在のウェイト: %d (%dミリ秒)", "Current base delay factor: %d (%d msec)"), delay_factor, msec), 22, 0);
-                prt(_("ウェイト (0-9) ESCで決定: ", "Delay Factor (0-9 or ESC to accept): "), 20, 0);
-                k = inkey();
-                if (k == ESCAPE)
-                    break;
-                else if (k == '?') {
-                    (void)show_file(player_ptr, true, _("joption.txt#BaseDelay", "option.txt#BaseDelay"), nullptr, 0, 0);
-                    term_clear();
-                } else if (isdigit(k))
-                    delay_factor = D2I(k);
-                else
-                    bell();
-            }
-
+            prt(format(_("現在ウェイト量(msec): %d", "Current Delay Factor(msec): %d"), delay_factor), 19, 0);
+            (void)get_value(_("コマンド: ウェイト量(msec)", "Command: Delay Factor(msec)"), 0, 1000, &delay_factor);
+            clear_from(18);
             break;
         }
         case 'H':
index 2c10992..533273d 100644 (file)
@@ -401,8 +401,6 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
 
     uint16_t path_g[512]; /* For calcuration of path length */
 
-    int msec = delay_factor * delay_factor * delay_factor;
-
     /* STICK TO */
     bool stick_to = false;
 
@@ -580,11 +578,11 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
                 byte a = object_attr(q_ptr);
 
                 /* Draw, Hilite, Fresh, Pause, Erase */
-                if (msec > 0) {
+                if (delay_factor > 0) {
                     print_rel(player_ptr, c, a, ny, nx);
                     move_cursor_relative(ny, nx);
                     term_fresh();
-                    term_xtra(TERM_XTRA_DELAY, msec);
+                    term_xtra(TERM_XTRA_DELAY, delay_factor);
                     lite_spot(player_ptr, ny, nx);
                     term_fresh();
                 }
@@ -593,8 +591,8 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
             /* The player cannot see the missile */
             else {
                 /* Pause anyway, for consistancy **/
-                if (msec > 0) {
-                    term_xtra(TERM_XTRA_DELAY, msec);
+                if (delay_factor > 0) {
+                    term_xtra(TERM_XTRA_DELAY, delay_factor);
                 }
             }
 
@@ -812,11 +810,11 @@ void exe_fire(player_type *player_ptr, INVENTORY_IDX item, object_type *j_ptr, S
 
                                 update_monster(player_ptr, m_idx, true);
 
-                                if (msec > 0) {
+                                if (delay_factor > 0) {
                                     lite_spot(player_ptr, ny, nx);
                                     lite_spot(player_ptr, oy, ox);
                                     term_fresh();
-                                    term_xtra(TERM_XTRA_DELAY, msec);
+                                    term_xtra(TERM_XTRA_DELAY, delay_factor);
                                 }
 
                                 x = nx;
index d3df1b3..f92a48b 100644 (file)
@@ -97,7 +97,6 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
     POSITION x2;
     POSITION y_saver;
     POSITION x_saver;
-    int msec = delay_factor * delay_factor * delay_factor;
     bool visual = false;
     bool drawn = false;
     bool breath = false;
@@ -203,7 +202,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
             gx[grids] = x;
             grids++;
 
-            if (msec > 0) {
+            if (delay_factor > 0) {
                 if (!blind && !(flag & (PROJECT_HIDE))) {
                     if (panel_contains(y, x) && player_has_los_bold(player_ptr, y, x)) {
                         uint16_t p = bolt_pict(oy, ox, y, x, typ);
@@ -212,7 +211,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
                         print_rel(player_ptr, c, a, y, x);
                         move_cursor_relative(y, x);
                         term_fresh();
-                        term_xtra(TERM_XTRA_DELAY, msec);
+                        term_xtra(TERM_XTRA_DELAY, delay_factor);
                         lite_spot(player_ptr, y, x);
                         term_fresh();
                         if (flag & (PROJECT_BEAM)) {
@@ -224,7 +223,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
 
                         visual = true;
                     } else if (visual) {
-                        term_xtra(TERM_XTRA_DELAY, msec);
+                        term_xtra(TERM_XTRA_DELAY, delay_factor);
                     }
                 }
             }
@@ -298,7 +297,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
             gx[grids] = x;
             grids++;
             {
-                if (msec > 0) {
+                if (delay_factor > 0) {
                     if (panel_contains(y, x) && player_has_los_bold(player_ptr, y, x)) {
                         uint16_t p;
                         TERM_COLOR a;
@@ -309,7 +308,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
                         print_rel(player_ptr, c, a, y, x);
                         move_cursor_relative(y, x);
                         term_fresh();
-                        term_xtra(TERM_XTRA_DELAY, msec);
+                        term_xtra(TERM_XTRA_DELAY, delay_factor);
                         lite_spot(player_ptr, y, x);
                         term_fresh();
                         if (flag & (PROJECT_BEAM)) {
@@ -321,7 +320,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
 
                         visual = true;
                     } else if (visual) {
-                        term_xtra(TERM_XTRA_DELAY, msec);
+                        term_xtra(TERM_XTRA_DELAY, delay_factor);
                     }
                 }
             }
@@ -412,7 +411,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
             grids++;
         }
 
-        if (msec > 0) {
+        if (delay_factor > 0) {
             if (!blind && !(flag & (PROJECT_HIDE | PROJECT_FAST))) {
                 if (panel_contains(y, x) && player_has_los_bold(player_ptr, y, x)) {
                     uint16_t p;
@@ -424,7 +423,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
                     print_rel(player_ptr, c, a, y, x);
                     move_cursor_relative(y, x);
                     term_fresh();
-                    term_xtra(TERM_XTRA_DELAY, msec);
+                    term_xtra(TERM_XTRA_DELAY, delay_factor);
                     lite_spot(player_ptr, y, x);
                     term_fresh();
                     if (flag & (PROJECT_BEAM)) {
@@ -436,7 +435,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
 
                     visual = true;
                 } else if (visual) {
-                    term_xtra(TERM_XTRA_DELAY, msec);
+                    term_xtra(TERM_XTRA_DELAY, delay_factor);
                 }
             }
         }
@@ -515,7 +514,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
     if (!grids)
         return res;
 
-    if (!blind && !(flag & (PROJECT_HIDE)) && (msec > 0)) {
+    if (!blind && !(flag & (PROJECT_HIDE)) && (delay_factor > 0)) {
         for (int t = 0; t <= gm_rad; t++) {
             for (int i = gm[t]; i < gm[t + 1]; i++) {
                 y = gy[i];
@@ -535,7 +534,7 @@ ProjectResult project(player_type *player_ptr, const MONSTER_IDX who, POSITION r
             move_cursor_relative(by, bx);
             term_fresh();
             if (visual || drawn) {
-                term_xtra(TERM_XTRA_DELAY, msec);
+                term_xtra(TERM_XTRA_DELAY, delay_factor);
             }
         }
 
index e519a80..ac3d6a6 100644 (file)
@@ -2,7 +2,7 @@
 
 byte hitpoint_warn; /* Hitpoint warning (0 to 9) */
 byte mana_warn; /* Mana color (0 to 9) */
-byte delay_factor; /* Delay factor (0 to 9) */
+int32_t delay_factor; /* Delay factor (0 to 9) */
 bool autosave_l; /* Autosave before entering new levels */
 bool autosave_t; /* Timed autosave */
 int16_t autosave_freq; /* Autosave frequency */
index d545eb1..ecd69b0 100644 (file)
@@ -4,7 +4,7 @@
 
 extern byte hitpoint_warn;
 extern byte mana_warn;
-extern byte delay_factor;
+extern int32_t delay_factor;
 extern int16_t autosave_freq;
 extern bool autosave_t;
 extern bool autosave_l;
index 7597b81..1bbab9f 100644 (file)
@@ -27,8 +27,13 @@ void rd_options(void)
     strip_bytes(16);
 
     byte b;
-    rd_byte(&b);
-    delay_factor = b;
+
+    if (loading_savefile_version_is_older_than(9)) {
+        rd_byte(&b);
+        delay_factor = b * b * b;
+    } else {
+        rd_s32b(&delay_factor);
+    }
 
     rd_byte(&b);
     hitpoint_warn = b;
index 8a2036c..1a3e2cb 100644 (file)
@@ -108,7 +108,6 @@ bool binding_field(player_type *player_ptr, HIT_POINT dam)
 {
     POSITION mirror_x[10], mirror_y[10]; /* 鏡はもっと少ない */
     int mirror_num = 0; /* 鏡の数 */
-    int msec = delay_factor * delay_factor * delay_factor;
 
     /* 三角形の頂点 */
     POSITION point_x[3];
@@ -173,7 +172,7 @@ bool binding_field(player_type *player_ptr, HIT_POINT dam)
                         print_rel(player_ptr, PICT_C(p), PICT_A(p), y, x);
                         move_cursor_relative(y, x);
                         term_fresh();
-                        term_xtra(TERM_XTRA_DELAY, msec);
+                        term_xtra(TERM_XTRA_DELAY, delay_factor);
                     }
                 }
             }
index 81dca5b..58f6c40 100644 (file)
@@ -70,7 +70,7 @@ ObjectThrowEntity::ObjectThrowEntity(player_type *player_ptr, object_type *q_ptr
     , player_ptr(player_ptr)
     , shuriken(shuriken)
     , mult(mult)
-    , msec(delay_factor_val * delay_factor_val * delay_factor_val)
+    , msec(delay_factor_val)
     , boomerang(boomerang)
 {
 }
index e58ba72..e90e1e8 100644 (file)
@@ -49,7 +49,8 @@ void wr_options(save_type type)
     for (int i = 0; i < 4; i++)
         wr_u32b(0L);
 
-    wr_byte(delay_factor);
+    wr_u32b(delay_factor);
+
     wr_byte(hitpoint_warn);
     wr_byte(mana_warn);
 
index 619ac66..416a806 100644 (file)
@@ -107,8 +107,7 @@ bool genocide_aux(player_type *player_ptr, MONSTER_IDX m_idx, int power, bool pl
     handle_stuff(player_ptr);
     term_fresh();
 
-    int msec = delay_factor * delay_factor * delay_factor;
-    term_xtra(TERM_XTRA_DELAY, msec);
+    term_xtra(TERM_XTRA_DELAY, delay_factor);
 
     return !resist;
 }