• 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

Revision185 (tree)
Time2017-10-10 22:37:50
Authorxops-mikan

Log Message

スコープを覗いて発砲した際の反動を改良、簡易・精密以外のスコープモード(通称:等倍スコープ)対応

Change Summary

Incremental Difference

--- trunk/gamemain.cpp (revision 184)
+++ trunk/gamemain.cpp (revision 185)
@@ -1366,8 +1366,7 @@
13661366 inputCtrl->GetMouseMovement(&x, &y);
13671367
13681368 //視点の移動量計算
1369- float mang = 0.0f;
1370- if( myHuman->GetScopeMode() == 0 ){ mang = 0.01f; }
1369+ float mang = 0.01f;
13711370 if( myHuman->GetScopeMode() == 1 ){ mang = 0.0032f; }
13721371 if( myHuman->GetScopeMode() == 2 ){ mang = 0.0060f; }
13731372 MouseSensitivity = DegreeToRadian(1) * mang * GameConfig.GetMouseSensitivity();
@@ -2031,10 +2030,9 @@
20312030 d3dg->SetFog(SkyNumber);
20322031 if( Camera_F1mode == false ){
20332032 int scopemode = myHuman->GetScopeMode();
2034- float viewangle = 0.0f;
20352033
20362034 //スコープによる視野角を決定
2037- if( scopemode == 0 ){ viewangle = VIEWANGLE_NORMAL; }
2035+ float viewangle = VIEWANGLE_NORMAL;
20382036 if( scopemode == 1 ){ viewangle = VIEWANGLE_SCOPE_1; }
20392037 if( scopemode == 2 ){ viewangle = VIEWANGLE_SCOPE_2; }
20402038
@@ -2177,32 +2175,33 @@
21772175 }
21782176
21792177 //スコープ描画
2180- if( (Camera_F1mode == false)&&(myHuman->GetScopeMode() == 1) ){
2178+ if( (Camera_F1mode == false)&&(myHuman->GetScopeMode() != 0) ){
21812179 d3dg->Draw2DTexture(0, 0, Resource.GetScopeTexture(), SCREEN_WIDTH, SCREEN_HEIGHT, 1.0f);
2182- d3dg->Draw2DLine(SCREEN_WIDTH/2-49, SCREEN_HEIGHT/2, SCREEN_WIDTH/2-4, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2183- d3dg->Draw2DLine(SCREEN_WIDTH/2+4, SCREEN_HEIGHT/2, SCREEN_WIDTH/2+49, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2184- d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2-49, SCREEN_WIDTH/2, SCREEN_HEIGHT/2-4, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2185- d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+4, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+49, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2186- d3dg->Draw2DBox(SCREEN_WIDTH/2-50, SCREEN_HEIGHT/2-1, SCREEN_WIDTH/2+50, SCREEN_HEIGHT/2+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2187- d3dg->Draw2DBox(SCREEN_WIDTH/2-1, SCREEN_HEIGHT/2-50, SCREEN_WIDTH/2+1, SCREEN_HEIGHT/2+50, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2180+
2181+ if( myHuman->GetScopeMode() == 1 ){
2182+ d3dg->Draw2DLine(SCREEN_WIDTH/2-49, SCREEN_HEIGHT/2, SCREEN_WIDTH/2-4, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2183+ d3dg->Draw2DLine(SCREEN_WIDTH/2+4, SCREEN_HEIGHT/2, SCREEN_WIDTH/2+49, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2184+ d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2-49, SCREEN_WIDTH/2, SCREEN_HEIGHT/2-4, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2185+ d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+4, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+49, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2186+ d3dg->Draw2DBox(SCREEN_WIDTH/2-50, SCREEN_HEIGHT/2-1, SCREEN_WIDTH/2+50, SCREEN_HEIGHT/2+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2187+ d3dg->Draw2DBox(SCREEN_WIDTH/2-1, SCREEN_HEIGHT/2-50, SCREEN_WIDTH/2+1, SCREEN_HEIGHT/2+50, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2188+ }
2189+ if( myHuman->GetScopeMode() == 2 ){
2190+ d3dg->Draw2DLine(0, SCREEN_HEIGHT/2, SCREEN_WIDTH, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2191+ d3dg->Draw2DLine(SCREEN_WIDTH/2, 0, SCREEN_WIDTH/2, SCREEN_HEIGHT, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2192+ d3dg->Draw2DBox(0, SCREEN_HEIGHT/2-1, SCREEN_WIDTH, SCREEN_HEIGHT/2+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2193+ d3dg->Draw2DBox(SCREEN_WIDTH/2-1, 0, SCREEN_WIDTH/2+1, SCREEN_HEIGHT, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2194+ }
21882195 }
2189- if( (Camera_F1mode == false)&&(myHuman->GetScopeMode() == 2) ){
2190- d3dg->Draw2DTexture(0, 0, Resource.GetScopeTexture(), SCREEN_WIDTH, SCREEN_HEIGHT, 1.0f);
2191- d3dg->Draw2DLine(0, SCREEN_HEIGHT/2, SCREEN_WIDTH, SCREEN_HEIGHT/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2192- d3dg->Draw2DLine(SCREEN_WIDTH/2, 0, SCREEN_WIDTH/2, SCREEN_HEIGHT, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f));
2193- d3dg->Draw2DBox(0, SCREEN_HEIGHT/2-1, SCREEN_WIDTH, SCREEN_HEIGHT/2+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2194- d3dg->Draw2DBox(SCREEN_WIDTH/2-1, 0, SCREEN_WIDTH/2+1, SCREEN_HEIGHT, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
2195- }
21962196
21972197 //目隠し描画
21982198 if( (Camera_Blind == true)&&(Camera_Debugmode == false)&&(hp > 0) ){
21992199
22002200 int scopemode = myHuman->GetScopeMode();
2201- float addang;
22022201 float adddist = 1.2f;
22032202
22042203 //スコープによる視野角を決定
2205- if( scopemode == 0 ){ addang = VIEWANGLE_NORMAL / 4; }
2204+ float addang = VIEWANGLE_NORMAL / 4;
22062205 if( scopemode == 1 ){ addang = VIEWANGLE_SCOPE_1 / 4; }
22072206 if( scopemode == 2 ){ addang = VIEWANGLE_SCOPE_2 / 4; }
22082207
@@ -2389,31 +2388,37 @@
23892388
23902389 //照準表示
23912390 if( (Camera_F1mode == false)&&(param_WeaponP != 2) ){
2392- if( (weapon[selectweapon] != NULL)&&(myHuman->GetScopeMode() == 0)&&(param_scopemode != 2) ){
2393- if( (end_framecnt == 0)||(GameInfoData.missioncomplete == true) ){
2394- if( GameConfig.GetAnotherGunsightFlag() ){ //オプション型
2395- //照準の透明度
2396- float alpha = 1.0f - (float)ErrorRange/40.0f;
2397- if( alpha < 0.0f ){ alpha = 0.0f; }
2391+ if( (weapon[selectweapon] != NULL) ){
2392+ if( (myHuman->GetScopeMode() == 1)||(param_scopemode == 2) ){
2393+ //簡易スコープ使用中か、精密スコープを所持しているなら、
2394+ //表示する照準なし
2395+ }
2396+ else{
2397+ if( (end_framecnt == 0)||(GameInfoData.missioncomplete == true) ){
2398+ if( GameConfig.GetAnotherGunsightFlag() ){ //オプション型
2399+ //照準の透明度
2400+ float alpha = 1.0f - (float)ErrorRange/40.0f;
2401+ if( alpha < 0.0f ){ alpha = 0.0f; }
23982402
2399- d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+4, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2400- d3dg->Draw2DLine(SCREEN_WIDTH/2-15, SCREEN_HEIGHT/2+15, SCREEN_WIDTH/2-19, SCREEN_HEIGHT/2+19, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2401- d3dg->Draw2DLine(SCREEN_WIDTH/2+15, SCREEN_HEIGHT/2+15, SCREEN_WIDTH/2+19, SCREEN_HEIGHT/2+19, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2402- d3dg->Draw2DLine(SCREEN_WIDTH/2-4, SCREEN_HEIGHT/2+4, SCREEN_WIDTH/2+4, SCREEN_HEIGHT/2+4, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2403+ d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+4, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2404+ d3dg->Draw2DLine(SCREEN_WIDTH/2-15, SCREEN_HEIGHT/2+15, SCREEN_WIDTH/2-19, SCREEN_HEIGHT/2+19, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2405+ d3dg->Draw2DLine(SCREEN_WIDTH/2+15, SCREEN_HEIGHT/2+15, SCREEN_WIDTH/2+19, SCREEN_HEIGHT/2+19, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
2406+ d3dg->Draw2DLine(SCREEN_WIDTH/2-4, SCREEN_HEIGHT/2+4, SCREEN_WIDTH/2+4, SCREEN_HEIGHT/2+4, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
24032407
2404- d3dg->Draw2DLine(SCREEN_WIDTH/2-4 - ErrorRange, SCREEN_HEIGHT/2-4 - ErrorRange/2, SCREEN_WIDTH/2-4 - ErrorRange, SCREEN_HEIGHT/2+4 + ErrorRange/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,alpha));
2405- d3dg->Draw2DLine(SCREEN_WIDTH/2+4 + ErrorRange, SCREEN_HEIGHT/2-4 - ErrorRange/2, SCREEN_WIDTH/2+4 + ErrorRange, SCREEN_HEIGHT/2+4 + ErrorRange/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,alpha));
2406- }
2407- else{ //標準型
2408- d3dg->Draw2DLine(SCREEN_WIDTH/2-13, SCREEN_HEIGHT/2, SCREEN_WIDTH/2-3, SCREEN_HEIGHT/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2409- d3dg->Draw2DLine(SCREEN_WIDTH/2+13, SCREEN_HEIGHT/2, SCREEN_WIDTH/2+3, SCREEN_HEIGHT/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2410- d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2-13, SCREEN_WIDTH/2, SCREEN_HEIGHT/2-3, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2411- d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+13, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+3, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2408+ d3dg->Draw2DLine(SCREEN_WIDTH/2-4 - ErrorRange, SCREEN_HEIGHT/2-4 - ErrorRange/2, SCREEN_WIDTH/2-4 - ErrorRange, SCREEN_HEIGHT/2+4 + ErrorRange/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,alpha));
2409+ d3dg->Draw2DLine(SCREEN_WIDTH/2+4 + ErrorRange, SCREEN_HEIGHT/2-4 - ErrorRange/2, SCREEN_WIDTH/2+4 + ErrorRange, SCREEN_HEIGHT/2+4 + ErrorRange/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,alpha));
2410+ }
2411+ else{ //標準型
2412+ d3dg->Draw2DLine(SCREEN_WIDTH/2-13, SCREEN_HEIGHT/2, SCREEN_WIDTH/2-3, SCREEN_HEIGHT/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2413+ d3dg->Draw2DLine(SCREEN_WIDTH/2+13, SCREEN_HEIGHT/2, SCREEN_WIDTH/2+3, SCREEN_HEIGHT/2, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2414+ d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2-13, SCREEN_WIDTH/2, SCREEN_HEIGHT/2-3, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
2415+ d3dg->Draw2DLine(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+13, SCREEN_WIDTH/2, SCREEN_HEIGHT/2+3, d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f));
24122416
2413- stru[0] = 0xBD; stru[1] = '\0'; //"ス"
2414- d3dg->Draw2DTextureFontText(SCREEN_WIDTH/2 - 16 - ErrorRange, SCREEN_HEIGHT/2 - 16, (char*)stru, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f), 32, 32);
2415- stru[0] = 0xBE; stru[1] = '\0'; //"セ"
2416- d3dg->Draw2DTextureFontText(SCREEN_WIDTH/2 - 16 + ErrorRange, SCREEN_HEIGHT/2 - 16, (char*)stru, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f), 32, 32);
2417+ stru[0] = 0xBD; stru[1] = '\0'; //"ス"
2418+ d3dg->Draw2DTextureFontText(SCREEN_WIDTH/2 - 16 - ErrorRange, SCREEN_HEIGHT/2 - 16, (char*)stru, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f), 32, 32);
2419+ stru[0] = 0xBE; stru[1] = '\0'; //"セ"
2420+ d3dg->Draw2DTextureFontText(SCREEN_WIDTH/2 - 16 + ErrorRange, SCREEN_HEIGHT/2 - 16, (char*)stru, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f), 32, 32);
2421+ }
24172422 }
24182423 }
24192424 }
--- trunk/object.cpp (revision 184)
+++ trunk/object.cpp (revision 185)
@@ -564,17 +564,48 @@
564564 *GunsightErrorRange = StateGunsightErrorRange + ReactionGunsightErrorRange;
565565
566566
567- //精密スコープ以外の武器を、スコープを使わずに使っていたら、設定された誤差を加算。
568- if( (ParamData.scopemode != 2)&&(scopemode == 0) ){
567+ //誤差計算
568+ if( (scopemode == 1)||(ParamData.scopemode == 2) ){
569+ //簡易スコープ使用中か、精密スコープを所持しているなら、
570+ //照準の誤差なし
571+ }
572+ else {
573+ //設定された誤差を加算。
569574 ReactionGunsightErrorRange += ParamData.reaction;
570575 }
571576
572577 //スコープを使用している状態の反動を加算
573578 if( (ParamData.scopemode == 1)&&(scopemode != 0) ){
574- armrotation_y += DegreeToRadian(1) * (WEAPONERRORRANGE_SCALE * ParamData.reaction);
579+ int rx_rnds, ry_rnds;
580+ float rx_degree, ry_degree;
581+
582+ //ランダムの数値範囲計算
583+ rx_rnds = (int)(WEAPONRECOIL_SCOPE_1_RX*10) * 2;
584+ ry_rnds = (int)(WEAPONRECOIL_SCOPE_1_RYMAX*10) - (int)(WEAPONRECOIL_SCOPE_1_RYMIN*10);
585+
586+ //反動(角度)決定
587+ rx_degree = WEAPONRECOIL_SCOPE_1_RX*-1 + ((float)GetRand(rx_rnds))/10;
588+ ry_degree = WEAPONRECOIL_SCOPE_1_RYMIN + ((float)GetRand(ry_rnds))/10;
589+
590+ //反動加算
591+ rotation_x += DegreeToRadian(rx_degree);
592+ armrotation_y += DegreeToRadian(ry_degree);
575593 }
576594 if( ParamData.scopemode == 2 ){
577- armrotation_y += DegreeToRadian(1) * (WEAPONERRORRANGE_SCALE * ParamData.reaction);
595+ int rx_rnds, ry_rnds;
596+ float rx_degree, ry_degree;
597+
598+ //ランダムの数値範囲計算
599+ rx_rnds = (int)(WEAPONRECOIL_SCOPE_2_RX*10) * 2;
600+ ry_rnds = (int)(WEAPONRECOIL_SCOPE_2_RYMAX*10) - (int)(WEAPONRECOIL_SCOPE_2_RYMIN*10);
601+
602+ //反動(角度)決定
603+ rx_degree = WEAPONRECOIL_SCOPE_2_RX*-1 + ((float)GetRand(rx_rnds))/10;
604+ ry_degree = WEAPONRECOIL_SCOPE_2_RYMIN + ((float)GetRand(ry_rnds))/10;
605+
606+ //反動加算
607+ rotation_x += DegreeToRadian(rx_degree);
608+ armrotation_y += DegreeToRadian(ry_degree);
578609 }
579610
580611 //腕に反動を伝える
--- trunk/object.h (revision 184)
+++ trunk/object.h (revision 185)
@@ -60,7 +60,12 @@
6060 #define HUMAN_DAMAGE_GRENADE_LEG 80 //!< 手榴弾による 足 への最大ダメージ
6161 #define SMALLOBJECT_DAMAGE_GRENADE 80 //!< 手榴弾による 小物 への最大ダメージ
6262
63-#define WEAPONERRORRANGE_SCALE 0.25f //!< 武器の反動角度の倍率(×0.25 = ÷4)
63+#define WEAPONRECOIL_SCOPE_1_RX 0.4f //!< スコープ1 発砲時の反動 横軸 ※度数法 0.1f刻み
64+#define WEAPONRECOIL_SCOPE_1_RYMIN 1.2f //!< スコープ1 発砲時の反動 縦軸最小 ※度数法 0.1f刻み
65+#define WEAPONRECOIL_SCOPE_1_RYMAX 2.0f //!< スコープ1 発砲時の反動 縦軸最大 ※度数法 0.1f刻み
66+#define WEAPONRECOIL_SCOPE_2_RX 0.6f //!< スコープ2 発砲時の反動 横軸 ※度数法 0.1f刻み
67+#define WEAPONRECOIL_SCOPE_2_RYMIN 2.4f //!< スコープ2 発砲時の反動 縦軸最小 ※度数法 0.1f刻み
68+#define WEAPONRECOIL_SCOPE_2_RYMAX 3.6f //!< スコープ2 発砲時の反動 縦軸最大 ※度数法 0.1f刻み
6469
6570 #define ARMRAD_NOWEAPON DegreeToRadian((-90 + 20)) //!< 手ぶら時の腕の描画角度
6671 #define ARMRAD_RELOADWEAPON DegreeToRadian(-20) //!< リロード時の腕の描画角度