X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 118 (tree) |
|---|---|
| Time | 2015-12-31 18:00:34 |
| Author | |
手榴弾の物理計算を調整、手榴弾の爆風描画と被弾時の出血描画を改良
| @@ -75,7 +75,7 @@ | ||
| 75 | 75 | #define BULLET_SPEEDSCALE 3 //!< 弾速の倍率 |
| 76 | 76 | #define BULLET_DESTROYFRAME 40 //!< 弾の消滅フレーム数 |
| 77 | 77 | #define GRENADE_DESTROYFRAME 100 //!< 手榴弾の爆発フレーム数 |
| 78 | -#define GRENADE_BOUND_ACCELERATION ((0.63662f * 0.4f - 0.7f) * -1) //!< 手榴弾の反射減衰率 | |
| 78 | +#define GRENADE_BOUND_ACCELERATION 0.565f //!< 手榴弾の反射減衰率 | |
| 79 | 79 | |
| 80 | 80 | #ifndef H_LAYERLEVEL |
| 81 | 81 | #define H_LAYERLEVEL 2 //!< Select include file. |
| @@ -323,6 +323,7 @@ | ||
| 323 | 323 | float move_z; //!< Z軸移動量 |
| 324 | 324 | float rotation_texture; //!< 回転角度 |
| 325 | 325 | float alpha; //!< 透明度 |
| 326 | + float set_alpha; //!< スタート時の透明度 | |
| 326 | 327 | int cnt; //!< カウント |
| 327 | 328 | int setcnt; //!< 設定されたカウント |
| 328 | 329 |
| @@ -358,10 +359,11 @@ | ||
| 358 | 359 | EFFECT_NORMAL = 0x00, //!< ノーマル |
| 359 | 360 | EFFECT_DISAPPEAR = 0x01, //!< 消す |
| 360 | 361 | EFFECT_DISAPPEARHALF = 0x02, //!< 半分の時間で消す |
| 361 | - EFFECT_MAGNIFY = 0x04, //!< 拡大 | |
| 362 | - EFFECT_ROTATION = 0x08, //!< 回転 | |
| 363 | - EFFECT_FALL = 0x10, //!< 落下 | |
| 364 | - EFFECT_NOBILLBOARD = 0x20 //!< ビルボード化しない | |
| 362 | + EFFECT_TRANSLUCENT = 0x04, //!< 半透明 | |
| 363 | + EFFECT_MAGNIFY = 0x08, //!< 拡大 | |
| 364 | + EFFECT_ROTATION = 0x10, //!< 回転 | |
| 365 | + EFFECT_FALL = 0x20, //!< 落下 | |
| 366 | + EFFECT_NOBILLBOARD = 0x40 //!< ビルボード化しない | |
| 365 | 367 | }; |
| 366 | 368 | |
| 367 | 369 | #endif |
| \ No newline at end of file |
| @@ -2558,8 +2558,15 @@ | ||
| 2558 | 2558 | setcnt = count; |
| 2559 | 2559 | id_texture = texture; |
| 2560 | 2560 | type = settype; |
| 2561 | - alpha = 1.0f; | |
| 2562 | 2561 | |
| 2562 | + if( type & EFFECT_TRANSLUCENT ){ | |
| 2563 | + set_alpha = 0.5f; | |
| 2564 | + } | |
| 2565 | + else{ | |
| 2566 | + set_alpha = 1.0f; | |
| 2567 | + } | |
| 2568 | + alpha = set_alpha; | |
| 2569 | + | |
| 2563 | 2570 | if( init == true ){ |
| 2564 | 2571 | rotation_x = 0.0f; |
| 2565 | 2572 | rotation_y = 0.0f; |
| @@ -2621,11 +2628,11 @@ | ||
| 2621 | 2628 | |
| 2622 | 2629 | //特殊処理を実行 |
| 2623 | 2630 | if( type & EFFECT_DISAPPEAR ){ //消す |
| 2624 | - alpha -= 1.0f/setcnt; | |
| 2631 | + alpha -= set_alpha/setcnt; | |
| 2625 | 2632 | } |
| 2626 | 2633 | if( type & EFFECT_DISAPPEARHALF ){ //半分の時間で消す |
| 2627 | 2634 | if( setcnt/2 > cnt ){ |
| 2628 | - alpha -= 1.0f/(setcnt/2); | |
| 2635 | + alpha -= set_alpha/(setcnt/2); | |
| 2629 | 2636 | } |
| 2630 | 2637 | } |
| 2631 | 2638 | if( type & EFFECT_MAGNIFY ){ //拡大 |
| @@ -103,7 +103,7 @@ | ||
| 103 | 103 | int AddHumanIndex(pointdata data, pointdata infodata); |
| 104 | 104 | int AddWeaponIndex(pointdata data); |
| 105 | 105 | int AddSmallObjectIndex(pointdata data); |
| 106 | - void SetHumanBlood(float x, float y, float z); | |
| 106 | + void SetHumanBlood(float x, float y, float z, int damage); | |
| 107 | 107 | bool CollideHuman(human *in_humanA, human *in_humanB); |
| 108 | 108 | bool CollideBullet(bullet *in_bullet); |
| 109 | 109 | void HitBulletMap(float x, float y, float z); |
| @@ -539,12 +539,14 @@ | ||
| 539 | 539 | //! @param x X座標 |
| 540 | 540 | //! @param y Y座標 |
| 541 | 541 | //! @param z Z座標 |
| 542 | -void ObjectManager::SetHumanBlood(float x, float y, float z) | |
| 542 | +//! @param damage ダメージ | |
| 543 | +void ObjectManager::SetHumanBlood(float x, float y, float z, int damage) | |
| 543 | 544 | { |
| 544 | 545 | if( GameConfig.GetBloodFlag() == true ){ |
| 545 | - for(int i=0; i<2; i++){ | |
| 546 | + AddEffect(x, y, z, 0.0f, 0.0f, 0.0f, 10.0f, DegreeToRadian(10)*GetRand(18), (int)(GAMEFPS * 0.4f), Resource->GetEffectBloodTexture(), EFFECT_DISAPPEAR | EFFECT_MAGNIFY | EFFECT_TRANSLUCENT); | |
| 547 | + for(int i=0; i<(damage/10); i++){ | |
| 546 | 548 | float rx = DegreeToRadian(10)*GetRand(36); |
| 547 | - AddEffect(x + cos(rx)*1.0f, y + (float)(GetRand(20)-10)/10, z + sin(rx)*1.0f, cos(rx)*0.5f, 0.5f, sin(rx)*0.5f, 10.0f, DegreeToRadian(10)*GetRand(18), (int)(GAMEFPS * 0.5f), Resource->GetEffectBloodTexture(), EFFECT_FALL); | |
| 549 | + AddEffect(x + cos(rx)*1.0f, y + (float)(GetRand(20)-10)/10, z + sin(rx)*1.0f, cos(rx)*0.5f, GetRand(5)*0.1f + 0.5f, sin(rx)*0.5f, 5.0f, DegreeToRadian(10)*GetRand(18), (int)(GAMEFPS * 0.5f), Resource->GetEffectBloodTexture(), EFFECT_FALL | EFFECT_TRANSLUCENT); | |
| 548 | 550 | } |
| 549 | 551 | } |
| 550 | 552 | } |
| @@ -854,6 +856,8 @@ | ||
| 854 | 856 | //! @param Shothuman_id 発射した人の番号 |
| 855 | 857 | void ObjectManager::HitBulletHuman(int HitHuman_id, int Hit_id, float x, float y, float z, float brx, int attacks, int Shothuman_id) |
| 856 | 858 | { |
| 859 | + int damage = 0; | |
| 860 | + | |
| 857 | 861 | //使用されていないか、死亡していれば処理しない。 |
| 858 | 862 | if( HumanIndex[HitHuman_id].GetEnableFlag() == false ){ return; } |
| 859 | 863 | if( HumanIndex[HitHuman_id].GetHP() <= 0 ){ return; } |
| @@ -865,7 +869,10 @@ | ||
| 865 | 869 | HumanIndex[HitHuman_id].AddPosOrder(brx, 0.0f, 1.0f); |
| 866 | 870 | |
| 867 | 871 | //エフェクト(血)を表示 |
| 868 | - SetHumanBlood(x, y, z); | |
| 872 | + if( Hit_id == 0 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_HEAD); } | |
| 873 | + if( Hit_id == 1 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_UP); } | |
| 874 | + if( Hit_id == 2 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_LEG); } | |
| 875 | + SetHumanBlood(x, y, z, damage); | |
| 869 | 876 | |
| 870 | 877 | //効果音を再生 |
| 871 | 878 | GameSound->HitHuman(x, y, z); |
| @@ -982,7 +989,7 @@ | ||
| 982 | 989 | } |
| 983 | 990 | |
| 984 | 991 | //エフェクト(血)を表示 |
| 985 | - SetHumanBlood(hx, hy+15.0f, hz); | |
| 992 | + SetHumanBlood(hx, hy+15.0f, hz, total_damage); | |
| 986 | 993 | |
| 987 | 994 | //人と手榴弾の距離を算出 |
| 988 | 995 | x = gx - hx; |
| @@ -1048,10 +1055,10 @@ | ||
| 1048 | 1055 | |
| 1049 | 1056 | //エフェクト(煙)の表示 |
| 1050 | 1057 | float rnd = DegreeToRadian(10)*GetRand(18); |
| 1051 | - AddEffect(gx+1.0f, gy+1.0f, gz+1.0f, 0.0f, 0.05f, 0.0f, 10.0f, rnd, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_MAGNIFY | EFFECT_ROTATION); | |
| 1052 | - AddEffect(gx-1.0f, gy-1.0f, gz-1.0f, 0.0f, 0.05f, 0.0f, 10.0f, rnd*-1, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_MAGNIFY | EFFECT_ROTATION); | |
| 1053 | - AddEffect(gx-1.0f, gy-1.0f, gz+1.0f, 0.0f, 0.05f, 0.0f, 10.0f, rnd, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_MAGNIFY | EFFECT_ROTATION); | |
| 1054 | - AddEffect(gx+1.0f, gy+1.0f, gz-1.0f, 0.0f, 0.05f, 0.0f, 10.0f, rnd*-1, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_MAGNIFY | EFFECT_ROTATION); | |
| 1058 | + AddEffect(gx+1.0f, gy+1.0f, gz+1.0f, 0.1f, 0.2f, 0.1f, 50.0f, rnd, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_ROTATION | EFFECT_TRANSLUCENT); | |
| 1059 | + AddEffect(gx-1.0f, gy-1.0f, gz-1.0f, -0.1f, 0.2, -0.1f, 50.0f, rnd*-1, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_ROTATION | EFFECT_TRANSLUCENT); | |
| 1060 | + AddEffect(gx-1.0f, gy-1.0f, gz+1.0f, -0.1f, 0.2f, 0.1f, 50.0f, rnd, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_ROTATION | EFFECT_TRANSLUCENT); | |
| 1061 | + AddEffect(gx+1.0f, gy+1.0f, gz-1.0f, 0.1f, 0.2f, -0.1f, 50.0f, rnd*-1, (int)GAMEFPS * 3, Resource->GetEffectSmokeTexture(), EFFECT_DISAPPEAR | EFFECT_ROTATION | EFFECT_TRANSLUCENT); | |
| 1055 | 1062 | |
| 1056 | 1063 | //効果音を再生 |
| 1057 | 1064 | GameSound->GrenadeExplosion(gx, gy, gz); |
| @@ -2021,7 +2028,7 @@ | ||
| 2021 | 2028 | EnemyHuman->HitZombieAttack(); |
| 2022 | 2029 | |
| 2023 | 2030 | //エフェクト(血)を表示 |
| 2024 | - SetHumanBlood(tx, ty, tz); | |
| 2031 | + SetHumanBlood(tx, ty, tz, HUMAN_DAMAGE_ZOMBIEU); | |
| 2025 | 2032 | |
| 2026 | 2033 | //効果音を再生 |
| 2027 | 2034 | GameSound->HitHuman(tx, ty, tz); |