/** * Allocates graphics heap. */ TbBool setup_heap_memory(void) { long i; SYNCDBG(8,"Starting"); if (heap != NULL) { SYNCDBG(0,"Freeing old Graphics heap"); LbMemoryFree(heap); heap = NULL; } i = mem_size; heap_size = get_best_sound_heap_size(i); while ( 1 ) { heap = LbMemoryAlloc(heap_size); if (heap != NULL) break; i = get_smaller_memory_amount(i); if (i > 8) { heap_size = get_best_sound_heap_size(i); } else { if (heap_size < 524288) { ERRORLOG("Unable to allocate Graphic Heap"); heap_size = 0; return false; } heap_size -= 16384; } } SYNCMSG("GraphicsHeap Size %d", heap_size); return true; }
TbBool init_sound(void) { struct SoundSettings *snd_settng; unsigned long i; SYNCDBG(8,"Starting"); if (SoundDisabled) return false; snd_settng = &game.sound_settings; SetupAudioOptionDefaults(snd_settng); snd_settng->field_E = 3; snd_settng->sound_type = 1622; snd_settng->sound_data_path = sound_dir; snd_settng->dir3 = sound_dir; snd_settng->field_12 = 1; snd_settng->stereo = 1; i = get_best_sound_heap_size(mem_size); if (i < 1048576) snd_settng->max_number_of_samples = 10; else snd_settng->max_number_of_samples = 16; snd_settng->danger_music = 0; snd_settng->no_load_music = 0; snd_settng->no_load_sounds = 1; snd_settng->field_16 = 1; if ((game.flags_font & FFlg_UsrSndFont) == 0) snd_settng->field_16 = 0; snd_settng->field_18 = 1; snd_settng->redbook_enable = ((game.flags_cd & MFlg_NoCdMusic) == 0); snd_settng->sound_system = 0; InitAudio(snd_settng); LoadMusic(0); InitializeMusicPlayer(); if (!GetSoundInstalled()) { SoundDisabled = 1; return false; } S3DInit(); S3DSetNumberOfSounds(snd_settng->max_number_of_samples); S3DSetMaximumSoundDistance(5120); return true; }
TbBool setup_heaps(void) { TbBool low_memory; char snd_fname[2048]; char *spc_fname; long i; SYNCDBG(8,"Starting"); low_memory = false; if (!SoundDisabled) { StopAllSamples(); close_sound_heap(); if (sound_heap_memory != NULL) { LbMemoryFree(sound_heap_memory); sound_heap_memory = NULL; } } if (heap != NULL) { ERRORLOG("Graphics heap already allocated"); LbMemoryFree(heap); heap = NULL; } // Allocate sound heap if (!SoundDisabled) { i = mem_size; while (sound_heap_memory == NULL) { sound_heap_size = get_best_sound_heap_size(i); i = get_smaller_memory_amount(i); sound_heap_memory = LbMemoryAlloc(sound_heap_size); if ((i <= 8) && (sound_heap_memory == NULL)) { low_memory = true; break; } } } // Allocate graphics heap i = mem_size; while (heap == NULL) { heap_size = get_best_sound_heap_size(i); i = get_smaller_memory_amount(i); heap = LbMemoryAlloc(heap_size); if ((i <= 8) && (heap == NULL)) { low_memory = true; break; } } SYNCMSG("GraphicsHeap Size %d", heap_size); if (low_memory) { SYNCDBG(8,"Low memory mode entered on heap allocation."); while (heap != NULL) { if ((!SoundDisabled) && (sound_heap_memory == NULL)) { break; } if (!SoundDisabled) { if (sound_heap_size < heap_size) { heap_size -= 16384; } else if (sound_heap_size == heap_size) { heap_size -= 16384; sound_heap_size -= 16384; } else { sound_heap_size -= 16384; } if (sound_heap_size < 524288) { ERRORLOG("Unable to allocate heaps (small_mem)"); return false; } } else { heap_size -= 16384; } if (heap_size < 524288) { if (sound_heap_memory != NULL) { LbMemoryFree(sound_heap_memory); sound_heap_memory = NULL; } ERRORLOG("Unable to allocate heaps (small_mem)"); return false; } } if (sound_heap_memory != NULL) { LbMemoryFree(sound_heap_memory); sound_heap_memory = NULL; } if (heap != NULL) { LbMemoryFree(heap); heap = NULL; } if (!SoundDisabled) { sound_heap_memory = LbMemoryAlloc(sound_heap_size); } heap = LbMemoryAlloc(heap_size); } if (!SoundDisabled) { SYNCMSG("SoundHeap Size %d", sound_heap_size); // Prepare sound sample bank file names prepare_file_path_buf(snd_fname,FGrp_LrgSound,sound_fname); // language-specific speech file spc_fname = prepare_file_fmtpath(FGrp_LrgSound,"speech_%s.dat",get_language_lwrstr(install_info.lang_id)); // default speech file if (!LbFileExists(spc_fname)) spc_fname = prepare_file_path(FGrp_LrgSound,speech_fname); // speech file for english if (!LbFileExists(spc_fname)) spc_fname = prepare_file_fmtpath(FGrp_LrgSound,"speech_%s.dat",get_language_lwrstr(1)); // Initialize sample banks if (!init_sound_heap_two_banks(sound_heap_memory, sound_heap_size, snd_fname, spc_fname, 1622)) { LbMemoryFree(sound_heap_memory); sound_heap_memory = NULL; SoundDisabled = true; ERRORLOG("Unable to initialize sound heap. Sound disabled."); } } return true; }