From b57abe3d79bcb4b83888a7984a422edfd1f1c3b8 Mon Sep 17 00:00:00 2001 From: Hourier Date: Sun, 22 Mar 2020 20:53:37 +0900 Subject: [PATCH] [Refactor] WIP #40233 Separated store-comments.c/h and store-util.h from store.c/h --- Hengband_vcs2017/Hengband/Hengband.vcxproj | 4 + Hengband_vcs2017/Hengband/Hengband.vcxproj.filters | 12 ++ src/Makefile.am | 4 +- src/character-dump.c | 1 + src/cmd/cmd-dump.c | 1 + src/core.c | 1 + src/init.c | 1 + src/load.c | 1 + src/market/say-comments.c | 221 +++++++++++++++++++++ src/market/say-comments.h | 11 + src/market/store-util.c | 5 + src/market/store-util.h | 12 ++ src/player/process-death.c | 1 + src/rooms-city.c | 3 +- src/rooms-vault.c | 1 + src/store.c | 219 +------------------- src/store.h | 14 -- src/wizard1.c | 1 + 18 files changed, 279 insertions(+), 234 deletions(-) create mode 100644 src/market/say-comments.c create mode 100644 src/market/say-comments.h create mode 100644 src/market/store-util.c create mode 100644 src/market/store-util.h diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj b/Hengband_vcs2017/Hengband/Hengband.vcxproj index 81eef3fdb..18748dc23 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj @@ -211,8 +211,10 @@ + + @@ -385,8 +387,10 @@ + + diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters index bcdd34e90..94597437e 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters @@ -550,6 +550,12 @@ market + + market + + + market + @@ -1082,6 +1088,12 @@ market + + market + + + market + diff --git a/src/Makefile.am b/src/Makefile.am index 8f7cc9916..6e89e29e5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,8 +12,10 @@ hengband_SOURCES = \ avatar.h avatar.c birth.c birth.h \ \ market/poker.c market/poker.h market/store-owners.c market/store-owners.h \ - market/store-owner-comments.c store-owner-comments.h \ + market/store-owner-comments.c market/store-owner-comments.h \ market/articles-on-sale.c market/articles-on-sale.h \ + market/say-comments.c market/say-comments.h \ + market/store-util.c market/store-util.h \ store.c store.h bldg.c bldg.h chest.c chest.h chuukei.c chuukei.h \ \ view/display-characteristic.c view/display-characteristic.h \ diff --git a/src/character-dump.c b/src/character-dump.c index d33fec2fc..af1de2856 100644 --- a/src/character-dump.c +++ b/src/character-dump.c @@ -16,6 +16,7 @@ #include "io/player-status-dump.h" #include "io/write-diary.h" #include "avatar.h" +#include "market/store-util.h" /*! * @brief プレイヤーのペット情報をファイルにダンプする diff --git a/src/cmd/cmd-dump.c b/src/cmd/cmd-dump.c index 1293d641a..a88780e7a 100644 --- a/src/cmd/cmd-dump.c +++ b/src/cmd/cmd-dump.c @@ -64,6 +64,7 @@ #include "cmd/feeling-table.h" #include "cmd/monster-group-table.h" #include "cmd/object-group-table.h" +#include "market/store-util.h" #include "view-mainwindow.h" // 暫定。後で消す #include "english.h" diff --git a/src/core.c b/src/core.c index e84219082..1286dfc56 100644 --- a/src/core.c +++ b/src/core.c @@ -65,6 +65,7 @@ #include "mind.h" #include "world.h" #include "mutation.h" +#include "market/store-util.h" #include "quest.h" #include "artifact.h" #include "avatar.h" diff --git a/src/init.c b/src/init.c index 8ce649a47..87f930440 100644 --- a/src/init.c +++ b/src/init.c @@ -60,6 +60,7 @@ #include "rooms-vault.h" #include "world.h" #include "market/articles-on-sale.h" +#include "market/store-util.h" #include #include diff --git a/src/load.c b/src/load.c index ba9274583..08543c231 100644 --- a/src/load.c +++ b/src/load.c @@ -54,6 +54,7 @@ #include "trap.h" #include "mutation.h" #include "monster.h" +#include "market/store-util.h" #include "quest.h" #include "store.h" #include "artifact.h" diff --git a/src/market/say-comments.c b/src/market/say-comments.c new file mode 100644 index 000000000..e7047b49b --- /dev/null +++ b/src/market/say-comments.c @@ -0,0 +1,221 @@ +#include "angband.h" +#include "say-comments.h" +#include "market/store-owner-comments.h" +#include "market/store-util.h" +#include "avatar.h" +#include "rumor.h" + +#define RUMOR_CHANCE 8 +int cur_store_num = 0; + +/*! + * @brief 取引成功時の店主のメッセージ処理 / + * ブラックマーケットのときは別のメッセージを出す + * Successful haggle. + * @param player_ptr プレーヤーへの参照ポインタ + * @return なし + */ +void say_comment_1(player_type *player_ptr) +{ +#ifdef JP + if (cur_store_num == STORE_BLACK) + { + msg_print(comment_1_B[randint0(MAX_COMMENT_1)]); + } + else + { + msg_print(comment_1[randint0(MAX_COMMENT_1)]); + } +#else + msg_print(comment_1[randint0(MAX_COMMENT_1)]); +#endif + + if (one_in_(RUMOR_CHANCE)) + { + msg_print(_("店主は耳うちした:", "The shopkeeper whispers something into your ear:")); + display_rumor(player_ptr, TRUE); + } +} + + +/*! + * @brief プレイヤーがアイテムを買う時の価格代案メッセージ処理 / + * Continue haggling (player is buying) + * @param value 店主の提示価格 + * @param annoyed 店主のいらつき度 + * @return なし + */ +void say_comment_2(PRICE value, int annoyed) +{ + char tmp_val[80]; + sprintf(tmp_val, "%ld", (long)value); + + if (annoyed > 0) + { + msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val); + return; + } + +#ifdef JP + if (cur_store_num == STORE_BLACK) + { + msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val); + } + else + { + msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val); + } +#else + msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val); +#endif +} + + +/*! + * @brief プレイヤーがアイテムを売る時の価格代案メッセージ処理 / + * ブラックマーケットのときは別のメッセージを出す + * Continue haggling (player is selling) + * @param value 店主の提示価格 + * @param annoyed 店主のいらつき度 + * @return なし + */ +void say_comment_3(PRICE value, int annoyed) +{ + char tmp_val[80]; + sprintf(tmp_val, "%ld", (long)value); + if (annoyed > 0) + { + msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val); + } + else + { +#ifdef JP + if (cur_store_num == STORE_BLACK) + { + msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val); + } + else + { + msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val); + } +#else + msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val); +#endif + } +} + + +/*! + * @brief 店主がプレイヤーを追い出す時のメッセージ処理 / + * ブラックマーケットの時は別のメッセージを出す + * Kick 'da bum out. -RAK- + * @return なし + */ +void say_comment_4(void) +{ +#ifdef JP + if (cur_store_num == STORE_BLACK) + { + msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]); + msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]); + } + else + { + msg_print(comment_4a[randint0(MAX_COMMENT_4A)]); + msg_print(comment_4b[randint0(MAX_COMMENT_4B)]); + } +#else + msg_print(comment_4a[randint0(MAX_COMMENT_4A)]); + msg_print(comment_4b[randint0(MAX_COMMENT_4B)]); +#endif + +} + + +/*! + * @brief 店主がプレイヤーに取り合わない時のメッセージ処理 / + * ブラックマーケットの時は別のメッセージを出す + * You are insulting me + * @return なし + */ +void say_comment_5(void) +{ +#ifdef JP + if (cur_store_num == STORE_BLACK) + { + msg_print(comment_5_B[randint0(MAX_COMMENT_5)]); + } + else + { + msg_print(comment_5[randint0(MAX_COMMENT_5)]); + } +#else + msg_print(comment_5[randint0(MAX_COMMENT_5)]); +#endif + +} + + +/*! + * @brief 店主がプレイヤーの提示を理解できなかった時のメッセージ処理 / + * That makes no sense. + * @return なし + */ +void say_comment_6(void) +{ + msg_print(comment_6[randint0(MAX_COMMENT_6)]); +} + +/*! + * @brief 店主が交渉を終えた際の反応を返す処理 / + * Let a shop-keeper React to a purchase + * @param price アイテムの取引額 + * @param value アイテムの実際価値 + * @param guess 店主が当初予想していた価値 + * @return なし + * @details + * We paid "price", it was worth "value", and we thought it was worth "guess" + */ +void purchase_analyze(player_type *player_ptr, PRICE price, PRICE value, PRICE guess) +{ + /* Item was worthless, but we bought it */ + if ((value <= 0) && (price > value)) + { + msg_print(comment_7a[randint0(MAX_COMMENT_7A)]); + chg_virtue(player_ptr, V_HONOUR, -1); + chg_virtue(player_ptr, V_JUSTICE, -1); + sound(SOUND_STORE1); + return; + } + + /* Item was cheaper than we thought, and we paid more than necessary */ + if ((value < guess) && (price > value)) + { + msg_print(comment_7b[randint0(MAX_COMMENT_7B)]); + chg_virtue(player_ptr, V_JUSTICE, -1); + if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1); + sound(SOUND_STORE2); + return; + } + + /* Item was a good bargain, and we got away with it */ + if ((value > guess) && (value < (4 * guess)) && (price < value)) + { + msg_print(comment_7c[randint0(MAX_COMMENT_7C)]); + if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1); + else if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1); + sound(SOUND_STORE3); + return; + } + + /* Item was a great bargain, and we got away with it */ + if ((value > guess) && (price < value)) + { + msg_print(comment_7d[randint0(MAX_COMMENT_7D)]); + if (one_in_(2)) chg_virtue(player_ptr, V_HONOUR, -1); + if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1); + if (10 * price < value) chg_virtue(player_ptr, V_SACRIFICE, 1); + sound(SOUND_STORE4); + return; + } +} diff --git a/src/market/say-comments.h b/src/market/say-comments.h new file mode 100644 index 000000000..cb72e17f5 --- /dev/null +++ b/src/market/say-comments.h @@ -0,0 +1,11 @@ +#pragma once + +extern int cur_store_num; + +void say_comment_1(player_type *player_ptr); +void say_comment_2(PRICE value, int annoyed); +void say_comment_3(PRICE value, int annoyed); +void say_comment_4(void); +void say_comment_5(void); +void say_comment_6(void); +void purchase_analyze(player_type *player_ptr, PRICE price, PRICE value, PRICE guess); diff --git a/src/market/store-util.c b/src/market/store-util.c new file mode 100644 index 000000000..6a2fa41d4 --- /dev/null +++ b/src/market/store-util.c @@ -0,0 +1,5 @@ +#include "market/store-util.h" + +/*! + * todo store.c のユーティリティ関数に相応しいものをここに置く + */ diff --git a/src/market/store-util.h b/src/market/store-util.h new file mode 100644 index 000000000..23eb5f593 --- /dev/null +++ b/src/market/store-util.h @@ -0,0 +1,12 @@ +#pragma once + +#define STORE_GENERAL 0 /*!< 店舗の種類: 雑貨屋 */ +#define STORE_ARMOURY 1 /*!< 店舗の種類: 防具屋 */ +#define STORE_WEAPON 2 /*!< 店舗の種類: 武器屋 */ +#define STORE_TEMPLE 3 /*!< 店舗の種類: 寺院 */ +#define STORE_ALCHEMIST 4 /*!< 店舗の種類: 錬金術の店 */ +#define STORE_MAGIC 5 /*!< 店舗の種類: 魔道具屋 */ +#define STORE_BLACK 6 /*!< 店舗の種類: ブラック・マーケット */ +#define STORE_HOME 7 /*!< 店舗の種類: 我が家 */ +#define STORE_BOOK 8 /*!< 店舗の種類: 書店 */ +#define STORE_MUSEUM 9 /*!< 店舗の種類: 博物館 */ diff --git a/src/player/process-death.c b/src/player/process-death.c index 65411f4ef..fbc2e69ac 100644 --- a/src/player/process-death.c +++ b/src/player/process-death.c @@ -11,6 +11,7 @@ #include "floor-town.h" #include "player-inventory.h" #include "object-flavor.h" +#include "market/store-util.h" #include "store.h" #include "term.h" diff --git a/src/rooms-city.c b/src/rooms-city.c index d36fad03f..971295021 100644 --- a/src/rooms-city.c +++ b/src/rooms-city.c @@ -8,8 +8,7 @@ #include "rooms-city.h" #include "store.h" #include "wild.h" - - +#include "market/store-util.h" /* * Precalculate buildings' location of underground arcade diff --git a/src/rooms-vault.c b/src/rooms-vault.c index 6c9937a62..871151216 100644 --- a/src/rooms-vault.c +++ b/src/rooms-vault.c @@ -13,6 +13,7 @@ #include "dungeon.h" #include "geometry.h" #include "wild.h" +#include "market/store-util.h" /* * The vault generation arrays diff --git a/src/store.c b/src/store.c index a0cf9c999..6a6d295bf 100644 --- a/src/store.c +++ b/src/store.c @@ -11,8 +11,9 @@ */ #include "angband.h" +#include "market/say-comments.h" #include "market/store-owners.h" -#include "market/store-owner-comments.h" +#include "market/store-util.h" #include "core.h" #include "util.h" #include "term.h" @@ -56,7 +57,6 @@ #define MIN_STOCK 12 -static int cur_store_num = 0; static int store_top = 0; static int store_bottom = 0; static int xtra_stock = 0; @@ -64,221 +64,6 @@ static store_type *st_ptr = NULL; static const owner_type *ot_ptr = NULL; static s16b old_town_num = 0; static s16b inner_town_num = 0; -#define RUMOR_CHANCE 8 - -/*** Initialize others ***/ - -/*! - * @brief 取引成功時の店主のメッセージ処理 / - * ブラックマーケットのときは別のメッセージを出す - * Successful haggle. - * @param player_ptr プレーヤーへの参照ポインタ - * @return なし - */ -static void say_comment_1(player_type *player_ptr) -{ -#ifdef JP - if (cur_store_num == STORE_BLACK) - { - msg_print(comment_1_B[randint0(MAX_COMMENT_1)]); - } - else - { - msg_print(comment_1[randint0(MAX_COMMENT_1)]); - } -#else - msg_print(comment_1[randint0(MAX_COMMENT_1)]); -#endif - - if (one_in_(RUMOR_CHANCE)) - { - msg_print(_("店主は耳うちした:", "The shopkeeper whispers something into your ear:")); - display_rumor(player_ptr, TRUE); - } -} - - -/*! - * @brief プレイヤーがアイテムを買う時の価格代案メッセージ処理 / - * Continue haggling (player is buying) - * @param value 店主の提示価格 - * @param annoyed 店主のいらつき度 - * @return なし - */ -static void say_comment_2(PRICE value, int annoyed) -{ - char tmp_val[80]; - sprintf(tmp_val, "%ld", (long)value); - - if (annoyed > 0) - { - msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val); - return; - } - -#ifdef JP - if (cur_store_num == STORE_BLACK) - { - msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val); - } - else - { - msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val); - } -#else - msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val); -#endif -} - - -/*! - * @brief プレイヤーがアイテムを売る時の価格代案メッセージ処理 / - * ブラックマーケットのときは別のメッセージを出す - * Continue haggling (player is selling) - * @param value 店主の提示価格 - * @param annoyed 店主のいらつき度 - * @return なし - */ -static void say_comment_3(PRICE value, int annoyed) -{ - char tmp_val[80]; - sprintf(tmp_val, "%ld", (long)value); - if (annoyed > 0) - { - msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val); - } - else - { -#ifdef JP - if (cur_store_num == STORE_BLACK) - { - msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val); - } - else - { - msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val); - } -#else - msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val); -#endif - } -} - - -/*! - * @brief 店主がプレイヤーを追い出す時のメッセージ処理 / - * ブラックマーケットの時は別のメッセージを出す - * Kick 'da bum out. -RAK- - * @return なし - */ -static void say_comment_4(void) -{ -#ifdef JP - if (cur_store_num == STORE_BLACK) - { - msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]); - msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]); - } - else - { - msg_print(comment_4a[randint0(MAX_COMMENT_4A)]); - msg_print(comment_4b[randint0(MAX_COMMENT_4B)]); - } -#else - msg_print(comment_4a[randint0(MAX_COMMENT_4A)]); - msg_print(comment_4b[randint0(MAX_COMMENT_4B)]); -#endif - -} - - -/*! - * @brief 店主がプレイヤーに取り合わない時のメッセージ処理 / - * ブラックマーケットの時は別のメッセージを出す - * You are insulting me - * @return なし - */ -static void say_comment_5(void) -{ -#ifdef JP - if (cur_store_num == STORE_BLACK) - { - msg_print(comment_5_B[randint0(MAX_COMMENT_5)]); - } - else - { - msg_print(comment_5[randint0(MAX_COMMENT_5)]); - } -#else - msg_print(comment_5[randint0(MAX_COMMENT_5)]); -#endif - -} - - -/*! - * @brief 店主がプレイヤーの提示を理解できなかった時のメッセージ処理 / - * That makes no sense. - * @return なし - */ -static void say_comment_6(void) -{ - msg_print(comment_6[randint0(MAX_COMMENT_6)]); -} - -/*! - * @brief 店主が交渉を終えた際の反応を返す処理 / - * Let a shop-keeper React to a purchase - * @param price アイテムの取引額 - * @param value アイテムの実際価値 - * @param guess 店主が当初予想していた価値 - * @return なし - * @details - * We paid "price", it was worth "value", and we thought it was worth "guess" - */ -static void purchase_analyze(player_type *player_ptr, PRICE price, PRICE value, PRICE guess) -{ - /* Item was worthless, but we bought it */ - if ((value <= 0) && (price > value)) - { - msg_print(comment_7a[randint0(MAX_COMMENT_7A)]); - chg_virtue(player_ptr, V_HONOUR, -1); - chg_virtue(player_ptr, V_JUSTICE, -1); - sound(SOUND_STORE1); - return; - } - - /* Item was cheaper than we thought, and we paid more than necessary */ - if ((value < guess) && (price > value)) - { - msg_print(comment_7b[randint0(MAX_COMMENT_7B)]); - chg_virtue(player_ptr, V_JUSTICE, -1); - if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1); - sound(SOUND_STORE2); - return; - } - - /* Item was a good bargain, and we got away with it */ - if ((value > guess) && (value < (4 * guess)) && (price < value)) - { - msg_print(comment_7c[randint0(MAX_COMMENT_7C)]); - if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1); - else if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1); - sound(SOUND_STORE3); - return; - } - - /* Item was a great bargain, and we got away with it */ - if ((value > guess) && (price < value)) - { - msg_print(comment_7d[randint0(MAX_COMMENT_7D)]); - if (one_in_(2)) chg_virtue(player_ptr, V_HONOUR, -1); - if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1); - if (10 * price < value) chg_virtue(player_ptr, V_SACRIFICE, 1); - sound(SOUND_STORE4); - return; - } -} /* * We store the current "store feat" here so everyone can access it diff --git a/src/store.h b/src/store.h index 1250d88ff..c47a8ebb3 100644 --- a/src/store.h +++ b/src/store.h @@ -34,20 +34,6 @@ struct store_type object_type *stock; /* Stock -- Actual stock items */ }; -/* - * Store types - */ -#define STORE_GENERAL 0 /*!< 店舗の種類: 雑貨屋 */ -#define STORE_ARMOURY 1 /*!< 店舗の種類: 防具屋 */ -#define STORE_WEAPON 2 /*!< 店舗の種類: 武器屋 */ -#define STORE_TEMPLE 3 /*!< 店舗の種類: 寺院 */ -#define STORE_ALCHEMIST 4 /*!< 店舗の種類: 錬金術の店 */ -#define STORE_MAGIC 5 /*!< 店舗の種類: 魔道具屋 */ -#define STORE_BLACK 6 /*!< 店舗の種類: ブラック・マーケット */ -#define STORE_HOME 7 /*!< 店舗の種類: 我が家 */ -#define STORE_BOOK 8 /*!< 店舗の種類: 書店 */ -#define STORE_MUSEUM 9 /*!< 店舗の種類: 博物館 */ - /* * Store constants */ diff --git a/src/wizard1.c b/src/wizard1.c index 9fabd260a..b2991dfac 100644 --- a/src/wizard1.c +++ b/src/wizard1.c @@ -18,6 +18,7 @@ #include "artifact.h" #include "sort.h" #include "store.h" +#include "market/store-util.h" #include "monster.h" #include "object-flavor.h" #include "object-hook.h" -- 2.11.0