X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=fs.c;h=8d505e8b3604ce2664d668054b553926a05150c6;hb=8f3d7bb7498218801cecdf4024c30988e0770352;hp=abe57f424c7c5a4d2fb5630caab0aa182199b4af;hpb=1ea860909ea670451b5200ccd30aa19241cd081a;p=xonotic%2Fdarkplaces.git diff --git a/fs.c b/fs.c index abe57f42..8d505e8b 100644 --- a/fs.c +++ b/fs.c @@ -22,6 +22,14 @@ Boston, MA 02111-1307, USA */ +#ifdef __APPLE__ +// include SDL for IPHONEOS code +# include +# if TARGET_OS_IPHONE +# include +# endif +#endif + #include #include @@ -628,9 +636,9 @@ int PK3_BuildFileList (pack_t *pack, const pk3_endOfCentralDir_t *eocd) flags = PACKFILE_FLAG_DEFLATED; else flags = 0; - offset = BuffLittleLong (&ptr[42]) + eocd->prepended_garbage; - packsize = BuffLittleLong (&ptr[20]); - realsize = BuffLittleLong (&ptr[24]); + offset = (unsigned int)(BuffLittleLong (&ptr[42]) + eocd->prepended_garbage); + packsize = (unsigned int)BuffLittleLong (&ptr[20]); + realsize = (unsigned int)BuffLittleLong (&ptr[24]); switch(ptr[5]) // C_VERSION_MADE_BY_1 { @@ -669,7 +677,7 @@ FS_LoadPackPK3 Create a package entry associated with a PK3 file ==================== */ -pack_t *FS_LoadPackPK3FromFD (const char *packfile, int packhandle) +pack_t *FS_LoadPackPK3FromFD (const char *packfile, int packhandle, qboolean silent) { pk3_endOfCentralDir_t eocd; pack_t *pack; @@ -677,7 +685,8 @@ pack_t *FS_LoadPackPK3FromFD (const char *packfile, int packhandle) if (! PK3_GetEndOfCentralDir (packfile, packhandle, &eocd)) { - Con_Printf ("%s is not a PK3 file\n", packfile); + if(!silent) + Con_Printf ("%s is not a PK3 file\n", packfile); close(packhandle); return NULL; } @@ -731,7 +740,7 @@ pack_t *FS_LoadPackPK3 (const char *packfile) #endif if (packhandle < 0) return NULL; - return FS_LoadPackPK3FromFD(packfile, packhandle); + return FS_LoadPackPK3FromFD(packfile, packhandle, false); } @@ -956,8 +965,8 @@ pack_t *FS_LoadPackPAK (const char *packfile) // parse the directory for (i = 0;i < numpackfiles;i++) { - fs_offset_t offset = LittleLong (info[i].filepos); - fs_offset_t size = LittleLong (info[i].filelen); + fs_offset_t offset = (unsigned int)LittleLong (info[i].filepos); + fs_offset_t size = (unsigned int)LittleLong (info[i].filelen); FS_AddFileToPack (info[i].name, pack, offset, size, size, PACKFILE_FLAG_TRUEOFFS); } @@ -1300,10 +1309,17 @@ void FS_Rescan (void) { int i; qboolean fs_modified = false; + qboolean reset = false; char gamedirbuf[MAX_INPUTLINE]; + if (fs_searchpaths) + reset = true; FS_ClearSearchPath(); + // automatically activate gamemode for the gamedirs specified + if (reset) + COM_ChangeGameTypeForGameDirs(); + // add the game-specific paths // gamedirname1 (typically id1) FS_AddGameHierarchy (gamedirname1); @@ -1397,6 +1413,8 @@ FS_ChangeGameDirs */ extern void Host_SaveConfig (void); extern void Host_LoadConfig_f (void); +extern qboolean vid_opened; +extern void VID_Stop(void); qboolean FS_ChangeGameDirs(int numgamedirs, char gamedirs[][MAX_QPATH], qboolean complain, qboolean failmissing) { int i; @@ -1445,14 +1463,21 @@ qboolean FS_ChangeGameDirs(int numgamedirs, char gamedirs[][MAX_QPATH], qboolean // reinitialize filesystem to detect the new paks FS_Rescan(); - // exec the new config - Host_LoadConfig_f(); + if (cls.demoplayback) + { + CL_Disconnect_f(); + cls.demonum = 0; + } // unload all sounds so they will be reloaded from the new files as needed S_UnloadAllSounds_f(); - // reinitialize renderer (this reloads hud/console background/etc) - R_Modules_Restart(); + // close down the video subsystem, it will start up again when the config finishes... + VID_Stop(); + vid_opened = false; + + // restart the video subsystem after the config is executed + Cbuf_InsertText("\nloadconfig\nvid_restart\n\n"); return true; } @@ -1626,7 +1651,7 @@ void FS_Init_SelfPack (void) fs_mempool = Mem_AllocPool("file management", 0, NULL); if(com_selffd >= 0) { - fs_selfpack = FS_LoadPackPK3FromFD(com_argv[0], com_selffd); + fs_selfpack = FS_LoadPackPK3FromFD(com_argv[0], com_selffd, true); if(fs_selfpack) { char *buf, *q; @@ -1682,7 +1707,9 @@ void FS_Init (void) size_t homedirlen; #endif #endif +#ifndef __IPHONEOS__ char *homedir; +#endif #ifdef WIN32 const char* dllnames [] = @@ -1694,6 +1721,15 @@ void FS_Init (void) // don't care for the result; if it fails, %USERPROFILE% will be used instead #endif + *fs_basedir = 0; + *fs_userdir = 0; + *fs_gamedir = 0; + +#ifdef __IPHONEOS__ + // fs_basedir is "" by default, to utilize this you can simply add your gamedir to the Resources in xcode + // fs_userdir stores configurations to the Documents folder of the app + strlcpy(fs_userdir, "../Documents/", sizeof(fs_userdir)); +#else // Add the personal game directory if((i = COM_CheckParm("-userdir")) && i < com_argc - 1) { @@ -1780,6 +1816,7 @@ void FS_Init (void) fs_basedir[split - com_argv[0]] = 0; } #endif +#endif #endif // -basedir @@ -1989,8 +2026,8 @@ qfile_t *FS_OpenPackedFile (pack_t* pack, int pack_ind) // the dup() call to avoid having to close the dup_handle on error here if (lseek (pack->handle, pfile->offset, SEEK_SET) == -1) { - Con_Printf ("FS_OpenPackedFile: can't lseek to %s in %s (offset: %d)\n", - pfile->name, pack->filename, (int) pfile->offset); + Con_Printf ("FS_OpenPackedFile: can't lseek to %s in %s (offset: %08x%08x)\n", + pfile->name, pack->filename, (unsigned int)(pfile->offset >> 32), (unsigned int)(pfile->offset)); return NULL; }