Skip to content

Commit

Permalink
Merge branch 'develop' into macos-develop
Browse files Browse the repository at this point in the history
  • Loading branch information
backwardsEric committed Jun 30, 2024
2 parents faa663c + fb90557 commit 5ae487d
Show file tree
Hide file tree
Showing 42 changed files with 340 additions and 352 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(hengband, 3.0.1.15-Beta)
AC_INIT(hengband, 3.0.1.16-Beta)

AC_CONFIG_MACRO_DIRS([m4])
AC_CONFIG_HEADERS(src/autoconf.h)
Expand Down
2 changes: 1 addition & 1 deletion doxygen/Hengband.doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = Hengband
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = 3.0.1.15-Beta
PROJECT_NUMBER = 3.0.1.16-Beta

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down
4 changes: 2 additions & 2 deletions src/autopick/autopick-entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,12 +457,12 @@ void autopick_entry_from_object(PlayerType *player_ptr, autopick_type *entry, co
auto realm_except_class = pc.equals(PlayerClassType::SORCERER) || pc.equals(PlayerClassType::RED_MAGE);

PlayerRealm pr(player_ptr);
if ((pr.get_realm1_book() == tval) && !realm_except_class) {
if ((pr.realm1().get_book() == tval) && !realm_except_class) {
entry->add(FLG_REALM1);
name = false;
}

if ((pr.get_realm2_book() == tval) && !realm_except_class) {
if ((pr.realm2().get_book() == tval) && !realm_except_class) {
entry->add(FLG_REALM2);
name = false;
}
Expand Down
4 changes: 2 additions & 2 deletions src/autopick/autopick-matcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,11 @@ bool is_autopick_match(PlayerType *player_ptr, const ItemEntity *o_ptr, const au
auto realm_except_class = pc.equals(PlayerClassType::SORCERER) || pc.equals(PlayerClassType::RED_MAGE);

PlayerRealm pr(player_ptr);
if (entry.has(FLG_REALM1) && ((pr.get_realm1_book() != tval) || realm_except_class)) {
if (entry.has(FLG_REALM1) && ((pr.realm1().get_book() != tval) || realm_except_class)) {
return false;
}

if (entry.has(FLG_REALM2) && ((pr.get_realm2_book() != tval) || realm_except_class)) {
if (entry.has(FLG_REALM2) && ((pr.realm2().get_book() != tval) || realm_except_class)) {
return false;
}

Expand Down
142 changes: 40 additions & 102 deletions src/birth/birth-select-realm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,77 +28,6 @@ struct birth_realm_type {
int os;
};

static byte count_realm_selection(const uint32_t choices, int *count)
{
byte auto_select = REALM_NONE;
if (choices & CH_LIFE) {
(*count)++;
auto_select = REALM_LIFE;
}

if (choices & CH_SORCERY) {
(*count)++;
auto_select = REALM_SORCERY;
}

if (choices & CH_NATURE) {
(*count)++;
auto_select = REALM_NATURE;
}

if (choices & CH_CHAOS) {
(*count)++;
auto_select = REALM_CHAOS;
}

if (choices & CH_DEATH) {
(*count)++;
auto_select = REALM_DEATH;
}

if (choices & CH_TRUMP) {
(*count)++;
auto_select = REALM_TRUMP;
}

if (choices & CH_ARCANE) {
(*count)++;
auto_select = REALM_ARCANE;
}

if (choices & CH_ENCHANT) {
(*count)++;
auto_select = REALM_CRAFT;
}

if (choices & CH_DAEMON) {
(*count)++;
auto_select = REALM_DAEMON;
}

if (choices & CH_CRUSADE) {
(*count)++;
auto_select = REALM_CRUSADE;
}

if (choices & CH_MUSIC) {
(*count)++;
auto_select = REALM_MUSIC;
}

if (choices & CH_HISSATSU) {
(*count)++;
auto_select = REALM_HISSATSU;
}

if (choices & CH_HEX) {
(*count)++;
auto_select = REALM_HEX;
}

return auto_select;
}

static birth_realm_type *initialize_birth_realm_type(birth_realm_type *birth_realm_ptr)
{
birth_realm_ptr->cs = 0;
Expand All @@ -112,7 +41,7 @@ static birth_realm_type *initialize_birth_realm_type(birth_realm_type *birth_rea
return birth_realm_ptr;
}

static void impose_first_realm(PlayerType *player_ptr, uint32_t *choices)
static void impose_first_realm(PlayerType *player_ptr, RealmChoices &choices)
{
if (player_ptr->realm2 == REALM_SELECT_CANCEL) {
return;
Expand All @@ -122,37 +51,37 @@ static void impose_first_realm(PlayerType *player_ptr, uint32_t *choices)
return;
}

if (is_good_realm(player_ptr->realm1)) {
*choices &= ~(CH_DEATH | CH_DAEMON);
if (PlayerRealm(player_ptr).realm1().is_good_attribute()) {
choices.reset({ REALM_DEATH, REALM_DAEMON });
} else {
*choices &= ~(CH_LIFE | CH_CRUSADE);
choices.reset({ REALM_LIFE, REALM_CRUSADE });
}
}

static void analyze_realms(const PlayerType *player_ptr, const uint32_t choices, birth_realm_type *birth_realm_ptr)
static void analyze_realms(const PlayerType *player_ptr, const RealmChoices &choices, birth_realm_type *birth_realm_ptr)
{
for (int i = 0; i < 32; i++) {
if ((choices & (1UL << i)) == 0) {
for (auto realm : EnumRange(REALM_LIFE, REALM_MAX)) {
if (choices.has_not(realm)) {
continue;
}

if (player_ptr->realm1 == i + 1) {
if (player_ptr->realm1 == realm) {
if (player_ptr->realm2 == REALM_SELECT_CANCEL) {
birth_realm_ptr->cs = birth_realm_ptr->n;
} else {
continue;
}
}

if (player_ptr->realm2 == i + 1) {
if (player_ptr->realm2 == realm) {
birth_realm_ptr->cs = birth_realm_ptr->n;
}

birth_realm_ptr->sym[birth_realm_ptr->n] = I2A(birth_realm_ptr->n);

const auto buf = format("%c%c %s", birth_realm_ptr->sym[birth_realm_ptr->n], birth_realm_ptr->p2, realm_names[i + 1].data());
const auto buf = format("%c%c %s", birth_realm_ptr->sym[birth_realm_ptr->n], birth_realm_ptr->p2, PlayerRealm::get_name(realm).data());
put_str(buf, 12 + (birth_realm_ptr->n / 5), 2 + 15 * (birth_realm_ptr->n % 5));
birth_realm_ptr->picks[birth_realm_ptr->n++] = i + 1;
birth_realm_ptr->picks[birth_realm_ptr->n++] = realm;
}
}

Expand All @@ -167,9 +96,9 @@ static void move_birth_realm_cursor(birth_realm_type *birth_realm_ptr)
if (birth_realm_ptr->cs == birth_realm_ptr->n) {
birth_realm_ptr->cur = format("%c%c %s", '*', birth_realm_ptr->p2, _("ランダム", "Random"));
} else {
const auto &realm_name = PlayerRealm::get_name(birth_realm_ptr->picks[birth_realm_ptr->cs]);
birth_realm_ptr->cur = format("%c%c %s", birth_realm_ptr->sym[birth_realm_ptr->cs], birth_realm_ptr->p2,
realm_names[birth_realm_ptr->picks[birth_realm_ptr->cs]].data());
const auto &realm_name = realm_names[birth_realm_ptr->picks[birth_realm_ptr->cs]];
realm_name.data());
c_put_str(TERM_L_BLUE, realm_name, 3, 40);
prt(_("の特徴", ": Characteristic"), 3, 40 + realm_name->length());
prt(realm_subinfo[technic2magic(birth_realm_ptr->picks[birth_realm_ptr->cs]) - 1], 4, 40);
Expand Down Expand Up @@ -271,15 +200,14 @@ static bool get_a_realm(PlayerType *player_ptr, birth_realm_type *birth_realm_pt
* @return 選択した魔法領域のID
* @details 領域数が0 (戦士等)or 1 (観光客等)なら自動での値を返す
*/
static byte select_realm(PlayerType *player_ptr, uint32_t choices, int *count)
static byte select_realm(PlayerType *player_ptr, RealmChoices choices)
{
byte auto_select = count_realm_selection(choices, count);
clear_from(10);
if ((*count) < 2) {
return auto_select;
if (choices.count() <= 1) {
return choices.first().value_or(REALM_NONE);
}

impose_first_realm(player_ptr, &choices);
impose_first_realm(player_ptr, choices);
put_str(_("注意:魔法の領域の選択によりあなたが習得する呪文のタイプが決まります。", "Note: The realm of magic will determine which spells you can learn."),
23, 5);

Expand Down Expand Up @@ -322,6 +250,21 @@ static bool check_realm_selection(PlayerType *player_ptr, int count)
return false;
}

static void print_choosed_realms(PlayerType *player_ptr)
{
put_str(_("魔法 :", "Magic :"), 6, 1);

PlayerRealm pr(player_ptr);
std::string choosed_realms;
if (player_ptr->realm2 == REALM_NONE) {
choosed_realms = pr.realm1().get_name();
} else {
choosed_realms = format("%s, %s", pr.realm1().get_name().data(), pr.realm2().get_name().data());
}

c_put_str(TERM_L_BLUE, choosed_realms, 6, 15);
}

/*!
* @brief 選択した魔法領域の解説を表示する / Choose the magical realms
* @return ユーザが魔法領域の確定を選んだらTRUEを返す。
Expand Down Expand Up @@ -351,8 +294,8 @@ bool get_player_realms(PlayerType *player_ptr)
}

while (true) {
int count = 0;
player_ptr->realm1 = select_realm(player_ptr, realm_choices1[enum2i(player_ptr->pclass)], &count);
auto choices = PlayerRealm::get_realm1_choices(player_ptr->pclass);
player_ptr->realm1 = select_realm(player_ptr, choices);
if (player_ptr->realm1 == REALM_SELECT_CANCEL) {
return false;
}
Expand All @@ -363,7 +306,7 @@ bool get_player_realms(PlayerType *player_ptr)
cleanup_realm_selection_window();
display_wrap_around(realm_explanations[technic2magic(player_ptr->realm1) - 1], 74, 12, 3);

if (check_realm_selection(player_ptr, count)) {
if (check_realm_selection(player_ptr, choices.count())) {
break;
}
}
Expand All @@ -374,14 +317,12 @@ bool get_player_realms(PlayerType *player_ptr)
return true;
}

/* Print the realm */
put_str(_("魔法 :", "Magic :"), 6, 1);
c_put_str(TERM_L_BLUE, realm_names[player_ptr->realm1], 6, 15);
print_choosed_realms(player_ptr);

/* Select the second realm */
while (true) {
int count = 0;
player_ptr->realm2 = select_realm(player_ptr, realm_choices2[enum2i(player_ptr->pclass)], &count);
auto choices = PlayerRealm::get_realm2_choices(player_ptr->pclass);
player_ptr->realm2 = select_realm(player_ptr, choices);

if (player_ptr->realm2 == REALM_SELECT_CANCEL) {
return false;
Expand All @@ -393,15 +334,12 @@ bool get_player_realms(PlayerType *player_ptr)
cleanup_realm_selection_window();
display_wrap_around(realm_explanations[technic2magic(player_ptr->realm2) - 1], 74, 12, 3);

if (check_realm_selection(player_ptr, count)) {
if (check_realm_selection(player_ptr, choices.count())) {
break;
}
}

if (player_ptr->realm2) {
/* Print the realm */
c_put_str(TERM_L_BLUE, format("%s, %s", realm_names[player_ptr->realm1].data(), realm_names[player_ptr->realm2].data()), 6, 15);
}
print_choosed_realms(player_ptr);

return true;
}
7 changes: 4 additions & 3 deletions src/birth/character-builder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
#include "player-info/race-types.h"
#include "player/patron.h"
#include "player/player-personality.h"
#include "player/player-realm.h"
#include "player/player-sex.h"
#include "player/race-info-table.h"
#include "realm/realm-names-table.h"
#include "store/store-owners.h"
#include "store/store.h"
#include "system/player-type-definition.h"
Expand Down Expand Up @@ -66,9 +66,10 @@ static void write_birth_diary(PlayerType *player_ptr)
exe_write_diary(floor, DiaryKind::DESCRIPTION, 1, mes_race);
const auto mes_class = format(_("%s職業に%sを選択した。", "%schose %s class."), indent, class_info.at(player_ptr->pclass).title.data());
exe_write_diary(floor, DiaryKind::DESCRIPTION, 1, mes_class);
PlayerRealm pr(player_ptr);
if (player_ptr->realm1) {
const auto mes_realm2 = player_ptr->realm2 ? format(_("と%s", " and %s realms"), realm_names[player_ptr->realm2].data()) : _("", " realm");
const auto mes_realm = format(_("%s魔法の領域に%s%sを選択した。", "%schose %s%s."), indent, realm_names[player_ptr->realm1].data(), mes_realm2.data());
const auto mes_realm2 = player_ptr->realm2 ? format(_("と%s", " and %s realms"), pr.realm2().get_name().data()) : _("", " realm");
const auto mes_realm = format(_("%s魔法の領域に%s%sを選択した。", "%schose %s%s."), indent, pr.realm1().get_name().data(), mes_realm2.data());
exe_write_diary(floor, DiaryKind::DESCRIPTION, 1, mes_realm);
}

Expand Down
8 changes: 4 additions & 4 deletions src/cmd-action/cmd-spell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -699,7 +699,7 @@ static void change_realm2(PlayerType *player_ptr, int16_t next_realm)
player_ptr->spell_forgotten2 = 0L;

constexpr auto fmt_realm = _("魔法の領域を%sから%sに変更した。", "changed magic realm from %s to %s.");
const auto mes = format(fmt_realm, realm_names[player_ptr->realm2].data(), realm_names[next_realm].data());
const auto mes = format(fmt_realm, PlayerRealm(player_ptr).realm2().get_name().data(), PlayerRealm::get_name(next_realm).data());
exe_write_diary(*player_ptr->current_floor_ptr, DiaryKind::DESCRIPTION, 0, mes);
player_ptr->old_realm |= 1U << (player_ptr->realm2 - 1);
player_ptr->realm2 = next_realm;
Expand Down Expand Up @@ -770,9 +770,9 @@ void do_cmd_study(PlayerType *player_ptr)
const auto tval = o_ptr->bi_key.tval();
const auto sval = *o_ptr->bi_key.sval();
PlayerRealm pr(player_ptr);
if (tval == pr.get_realm2_book()) {
if (tval == pr.realm2().get_book()) {
increment = 32;
} else if (tval != pr.get_realm1_book()) {
} else if (tval != pr.realm1().get_book()) {
if (!input_check(_("本当に魔法の領域を変更しますか?", "Really, change magic realm? "))) {
return;
}
Expand Down Expand Up @@ -1003,7 +1003,7 @@ bool do_cmd_cast(PlayerType *player_ptr)

const auto tval = o_ptr->bi_key.tval();
const auto sval = *o_ptr->bi_key.sval();
if (!is_every_magic && (tval == PlayerRealm(player_ptr).get_realm2_book())) {
if (!is_every_magic && (tval == PlayerRealm(player_ptr).realm2().get_book())) {
increment = 32;
}

Expand Down
4 changes: 2 additions & 2 deletions src/cmd-item/cmd-destroy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
#include "player-info/samurai-data-type.h"
#include "player-status/player-energy.h"
#include "player/attack-defense-types.h"
#include "player/player-realm.h"
#include "player/special-defense-types.h"
#include "racial/racial-android.h"
#include "realm/realm-names-table.h"
#include "status/action-setter.h"
#include "status/experience.h"
#include "system/baseitem-info.h"
Expand Down Expand Up @@ -129,7 +129,7 @@ static bool decide_magic_book_exp(PlayerType *player_ptr, const ItemEntity &dest
}

auto is_good_magic_realm = (tval == ItemKindType::LIFE_BOOK) || (tval == ItemKindType::CRUSADE_BOOK);
if (is_good_realm(player_ptr->realm1)) {
if (PlayerRealm(player_ptr).realm1().is_good_attribute()) {
return !is_good_magic_realm;
} else {
return is_good_magic_realm;
Expand Down
Loading

0 comments on commit 5ae487d

Please sign in to comment.