X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 268 (tree) |
|---|---|
| Time | 2021-03-06 15:35:27 |
| Author | |
実行ファイルのある場所を常にカレントディレクトリとするように、一部ファイルパス判定を関数化
| @@ -738,7 +738,7 @@ | ||
| 738 | 738 | |
| 739 | 739 | #ifdef ENABLE_AUTOLOADMIF |
| 740 | 740 | //ドライブレターから指定されている(=フルパス)ならば |
| 741 | - if( fname[1] == ':' ){ | |
| 741 | + if( CheckFullPath(fname) == true ){ | |
| 742 | 742 | char path[MAX_PATH]; |
| 743 | 743 | |
| 744 | 744 | //mifのディレクトリ取得 |
| @@ -782,7 +782,7 @@ | ||
| 782 | 782 | |
| 783 | 783 | #ifdef ENABLE_AUTOLOADMIF |
| 784 | 784 | //ドライブレターから指定されている(=フルパス)ならば |
| 785 | - if( fname[1] == ':' ){ | |
| 785 | + if( CheckFullPath(fname) == true ){ | |
| 786 | 786 | char path[MAX_PATH]; |
| 787 | 787 | |
| 788 | 788 | //mifのディレクトリ取得 |
| @@ -1378,7 +1378,7 @@ | ||
| 1378 | 1378 | } |
| 1379 | 1379 | |
| 1380 | 1380 | pstr = strchr(str, '\r'); |
| 1381 | - if (pstr) { | |
| 1381 | + if( pstr ){ | |
| 1382 | 1382 | *pstr = '\0'; |
| 1383 | 1383 | flag = true; |
| 1384 | 1384 | } |
| @@ -1389,6 +1389,16 @@ | ||
| 1389 | 1389 | return 1; |
| 1390 | 1390 | } |
| 1391 | 1391 | |
| 1392 | +//! @brief ファイルパスがフルパスか判定する | |
| 1393 | +//! @param path ファイルパス | |
| 1394 | +//! @return フルパスである(絶対パス):true フルパスでない(相対パス):false | |
| 1395 | +//! @warning Windows環境しか想定されていません。 | |
| 1396 | +bool CheckFullPath(char *path) | |
| 1397 | +{ | |
| 1398 | + if( path[1] == ':' ){ return true; } | |
| 1399 | + return false; | |
| 1400 | +} | |
| 1401 | + | |
| 1392 | 1402 | //! @brief ファイルパスからファイル名を取り除く |
| 1393 | 1403 | //! @param path ファイルパス(ポインタ) |
| 1394 | 1404 | //! @param dir ディレクトリ名を受け取るポインタ |
| @@ -221,6 +221,7 @@ | ||
| 221 | 221 | }; |
| 222 | 222 | |
| 223 | 223 | int DeleteLinefeed(char str[]); |
| 224 | +bool CheckFullPath(char *path); | |
| 224 | 225 | void GetFileDirectory(char *path, char *dir); |
| 225 | 226 | |
| 226 | 227 | #endif |
| \ No newline at end of file |
| @@ -65,21 +65,19 @@ | ||
| 65 | 65 | #ifdef ENABLE_AUTOLOADMIF |
| 66 | 66 | bool NoBriefingFlag = false; |
| 67 | 67 | int gamemode = 0; |
| 68 | - strcpy(path, ""); | |
| 69 | 68 | #endif |
| 70 | 69 | |
| 71 | 70 | //乱数初期化 |
| 72 | 71 | InitRand(); |
| 73 | 72 | |
| 73 | + //実行ファイルのある場所を、カレントディレクトリにする。 | |
| 74 | + GetFileDirectory(__argv[0], path); | |
| 75 | + chdir(path); | |
| 76 | + | |
| 74 | 77 | #ifdef _DEBUG |
| 75 | 78 | //メモリリークの検出 |
| 76 | 79 | _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); |
| 77 | 80 | |
| 78 | - //実行ファイルのある場所を、カレントディレクトリにする。 | |
| 79 | - GetModuleFileName(NULL, path, MAX_PATH); | |
| 80 | - PathRemoveFileSpec(path); | |
| 81 | - SetCurrentDirectory(path); | |
| 82 | - | |
| 83 | 81 | char str[255]; |
| 84 | 82 | strcpy(str, "[Information]\nThe compiler is the Debug mode.\nIf release the software, Switch compiler to Release mode."); |
| 85 | 83 | MessageBox(NULL, str, GAMENAME, MB_OK); |
| @@ -104,6 +102,17 @@ | ||
| 104 | 102 | #endif |
| 105 | 103 | |
| 106 | 104 | #ifdef ENABLE_AUTOLOADMIF |
| 105 | + //"Dir"が与えられていたら、カレントディレクトリ移動 | |
| 106 | + if( (strcmp(__argv[param], "-Dir") == 0)||(strcmp(__argv[param], "/Dir") == 0)|| | |
| 107 | + (strcmp(__argv[param], "-dir") == 0)||(strcmp(__argv[param], "/dir") == 0) | |
| 108 | + ){ | |
| 109 | + if( (param+1) < __argc ){ | |
| 110 | + chdir(__argv[param+1]); | |
| 111 | + param += 1; | |
| 112 | + } | |
| 113 | + continue; | |
| 114 | + } | |
| 115 | + | |
| 107 | 116 | //"NoBriefing"が与えられていたら、(.mif指定時は)ブリーフィングを省略する |
| 108 | 117 | if( (strcmp(__argv[param], "-NoBriefing") == 0)||(strcmp(__argv[param], "/NoBriefing") == 0)|| |
| 109 | 118 | (strcmp(__argv[param], "-nobriefing") == 0)||(strcmp(__argv[param], "/bobriefing") == 0) |
| @@ -63,6 +63,7 @@ | ||
| 63 | 63 | #include <stdlib.h> |
| 64 | 64 | #include <math.h> |
| 65 | 65 | #include <string.h> |
| 66 | +#include <direct.h> | |
| 66 | 67 | |
| 67 | 68 | #define ENABLE_BUG_HUMANWEAPON //!< 範囲外の人・武器種類番号を用いたバグを再現する(コメント化で無効) |
| 68 | 69 | #define ENABLE_BUG_TEAMID //!< チーム番号を負数に設定した際のバグを再現する(コメント化で無効) |