#include "world.h"
#include "player-status.h"
#include "sort.h"
+#include "mutation.h"
+#include "quest.h"
+#include "store.h"
+#include "artifact.h"
+#include "avatar.h"
+#include "shoot.h"
+#include "player-move.h"
+#include "patron.h"
+#include "monster.h"
+#include "monster-status.h"
/*
}
break;
- /* Process "X:<str>" -- turn option off */
- /* Process "Y:<str>" -- turn option on */
+ /* Process "X:<str>" -- current_world_ptr->game_turn option off */
+ /* Process "Y:<str>" -- current_world_ptr->game_turn option on */
case 'X':
case 'Y':
for (i = 0; option_info[i].o_desc; i++)
if (streq(gf_desc[i].name, buf + 2))
{
/* Remember this color set */
- gf_color[gf_desc[i].num] = quark_add(t);
+ gf_color[gf_desc[i].num] = (TERM_COLOR)quark_add(t);
/* Success */
return 0;
if (prefix(buf, "FRI:")) strcpy(days[5], buf);
if (prefix(buf, "SAT:")) strcpy(days[6], buf);
}
-
- /* Close it */
my_fclose(fp);
#endif
sprintf(buf, "(%+d,%+d)", (int)show_tohit, (int)show_todam);
/* Dump the bonuses to hit/dam */
- if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM))
display_player_one_line(ENTRY_BARE_HAND, buf, TERM_L_BLUE);
else if (p_ptr->ryoute)
display_player_one_line(ENTRY_TWO_HANDS, buf, TERM_L_BLUE);
}
else
{
- if (MON_FAST(&m_list[p_ptr->riding])) tmp_speed += 10;
- if (MON_SLOW(&m_list[p_ptr->riding])) tmp_speed -= 10;
+ if (MON_FAST(¤t_floor_ptr->m_list[p_ptr->riding])) tmp_speed += 10;
+ if (MON_SLOW(¤t_floor_ptr->m_list[p_ptr->riding])) tmp_speed -= 10;
}
if (tmp_speed)
display_player_one_line(ENTRY_SP, format("%4d/%4d", p_ptr->csp , p_ptr->msp), TERM_RED);
/* Dump play time */
- display_player_one_line(ENTRY_PLAY_TIME, format("%.2lu:%.2lu:%.2lu", playtime/(60*60), (playtime/60)%60, playtime%60), TERM_L_GREEN);
+ display_player_one_line(ENTRY_PLAY_TIME, format("%.2lu:%.2lu:%.2lu", current_world_ptr->play_time/(60*60), (current_world_ptr->play_time/60)%60, current_world_ptr->play_time%60), TERM_L_GREEN);
}
static char dummy[20] = "", dummy2[20] = "";
memset(dummy, 0, strlen(dummy));
memset(dummy2, 0, strlen(dummy2));
-
- /* Paranoia */
if (y <= 0) y = 1;
if(show_actual_value)
int shots, shot_frac;
bool dokubari;
- object_type *o_ptr;
+ object_type *o_ptr;
if (p_ptr->muta2 & MUT2_HORNS) muta_att++;
if (p_ptr->muta2 & MUT2_SCOR_TAIL) muta_att++;
* @param mode オプション
* @return なし
*/
-static void display_player_equippy(TERM_LEN y, TERM_LEN x, BIT_FLAGS16 mode)
+void display_player_equippy(TERM_LEN y, TERM_LEN x, BIT_FLAGS16 mode)
{
int i, max_i;
/*!
- * @brief プレイヤーの装備一覧シンボルを固定位置に表示する
- * @return なし
- */
-void print_equippy(void)
-{
- display_player_equippy(ROW_EQUIPPY, COL_EQUIPPY, 0);
-}
-
-/*!
* @brief プレイヤーの装備による免疫フラグを返す
* @param flgs フラグを保管する配列
* @return なし
sprintf(statmsg, "...You %s after the winning.", streq(p_ptr->died_from, "Seppuku") ? "did Seppuku" : "retired from the adventure");
#endif
}
- else if (!dun_level)
+ else if (!current_floor_ptr->dun_level)
{
#ifdef JP
sprintf(statmsg, "…あなたは%sで%sに殺された。", map_name(), p_ptr->died_from);
else
{
#ifdef JP
- sprintf(statmsg, "…あなたは、%sの%d階で%sに殺された。", map_name(), (int)dun_level, p_ptr->died_from);
+ sprintf(statmsg, "…あなたは、%sの%d階で%sに殺された。", map_name(), (int)current_floor_ptr->dun_level, p_ptr->died_from);
#else
- sprintf(statmsg, "...You were killed by %s on level %d of %s.", p_ptr->died_from, dun_level, map_name());
+ sprintf(statmsg, "...You were killed by %s on level %d of %s.", p_ptr->died_from, current_floor_ptr->dun_level, map_name());
#endif
}
}
else if (character_dungeon)
{
- if (!dun_level)
+ if (!current_floor_ptr->dun_level)
{
sprintf(statmsg, _("…あなたは現在、 %s にいる。", "...Now, you are in %s."), map_name());
}
else
{
#ifdef JP
- sprintf(statmsg, "…あなたは現在、 %s の %d 階で探索している。", map_name(), (int)dun_level);
+ sprintf(statmsg, "…あなたは現在、 %s の %d 階で探索している。", map_name(), (int)current_floor_ptr->dun_level);
#else
- sprintf(statmsg, "...Now, you are exploring level %d of %s.", dun_level, map_name());
+ sprintf(statmsg, "...Now, you are exploring level %d of %s.", current_floor_ptr->dun_level, map_name());
#endif
}
}
for (i = m_max - 1; i >= 1; i--)
{
- monster_type *m_ptr = &m_list[i];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[i];
- if (!m_ptr->r_idx) continue;
+ if (!monster_is_valid(m_ptr)) continue;
if (!is_pet(m_ptr)) continue;
pet_settings = TRUE;
if (!m_ptr->nickname && (p_ptr->riding != i)) continue;
/* Sort by compete level */
for (i = 1; i < max_q_idx; i++) quest_num[i] = i;
- ang_sort_comp = ang_sort_comp_quest_num;
- ang_sort_swap = ang_sort_swap_quest_num;
- ang_sort(quest_num, &dummy, max_q_idx);
+ ang_sort(quest_num, &dummy, max_q_idx, ang_sort_comp_quest_num, ang_sort_swap_quest_num);
/* Dump Quest Information */
fputc('\n', fff);
fprintf(fff, "You have defeated %ld %s including %ld unique monster%s in total.\n", norm_total, norm_total == 1 ? "enemy" : "enemies", uniq_total, (uniq_total == 1 ? "" : "s"));
#endif
-
- /* Select the sort method */
- ang_sort_comp = ang_sort_comp_hook;
- ang_sort_swap = ang_sort_swap_hook;
-
/* Sort the array by dungeon depth of monsters */
- ang_sort(who, &why, uniq_total);
+ ang_sort(who, &why, uniq_total, ang_sort_comp_hook, ang_sort_swap_hook);
fprintf(fff, _("\n《上位%ld体のユニーク・モンスター》\n", "\n< Unique monsters top %ld >\n"), MIN(uniq_total, 10));
/* Print top 10 */
store_type *st_ptr;
/* Do we need it?? */
- /* process_dungeon_file("w_info.txt", 0, 0, max_wild_y, max_wild_x); */
+ /* process_dungeon_file("w_info.txt", 0, 0, current_world_ptr->max_wild_y, current_world_ptr->max_wild_x); */
/* Print the home */
- st_ptr = &town[1].store[STORE_HOME];
+ st_ptr = &town_info[1].store[STORE_HOME];
/* Home -- if anything there */
if (st_ptr->stock_num)
/* Print the home */
- st_ptr = &town[1].store[STORE_MUSEUM];
+ st_ptr = &town_info[1].store[STORE_MUSEUM];
/* Home -- if anything there */
if (st_ptr->stock_num)
}
(void)make_character_dump(fff);
-
- /* Close it */
my_fclose(fff);
/* Re-open the file if needed */
if (next > line)
{
- /* Close it */
my_fclose(fff);
/* Hack -- Re-Open the file */
strcpy (xtmp, "");
if (!get_string(_("ファイル名: ", "File name: "), xtmp, 80)) continue;
-
- /* Close it */
my_fclose(fff);
/* Build the filename */
while (!my_fgets(fff, buff, sizeof(buff)))
my_fputs(ffp, buff, 80);
-
- /* Close it */
my_fclose(fff);
my_fclose(ffp);
/*!
- * @brief 自殺するコマンドのメインルーチン
- * Hack -- commit suicide
- * @return なし
- * @details
- */
-void do_cmd_suicide(void)
-{
- int i;
-
- /* Flush input */
- flush();
-
- /* Verify Retirement */
- if (p_ptr->total_winner)
- {
- /* Verify */
- if (!get_check_strict(_("引退しますか? ", "Do you want to retire? "), CHECK_NO_HISTORY)) return;
- }
-
- /* Verify Suicide */
- else
- {
- /* Verify */
- if (!get_check(_("本当に自殺しますか?", "Do you really want to commit suicide? "))) return;
- }
-
-
- if (!p_ptr->noscore)
- {
- /* Special Verification for suicide */
- prt(_("確認のため '@' を押して下さい。", "Please verify SUICIDE by typing the '@' sign: "), 0, 0);
-
- flush();
- i = inkey();
- prt("", 0, 0);
- if (i != '@') return;
-
- play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_GAMEOVER);
- }
-
- /* Initialize "last message" buffer */
- if (p_ptr->last_message) string_free(p_ptr->last_message);
- p_ptr->last_message = NULL;
-
- /* Hack -- Note *winning* message */
- if (p_ptr->total_winner && last_words)
- {
- char buf[1024] = "";
- play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WINNER);
- do
- {
- while (!get_string(_("*勝利*メッセージ: ", "*Winning* message: "), buf, sizeof buf)) ;
- }
- while (!get_check_strict(_("よろしいですか?", "Are you sure? "), CHECK_NO_HISTORY));
-
- if (buf[0])
- {
- p_ptr->last_message = string_make(buf);
- msg_print(p_ptr->last_message);
- }
- }
-
- /* Stop playing */
- p_ptr->playing = FALSE;
-
- /* Kill the player */
- p_ptr->is_dead = TRUE;
-
- /* Leaving */
- p_ptr->leaving = TRUE;
-
- if (!p_ptr->total_winner)
- {
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("ダンジョンの探索に絶望して自殺した。", "give up all hope to commit suicide."));
- do_cmd_write_nikki(NIKKI_GAMESTART, 1, _("-------- ゲームオーバー --------", "-------- Game Over --------"));
- do_cmd_write_nikki(NIKKI_BUNSHOU, 1, "\n\n\n\n");
- }
-
- /* Cause of death */
- (void)strcpy(p_ptr->died_from, _("途中終了", "Quitting"));
-}
-
-
-/*!
* @brief セーブするコマンドのメインルーチン
* Save the game
* @param is_autosave オートセーブ中の処理ならばTRUE
void do_cmd_save_and_exit(void)
{
p_ptr->playing = FALSE;
-
- /* Leaving */
p_ptr->leaving = TRUE;
do_cmd_write_nikki(NIKKI_GAMESTART, 0, _("----ゲーム中断----", "---- Save and Exit Game ----"));
}
if (!(p_ptr->noscore & 0x00FF))
{
/* Ignore people who die in town */
- if (dun_level)
+ if (current_floor_ptr->dun_level)
{
char tmp[128];
/* "Bones" name */
- sprintf(tmp, "bone.%03d", dun_level);
+ sprintf(tmp, "bone.%03d", current_floor_ptr->dun_level);
/* Build the filename */
path_build(str, sizeof(str), ANGBAND_DIR_BONE, tmp);
* Display a "tomb-stone"
* @return なし
*/
-static void print_tomb(void)
+void print_tomb(void)
{
bool done = FALSE;
if (!streq(p_ptr->died_from, "ripe") && !streq(p_ptr->died_from, "Seppuku"))
{
- if (dun_level == 0)
+ if (current_floor_ptr->dun_level == 0)
{
concptr field_name = p_ptr->town_num ? "街" : "荒野";
if (streq(p_ptr->died_from, "途中終了"))
{
if (streq(p_ptr->died_from, "途中終了"))
{
- sprintf(tmp, "地下 %d 階で死んだ", (int)dun_level);
+ sprintf(tmp, "地下 %d 階で死んだ", (int)current_floor_ptr->dun_level);
}
else
{
- sprintf(tmp, "に地下 %d 階で殺された", (int)dun_level);
+ sprintf(tmp, "に地下 %d 階で殺された", (int)current_floor_ptr->dun_level);
}
}
center_string(buf, tmp);
put_str(buf, 15 + extra_line, 11);
}
#else
- (void)sprintf(tmp, "Killed on Level %d", dun_level);
+ (void)sprintf(tmp, "Killed on Level %d", current_floor_ptr->dun_level);
center_string(buf, tmp);
put_str(buf, 14, 11);
* Display some character info
* @return なし
*/
-static void show_info(void)
+void show_info(void)
{
int i, j, k, l;
- object_type *o_ptr;
+ object_type *o_ptr;
store_type *st_ptr;
/* Hack -- Know everything in the inven/equip */
for (i = 1; i < max_towns; i++)
{
- st_ptr = &town[i].store[STORE_HOME];
+ st_ptr = &town_info[i].store[STORE_HOME];
/* Hack -- Know everything in the home */
for (j = 0; j < st_ptr->stock_num; j++)
/* Homes in the different towns */
for (l = 1; l < max_towns; l++)
{
- st_ptr = &town[l].store[STORE_HOME];
+ st_ptr = &town_info[l].store[STORE_HOME];
/* Home -- if anything there */
if (st_ptr->stock_num)
* Display some character info
* @return なし
*/
-static bool check_score(void)
+bool check_score(void)
{
Term_clear();
return TRUE;
}
-/*!
- * @brief ゲーム終了処理 /
- * Close up the current game (player may or may not be dead)
- * @return なし
- * @details
- * <pre>
- * This function is called only from "main.c" and "signals.c".
- * </pre>
- */
-void close_game(void)
-{
- char buf[1024];
- bool do_send = TRUE;
-
-/* concptr p = "[i:キャラクタの情報, f:ファイル書き出し, t:スコア, x:*鑑定*, ESC:ゲーム終了]"; */
- handle_stuff();
-
- /* Flush the messages */
- msg_print(NULL);
-
- /* Flush the input */
- flush();
-
-
- /* No suspending now */
- signals_ignore_tstp();
-
-
- /* Hack -- Character is now "icky" */
- character_icky = TRUE;
-
-
- /* Build the filename */
- path_build(buf, sizeof(buf), ANGBAND_DIR_APEX, "scores.raw");
-
- /* Grab permissions */
- safe_setuid_grab();
-
- /* Open the high score file, for reading/writing */
- highscore_fd = fd_open(buf, O_RDWR);
-
- /* Drop permissions */
- safe_setuid_drop();
-
- /* Handle death */
- if (p_ptr->is_dead)
- {
- /* Handle retirement */
- if (p_ptr->total_winner) kingly();
-
- /* Save memories */
- if (!cheat_save || get_check(_("死んだデータをセーブしますか? ", "Save death? ")))
- {
- if (!save_player()) msg_print(_("セーブ失敗!", "death save failed!"));
- }
- else do_send = FALSE;
-
- /* You are dead */
- print_tomb();
-
- flush();
-
- /* Show more info */
- show_info();
- Term_clear();
-
- if (check_score())
- {
- if ((!send_world_score(do_send)))
- {
- if (get_check_strict(_("後でスコアを登録するために待機しますか?", "Stand by for later score registration? "),
- (CHECK_NO_ESCAPE | CHECK_NO_HISTORY)))
- {
- p_ptr->wait_report_score = TRUE;
- p_ptr->is_dead = FALSE;
- if (!save_player()) msg_print(_("セーブ失敗!", "death save failed!"));
- }
- }
- if (!p_ptr->wait_report_score)
- (void)top_twenty();
- }
- else if (highscore_fd >= 0)
- {
- display_scores_aux(0, 10, -1, NULL);
- }
-#if 0
- /* Dump bones file */
- make_bones();
-#endif
- }
-
- /* Still alive */
- else
- {
- /* Save the game */
- do_cmd_save_game(FALSE);
-
- /* Prompt for scores */
- prt(_("リターンキーか ESC キーを押して下さい。", "Press Return (or Escape)."), 0, 40);
- play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_EXIT);
-
- /* Predict score (or ESCAPE) */
- if (inkey() != ESCAPE) predict_score();
- }
-
-
- /* Shut the high score file */
- (void)fd_close(highscore_fd);
-
- /* Forget the high score fd */
- highscore_fd = -1;
-
- /* Kill all temporal files */
- clear_saved_floor_files();
-
- /* Allow suspending now */
- signals_handle_tstp();
-}
-
/*!
* @brief 異常発生時のゲーム緊急終了処理 /
/* Clear the top line */
prt("", 0, 0);
- /* Hack -- turn off some things */
+ /* Hack -- current_world_ptr->game_turn off some things */
disturb(TRUE, TRUE);
/* Mega-Hack -- Delay death */
/* Suicide */
p_ptr->is_dead = TRUE;
-
- /* Leaving */
p_ptr->leaving = TRUE;
/* Close stuff */