• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

Revision128 (tree)
Time2016-04-24 17:00:16
Authorxops-mikan

Log Message

マップに血が付着しない条件を追加(仕様改善)、および描画時のバグを修正。

Change Summary

Incremental Difference

--- trunk/objectmanager.h (revision 127)
+++ trunk/objectmanager.h (revision 128)
@@ -100,7 +100,7 @@
100100 int AddHumanIndex(pointdata data, pointdata infodata);
101101 int AddWeaponIndex(pointdata data);
102102 int AddSmallObjectIndex(pointdata data);
103- void SetHumanBlood(float x, float y, float z, int damage);
103+ void SetHumanBlood(float x, float y, float z, int damage, bool CollideMap);
104104 bool CollideHuman(human *in_humanA, human *in_humanB);
105105 bool CollideBullet(bullet *in_bullet);
106106 void HitBulletMap(float x, float y, float z);
--- trunk/object.h (revision 127)
+++ trunk/object.h (revision 128)
@@ -334,6 +334,7 @@
334334 virtual void SetRxRy(float rx, float ry);
335335 virtual int GetTextureID();
336336 virtual void GetMove(float *mx, float *my, float *mz);
337+ virtual bool GetCollideMapFlag();
337338 virtual int RunFrame(float camera_rx, float camera_ry);
338339 virtual void Render(class D3DGraphics *d3dg);
339340 };
@@ -363,7 +364,8 @@
363364 EFFECT_MAGNIFY = 0x08, //!< 拡大
364365 EFFECT_ROTATION = 0x10, //!< 回転
365366 EFFECT_FALL = 0x20, //!< 落下
366- EFFECT_NOBILLBOARD = 0x40 //!< ビルボード化しない
367+ EFFECT_NOBILLBOARD = 0x40, //!< ビルボード化しない
368+ EFFECT_COLLIDEMAP = 0x80 //!< マップとのあたり判定
367369 };
368370
369371 #endif
\ No newline at end of file
--- trunk/objectmanager.cpp (revision 127)
+++ trunk/objectmanager.cpp (revision 128)
@@ -516,8 +516,8 @@
516516 vz = data.material[face].vz;
517517
518518 //角度を求める
519- rx = atan2(vz, vx) + (float)M_PI;
520- ry = atan2(vy, sqrt(vx*vx + vz*vz)) + (float)M_PI;
519+ rx = atan2(vz, vx)*-1 + (float)M_PI;
520+ ry = atan2(vy, sqrt(vx*vx + vz*vz))*-1;
521521
522522 //エフェクト作成
523523 for(int i=0; i<MAX_EFFECT; i++){
@@ -538,13 +538,23 @@
538538 //! @param y Y座標
539539 //! @param z Z座標
540540 //! @param damage ダメージ
541-void ObjectManager::SetHumanBlood(float x, float y, float z, int damage)
541+//! @param CollideMap マップへの付着
542+void ObjectManager::SetHumanBlood(float x, float y, float z, int damage, bool CollideMap)
542543 {
544+ int addtype;
545+
546+ if( CollideMap == false ){
547+ addtype = EFFECT_NORMAL;
548+ }
549+ else{
550+ addtype = EFFECT_COLLIDEMAP;
551+ }
552+
543553 if( GameConfig.GetBloodFlag() == true ){
544- 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);
554+ 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 | addtype);
545555 for(int i=0; i<(damage/10); i++){
546556 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, 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);
557+ 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 | addtype);
548558 }
549559 }
550560 }
@@ -855,6 +865,9 @@
855865 void ObjectManager::HitBulletHuman(int HitHuman_id, int Hit_id, float x, float y, float z, float brx, int attacks, int Shothuman_id)
856866 {
857867 int damage = 0;
868+ int paramid;
869+ HumanParameter Paraminfo;
870+ bool NotRobot;
858871
859872 //使用されていないか、死亡していれば処理しない。
860873 if( HumanIndex[HitHuman_id].GetEnableFlag() == false ){ return; }
@@ -866,11 +879,21 @@
866879 if( Hit_id == 2 ){ HumanIndex[HitHuman_id].HitBulletLeg(attacks); }
867880 HumanIndex[HitHuman_id].AddPosOrder(brx, 0.0f, 1.0f);
868881
882+ //ロボットかどうか判定
883+ HumanIndex[HitHuman_id].GetParamData(&paramid, NULL, NULL, NULL);
884+ GameParamInfo->GetHuman(paramid, &Paraminfo);
885+ if( Paraminfo.type == 1 ){
886+ NotRobot = false;
887+ }
888+ else{
889+ NotRobot = true;
890+ }
891+
869892 //エフェクト(血)を表示
870893 if( Hit_id == 0 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_HEAD); }
871894 if( Hit_id == 1 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_UP); }
872895 if( Hit_id == 2 ){ damage = (int)((float)attacks * HUMAN_DAMAGE_LEG); }
873- SetHumanBlood(x, y, z, damage);
896+ SetHumanBlood(x, y, z, damage, NotRobot);
874897
875898 //効果音を再生
876899 GameSound->HitHuman(x, y, z);
@@ -987,7 +1010,7 @@
9871010 }
9881011
9891012 //エフェクト(血)を表示
990- SetHumanBlood(hx, hy+15.0f, hz, total_damage);
1013+ SetHumanBlood(hx, hy+15.0f, hz, total_damage, false);
9911014
9921015 //人と手榴弾の距離を算出
9931016 x = gx - hx;
@@ -1110,6 +1133,7 @@
11101133 {
11111134 //無効なエフェクトならば処理しない
11121135 if( in_effect->GetEnableFlag() == false ){ return false; }
1136+ if( in_effect->GetCollideMapFlag() == false ){ return false; }
11131137 if( in_effect->GetTextureID() != Resource->GetEffectBloodTexture() ){ return false; }
11141138
11151139 //血が出ない設定なら処理しない
@@ -2021,15 +2045,28 @@
20212045 if( EnemyHuman->GetHP() <= 0 ){ return; }
20222046
20232047 float tx, ty, tz;
2048+ int paramid;
2049+ HumanParameter Paraminfo;
2050+ bool NotRobot;
20242051
20252052 EnemyHuman->GetPosData(&tx, &ty, &tz, NULL);
20262053 ty += VIEW_HEIGHT;
20272054
2055+ //ロボットかどうか判定
2056+ EnemyHuman->GetParamData(&paramid, NULL, NULL, NULL);
2057+ GameParamInfo->GetHuman(paramid, &Paraminfo);
2058+ if( Paraminfo.type == 1 ){
2059+ NotRobot = false;
2060+ }
2061+ else{
2062+ NotRobot = true;
2063+ }
2064+
20282065 //ダメージなどを計算
20292066 EnemyHuman->HitZombieAttack();
20302067
20312068 //エフェクト(血)を表示
2032- SetHumanBlood(tx, ty, tz, HUMAN_DAMAGE_ZOMBIEU);
2069+ SetHumanBlood(tx, ty, tz, HUMAN_DAMAGE_ZOMBIEU, NotRobot);
20332070
20342071 //効果音を再生
20352072 GameSound->HitHuman(tx, ty, tz);
--- trunk/object.cpp (revision 127)
+++ trunk/object.cpp (revision 128)
@@ -2600,6 +2600,18 @@
26002600 *mz = move_z;
26012601 }
26022602
2603+//! エフェクトのマップあたり判定フラグ取得
2604+//! @return 有効:true 無効:false
2605+bool effect::GetCollideMapFlag()
2606+{
2607+ if( type&EFFECT_COLLIDEMAP ){
2608+ return true;
2609+ }
2610+ //else{
2611+ return false;
2612+ //}
2613+}
2614+
26032615 //! @brief 計算を実行(ビルボード化)
26042616 //! @param camera_rx カメラの横軸角度
26052617 //! @param camera_ry カメラの縦軸角度