• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-cqtcocoa誰得pythonphprubygameguibathyscaphec翻訳計画中(planning stage)omegatframeworktwittertestdomvb.netdirectxbtronarduinopreviewerゲームエンジン

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


Commit MetaInfo

Revision297 (tree)
Zeit2022-03-27 12:34:52
Autorxops-mikan

Log Message

人とマップの当たり判定関連の仕様変更、足音処理の仕様変更、3Dリセット時のリソース管理改善、ほか戻り値やコメント修正

Ändern Zusammenfassung

Diff

--- trunk/gamemain.cpp (revision 296)
+++ trunk/gamemain.cpp (revision 297)
@@ -271,7 +271,8 @@
271271 //ポイントデータ初期化
272272 ObjMgr.Recovery();
273273
274- //背景空読み込み
274+ //背景空初期化
275+ Resource.CleanupSkyModelTexture();
275276 Resource.LoadSkyModelTexture(1);
276277
277278 //opening_banner = d3dg->LoadTexture("banner.png", true, false);
@@ -1943,7 +1944,8 @@
19431944 //ポイントデータ初期化
19441945 ObjMgr.Recovery();
19451946
1946- //背景空読み込み
1947+ //背景空初期化
1948+ Resource.CleanupSkyModelTexture();
19471949 Resource.LoadSkyModelTexture(SkyNumber);
19481950
19491951 return 0;
--- trunk/object.cpp (revision 296)
+++ trunk/object.cpp (revision 297)
@@ -1430,7 +1430,10 @@
14301430 //! @param inblockdata BlockDataInterfaceクラスのポインタ
14311431 //! @param AddCollisionFlag 追加の当たり判定フラグ
14321432 //! @param player 対象の人物がプレイヤーかどうか
1433-void human::CollisionMap(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player)
1433+//! @param underblock_id 足元のブロックIDを受け取るポインタ(NULL可)
1434+//! @param underblock_face 足元のブロックの面番号を受け取るポインタ(NULL可)
1435+//! @attention 空中の場合など足元にブロックがない場合、ブロックIDと面番号は -1 を返します。
1436+void human::CollisionMap(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, int *underblock_id, int *underblock_face)
14341437 {
14351438 float pos_x2, pos_y2, pos_z2;
14361439 float dist_x, dist_y, dist_z;
@@ -1438,6 +1441,10 @@
14381441 float Dist;
14391442 bool FallFlag;
14401443
1444+ //ブロックIDと面番号は、ひとまず -1 を用意をする。
1445+ if( underblock_id != NULL ){ *underblock_id = -1; }
1446+ if( underblock_face != NULL ){ *underblock_face = -1; }
1447+
14411448 //現時点の座標をバックアップ
14421449 pos_x2 = pos_x;
14431450 pos_y2 = pos_y;
@@ -1624,11 +1631,15 @@
16241631 if( (GetFlag(MoveFlag_lt, (MOVEFLAG_FORWARD | MOVEFLAG_BACK | MOVEFLAG_LEFT | MOVEFLAG_RIGHT | MOVEFLAG_WALK)) == 0x00)&&(move_y_upper == 0) ){ flag = false; }
16251632 }
16261633
1627- if( flag == true ){
1628- //足元の面の角度を取得
1629- if( CollD->CheckALLBlockIntersectDummyRay(pos_x, pos_y + 2.5f, pos_z, 0.0f, -1.0f, 0.0f, NULL, NULL, &Dist, (2.5f + 1.0f)) == true ){
1630- CollD->CheckALLBlockIntersectRay(pos_x, pos_y + 2.5f, pos_z, 0.0f, -1.0f, 0.0f, &id, &face, &Dist, (2.5f + 1.0f));
1634+ //足元のブロックと面番号を取得
1635+ if( CollD->CheckALLBlockIntersectDummyRay(pos_x, pos_y + 2.5f, pos_z, 0.0f, -1.0f, 0.0f, NULL, NULL, &Dist, (2.5f + 1.0f)) == true ){
1636+ CollD->CheckALLBlockIntersectRay(pos_x, pos_y + 2.5f, pos_z, 0.0f, -1.0f, 0.0f, &id, &face, &Dist, (2.5f + 1.0f));
16311637
1638+ //ブロックIDと面番号を返す
1639+ if( underblock_id != NULL ){ *underblock_id = id; }
1640+ if( underblock_face != NULL ){ *underblock_face = face; }
1641+
1642+ if( flag == true ){
16321643 inblockdata->Getdata(&bdata, id);
16331644
16341645 //斜面に立っているならば、斜面を滑らせる処理
@@ -1764,8 +1775,11 @@
17641775 //! @param AddCollisionFlag 追加の当たり判定フラグ
17651776 //! @param player 対象の人物がプレイヤーかどうか
17661777 //! @param F5mode 上昇機能(F5裏技)のフラグ (有効:true 無効:false)
1778+//! @param underblock_id 足元のブロックIDを受け取るポインタ(NULL可)
1779+//! @param underblock_face 足元のブロックの面番号を受け取るポインタ(NULL可)
1780+//! @attention 空中の場合など足元にブロックがない場合、ブロックIDと面番号は -1 を返します。
17671781 //! @return 処理なし:0 通常処理:1 死亡して倒れ終わった直後:2 静止した死体:3 地形により死亡した直後:4
1768-int human::RunFrame(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, bool F5mode)
1782+int human::RunFrame(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, bool F5mode, int *underblock_id, int *underblock_face)
17691783 {
17701784 if( CollD == NULL ){ return 0; }
17711785 if( EnableFlag == false ){ return 0; }
@@ -1828,10 +1842,10 @@
18281842 ControlProcess();
18291843
18301844 //マップとの当たり判定
1831- CollisionMap(CollD, inblockdata, AddCollisionFlag, player);
1845+ CollisionMap(CollD, inblockdata, AddCollisionFlag, player, underblock_id, underblock_face);
18321846
18331847 //今回のマップとの当たり判定でHPがゼロになったなら、地形による死亡
1834- if( (hp_old >0)&&(hp <= 0) ){
1848+ if( (hp_old > 0)&&(hp <= 0) ){
18351849 return 4;
18361850 }
18371851
@@ -1878,7 +1892,6 @@
18781892 //! @param player 対象の人物がプレイヤーかどうか
18791893 //! @param NoModel モデル描画無効化
18801894 //! @todo 腕の位置を行列で求める
1881-//! @todo 死体の部位の高さ(Y軸)がおかしい
18821895 void human::Render(class D3DGraphics *d3dg, class ResourceManager *Resource, bool DrawArmOnly, bool player, bool NoModel)
18831896 {
18841897 //未使用引数対策
--- trunk/object.h (revision 296)
+++ trunk/object.h (revision 297)
@@ -175,7 +175,7 @@
175175 void GunsightErrorRange();
176176 int CheckAndProcessDead(class Collision *CollD);
177177 void ControlProcess();
178- void CollisionMap(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player);
178+ void CollisionMap(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, int *underblock_id, int *underblock_face);
179179 bool CollisionBlockScratch(class Collision *CollD, class BlockDataInterface *inblockdata, float *px, float *py, float *pz, float px_old, float py_old, float pz_old, float in_vx, float in_vy, float in_vz, int mode);
180180
181181 public:
@@ -227,7 +227,7 @@
227227 virtual void SetHitFlag(float rx);
228228 virtual bool CheckHit(float *rx);
229229 virtual float GetTotalMove();
230- virtual int RunFrame(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, bool F5mode);
230+ virtual int RunFrame(class Collision *CollD, class BlockDataInterface *inblockdata, bool AddCollisionFlag, bool player, bool F5mode, int *underblock_id, int *underblock_face);
231231 virtual int GetGunsightErrorRange();
232232 virtual void Render(class D3DGraphics *d3dg, class ResourceManager *Resource, bool DrawArmOnly, bool player, bool NoModel);
233233 };
--- trunk/objectmanager.cpp (revision 296)
+++ trunk/objectmanager.cpp (revision 297)
@@ -2641,6 +2641,7 @@
26412641 for(int i=0; i<MAX_HUMAN; i++){
26422642 bool cmdF5, player;
26432643 int rtn;
2644+ int block_id, block_face, block_textureid;
26442645 int MoveMode;
26452646
26462647 //プレイヤーかどうか判定
@@ -2658,7 +2659,7 @@
26582659 cmdF5 = false;
26592660 }
26602661
2661- rtn = HumanIndex[i].RunFrame(CollD, BlockData, AddCollisionFlag, player, cmdF5);
2662+ rtn = HumanIndex[i].RunFrame(CollD, BlockData, AddCollisionFlag, player, cmdF5, &block_id, &block_face);
26622663 if( rtn == 2 ){
26632664 //死亡時のエフェクト
26642665 DeadEffect(&(HumanIndex[i]));
@@ -2676,13 +2677,13 @@
26762677
26772678 //足音
26782679 MoveMode = HumanIndex[i].GetMovemode(false);
2679- if( (2 <= MoveMode)&&(MoveMode <= 4) ){
2680- //走る足音追加
2680+ if( (1 <= MoveMode)&&(MoveMode <= 4) ){
2681+ //足音追加
26812682 float posx, posy, posz;
26822683 int teamid;
26832684 HumanIndex[i].GetPosData(&posx, &posy, &posz, NULL);
26842685 HumanIndex[i].GetParamData(NULL, NULL, NULL, &teamid);
2685- GameSound->SetFootsteps(posx, posy, posz, MoveMode - 2, teamid);
2686+ GameSound->SetFootsteps(posx, posy, posz, MoveMode - 1, teamid);
26862687 }
26872688 }
26882689
--- trunk/resource.cpp (revision 296)
+++ trunk/resource.cpp (revision 297)
@@ -605,7 +605,7 @@
605605 {
606606 if( d3dg == NULL ){ return 1; }
607607 if( SoundCtrl == NULL ){ return 1; }
608- if( (id < 0)||(MAX_ADDSMALLOBJECT-1 < id) ){ return -1; }
608+ if( (id < 0)||(MAX_ADDSMALLOBJECT-1 < id) ){ return 1; }
609609
610610 int dataid = TOTAL_PARAMETERINFO_SMALLOBJECT + id;
611611 int cnt = 0;
--- trunk/resource.h (revision 296)
+++ trunk/resource.h (revision 297)
@@ -32,9 +32,9 @@
3232 #ifndef RESOURCE_H
3333 #define RESOURCE_H
3434
35-#define TOTAL_UPMODE 6 //!< 上半身の合計モデル
36-#define TOTAL_ARMMODE 3 //!< 腕の合計モデル
37-#define TOTAL_WALKMODE 8 //!< 足(歩き)の合計モデル
35+#define TOTAL_UPMODE 6 //!< 上半身の合計モデル
36+#define TOTAL_ARMMODE 3 //!< 腕の合計モデル
37+#define TOTAL_WALKMODE 8 //!< 足(歩き)の合計モデル
3838 #define TOTAL_RUNMODE 12 //!< 足(走り)の合計モデル
3939
4040 #define MAX_LOADHUMANTEXTURE 10 //!< 人のテクスチャを読み込む最大枚数
--- trunk/soundmanager.cpp (revision 296)
+++ trunk/soundmanager.cpp (revision 297)
@@ -238,7 +238,7 @@
238238 //! @param x 音源のX座標
239239 //! @param y 音源のY座標
240240 //! @param z 音源のZ座標
241-//! @param MoveMode 移動モード(前進:0 後退:1 左右:2)
241+//! @param MoveMode 移動モード(歩き:0 前進:1 後退:2 左右:3)
242242 //! @param teamID チーム番号
243243 //! @return 成功:true 失敗:false
244244 bool SoundManager::SetFootsteps(float x, float y, float z, int MoveMode, int teamID)
@@ -246,11 +246,12 @@
246246 soundlist *plist = NULL;
247247 if( GetNewList(&plist) == false ){ return false; }
248248
249- if( (MoveMode < 0)||(2 < MoveMode) ){ return false; }
249+ if( (MoveMode < 0)||(3 < MoveMode) ){ return false; }
250250
251- if( MoveMode == 0 ){ plist->paramid = FOOTSTEPS_FORWARD; }
252- if( MoveMode == 1 ){ plist->paramid = FOOTSTEPS_BACK; }
253- if( MoveMode == 2 ){ plist->paramid = FOOTSTEPS_SIDE; }
251+ if( MoveMode == 0 ){ plist->paramid = FOOTSTEPS_WALK; }
252+ if( MoveMode == 1 ){ plist->paramid = FOOTSTEPS_FORWARD; }
253+ if( MoveMode == 2 ){ plist->paramid = FOOTSTEPS_BACK; }
254+ if( MoveMode == 3 ){ plist->paramid = FOOTSTEPS_SIDE; }
254255 plist->x = x;
255256 plist->y = y;
256257 plist->z = z;
@@ -335,6 +336,9 @@
335336 if( getlist[i].paramid == HIT_HUMAN_ZOMBIE ){
336337 maxdist = 40.0f;
337338 }
339+ if( getlist[i].paramid == FOOTSTEPS_WALK ){
340+ continue;
341+ }
338342 if( getlist[i].paramid == FOOTSTEPS_FORWARD ){
339343 if( getlist[i].teamid == teamID ){ continue; }
340344 else{ maxdist = 40.0f; }
@@ -626,7 +630,8 @@
626630 volume = MAX_SOUNDHITGRENADE;
627631 break;
628632
629- case FOOTSTEPS_FORWARD: //足音・走る音
633+ case FOOTSTEPS_WALK: //足音
634+ case FOOTSTEPS_FORWARD:
630635 case FOOTSTEPS_BACK:
631636 case FOOTSTEPS_SIDE:
632637 //足音を再生する処理を書く
--- trunk/soundmanager.h (revision 296)
+++ trunk/soundmanager.h (revision 297)
@@ -59,6 +59,7 @@
5959 BULLET, //!< 銃弾の音・横切る音
6060 GRE_BOUND, //!< 手榴弾 バウンド音
6161 GRE_EXPLOSION, //!< 手榴弾 爆発音
62+ FOOTSTEPS_WALK, //!< 足音・歩き
6263 FOOTSTEPS_FORWARD, //!< 足音・走る音(前進)
6364 FOOTSTEPS_BACK, //!< 足音・走る音(後退)
6465 FOOTSTEPS_SIDE, //!< 足音・走る音(左右)