OSDN Git Service

Merge branch 'master' of git.osdn.net:/gitroot/hengband/hengband
[hengband/hengband.git] / src / main / sound-of-music.c
1 #include "main/sound-of-music.h"
2 #include "game-option/disturbance-options.h"
3 #include "game-option/special-options.h"
4 #include "main/music-definitions-table.h"
5 #include "system/floor-type-definition.h"
6 #include "term/screen-processor.h"
7
8 /*
9  * Flush the screen, make a noise
10  */
11 void bell(void)
12 {
13     term_fresh();
14     if (ring_bell)
15         term_xtra(TERM_XTRA_NOISE, 0);
16
17     flush();
18 }
19
20 /*
21  * todo intをsound_typeに差し替える
22  * @brief 音を鳴らす
23  */
24 void sound(int val)
25 {
26     if (!use_sound)
27         return;
28
29     term_xtra(TERM_XTRA_SOUND, val);
30 }
31
32 /*
33  * Hack -- Play a music
34  */
35 errr play_music(int type, int val)
36 {
37     if (!use_music)
38         return 1;
39
40     return term_xtra(type, val);
41 }
42
43 /*
44  * Hack -- Select floor music.
45  */
46 void select_floor_music(player_type *player_ptr)
47 {
48     if (!use_music)
49         return;
50
51     if (player_ptr->ambush_flag) {
52         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH))
53             return;
54     }
55
56     if (player_ptr->wild_mode) {
57         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD))
58             return;
59     }
60
61     if (player_ptr->current_floor_ptr->inside_arena) {
62         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_ARENA))
63             return;
64     }
65
66     if (player_ptr->phase_out) {
67         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BATTLE))
68             return;
69     }
70
71     if (player_ptr->current_floor_ptr->inside_quest) {
72         if (!play_music(TERM_XTRA_MUSIC_QUEST, player_ptr->current_floor_ptr->inside_quest))
73             return;
74         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST))
75             return;
76     }
77
78     if (player_ptr->dungeon_idx) {
79         if (player_ptr->feeling == 2) {
80             if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2))
81                 return;
82         } else if (player_ptr->feeling >= 3 && player_ptr->feeling <= 5) {
83             if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1))
84                 return;
85         } else {
86             if (!play_music(TERM_XTRA_MUSIC_DUNGEON, player_ptr->dungeon_idx))
87                 return;
88
89             if (player_ptr->current_floor_ptr->dun_level < 40) {
90                 if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW))
91                     return;
92             } else if (player_ptr->current_floor_ptr->dun_level < 80) {
93                 if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED))
94                     return;
95             } else {
96                 if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_HIGH))
97                     return;
98             }
99         }
100     }
101
102     if (player_ptr->town_num) {
103         if (!play_music(TERM_XTRA_MUSIC_TOWN, player_ptr->town_num))
104             return;
105         if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_TOWN))
106             return;
107         return;
108     }
109
110     if (!player_ptr->current_floor_ptr->dun_level) {
111         if (player_ptr->lev >= 45) {
112             if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD3))
113                 return;
114         } else if (player_ptr->lev >= 25) {
115             if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD2))
116                 return;
117         } else {
118             if (!play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FIELD1))
119                 return;
120         }
121     }
122
123     play_music(TERM_XTRA_MUSIC_MUTE, 0);
124 }