X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 185 (tree) |
|---|---|
| Time | 2017-10-10 22:37:50 |
| Author | |
スコープを覗いて発砲した際の反動を改良、簡易・精密以外のスコープモード(通称:等倍スコープ)対応
| @@ -1366,8 +1366,7 @@ | ||
| 1366 | 1366 | inputCtrl->GetMouseMovement(&x, &y); |
| 1367 | 1367 | |
| 1368 | 1368 | //視点の移動量計算 |
| 1369 | - float mang = 0.0f; | |
| 1370 | - if( myHuman->GetScopeMode() == 0 ){ mang = 0.01f; } | |
| 1369 | + float mang = 0.01f; | |
| 1371 | 1370 | if( myHuman->GetScopeMode() == 1 ){ mang = 0.0032f; } |
| 1372 | 1371 | if( myHuman->GetScopeMode() == 2 ){ mang = 0.0060f; } |
| 1373 | 1372 | MouseSensitivity = DegreeToRadian(1) * mang * GameConfig.GetMouseSensitivity(); |
| @@ -2031,10 +2030,9 @@ | ||
| 2031 | 2030 | d3dg->SetFog(SkyNumber); |
| 2032 | 2031 | if( Camera_F1mode == false ){ |
| 2033 | 2032 | int scopemode = myHuman->GetScopeMode(); |
| 2034 | - float viewangle = 0.0f; | |
| 2035 | 2033 | |
| 2036 | 2034 | //スコープによる視野角を決定 |
| 2037 | - if( scopemode == 0 ){ viewangle = VIEWANGLE_NORMAL; } | |
| 2035 | + float viewangle = VIEWANGLE_NORMAL; | |
| 2038 | 2036 | if( scopemode == 1 ){ viewangle = VIEWANGLE_SCOPE_1; } |
| 2039 | 2037 | if( scopemode == 2 ){ viewangle = VIEWANGLE_SCOPE_2; } |
| 2040 | 2038 |
| @@ -2177,32 +2175,33 @@ | ||
| 2177 | 2175 | } |
| 2178 | 2176 | |
| 2179 | 2177 | //スコープ描画 |
| 2180 | - if( (Camera_F1mode == false)&&(myHuman->GetScopeMode() == 1) ){ | |
| 2178 | + if( (Camera_F1mode == false)&&(myHuman->GetScopeMode() != 0) ){ | |
| 2181 | 2179 | 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 | + } | |
| 2188 | 2195 | } |
| 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 | - } | |
| 2196 | 2196 | |
| 2197 | 2197 | //目隠し描画 |
| 2198 | 2198 | if( (Camera_Blind == true)&&(Camera_Debugmode == false)&&(hp > 0) ){ |
| 2199 | 2199 | |
| 2200 | 2200 | int scopemode = myHuman->GetScopeMode(); |
| 2201 | - float addang; | |
| 2202 | 2201 | float adddist = 1.2f; |
| 2203 | 2202 | |
| 2204 | 2203 | //スコープによる視野角を決定 |
| 2205 | - if( scopemode == 0 ){ addang = VIEWANGLE_NORMAL / 4; } | |
| 2204 | + float addang = VIEWANGLE_NORMAL / 4; | |
| 2206 | 2205 | if( scopemode == 1 ){ addang = VIEWANGLE_SCOPE_1 / 4; } |
| 2207 | 2206 | if( scopemode == 2 ){ addang = VIEWANGLE_SCOPE_2 / 4; } |
| 2208 | 2207 |
| @@ -2389,31 +2388,37 @@ | ||
| 2389 | 2388 | |
| 2390 | 2389 | //照準表示 |
| 2391 | 2390 | 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; } | |
| 2398 | 2402 | |
| 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)); | |
| 2403 | 2407 | |
| 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)); | |
| 2412 | 2416 | |
| 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 | + } | |
| 2417 | 2422 | } |
| 2418 | 2423 | } |
| 2419 | 2424 | } |
| @@ -564,17 +564,48 @@ | ||
| 564 | 564 | *GunsightErrorRange = StateGunsightErrorRange + ReactionGunsightErrorRange; |
| 565 | 565 | |
| 566 | 566 | |
| 567 | - //精密スコープ以外の武器を、スコープを使わずに使っていたら、設定された誤差を加算。 | |
| 568 | - if( (ParamData.scopemode != 2)&&(scopemode == 0) ){ | |
| 567 | + //誤差計算 | |
| 568 | + if( (scopemode == 1)||(ParamData.scopemode == 2) ){ | |
| 569 | + //簡易スコープ使用中か、精密スコープを所持しているなら、 | |
| 570 | + //照準の誤差なし | |
| 571 | + } | |
| 572 | + else { | |
| 573 | + //設定された誤差を加算。 | |
| 569 | 574 | ReactionGunsightErrorRange += ParamData.reaction; |
| 570 | 575 | } |
| 571 | 576 | |
| 572 | 577 | //スコープを使用している状態の反動を加算 |
| 573 | 578 | 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); | |
| 575 | 593 | } |
| 576 | 594 | 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); | |
| 578 | 609 | } |
| 579 | 610 | |
| 580 | 611 | //腕に反動を伝える |
| @@ -60,7 +60,12 @@ | ||
| 60 | 60 | #define HUMAN_DAMAGE_GRENADE_LEG 80 //!< 手榴弾による 足 への最大ダメージ |
| 61 | 61 | #define SMALLOBJECT_DAMAGE_GRENADE 80 //!< 手榴弾による 小物 への最大ダメージ |
| 62 | 62 | |
| 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刻み | |
| 64 | 69 | |
| 65 | 70 | #define ARMRAD_NOWEAPON DegreeToRadian((-90 + 20)) //!< 手ぶら時の腕の描画角度 |
| 66 | 71 | #define ARMRAD_RELOADWEAPON DegreeToRadian(-20) //!< リロード時の腕の描画角度 |