X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 218 (tree) |
|---|---|
| Time | 2019-04-30 19:47:22 |
| Author | |
追加小物複数読み込み時のバグを修正、AIデバック表示を改良、ObjectManager内の人の判定処理を修正
| @@ -1840,6 +1840,11 @@ | ||
| 1840 | 1840 | void AIcontrol::GetMoveTargetPos(float *posx, float *posz, int *movemode) |
| 1841 | 1841 | { |
| 1842 | 1842 | MoveNavi->GetTargetPos(posx, posz, NULL, movemode, NULL); |
| 1843 | + | |
| 1844 | + if( (battlemode == AI_ACTION)||(battlemode == AI_CAUTION) ){ | |
| 1845 | + *posx = cautionback_posx; | |
| 1846 | + *posz = cautionback_posz; | |
| 1847 | + } | |
| 1843 | 1848 | } |
| 1844 | 1849 | |
| 1845 | 1850 | //! @brief 現在読み込んでいるポイントデータパス |
| @@ -933,17 +933,13 @@ | ||
| 933 | 933 | if( fp != NULL ){ |
| 934 | 934 | for(int i=0; i<MAX_ADDSMALLOBJECT; i++){ |
| 935 | 935 | //6行取得 |
| 936 | - fgets(str1, _MAX_PATH, fp); | |
| 937 | - fgets(str2, _MAX_PATH, fp); | |
| 938 | - fgets(str3, 16, fp); | |
| 939 | - fgets(str4, 16, fp); | |
| 940 | - fgets(str5, _MAX_PATH, fp); | |
| 941 | - fgets(str6, 16, fp); | |
| 942 | - | |
| 943 | 936 | //6行すべて取得できなければ失敗 |
| 944 | - if( (str1 == NULL)||(str2 == NULL)||(str3 == NULL)||(str4 == NULL)||(str5 == NULL)||(str6 == NULL) ){ | |
| 945 | - break; | |
| 946 | - } | |
| 937 | + if( fgets(str1, _MAX_PATH, fp) == NULL ){ break; } | |
| 938 | + if( fgets(str2, _MAX_PATH, fp) == NULL ){ break; } | |
| 939 | + if( fgets(str3, 16, fp) == NULL ){ break; } | |
| 940 | + if( fgets(str4, 16, fp) == NULL ){ break; } | |
| 941 | + if( fgets(str5, _MAX_PATH, fp) == NULL ){ break; } | |
| 942 | + if( fgets(str6, 16, fp) == NULL ){ break; } | |
| 947 | 943 | |
| 948 | 944 | |
| 949 | 945 | //モデルデータパス |
| @@ -981,7 +977,7 @@ | ||
| 981 | 977 | |
| 982 | 978 | //次の追加小物情報の前にある、ダミー 1行を読み出し |
| 983 | 979 | if( i+1 < MAX_ADDSMALLOBJECT ){ |
| 984 | - fgets(str, 32, fp); | |
| 980 | + if( fgets(str, 32, fp) == NULL ){ break; } | |
| 985 | 981 | } |
| 986 | 982 | } |
| 987 | 983 |
| @@ -383,7 +383,6 @@ | ||
| 383 | 383 | //! @brief 武器を拾う |
| 384 | 384 | //! @param in_weapon[] 設定するweaponクラスのポインタ |
| 385 | 385 | //! @return 成功:1 失敗:0 |
| 386 | -//! @attention 人の種類が ゾンビ の場合、この関数は失敗します。 | |
| 387 | 386 | int human::PickupWeapon(class weapon *in_weapon) |
| 388 | 387 | { |
| 389 | 388 | if( in_weapon == NULL ){ |
| @@ -390,13 +389,6 @@ | ||
| 390 | 389 | return 0; |
| 391 | 390 | } |
| 392 | 391 | |
| 393 | - //人の種類が ゾンビ ならば、失敗 | |
| 394 | - HumanParameter Paraminfo; | |
| 395 | - Param->GetHuman(id_parameter, &Paraminfo); | |
| 396 | - if( Paraminfo.type == 2 ){ | |
| 397 | - return 0; | |
| 398 | - } | |
| 399 | - | |
| 400 | 392 | if( weapon[selectweapon] == NULL ){ |
| 401 | 393 | //武器を正しく拾えれば、所持武器として登録 |
| 402 | 394 | if( in_weapon->Pickup() == 0 ){ |
| @@ -1186,20 +1186,28 @@ | ||
| 1186 | 1186 | if( in_human == NULL ){ return; } |
| 1187 | 1187 | |
| 1188 | 1188 | int paramid; |
| 1189 | - float hx, hy, hz, hrx, hry; | |
| 1190 | 1189 | HumanParameter data; |
| 1190 | + bool robot; | |
| 1191 | 1191 | |
| 1192 | - //各種パラメーターを取得 | |
| 1193 | 1192 | in_human->GetParamData(¶mid, NULL, NULL, NULL); |
| 1194 | - in_human->GetPosData(&hx, &hy, &hz, &hrx); | |
| 1195 | - hry = in_human->GetDeadRy(); | |
| 1196 | 1193 | |
| 1197 | - //設定値を取得 | |
| 1198 | 1194 | if( GameParamInfo->GetHuman(paramid, &data) != 0 ){ return; } |
| 1199 | 1195 | |
| 1200 | - //もしロボットならば | |
| 1201 | 1196 | if( data.type == 1 ){ |
| 1197 | + robot = true; | |
| 1198 | + } | |
| 1199 | + else{ | |
| 1200 | + robot = false; | |
| 1201 | + } | |
| 1202 | 1202 | |
| 1203 | + //もしロボットならば | |
| 1204 | + if( robot == true ){ | |
| 1205 | + float hx, hy, hz, hrx, hry; | |
| 1206 | + | |
| 1207 | + //各種パラメーターを取得 | |
| 1208 | + in_human->GetPosData(&hx, &hy, &hz, &hrx); | |
| 1209 | + hry = in_human->GetDeadRy(); | |
| 1210 | + | |
| 1203 | 1211 | //腰辺りの座標を算出 |
| 1204 | 1212 | hx += cos(hrx*-1 - (float)M_PI/2) * sin(hry) * HUMAN_HEIGHT/2; |
| 1205 | 1213 | hz += sin(hrx*-1 - (float)M_PI/2) * sin(hry) * HUMAN_HEIGHT/2; |
| @@ -1267,6 +1275,7 @@ | ||
| 1267 | 1275 | //! @brief 武器を拾う |
| 1268 | 1276 | //! @param in_human 対象の人オブジェクト |
| 1269 | 1277 | //! @param in_weapon 対象の武器オブジェクト |
| 1278 | +//! @attention 人の種類が ゾンビ の場合、この関数は失敗します。 | |
| 1270 | 1279 | void ObjectManager::PickupWeapon(human *in_human, weapon *in_weapon) |
| 1271 | 1280 | { |
| 1272 | 1281 | //無効な人ならば処理しない |
| @@ -1273,6 +1282,13 @@ | ||
| 1273 | 1282 | if( in_human->GetEnableFlag() == false ){ return; } |
| 1274 | 1283 | if( in_human->GetHP() <= 0 ){ return; } |
| 1275 | 1284 | |
| 1285 | + //人の種類が ゾンビ ならば、失敗 | |
| 1286 | + int paramid; | |
| 1287 | + HumanParameter Paraminfo; | |
| 1288 | + in_human->GetParamData(¶mid, NULL, NULL, NULL); | |
| 1289 | + GameParamInfo->GetHuman(paramid, &Paraminfo); | |
| 1290 | + if( Paraminfo.type == 2 ){ return; } | |
| 1291 | + | |
| 1276 | 1292 | //初期化されている武器で、かつ誰も使っていない武器ならば〜 |
| 1277 | 1293 | if( (in_weapon->GetEnableFlag() == true)&&(in_weapon->GetUsingFlag() == false) ){ |
| 1278 | 1294 | float human_x, human_y, human_z; |