TbFileHandle LbFileOpen(const char *fname, const unsigned char accmode) { unsigned char mode = accmode; if ( !LbFileExists(fname) ) { #ifdef __DEBUG LbSyncLog("LbFileOpen: file doesn't exist\n"); #endif if ( mode == Lb_FILE_MODE_READ_ONLY ) return -1; if ( mode == Lb_FILE_MODE_OLD ) mode = Lb_FILE_MODE_NEW; } TbFileHandle rc; /* DISABLED - NOT NEEDED if ( mode == Lb_FILE_MODE_NEW ) { #ifdef __DEBUG LbSyncLog("LbFileOpen: creating file\n"); #endif rc = _sopen(fname, _O_WRONLY|_O_CREAT|_O_TRUNC|_O_BINARY, _SH_DENYNO); //setmode(rc,_O_TRUNC); close(rc); } */ rc = -1; switch (mode) { case Lb_FILE_MODE_NEW: { #ifdef __DEBUG LbSyncLog("LbFileOpen: LBO_CREAT mode\n"); #endif rc = _sopen(fname, O_RDWR|O_CREAT|O_BINARY, SH_DENYNO, S_IREAD|S_IWRITE); };break; case Lb_FILE_MODE_OLD: { #ifdef __DEBUG LbSyncLog("LbFileOpen: LBO_RDWR mode\n"); #endif rc = _sopen(fname, O_RDWR|O_BINARY, SH_DENYNO); };break; case Lb_FILE_MODE_READ_ONLY: { #ifdef __DEBUG LbSyncLog("LbFileOpen: LBO_RDONLY mode\n"); #endif rc = _sopen(fname, O_RDONLY|O_BINARY, SH_DENYNO); };break; } #ifdef __DEBUG LbSyncLog("LbFileOpen: out handle = %ld, errno = %d\n",rc,errno); #endif return rc; }
TbBool load_slab_tng_file(void) { char *fname; SYNCDBG(5,"Starting"); fname = prepare_file_fmtpath(FGrp_StdData,"slabs.tng"); wait_for_cd_to_be_available(); if ( LbFileExists(fname) ) LbFileLoadAt(fname, &game.slabobjs_num); else ERRORLOG("Could not load slab object set"); return true; }
short load_level_file(LevelNumber lvnum) { char *fname; short fgroup; short result; fgroup = get_level_fgroup(lvnum); fname = prepare_file_fmtpath(fgroup,"map%05lu.slb",(unsigned long)lvnum); wait_for_cd_to_be_available(); if (LbFileExists(fname)) { result = true; load_map_data_file(lvnum); load_map_flag_file(lvnum); load_column_file(lvnum); init_whole_blocks(); load_slab_file(); init_columns(); load_static_light_file(lvnum); if (!load_map_ownership_file(lvnum)) result = false; load_map_wibble_file(lvnum); load_and_setup_map_info(lvnum); load_texture_map_file(game.texture_id, 2); load_action_point_file(lvnum); if (!load_map_slab_file(lvnum)) result = false; if (!load_thing_file(lvnum)) result = false; reinitialise_map_rooms(); ceiling_init(0, 1); } else { ERRORLOG("The level \"map%05lu\" doesn't exist; creating empty map.",lvnum); init_whole_blocks(); load_slab_file(); init_columns(); game.texture_id = 0; load_texture_map_file(game.texture_id, 2); init_top_texture_to_cube_table(); result = false; } return result; }
TbBool load_texture_map_file(unsigned long tmapidx, unsigned char n) { char *fname; SYNCDBG(7,"Starting"); #ifdef SPRITE_FORMAT_V2 fname = prepare_file_fmtpath(FGrp_StdData,"tmapa%03d-%d.dat",tmapidx,32); #else fname = prepare_file_fmtpath(FGrp_StdData,"tmapa%03d.dat",tmapidx); #endif if (!wait_for_cd_to_be_available()) return false; if (!LbFileExists(fname)) { WARNMSG("Texture file \"%s\" doesn't exits.",fname); return false; } // The texture file has always over 500kb if (LbFileLoadAt(fname, block_mem) < 65536) { WARNMSG("Texture file \"%s\" can't be loaded or is too small.",fname); return false; } return true; }
TbBool cumulative_screen_shot(void) { //_DK_cumulative_screen_shot();return; static long frame_number=0; char fname[255]; const char *fext; int w,h; switch (screenshot_format) { case 1: fext="raw"; break; case 2: fext="bmp"; break; default: ERRORLOG("Screenshot format incorrectly set."); return false; } long i; unsigned char *buf; long ssize; for (i=frame_number; i<10000; i++) { sprintf(fname, "scrshots/scr%05ld.%s", i, fext); if (!LbFileExists(fname)) break; } frame_number = i; if (frame_number >= 10000) { show_onscreen_msg(game.num_fps, "No free filename for screenshot."); return false; } sprintf(fname, "scrshots/scr%05ld.%s", frame_number, fext); w=MyScreenWidth/pixel_size; h=MyScreenHeight/pixel_size; buf = LbMemoryAlloc((w+3)*h+2048); if (buf == NULL) { ERRORLOG("Can't allocate buffer"); return false; } LbPaletteGet(cap_palette); switch (screenshot_format) { case 1: ssize=prepare_hsi_screenshot(buf,cap_palette); break; case 2: ssize=prepare_bmp_screenshot(buf,cap_palette); break; default: ssize=0; break; } if (ssize>0) ssize = LbFileSaveAt(fname, buf, ssize); LbMemoryFree(buf); if (ssize>0) show_onscreen_msg(game.num_fps, "File \"%s\" saved.", fname); else show_onscreen_msg(game.num_fps, "Cannot save \"%s\".", fname); frame_number++; return (ssize>0); }
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; }