12 char music_random
= ON
;
20 void S_initmusic(void)
22 if (!SDL_WasInit(SDL_INIT_AUDIO
)) {
23 if (SDL_InitSubSystem(SDL_INIT_AUDIO
) < 0) {
24 fprintf(stderr
, "\nUnable to initialize audio: %s\n", SDL_GetError());
29 if (Mix_OpenAudio(22050, AUDIO_S16
, 1, 1000) < 0) {
30 fprintf(stderr
, "Error initializing SDL_mixer: %s\n", Mix_GetError());
40 musdisabled
= (mus_vol
==0);
42 S_volumemusic(mus_vol
);
45 void S_donemusic(void)
49 SDL_QuitSubSystem(SDL_INIT_AUDIO
);
52 void S_startmusic(int time
)
54 if (musdisabled
) return;
55 Mix_PlayMusic(muslo
, -1);
56 Mix_VolumeMusic(mus_vol
);
57 muscount
=time
*60*1000/DELAY
;
60 void S_stopmusic(void)
62 if (musdisabled
) return;
67 void S_volumemusic(int v
)
69 if (musdisabled
) return;
71 if (mus_vol
>128) mus_vol
=128;
72 if (mus_vol
<0) mus_vol
=0;
73 if (mus_vol
==0 && Mix_PlayingMusic()) {
76 else if (mus_vol
>0 && !Mix_PlayingMusic()) {
77 S_startmusic(music_time
);
95 {0x86, 0xA6, "ZH"},//Ж
100 {0x8B, 0xAB, "L"},//Л
101 {0x8C, 0xAC, "M"},//М
102 {0x8D, 0xAD, "N"},//Н
103 {0x8E, 0xAE, "O"},//О
104 {0x8F, 0xAF, "P"},//П
105 {0x90, 0xE0, "R"},//Р
106 {0x91, 0xE1, "S"},//С
107 {0x92, 0xE2, "T"},//Т
108 {0x93, 0xE3, "U"},//У
109 {0x94, 0xE4, "F"},//Ф
110 {0x95, 0xE5, "H"},//Х
111 {0x96, 0xE6, "C"},//Ц
112 {0x97, 0xE7, "CH"},//Ч
113 {0x98, 0xE8, "SH"},//Ш
114 {0x99, 0xE9, "SCH"},//Щ
115 {0x9A, 0xEA, "X"},//Ъ
116 {0x9B, 0xEB, "Y"},//Ы
117 {0x9C, 0xEC, "J"},//Ь
118 {0x9D, 0xED, "E"},//Э
119 {0x9E, 0xEE, "JU"},//Ю
120 {0x9F, 0xEF, "JA"},//Я
124 char *get_trans_char (Uint8 c
)
127 while (atrans
[i
].ascii
) {
129 if (atrans
[i
].ascii
== c
|| atrans
[i
].asciilc
== c
) {
137 void trans_ascii_str (char *dest
, char *src
)
141 for (i
=0; i
<strlen(src
); i
++) {
142 char *ch
= get_trans_char(src
[i
]);
148 strncpy(p
,&src
[i
],1);
155 void F_loadmus(char n
[8]) {
156 if (musdisabled
) return;
163 strncpy(&f
[6], n
, 8);
165 muslo
= Mix_LoadMUS(f
);
168 trans_ascii_str(name
, f
);
169 muslo
= Mix_LoadMUS(name
);
170 if (!muslo
) logo("Music not found '%s'\n", name
);
175 void F_freemus(void) {
176 if (musdisabled
) return;
179 Mix_FreeMusic(muslo
);
184 extern byte g_music
[8];
186 static int volsetcount
= 0;
190 if (musdisabled
) return;
192 //періодично встановлюю гучність музикі, так як вона сама підвищується до максимуму через певний час
194 if (volsetcount
%(5*1000/DELAY
)==0) {
195 S_volumemusic(mus_vol
);
199 if (muscount
< music_fade
*1100/DELAY
) {
200 Mix_FadeOutMusic(music_fade
*1000);
204 if (music_random
) F_randmus(g_music
);
205 else F_nextmus(g_music
);
208 S_startmusic(music_time
);