• 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

Revision227 (tree)
Zeit2020-01-01 17:52:32
Autorxops-mikan

Log Message

メニュー画面にオプションメニューを用意し、ゲーム設定(Config)機能追加。およびそれに伴う修正。

Ändern Zusammenfassung

Diff

--- trunk/config.cpp (revision 226)
+++ trunk/config.cpp (revision 227)
@@ -77,15 +77,15 @@
7777 return 1;
7878 }
7979
80- //キーコードを取得
80+ //キーコード
8181 for(int i=0; i<TOTAL_ControlKey; i++){
8282 fread(&buf, 1, 1, fp);
83- Keycode[i] = buf;
83+ Keycode[i] = (int)buf;
8484 }
8585
8686 //マウス感度
8787 fread(&buf, 1, 1, fp);
88- MouseSensitivity = buf;
88+ MouseSensitivity = (int)buf;
8989
9090 //フルスクリーン有効
9191 fread(&buf, 1, 1, fp);
@@ -104,7 +104,7 @@
104104
105105 //画面の明るさ
106106 fread(&buf, 1, 1, fp);
107- Brightness = buf;
107+ Brightness = (int)buf;
108108
109109 //マウス反転
110110 fread(&buf, 1, 1, fp);
@@ -134,6 +134,119 @@
134134 return 0;
135135 }
136136
137+//! @brief 設定ファイルを書き込む
138+//! @param fname ファイル名
139+//! @return 成功:0 失敗:1
140+int Config::SaveFile(char *fname)
141+{
142+ FILE *fp;
143+ char buf;
144+
145+#ifdef ENABLE_DEBUGLOG
146+ //ログに出力
147+ OutputLog.WriteLog(LOG_LOAD, "設定ファイル(書き込み)", fname);
148+#endif
149+
150+#ifdef ENABLE_PATH_DELIMITER_SLASH
151+ //パス区切り文字を変換
152+ fname = ChangePathDelimiter(fname);
153+#endif
154+
155+ //ファイルを開く
156+ fp = fopen(fname, "wb");
157+ if( fp == NULL ){
158+ return 1;
159+ }
160+
161+ //キーコード
162+ for(int i=0; i<TOTAL_ControlKey; i++){
163+ buf = (char)Keycode[i];
164+ fwrite(&buf, 1, 1, fp);
165+ }
166+
167+ //マウス感度
168+ buf = (char)MouseSensitivity;
169+ fwrite(&buf, 1, 1, fp);
170+
171+ //フルスクリーン有効
172+ if( FullscreenFlag == false ){ buf = 0x00; }
173+ else{ buf = 0x01; }
174+ fwrite(&buf, 1, 1, fp);
175+
176+ //効果音有効
177+ if( SoundFlag == false ){ buf = 0x00; }
178+ else{ buf = 0x01; }
179+ fwrite(&buf, 1, 1, fp);
180+
181+ //出血有効
182+ if( BloodFlag == false ){ buf = 0x00; }
183+ else{ buf = 0x01; }
184+ fwrite(&buf, 1, 1, fp);
185+
186+ //画面の明るさ
187+ buf = (char)Brightness;
188+ fwrite(&buf, 1, 1, fp);
189+
190+ //マウス反転
191+ if( InvertMouseFlag == false ){ buf = 0x00; }
192+ else{ buf = 0x01; }
193+ fwrite(&buf, 1, 1, fp);
194+
195+ //フレームスキップ
196+ if( FrameskipFlag == false ){ buf = 0x00; }
197+ else{ buf = 0x01; }
198+ fwrite(&buf, 1, 1, fp);
199+
200+ //別の照準を使用
201+ if( AnotherGunsightFlag == false ){ buf = 0x00; }
202+ else{ buf = 0x01; }
203+ fwrite(&buf, 1, 1, fp);
204+
205+ //プレイヤー名
206+ fwrite(PlayerName, 1, MAX_PLAYERNAME, fp);
207+
208+ //ファイルハンドルを閉じる
209+ fclose(fp);
210+
211+#ifdef ENABLE_DEBUGLOG
212+ //ログに出力
213+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
214+#endif
215+ return 0;
216+}
217+
218+//! @brief 設定値をデフォルトの値で初期化
219+void Config::SetDefaultConfig()
220+{
221+ Keycode[KEY_TURNUP] = 0;
222+ Keycode[KEY_TURNDOWN] = 1;
223+ Keycode[KEY_TURNLEFT] = 2;
224+ Keycode[KEY_TURNRIGHT] = 3;
225+ Keycode[KEY_MOVEFORWARD] = 54;
226+ Keycode[KEY_MOVEBACKWARD] = 50;
227+ Keycode[KEY_MOVELEFT] = 32;
228+ Keycode[KEY_MOVERIGHT] = 35;
229+ Keycode[KEY_WALK] = 16;
230+ Keycode[KEY_JUMP] = 17;
231+ Keycode[KEY_RELOAD] = 49;
232+ Keycode[KEY_DROPWEAPON] = 38;
233+ Keycode[KEY_ZOOMSCOPE] = 20;
234+ Keycode[KEY_ShotMODE] = 55;
235+ Keycode[KEY_SWITCHWEAPON] = 57;
236+ Keycode[KEY_WEAPON1] = 23;
237+ Keycode[KEY_WEAPON2] = 24;
238+ Keycode[KEY_Shot] = 18;
239+ MouseSensitivity = 25;
240+ FullscreenFlag = true;
241+ SoundFlag = true;
242+ BloodFlag = true;
243+ Brightness = 4;
244+ InvertMouseFlag = false;
245+ FrameskipFlag = false;
246+ AnotherGunsightFlag = false;
247+ strcpy(PlayerName, "xopsplayer");
248+}
249+
137250 //! @brief オリジナルキーコードを取得
138251 //! @param id 定数
139252 //! @return オリジナルキーコード
@@ -144,6 +257,16 @@
144257 return Keycode[id];
145258 }
146259
260+//! @brief オリジナルキーコードを設定
261+//! @param id 定数
262+//! @param key オリジナルキーコード
263+void Config::SetKeycode(int id, int key)
264+{
265+ if( (id < 0)||((TOTAL_ControlKey -1) < id) ){ return; }
266+
267+ Keycode[id] = key;
268+}
269+
147270 //! @brief マウス感度取得
148271 //! @return 生の値
149272 int Config::GetMouseSensitivity()
@@ -151,6 +274,13 @@
151274 return MouseSensitivity;
152275 }
153276
277+//! @brief マウス感度設定
278+//! @param param 生の値
279+void Config::SetMouseSensitivity(int param)
280+{
281+ MouseSensitivity = param;
282+}
283+
154284 //! @brief 画面表示モード取得
155285 //! @return ウィンドウ:false フルスクリーン:true
156286 bool Config::GetFullscreenFlag()
@@ -158,6 +288,13 @@
158288 return FullscreenFlag;
159289 }
160290
291+//! @brief 画面表示モード設定
292+//! @param flag フラグ
293+void Config::SetFullscreenFlag(bool flag)
294+{
295+ FullscreenFlag = flag;
296+}
297+
161298 //! @brief 効果音設定取得
162299 //! @return 無効:false 有効:true
163300 bool Config::GetSoundFlag()
@@ -165,6 +302,13 @@
165302 return SoundFlag;
166303 }
167304
305+//! @brief 効果音設定
306+//! @param flag フラグ
307+void Config::SetSoundFlag(bool flag)
308+{
309+ SoundFlag = flag;
310+}
311+
168312 //! @brief 出血設定取得
169313 //! @return 無効:false 有効:true
170314 bool Config::GetBloodFlag()
@@ -172,6 +316,13 @@
172316 return BloodFlag;
173317 }
174318
319+//! @brief 出血設定
320+//! @param flag フラグ
321+void Config::SetBloodFlag(bool flag)
322+{
323+ BloodFlag = flag;
324+}
325+
175326 //! @brief 画面の明るさ設定取得
176327 //! @return 生の値
177328 int Config::GetBrightness()
@@ -179,6 +330,14 @@
179330 return Brightness;
180331 }
181332
333+//! @brief 画面の明るさ設定
334+//! @param param 生の値
335+void Config::SetBrightness(int param)
336+{
337+ Brightness = param;
338+}
339+
340+
182341 //! @brief マウス反転設定取得
183342 //! @return 無効:false 有効:true
184343 bool Config::GetInvertMouseFlag()
@@ -186,6 +345,13 @@
186345 return InvertMouseFlag;
187346 }
188347
348+//! @brief マウス反転設定
349+//! @param flag フラグ
350+void Config::SetInvertMouseFlag(bool flag)
351+{
352+ InvertMouseFlag = flag;
353+}
354+
189355 //! @brief フレームスキップ設定取得
190356 //! @return 無効:false 有効:true
191357 bool Config::GetFrameskipFlag()
@@ -193,6 +359,13 @@
193359 return FrameskipFlag;
194360 }
195361
362+//! @brief フレームスキップ設定
363+//! @param flag フラグ
364+void Config::SetFrameskipFlag(bool flag)
365+{
366+ FrameskipFlag = flag;
367+}
368+
196369 //! @brief 別の照準を使用設定取得
197370 //! @return 無効:false 有効:true
198371 bool Config::GetAnotherGunsightFlag()
@@ -200,6 +373,13 @@
200373 return AnotherGunsightFlag;
201374 }
202375
376+//! @brief 別の照準を使用設定
377+//! @param flag フラグ
378+void Config::SetAnotherGunsightFlag(bool flag)
379+{
380+ AnotherGunsightFlag = flag;
381+}
382+
203383 //! @brief プレイヤー名取得
204384 //! @param out_str 受け取る文字列型ポインタ
205385 //! @return プレイヤー名文字数
@@ -213,3 +393,111 @@
213393 //文字数を返す
214394 return strlen(PlayerName);
215395 }
396+
397+//! @brief プレイヤー名設定
398+//! @param in_str プレイヤー名
399+void Config::SetPlayerName(char *in_str)
400+{
401+ if( in_str == NULL ){ return; }
402+
403+ if( strlen(in_str) > (MAX_PLAYERNAME - 1) ){
404+ in_str[MAX_PLAYERNAME - 1] = 0x00;
405+ }
406+
407+ //文字列をコピーする
408+ strcpy(PlayerName, in_str);
409+}
410+
411+//! @brief オリジナルキーコードの名前を取得
412+//! @param code オリジナルキーコード
413+//! @return キーの名前
414+char* Config::GetOriginalkeycodeString(int code)
415+{
416+ char *out;
417+
418+ switch(code){
419+ case 0x00: out = "UP"; break;
420+ case 0x01: out = "DOWN"; break;
421+ case 0x02: out = "LEFT"; break;
422+ case 0x03: out = "RIGHT"; break;
423+ case 0x04: out = "NUM0"; break;
424+ case 0x05: out = "NUM1"; break;
425+ case 0x06: out = "NUM2"; break;
426+ case 0x07: out = "NUM3"; break;
427+ case 0x08: out = "NUM4"; break;
428+ case 0x09: out = "NUM5"; break;
429+ case 0x0A: out = "NUM6"; break;
430+ case 0x0B: out = "NUM7"; break;
431+ case 0x0C: out = "NUM8"; break;
432+ case 0x0D: out = "NUM9"; break;
433+ case 0x0E: out = "BACKSPACE"; break;
434+ case 0x0F: out = "ENTER"; break;
435+
436+ case 0x10: out = "TAB"; break;
437+ case 0x11: out = "SPACE"; break;
438+ case 0x12: out = "MOUSE L"; break;
439+ case 0x13: out = "MOUSE R"; break;
440+ case 0x14: out = "SHIFT"; break;
441+ case 0x15: out = "CTRL"; break;
442+ case 0x16: out = "0"; break;
443+ case 0x17: out = "1"; break;
444+ case 0x18: out = "2"; break;
445+ case 0x19: out = "3"; break;
446+ case 0x1A: out = "4"; break;
447+ case 0x1B: out = "5"; break;
448+ case 0x1C: out = "6"; break;
449+ case 0x1D: out = "7"; break;
450+ case 0x1E: out = "8"; break;
451+ case 0x1F: out = "9"; break;
452+
453+ case 0x20: out = "A"; break;
454+ case 0x21: out = "B"; break;
455+ case 0x22: out = "C"; break;
456+ case 0x23: out = "D"; break;
457+ case 0x24: out = "E"; break;
458+ case 0x25: out = "F"; break;
459+ case 0x26: out = "G"; break;
460+ case 0x27: out = "H"; break;
461+ case 0x28: out = "I"; break;
462+ case 0x29: out = "J"; break;
463+ case 0x2A: out = "K"; break;
464+ case 0x2B: out = "L"; break;
465+ case 0x2C: out = "M"; break;
466+ case 0x2D: out = "N"; break;
467+ case 0x2E: out = "O"; break;
468+ case 0x2F: out = "P"; break;
469+
470+ case 0x30: out = "Q"; break;
471+ case 0x31: out = "R"; break;
472+ case 0x32: out = "S"; break;
473+ case 0x33: out = "T"; break;
474+ case 0x34: out = "U"; break;
475+ case 0x35: out = "V"; break;
476+ case 0x36: out = "W"; break;
477+ case 0x37: out = "X"; break;
478+ case 0x38: out = "Y"; break;
479+ case 0x39: out = "Z"; break;
480+ case 0x3A: out = "/"; break;
481+ case 0x3B: out = ":"; break;
482+ case 0x3C: out = ";"; break;
483+ case 0x3D: out = "-"; break;
484+ case 0x3E: out = "@"; break;
485+ case 0x3F: out = "["; break;
486+
487+ case 0x40: out = "]"; break;
488+ case 0x41: out = "BACKSLASH"; break;
489+ case 0x42: out = "\\"; break;
490+ case 0x43: out = ","; break;
491+ case 0x44: out = "."; break;
492+ case 0x45: out = "^"; break;
493+ case 0x46: out = "NUM*" ; break;
494+ case 0x47: out = "NUM/"; break;
495+ case 0x48: out = "NUM+"; break;
496+ case 0x49: out = "NUM-"; break;
497+ case 0x4A: out = "NUM."; break;
498+
499+ default : out = "NULL";
500+ }
501+
502+ return out;
503+}
--- trunk/config.h (revision 226)
+++ trunk/config.h (revision 227)
@@ -82,16 +82,29 @@
8282 Config();
8383 ~Config();
8484 int LoadFile(char *fname);
85+ int SaveFile(char *fname);
86+ void SetDefaultConfig();
8587 int GetKeycode(int id);
88+ void SetKeycode(int id, int key);
8689 int GetMouseSensitivity();
90+ void SetMouseSensitivity(int param);
8791 bool GetFullscreenFlag();
92+ void SetFullscreenFlag(bool flag);
8893 bool GetSoundFlag();
94+ void SetSoundFlag(bool flag);
8995 bool GetBloodFlag();
96+ void SetBloodFlag(bool flag);
9097 int GetBrightness();
98+ void SetBrightness(int param);
9199 bool GetInvertMouseFlag();
100+ void SetInvertMouseFlag(bool flag);
92101 bool GetFrameskipFlag();
102+ void SetFrameskipFlag(bool flag);
93103 bool GetAnotherGunsightFlag();
104+ void SetAnotherGunsightFlag(bool flag);
94105 int GetPlayerName(char *out_str);
106+ void SetPlayerName(char *in_str);
107+ char* GetOriginalkeycodeString(int code);
95108 };
96109
97110 #endif
\ No newline at end of file
--- trunk/gamemain.cpp (revision 226)
+++ trunk/gamemain.cpp (revision 227)
@@ -523,6 +523,8 @@
523523 HumanAI[i].Init();
524524 }
525525
526+ modescreen = 0;
527+
526528 gametitle = d3dg->LoadTexture("data\\title.dds", false, false);
527529
528530 //サウンド初期化
@@ -557,6 +559,11 @@
557559 mainmenu_scrollbar_official_y = MAINMENU_Y+1 + (int)(mainmenu_scrollbar_official_scale*mainmenu_scrollitems_official);
558560 mainmenu_scrollbar_addon_y = MAINMENU_Y+1 + (int)(mainmenu_scrollbar_addon_scale*mainmenu_scrollitems_addon);
559561 mainmenu_scrollbar_flag = false;
562+
563+#ifdef ENABLE_MENUOPTIONS
564+ CreateOptions();
565+#endif
566+
560567 inputCtrl->MoveMouseCenter();
561568 framecnt = 0;
562569
@@ -581,27 +588,6 @@
581588 {
582589 inputCtrl->GetInputState(false);
583590
584- //スクロールバーの情報などを取得
585- int scrollitems;
586- float scrollbar_height;
587- float scrollbar_scale;
588- int scrollbar_y;
589- int totalmission;
590- if( GameInfoData.selectaddon == false ){
591- scrollitems = mainmenu_scrollitems_official;
592- scrollbar_height = mainmenu_scrollbar_official_height;
593- scrollbar_scale = mainmenu_scrollbar_official_scale;
594- scrollbar_y = mainmenu_scrollbar_official_y;
595- totalmission = TOTAL_OFFICIALMISSION;
596- }
597- else{
598- scrollitems = mainmenu_scrollitems_addon;
599- scrollbar_height = mainmenu_scrollbar_addon_height;
600- scrollbar_scale = mainmenu_scrollbar_addon_scale;
601- scrollbar_y = mainmenu_scrollbar_addon_y;
602- totalmission = GameAddon.GetTotaldatas();
603- }
604-
605591 //マウス座標を取得
606592 int y = mainmenu_mouseY;
607593 inputCtrl->GetMouseMovement(&mainmenu_mouseX, &mainmenu_mouseY);
@@ -610,91 +596,128 @@
610596 if( mainmenu_mouseY < 0 ){ mainmenu_mouseY = 0; }
611597 if( mainmenu_mouseY > SCREEN_HEIGHT-1 ){ mainmenu_mouseY = SCREEN_HEIGHT-1; }
612598
613- if( inputCtrl->CheckKeyDown(GetEscKeycode()) ){ //ESCキーを処理
614- GameState->PushBackSpaceKey();
615- }
616- else if( inputCtrl->CheckMouseButtonUpL() ){ //ミッション選択
617- for(int i=0; i<TOTAL_MENUITEMS; i++){
618- char name[32];
619- strcpy(name, "");
620- if( GameInfoData.selectaddon == false ){
621- GameParamInfo.GetOfficialMission(scrollitems + i, name, NULL, NULL, NULL, NULL, NULL);
622- }
623- else{
624- strcpy(name, GameAddon.GetMissionName(scrollitems + i));
625- }
599+ if( modescreen == 0 ){
600+ //スクロールバーの情報などを取得
601+ int scrollitems;
602+ float scrollbar_height;
603+ float scrollbar_scale;
604+ int scrollbar_y;
605+ int totalmission;
606+ if( GameInfoData.selectaddon == false ){
607+ scrollitems = mainmenu_scrollitems_official;
608+ scrollbar_height = mainmenu_scrollbar_official_height;
609+ scrollbar_scale = mainmenu_scrollbar_official_scale;
610+ scrollbar_y = mainmenu_scrollbar_official_y;
611+ totalmission = TOTAL_OFFICIALMISSION;
612+ }
613+ else{
614+ scrollitems = mainmenu_scrollitems_addon;
615+ scrollbar_height = mainmenu_scrollbar_addon_height;
616+ scrollbar_scale = mainmenu_scrollbar_addon_scale;
617+ scrollbar_y = mainmenu_scrollbar_addon_y;
618+ totalmission = GameAddon.GetTotaldatas();
619+ }
626620
627- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+(signed)strlen(name)*20))&&(MAINMENU_Y+30 + i*30 < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30 + i*30 + 26) ){
628- GameInfoData.selectmission_id = scrollitems + i;
629- GameState->PushMouseButton();
621+ if( inputCtrl->CheckKeyDown(GetEscKeycode()) ){ //ESCキーを処理
622+ GameState->PushBackSpaceKey();
623+ }
624+ else if( inputCtrl->CheckMouseButtonUpL() ){ //ミッション選択
625+ for(int i=0; i<TOTAL_MENUITEMS; i++){
626+ char name[32];
627+ strcpy(name, "");
628+ if( GameInfoData.selectaddon == false ){
629+ GameParamInfo.GetOfficialMission(scrollitems + i, name, NULL, NULL, NULL, NULL, NULL);
630+ }
631+ else{
632+ strcpy(name, GameAddon.GetMissionName(scrollitems + i));
633+ }
634+
635+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+(signed)strlen(name)*20))&&(MAINMENU_Y+30 + i*30 < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30 + i*30 + 26) ){
636+ GameInfoData.selectmission_id = scrollitems + i;
637+ GameState->PushMouseButton();
638+ }
630639 }
631640 }
632- }
633641
634- //スクロールバーを押したか判定
635- if( inputCtrl->CheckMouseButtonDownL() ){
636- if( ((MAINMENU_X+341) < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+360))&&(MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems) < mainmenu_mouseY)
637- &&(mainmenu_mouseY < MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems + scrollbar_height))
638- ){
639- mainmenu_scrollbar_flag = true;
642+ //スクロールバーを押したか判定
643+ if( inputCtrl->CheckMouseButtonDownL() ){
644+ if( ((MAINMENU_X+341) < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+360))&&(MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems) < mainmenu_mouseY)
645+ &&(mainmenu_mouseY < MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems + scrollbar_height))
646+ ){
647+ mainmenu_scrollbar_flag = true;
648+ }
640649 }
641- }
642650
643- if( inputCtrl->CheckMouseButtonUpL() ){
644- mainmenu_scrollbar_flag = false;
651+ if( inputCtrl->CheckMouseButtonUpL() ){
652+ mainmenu_scrollbar_flag = false;
645653
646- // UP
647- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&(MAINMENU_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30) ){
648- if( scrollitems > 0 ){ scrollitems -= 1; }
649- }
654+ // UP
655+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&(MAINMENU_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30) ){
656+ if( scrollitems > 0 ){ scrollitems -= 1; }
657+ }
650658
651- // DOWN
652- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-55) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-55+30)) ){
653- if( scrollitems < (totalmission - TOTAL_MENUITEMS) ){ scrollitems += 1; }
659+ // DOWN
660+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-55) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-55+30)) ){
661+ if( scrollitems < (totalmission - TOTAL_MENUITEMS) ){ scrollitems += 1; }
662+ }
654663 }
655- }
656664
657- //スクロールバーの移動
658- if( mainmenu_scrollbar_flag == true ){
659- scrollbar_y += mainmenu_mouseY - y;
660- if( scrollbar_y < MAINMENU_Y+1 ){ scrollbar_y = MAINMENU_Y+1; }
661- if( scrollbar_y > MAINMENU_Y+MAINMENU_H-24 - (int)(scrollbar_height) ){ scrollbar_y = MAINMENU_Y+MAINMENU_H-24 - (int)(scrollbar_height); }
665+ //スクロールバーの移動
666+ if( mainmenu_scrollbar_flag == true ){
667+ scrollbar_y += mainmenu_mouseY - y;
668+ if( scrollbar_y < MAINMENU_Y+1 ){ scrollbar_y = MAINMENU_Y+1; }
669+ if( scrollbar_y > MAINMENU_Y+MAINMENU_H-24 - (int)(scrollbar_height) ){ scrollbar_y = MAINMENU_Y+MAINMENU_H-24 - (int)(scrollbar_height); }
662670
663- scrollitems = (scrollbar_y - (MAINMENU_Y+1)) / (int)(scrollbar_scale);
664- if( scrollitems < 0 ){
665- scrollitems = 0;
671+ scrollitems = (scrollbar_y - (MAINMENU_Y+1)) / (int)(scrollbar_scale);
672+ if( scrollitems < 0 ){
673+ scrollitems = 0;
674+ }
675+ if( scrollitems > (totalmission - TOTAL_MENUITEMS) ){
676+ scrollitems = (totalmission - TOTAL_MENUITEMS);
677+ }
666678 }
667- if( scrollitems > (totalmission - TOTAL_MENUITEMS) ){
668- scrollitems = (totalmission - TOTAL_MENUITEMS);
679+ else{
680+ scrollbar_y = MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems);
669681 }
670- }
671- else{
672- scrollbar_y = MAINMENU_Y+1 + (int)(scrollbar_scale*scrollitems);
673- }
674682
675- //スクロールバーの情報などを反映
676- if( GameInfoData.selectaddon == false ){
677- mainmenu_scrollitems_official = scrollitems;
678- mainmenu_scrollbar_official_y = scrollbar_y;
679- }
680- else{
681- mainmenu_scrollitems_addon = scrollitems;
682- mainmenu_scrollbar_addon_y = scrollbar_y;
683- }
683+ //スクロールバーの情報などを反映
684+ if( GameInfoData.selectaddon == false ){
685+ mainmenu_scrollitems_official = scrollitems;
686+ mainmenu_scrollbar_official_y = scrollbar_y;
687+ }
688+ else{
689+ mainmenu_scrollitems_addon = scrollitems;
690+ mainmenu_scrollbar_addon_y = scrollbar_y;
691+ }
684692
685- //標準ミッションとアドオンリストの切り替え
686- if( inputCtrl->CheckMouseButtonUpL() ){
687- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
688- if( GameInfoData.selectaddon == false ){
689- if( GameAddon.GetTotaldatas() > 0 ){
690- GameInfoData.selectaddon = true;
693+ //標準ミッションとアドオンリストの切り替え
694+ if( inputCtrl->CheckMouseButtonUpL() ){
695+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
696+ if( GameInfoData.selectaddon == false ){
697+ if( GameAddon.GetTotaldatas() > 0 ){
698+ GameInfoData.selectaddon = true;
699+ }
691700 }
701+ else{
702+ GameInfoData.selectaddon = false;
703+ }
692704 }
693- else{
694- GameInfoData.selectaddon = false;
705+ }
706+
707+#ifdef ENABLE_MENUOPTIONS
708+ //オプション画面切り替え
709+ if( inputCtrl->CheckMouseButtonUpL() ){
710+ if( (MAINMENU_OPTION_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_OPTION_X+120))&&(MAINMENU_OPTION_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_OPTION_Y+16) ){
711+ modescreen = 1;
695712 }
696713 }
714+#endif
697715 }
716+ else{
717+#ifdef ENABLE_MENUOPTIONS
718+ InputOptions();
719+#endif
720+ }
698721 }
699722
700723 void mainmenu::Process()
@@ -716,6 +739,12 @@
716739 camera_rx = DegreeToRadian(45);
717740 camera_ry = DegreeToRadian(-25);
718741
742+ if( modescreen != 0 ){
743+#ifdef ENABLE_MENUOPTIONS
744+ ProcessOptions();
745+#endif
746+ }
747+
719748 framecnt += 1;
720749 }
721750
@@ -741,102 +770,65 @@
741770 int color, color2;
742771 float effect;
743772
744- //スクロールバーの情報などを取得
745- int scrollitems;
746- float scrollbar_height;
747- int scrollbar_y;
748- int totalmission;
749- if( GameInfoData.selectaddon == false ){
750- scrollitems = mainmenu_scrollitems_official;
751- scrollbar_height = mainmenu_scrollbar_official_height;
752- scrollbar_y = mainmenu_scrollbar_official_y;
753- totalmission = TOTAL_OFFICIALMISSION;
754- }
755- else{
756- scrollitems = mainmenu_scrollitems_addon;
757- scrollbar_height = mainmenu_scrollbar_addon_height;
758- scrollbar_y = mainmenu_scrollbar_addon_y;
759- totalmission = GameAddon.GetTotaldatas();
760- }
761-
762773 //ゲームのバージョン情報表示
763774 d3dg->Draw2DTextureFontText(522+1, 75+1, GAMEVERSION, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 18, 22);
764775 d3dg->Draw2DTextureFontText(522, 75, GAMEVERSION, d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 18, 22);
765776
766- //メニューエリア描画
767- if( GameAddon.GetTotaldatas() > 0 ){ //addonがあれば
768- d3dg->Draw2DBox(MAINMENU_X-1, MAINMENU_Y, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
769- }
770- else{
771- d3dg->Draw2DBox(MAINMENU_X-1, MAINMENU_Y, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H-24, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
772- }
773- d3dg->Draw2DBox(MAINMENU_X+341, MAINMENU_Y+1, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H-24, d3dg->GetColorCode(0.5f,0.5f,0.5f,0.5f));
774-
775- //スクロールバー描画
776- if( totalmission > TOTAL_MENUITEMS ){
777- //色を設定
778- if( mainmenu_scrollbar_flag == true ){
779- color = d3dg->GetColorCode(0.6f,0.3f,0.25f,1.0f);
780- color2 = d3dg->GetColorCode(0.8f,0.3f,0.25f,1.0f);
777+ if( modescreen == 0 ){
778+ //スクロールバーの情報などを取得
779+ int scrollitems;
780+ float scrollbar_height;
781+ int scrollbar_y;
782+ int totalmission;
783+ if( GameInfoData.selectaddon == false ){
784+ scrollitems = mainmenu_scrollitems_official;
785+ scrollbar_height = mainmenu_scrollbar_official_height;
786+ scrollbar_y = mainmenu_scrollbar_official_y;
787+ totalmission = TOTAL_OFFICIALMISSION;
781788 }
782- else if( ((MAINMENU_X+341) < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+360))&&(scrollbar_y < mainmenu_mouseY)&&(mainmenu_mouseY < scrollbar_y + (int)scrollbar_height) ){
783- color = d3dg->GetColorCode(0.4f,0.67f,0.57f,1.0f);
784- color2 = d3dg->GetColorCode(0.38f,0.77f,0.64f,1.0f);
785- }
786789 else{
787- color = d3dg->GetColorCode(0.6f,0.6f,0.25f,1.0f);
788- color2 = d3dg->GetColorCode(0.8f,0.8f,0.25f,1.0f);
790+ scrollitems = mainmenu_scrollitems_addon;
791+ scrollbar_height = mainmenu_scrollbar_addon_height;
792+ scrollbar_y = mainmenu_scrollbar_addon_y;
793+ totalmission = GameAddon.GetTotaldatas();
789794 }
790795
791- //描画
792- d3dg->Draw2DBox(MAINMENU_X+341, scrollbar_y, MAINMENU_X+360, scrollbar_y + (int)scrollbar_height, color);
793- d3dg->Draw2DBox(MAINMENU_X+341+3, scrollbar_y +3, MAINMENU_X+360-3, scrollbar_y + (int)scrollbar_height -3, color2);
794- }
795-
796- //'< UP >'表示
797- if( scrollitems > 0 ){
798- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+1, "< UP >", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 25, 26);
799-
800- //文字の色を設定
801- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&(MAINMENU_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30) ){
802- color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
796+ //メニューエリア描画
797+ if( GameAddon.GetTotaldatas() > 0 ){ //addonがあれば
798+ d3dg->Draw2DBox(MAINMENU_X-1, MAINMENU_Y, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H+1, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
803799 }
804800 else{
805- color = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
801+ d3dg->Draw2DBox(MAINMENU_X-1, MAINMENU_Y, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H-24, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
806802 }
803+ d3dg->Draw2DBox(MAINMENU_X+341, MAINMENU_Y+1, MAINMENU_X+360, MAINMENU_Y+MAINMENU_H-24, d3dg->GetColorCode(0.5f,0.5f,0.5f,0.5f));
807804
808- //文字を表示
809- d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y, "< UP >", color, 25, 26);
810- }
811- else{
812- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+1, "< UP >", d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), 25, 26);
813- }
805+ //スクロールバー描画
806+ if( totalmission > TOTAL_MENUITEMS ){
807+ //色を設定
808+ if( mainmenu_scrollbar_flag == true ){
809+ color = d3dg->GetColorCode(0.6f,0.3f,0.25f,1.0f);
810+ color2 = d3dg->GetColorCode(0.8f,0.3f,0.25f,1.0f);
811+ }
812+ else if( ((MAINMENU_X+341) < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+360))&&(scrollbar_y < mainmenu_mouseY)&&(mainmenu_mouseY < scrollbar_y + (int)scrollbar_height) ){
813+ color = d3dg->GetColorCode(0.4f,0.67f,0.57f,1.0f);
814+ color2 = d3dg->GetColorCode(0.38f,0.77f,0.64f,1.0f);
815+ }
816+ else{
817+ color = d3dg->GetColorCode(0.6f,0.6f,0.25f,1.0f);
818+ color2 = d3dg->GetColorCode(0.8f,0.8f,0.25f,1.0f);
819+ }
814820
815- //'< DOWN >'表示
816- if( scrollitems < (totalmission - TOTAL_MENUITEMS) ){
817- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-55+1, "< DOWN >", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 25, 26);
818-
819- //文字の色を設定
820- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-55) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-55+30)) ){
821- color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
821+ //描画
822+ d3dg->Draw2DBox(MAINMENU_X+341, scrollbar_y, MAINMENU_X+360, scrollbar_y + (int)scrollbar_height, color);
823+ d3dg->Draw2DBox(MAINMENU_X+341+3, scrollbar_y +3, MAINMENU_X+360-3, scrollbar_y + (int)scrollbar_height -3, color2);
822824 }
823- else{
824- color = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
825- }
826825
827- //文字を表示
828- d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-55, "< DOWN >", color, 25, 26);
829- }
830- else{
831- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-55+1, "< DOWN >", d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), 25, 26);
832- }
826+ //'< UP >'表示
827+ if( scrollitems > 0 ){
828+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+1, "< UP >", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 25, 26);
833829
834- //標準ミッションとaddon切り替え
835- if( GameInfoData.selectaddon == false ){
836- //addonがあれば
837- if( GameAddon.GetTotaldatas() > 0 ){
838830 //文字の色を設定
839- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
831+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&(MAINMENU_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30) ){
840832 color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
841833 }
842834 else{
@@ -844,15 +836,18 @@
844836 }
845837
846838 //文字を表示
847- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-25+1, "ADD-ON MISSIONS >>", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 17, 22);
848- d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-25, "ADD-ON MISSIONS >>", color, 17, 22);
839+ d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y, "< UP >", color, 25, 26);
849840 }
850- }
851- else{
852- //addonがあれば
853- //if( GameAddon.GetTotaldatas() > 0 ){
841+ else{
842+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+1, "< UP >", d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), 25, 26);
843+ }
844+
845+ //'< DOWN >'表示
846+ if( scrollitems < (totalmission - TOTAL_MENUITEMS) ){
847+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-55+1, "< DOWN >", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 25, 26);
848+
854849 //文字の色を設定
855- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
850+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-55) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-55+30)) ){
856851 color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
857852 }
858853 else{
@@ -860,36 +855,94 @@
860855 }
861856
862857 //文字を表示
863- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-25+1, "<< STANDARD MISSIONS", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 17, 22);
864- d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-25, "<< STANDARD MISSIONS", color, 17, 22);
865- //}
866- }
858+ d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-55, "< DOWN >", color, 25, 26);
859+ }
860+ else{
861+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-55+1, "< DOWN >", d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), 25, 26);
862+ }
867863
868- //ミッション名を表示
869- for(int i=0; i<TOTAL_MENUITEMS; i++){
870- char name[32];
871- strcpy(name, "");
864+ //標準ミッションとaddon切り替え
865+ if( GameInfoData.selectaddon == false ){
866+ //addonがあれば
867+ if( GameAddon.GetTotaldatas() > 0 ){
868+ //文字の色を設定
869+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
870+ color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
871+ }
872+ else{
873+ color = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
874+ }
872875
873- //ミッション名を取得
874- if( GameInfoData.selectaddon == false ){
875- GameParamInfo.GetOfficialMission(scrollitems + i, name, NULL, NULL, NULL, NULL, NULL);
876+ //文字を表示
877+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-25+1, "ADD-ON MISSIONS >>", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 17, 22);
878+ d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-25, "ADD-ON MISSIONS >>", color, 17, 22);
879+ }
876880 }
877881 else{
878- strcpy(name, GameAddon.GetMissionName(scrollitems + i));
882+ //addonがあれば
883+ //if( GameAddon.GetTotaldatas() > 0 ){
884+ //文字の色を設定
885+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+340))&&((MAINMENU_Y+MAINMENU_H-25) < mainmenu_mouseY)&&(mainmenu_mouseY < (MAINMENU_Y+MAINMENU_H-2)) ){
886+ color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
887+ }
888+ else{
889+ color = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
890+ }
891+
892+ //文字を表示
893+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+MAINMENU_H-25+1, "<< STANDARD MISSIONS", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 17, 22);
894+ d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+MAINMENU_H-25, "<< STANDARD MISSIONS", color, 17, 22);
895+ //}
879896 }
880897
898+ //ミッション名を表示
899+ for(int i=0; i<TOTAL_MENUITEMS; i++){
900+ char name[32];
901+ strcpy(name, "");
902+
903+ //ミッション名を取得
904+ if( GameInfoData.selectaddon == false ){
905+ GameParamInfo.GetOfficialMission(scrollitems + i, name, NULL, NULL, NULL, NULL, NULL);
906+ }
907+ else{
908+ strcpy(name, GameAddon.GetMissionName(scrollitems + i));
909+ }
910+
911+ //文字の色を設定
912+ if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+(signed)strlen(name)*20))&&(MAINMENU_Y+30 + i*30 < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30 + i*30 + 26) ){
913+ color = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
914+ }
915+ else{
916+ color = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
917+ }
918+
919+ //文字を表示
920+ d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+30+1 + i*30, name, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 20, 26);
921+ d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+30 + i*30, name, color, 20, 26);
922+ }
923+
924+#ifdef ENABLE_MENUOPTIONS
925+ //オプション項目リンク
926+ d3dg->Draw2DBox(MAINMENU_OPTION_X, MAINMENU_OPTION_Y, MAINMENU_OPTION_X+132+2, MAINMENU_OPTION_Y+16+2, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
927+
881928 //文字の色を設定
882- if( (MAINMENU_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_X+(signed)strlen(name)*20))&&(MAINMENU_Y+30 + i*30 < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_Y+30 + i*30 + 26) ){
883- color = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
929+ if( (MAINMENU_OPTION_X < mainmenu_mouseX)&&(mainmenu_mouseX < (MAINMENU_OPTION_X+132+2))&&(MAINMENU_OPTION_Y < mainmenu_mouseY)&&(mainmenu_mouseY < MAINMENU_OPTION_Y+16) ){
930+ color = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
884931 }
885932 else{
886- color = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
933+ color = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
887934 }
888935
889936 //文字を表示
890- d3dg->Draw2DTextureFontText(MAINMENU_X+1, MAINMENU_Y+30+1 + i*30, name, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 20, 26);
891- d3dg->Draw2DTextureFontText(MAINMENU_X, MAINMENU_Y+30 + i*30, name, color, 20, 26);
937+ d3dg->Draw2DTextureFontText(MAINMENU_OPTION_X+1, MAINMENU_OPTION_Y+1, "< OPTIONS >", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
938+ d3dg->Draw2DTextureFontText(MAINMENU_OPTION_X, MAINMENU_OPTION_Y, "< OPTIONS >", color, 12, 16);
939+#endif //ENABLE_MENUOPTIONS
892940 }
941+ else{
942+#ifdef ENABLE_MENUOPTIONS
943+ RenderOptions();
944+#endif
945+ }
893946
894947 //マウスカーソル表示(赤線)
895948 d3dg->Draw2DBox(0, mainmenu_mouseY-1, SCREEN_WIDTH, mainmenu_mouseY+1, d3dg->GetColorCode(1.0f,0.0f,0.0f,0.5f));
@@ -910,6 +963,467 @@
910963 d3dg->Draw2DBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, d3dg->GetColorCode(0.0f,0.0f,0.0f,effect));
911964 }
912965
966+#ifdef ENABLE_MENUOPTIONS
967+//! @brief オプション画面の初期化処理
968+void mainmenu::CreateOptions()
969+{
970+ //変数初期化
971+ Options_FullscreenFlag_old = GameConfig.GetFullscreenFlag();
972+ Options_KeyConfigID = -1;
973+ Options_KeyConfigCnt = 0;
974+
975+
976+ //No.1画面 リンクテキスト
977+ Options_p1LinkTextData[0].enable = true;
978+ Options_p1LinkTextData[0].pos_x = 0;
979+ Options_p1LinkTextData[0].pos_y = 30;
980+ Options_p1LinkTextData[0].text_w = 20;
981+ Options_p1LinkTextData[0].text_h = 26;
982+ Options_p1LinkTextData[0].text_defaultcolor = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
983+ Options_p1LinkTextData[0].text_cursorcolor = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
984+ strcpy(Options_p1LinkTextData[0].text, "CONFIG");
985+ Options_p1LinkTextData[1].enable = false;
986+ Options_p1LinkTextData[1].pos_x = 0;
987+ Options_p1LinkTextData[1].pos_y = 90;
988+ Options_p1LinkTextData[1].text_w = 20;
989+ Options_p1LinkTextData[1].text_h = 26;
990+ Options_p1LinkTextData[1].text_defaultcolor = 0x00000000;
991+ Options_p1LinkTextData[1].text_cursorcolor = 0x00000000;
992+ strcpy(Options_p1LinkTextData[1].text, "SOFTWARE LICENSE");
993+ Options_p1LinkTextData[2].enable = true;
994+ Options_p1LinkTextData[2].pos_x = 0;
995+ Options_p1LinkTextData[2].pos_y = 150;
996+ Options_p1LinkTextData[2].text_w = 20;
997+ Options_p1LinkTextData[2].text_h = 26;
998+ Options_p1LinkTextData[2].text_defaultcolor = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
999+ Options_p1LinkTextData[2].text_cursorcolor = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
1000+ strcpy(Options_p1LinkTextData[2].text, "< EXIT >");
1001+
1002+
1003+ //No.2画面 リンクテキスト
1004+ strcpy(Options_p2LinkTextData[0].text, "< DEFAULT >");
1005+ strcpy(Options_p2LinkTextData[1].text, "< SAVE >");
1006+ strcpy(Options_p2LinkTextData[2].text, "< CANCEL >");
1007+ for(int i=0; i<3; i++){
1008+ Options_p2LinkTextData[i].enable = true;
1009+ Options_p2LinkTextData[i].pos_x = 350;
1010+ Options_p2LinkTextData[i].pos_y = 280 + i*30;
1011+ Options_p2LinkTextData[i].text_w = 12;
1012+ Options_p2LinkTextData[i].text_h = 16;
1013+ Options_p2LinkTextData[i].text_defaultcolor = d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f);
1014+ Options_p2LinkTextData[i].text_cursorcolor = d3dg->GetColorCode(0.0f,1.0f,1.0f,1.0f);
1015+ }
1016+
1017+ Options_p2LinkTextData[3].pos_x = 350+20;
1018+ Options_p2LinkTextData[3].pos_y = 20;
1019+ strcpy(Options_p2LinkTextData[3].text, "[<<]");
1020+ Options_p2LinkTextData[4].pos_x = 350+120;
1021+ Options_p2LinkTextData[4].pos_y = 20;
1022+ strcpy(Options_p2LinkTextData[4].text, "[>>]");
1023+ Options_p2LinkTextData[5].pos_x = 350+20;
1024+ Options_p2LinkTextData[5].pos_y = 70;
1025+ strcpy(Options_p2LinkTextData[5].text, "[<<]");
1026+ Options_p2LinkTextData[6].pos_x = 350+120;
1027+ Options_p2LinkTextData[6].pos_y = 70;
1028+ strcpy(Options_p2LinkTextData[6].text, "[>>]");
1029+ for(int i=0; i<4; i++){
1030+ Options_p2LinkTextData[3 + i].enable = true;
1031+ Options_p2LinkTextData[3 + i].text_w = 12;
1032+ Options_p2LinkTextData[3 + i].text_h = 16;
1033+ Options_p2LinkTextData[3 + i].text_defaultcolor = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
1034+ Options_p2LinkTextData[3 + i].text_cursorcolor = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
1035+ }
1036+
1037+ Options_p2LinkTextData[7].pos_x = 350;
1038+ Options_p2LinkTextData[7].pos_y = 100;
1039+ strcpy(Options_p2LinkTextData[7].text, "[ ] FULL SCREEN");
1040+ Options_p2LinkTextData[8].pos_x = 350;
1041+ Options_p2LinkTextData[8].pos_y = 120;
1042+ strcpy(Options_p2LinkTextData[8].text, "[ ] WINDOW");
1043+ Options_p2LinkTextData[9].pos_x = 350;
1044+ Options_p2LinkTextData[9].pos_y = 160;
1045+ strcpy(Options_p2LinkTextData[9].text, "[ ] ENABLE SOUND");
1046+ Options_p2LinkTextData[10].pos_x = 350;
1047+ Options_p2LinkTextData[10].pos_y = 180;
1048+ strcpy(Options_p2LinkTextData[10].text, "[ ] ENABLE BLOOD");
1049+ Options_p2LinkTextData[11].pos_x = 350;
1050+ Options_p2LinkTextData[11].pos_y = 200;
1051+ strcpy(Options_p2LinkTextData[11].text, "[ ] INVERT MOUSE");
1052+ Options_p2LinkTextData[12].pos_x = 350;
1053+ Options_p2LinkTextData[12].pos_y = 220;
1054+ strcpy(Options_p2LinkTextData[12].text, "[ ] FRAME SKIP");
1055+ Options_p2LinkTextData[13].pos_x = 350;
1056+ Options_p2LinkTextData[13].pos_y = 240;
1057+ strcpy(Options_p2LinkTextData[13].text, "[ ] ANOTHER GUNSIGHT");
1058+ for(int i=0; i<7; i++){
1059+ Options_p2LinkTextData[7 + i].enable = true;
1060+ Options_p2LinkTextData[7 + i].text_w = 12;
1061+ Options_p2LinkTextData[7 + i].text_h = 16;
1062+ Options_p2LinkTextData[7 + i].text_defaultcolor = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
1063+ Options_p2LinkTextData[7 + i].text_cursorcolor = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
1064+ }
1065+
1066+ for(int i=0; i<18; i++){
1067+ Options_p2LinkTextData[14 + i].enable = true;
1068+ Options_p2LinkTextData[14 + i].pos_x = 170;
1069+ Options_p2LinkTextData[14 + i].pos_y = i*20;
1070+ Options_p2LinkTextData[14 + i].text_w = 12;
1071+ Options_p2LinkTextData[14 + i].text_h = 16;
1072+ Options_p2LinkTextData[14 + i].text_defaultcolor = d3dg->GetColorCode(0.6f,0.6f,1.0f,1.0f);
1073+ Options_p2LinkTextData[14 + i].text_cursorcolor = d3dg->GetColorCode(1.0f,0.6f,0.6f,1.0f);
1074+ strcpy(Options_p2LinkTextData[14 + i].text, "[ ]");
1075+ }
1076+}
1077+
1078+//! @brief オプション画面の入力処理
1079+void mainmenu::InputOptions()
1080+{
1081+ Options_p2LinkTextID = -1;
1082+
1083+ if( modescreen == 1 ){
1084+ //リンクテキスト判定処理
1085+ int ButtonID = -1;
1086+ for(int i=0; i<OPTIONS_P1_DATAS; i++){
1087+ if( Options_p1LinkTextData[i].enable == true ){
1088+ if( inputCtrl->CheckMouseButtonUpL() ){
1089+ if( ((OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x) < mainmenu_mouseX)&&(mainmenu_mouseX < (OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x + (signed)strlen(Options_p1LinkTextData[i].text)*Options_p1LinkTextData[i].text_w))
1090+ &&((OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y) < mainmenu_mouseY)&&(mainmenu_mouseY < OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y + Options_p1LinkTextData[i].text_h)
1091+ ){
1092+ ButtonID = i;
1093+ }
1094+ }
1095+ }
1096+ }
1097+ if( ButtonID == 0 ){
1098+ modescreen = 2;
1099+ }
1100+ //if( ButtonID == 1 ){
1101+ //
1102+ //}
1103+ if( ButtonID == 2 ){
1104+ modescreen = 0;
1105+ }
1106+
1107+ if( inputCtrl->CheckKeyDown(GetEscKeycode()) ){ //ESCキーを処理
1108+ modescreen = 0;
1109+ }
1110+ }
1111+
1112+ if( modescreen == 2 ){
1113+ //キー設定用の入力キー判定処理
1114+ if( (Options_KeyConfigID != -1)&&(Options_KeyConfigCnt > 0) ){
1115+ int keycode = inputCtrl->CheckInputAll();
1116+ if( keycode != -1 ){
1117+ GameConfig.SetKeycode(Options_KeyConfigID, keycode);
1118+
1119+ Options_KeyConfigID = -1;
1120+ Options_KeyConfigCnt = 0;
1121+
1122+ return; //クリック時に他のリンクテキストを反応させないよう処理終了
1123+ }
1124+ }
1125+
1126+ //リンクテキスト判定処理
1127+ for(int i=0; i<OPTIONS_P2_DATAS; i++){
1128+ if( Options_p2LinkTextData[i].enable == true ){
1129+ if( inputCtrl->CheckMouseButtonUpL() ){
1130+ if( ((OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x) < mainmenu_mouseX)&&(mainmenu_mouseX < (OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x + (signed)strlen(Options_p2LinkTextData[i].text)*Options_p2LinkTextData[i].text_w))
1131+ &&((OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y) < mainmenu_mouseY)&&(mainmenu_mouseY < OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y + Options_p2LinkTextData[i].text_h)
1132+ ){
1133+ Options_p2LinkTextID = i;
1134+ }
1135+ }
1136+ }
1137+ }
1138+
1139+ if( inputCtrl->CheckKeyDown(GetEscKeycode()) ){ //ESCキーを処理
1140+ //modescreen = 1;
1141+ Options_p2LinkTextID = 2;
1142+ }
1143+ }
1144+}
1145+
1146+//! @brief オプション画面のメイン処理
1147+void mainmenu::ProcessOptions()
1148+{
1149+ if( modescreen == 2 ){
1150+
1151+ //Default
1152+ if( Options_p2LinkTextID == 0 ){
1153+ //デフォルトの値読み込み
1154+ GameConfig.SetDefaultConfig();
1155+ }
1156+
1157+ //Save
1158+ if( Options_p2LinkTextID == 1 ){
1159+ //ウィンドウ・フルスクリーン切り替え
1160+ if( Options_FullscreenFlag_old != GameConfig.GetFullscreenFlag() ){
1161+ if( ChangeWindowMode(WindowCtrl, d3dg, inputCtrl, this, GameConfig.GetFullscreenFlag()) != 0 ){
1162+ //失敗したら設定を戻す
1163+ GameConfig.SetFullscreenFlag(Options_FullscreenFlag_old);
1164+ }
1165+ else{
1166+ //成功したら設定を反映する
1167+ Options_FullscreenFlag_old = GameConfig.GetFullscreenFlag();
1168+ }
1169+ }
1170+
1171+ //効果音再設定
1172+ float volume;
1173+ if( GameConfig.GetSoundFlag() == false ){
1174+ volume = 0.0f;
1175+ }
1176+ else{
1177+ volume = 1.0f;
1178+ }
1179+ SoundCtrl.SetVolume(volume);
1180+
1181+ //設定ファイル書き込み
1182+ if( GameConfig.SaveFile("config.dat") == 1 ){
1183+ //MainWindow.ErrorInfo("config data save failed");
1184+ //return 1;
1185+ }
1186+
1187+ Options_KeyConfigID = -1;
1188+ Options_KeyConfigCnt = 0;
1189+
1190+ modescreen = 1;
1191+ }
1192+
1193+ //Cancel
1194+ if( Options_p2LinkTextID == 2 ){
1195+ //設定ファイル読み直す
1196+ if( GameConfig.LoadFile("config.dat") == 1 ){
1197+ //MainWindow.ErrorInfo("config data open failed");
1198+ //return 1;
1199+ }
1200+
1201+ Options_FullscreenFlag_old = GameConfig.GetFullscreenFlag();
1202+ Options_KeyConfigID = -1;
1203+ Options_KeyConfigCnt = 0;
1204+
1205+ modescreen = 1;
1206+ }
1207+
1208+ if( Options_p2LinkTextID == 3 ){
1209+ int param = GameConfig.GetMouseSensitivity();
1210+ param -= 1;
1211+ if( param < 0 ){ param = 0; }
1212+ GameConfig.SetMouseSensitivity(param);
1213+ }
1214+ if( Options_p2LinkTextID == 4 ){
1215+ int param = GameConfig.GetMouseSensitivity();
1216+ param += 1;
1217+ if( param > 50 ){ param = 50; }
1218+ GameConfig.SetMouseSensitivity(param);
1219+ }
1220+ if( Options_p2LinkTextID == 5 ){
1221+ int param = GameConfig.GetBrightness();
1222+ param -= 1;
1223+ if( param < 0 ){ param = 0; }
1224+ GameConfig.SetBrightness(param);
1225+ }
1226+ if( Options_p2LinkTextID == 6 ){
1227+ int param = GameConfig.GetBrightness();
1228+ param += 1;
1229+ if( param > 10 ){ param = 10; }
1230+ GameConfig.SetBrightness(param);
1231+ }
1232+
1233+ if( Options_p2LinkTextID == 7 ){
1234+ GameConfig.SetFullscreenFlag(true);
1235+ }
1236+ if( Options_p2LinkTextID == 8 ){
1237+ GameConfig.SetFullscreenFlag(false);
1238+ }
1239+ if( Options_p2LinkTextID == 9 ){
1240+ if( GameConfig.GetSoundFlag() == true ){ GameConfig.SetSoundFlag(false); }
1241+ else { GameConfig.SetSoundFlag(true); }
1242+ }
1243+ if( Options_p2LinkTextID == 10 ){
1244+ if( GameConfig.GetBloodFlag() == true ){ GameConfig.SetBloodFlag(false); }
1245+ else { GameConfig.SetBloodFlag(true); }
1246+ }
1247+ if( Options_p2LinkTextID == 11 ){
1248+ if( GameConfig.GetInvertMouseFlag() == true ){ GameConfig.SetInvertMouseFlag(false); }
1249+ else { GameConfig.SetInvertMouseFlag(true); }
1250+ }
1251+ if( Options_p2LinkTextID == 12 ){
1252+ if( GameConfig.GetFrameskipFlag() == true ){ GameConfig.SetFrameskipFlag(false); }
1253+ else { GameConfig.SetFrameskipFlag(true); }
1254+ }
1255+ if( Options_p2LinkTextID == 13 ){
1256+ if( GameConfig.GetAnotherGunsightFlag() == true ){ GameConfig.SetAnotherGunsightFlag(false); }
1257+ else { GameConfig.SetAnotherGunsightFlag(true); }
1258+ }
1259+
1260+ //キー設定用 カウントセット
1261+ for(int i=0; i<18; i++){
1262+ if( Options_p2LinkTextID == (14 + i) ){
1263+ Options_KeyConfigID = i;
1264+ Options_KeyConfigCnt = (int)(GAMEFPS*5);
1265+ }
1266+ }
1267+
1268+ //キー設定用 カウントダウン
1269+ if( (Options_KeyConfigID != -1)&&(Options_KeyConfigCnt > 0) ){
1270+ Options_KeyConfigCnt -= 1;
1271+ }
1272+ else{
1273+ Options_KeyConfigID = -1;
1274+ Options_KeyConfigCnt = 0;
1275+ }
1276+ }
1277+}
1278+
1279+//! @brief オプション画面の描画処理
1280+void mainmenu::RenderOptions()
1281+{
1282+ if( modescreen == 1 ){
1283+ int color;
1284+
1285+ //エリア描画
1286+ d3dg->Draw2DBox(OPTIONS_P1_X, OPTIONS_P1_Y, OPTIONS_P1_X + OPTIONS_P1_W, OPTIONS_P1_Y + OPTIONS_P1_H, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
1287+
1288+ for(int i=0; i<OPTIONS_P1_DATAS; i++){
1289+ if( Options_p1LinkTextData[i].enable == true ){
1290+ //文字の色を設定
1291+ if( ((OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x) < mainmenu_mouseX)&&(mainmenu_mouseX < (OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x + (signed)strlen(Options_p1LinkTextData[i].text)*Options_p1LinkTextData[i].text_w))
1292+ &&((OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y) < mainmenu_mouseY)&&(mainmenu_mouseY < (OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y + Options_p1LinkTextData[i].text_h))
1293+ ){
1294+ color = Options_p1LinkTextData[i].text_cursorcolor;
1295+ }
1296+ else{
1297+ color = Options_p1LinkTextData[i].text_defaultcolor;
1298+ }
1299+
1300+ //文字を表示
1301+ d3dg->Draw2DTextureFontText(OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x +1, OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y +1, Options_p1LinkTextData[i].text,
1302+ d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), Options_p1LinkTextData[i].text_w, Options_p1LinkTextData[i].text_h);
1303+ d3dg->Draw2DTextureFontText(OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x, OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y, Options_p1LinkTextData[i].text,
1304+ color, Options_p1LinkTextData[i].text_w, Options_p1LinkTextData[i].text_h);
1305+ }
1306+ else{
1307+ d3dg->Draw2DTextureFontText(OPTIONS_P1_X + Options_p1LinkTextData[i].pos_x, OPTIONS_P1_Y + Options_p1LinkTextData[i].pos_y, Options_p1LinkTextData[i].text,
1308+ d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), Options_p1LinkTextData[i].text_w, Options_p1LinkTextData[i].text_h);
1309+ }
1310+ }
1311+ }
1312+
1313+ if( modescreen == 2 ){
1314+ int color;
1315+ char str[32];
1316+
1317+ //エリア描画
1318+ d3dg->Draw2DBox(OPTIONS_P2_X, OPTIONS_P2_Y, OPTIONS_P2_X + OPTIONS_P2_W, OPTIONS_P2_Y + OPTIONS_P2_H, d3dg->GetColorCode(0.0f,0.0f,0.0f,0.5f));
1319+
1320+ //マウス感度
1321+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 +1, OPTIONS_P2_Y + 0 +1, "MOUSE SENSITIVITY", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1322+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350, OPTIONS_P2_Y + 0, "MOUSE SENSITIVITY", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1323+ sprintf(str, "%02d", GameConfig.GetMouseSensitivity());
1324+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 + 85 +1, OPTIONS_P2_Y + 20 +1, str, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1325+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 + 85, OPTIONS_P2_Y + 20, str, d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1326+
1327+ //画面明るさ
1328+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 +1, OPTIONS_P2_Y + 50 +1, "BRIGHTNESS", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1329+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350, OPTIONS_P2_Y + 50, "BRIGHTNESS", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1330+ sprintf(str, "%02d", GameConfig.GetBrightness());
1331+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 + 85 +1, OPTIONS_P2_Y + 70 +1, str, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1332+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 350 + 85, OPTIONS_P2_Y + 70, str, d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1333+
1334+ //操作キー一覧
1335+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 0 +1, "TURN UP", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1336+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 0, "TURN UP", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1337+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 20 +1, "TURN DOWN", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1338+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 20, "TURN DOWN", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1339+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 40 +1, "TURN LEFT", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1340+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 40, "TURN LEFT", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1341+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 60 +1, "TURN RIGHT", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1342+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 60, "TURN RIGHT", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1343+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 80 +1, "MOVE FORWARD", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1344+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 80, "MOVE FORWARD", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1345+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 100 +1, "MOVE BACKWARD", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1346+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 100, "MOVE BACKWARD", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1347+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 120 +1, "MOVE LEFT", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1348+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 120, "MOVE LEFT", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1349+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 140 +1, "MOVE RIGHT", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1350+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 140, "MOVE RIGHT", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1351+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 160 +1, "WALK", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1352+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 160, "WALK", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1353+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 180 +1, "JUMP", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1354+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 180, "JUMP", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1355+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 200 +1, "RELOAD", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1356+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 200, "RELOAD", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1357+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 220 +1, "DROP WEAPON", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1358+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 220, "DROP WEAPON", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1359+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 240 +1, "ZOOM", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1360+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 240, "ZOOM", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1361+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 260 +1, "FIRE MODE", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1362+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 260, "FIRE MODE", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1363+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 280 +1, "SWITCH WEAPON", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1364+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 280, "SWITCH WEAPON", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1365+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 300 +1, "WEAPON 1", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1366+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 300, "WEAPON 1", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1367+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 320 +1, "WEAPON 2", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1368+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 320, "WEAPON 2", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1369+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0 +1, OPTIONS_P2_Y + 340 +1, "FIRE", d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), 12, 16);
1370+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + 0, OPTIONS_P2_Y + 340, "FIRE", d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), 12, 16);
1371+ for(int i=0; i<18; i++){
1372+ if( Options_KeyConfigID == i ){
1373+ sprintf(Options_p2LinkTextData[14 + i].text, "[(%d)]", (int)((float)Options_KeyConfigCnt/GAMEFPS)+1 );
1374+ }
1375+ else{
1376+ sprintf(Options_p2LinkTextData[14 + i].text, "[%s]", GameConfig.GetOriginalkeycodeString( GameConfig.GetKeycode(i) ) );
1377+ }
1378+ }
1379+
1380+ //項目名設定
1381+ if( GameConfig.GetFullscreenFlag() == true ){
1382+ Options_p2LinkTextData[7].text[1] = '+';
1383+ Options_p2LinkTextData[8].text[1] = ' ';
1384+ }
1385+ else{
1386+ Options_p2LinkTextData[7].text[1] = ' ';
1387+ Options_p2LinkTextData[8].text[1] = '+';
1388+ }
1389+ if( GameConfig.GetSoundFlag() == true ){ Options_p2LinkTextData[9].text[1] = '*'; }
1390+ else{ Options_p2LinkTextData[9].text[1] = ' '; }
1391+ if( GameConfig.GetBloodFlag() == true ){ Options_p2LinkTextData[10].text[1] = '*'; }
1392+ else{ Options_p2LinkTextData[10].text[1] = ' '; }
1393+ if( GameConfig.GetInvertMouseFlag() == true ){ Options_p2LinkTextData[11].text[1] = '*'; }
1394+ else{ Options_p2LinkTextData[11].text[1] = ' '; }
1395+ if( GameConfig.GetFrameskipFlag() == true ){ Options_p2LinkTextData[12].text[1] = '*'; }
1396+ else{ Options_p2LinkTextData[12].text[1] = ' '; }
1397+ if( GameConfig.GetAnotherGunsightFlag() == true ){ Options_p2LinkTextData[13].text[1] = '*'; }
1398+ else{ Options_p2LinkTextData[13].text[1] = ' '; }
1399+
1400+ for(int i=0; i<OPTIONS_P2_DATAS; i++){
1401+ if( Options_p2LinkTextData[i].enable == true ){
1402+ //文字の色を設定
1403+ if( ((OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x) < mainmenu_mouseX)&&(mainmenu_mouseX < (OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x + (signed)strlen(Options_p2LinkTextData[i].text)*Options_p2LinkTextData[i].text_w))
1404+ &&((OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y) < mainmenu_mouseY)&&(mainmenu_mouseY < (OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y + Options_p2LinkTextData[i].text_h))
1405+ ){
1406+ color = Options_p2LinkTextData[i].text_cursorcolor;
1407+ }
1408+ else{
1409+ color = Options_p2LinkTextData[i].text_defaultcolor;
1410+ }
1411+
1412+ //文字を表示
1413+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x +1, OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y +1, Options_p2LinkTextData[i].text,
1414+ d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f), Options_p2LinkTextData[i].text_w, Options_p2LinkTextData[i].text_h);
1415+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x, OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y, Options_p2LinkTextData[i].text,
1416+ color, Options_p2LinkTextData[i].text_w, Options_p2LinkTextData[i].text_h);
1417+ }
1418+ else{
1419+ d3dg->Draw2DTextureFontText(OPTIONS_P2_X + Options_p2LinkTextData[i].pos_x, OPTIONS_P2_Y + Options_p2LinkTextData[i].pos_y, Options_p2LinkTextData[i].text,
1420+ d3dg->GetColorCode(0.6f,0.6f,0.6f,1.0f), Options_p2LinkTextData[i].text_w, Options_p2LinkTextData[i].text_h);
1421+ }
1422+ }
1423+ }
1424+}
1425+#endif //ENABLE_MENUOPTIONS
1426+
9131427 void mainmenu::Destroy()
9141428 {
9151429 //ブロックデータ解放
@@ -3749,8 +4263,6 @@
37494263
37504264 //ウィンドウ・フルスクリーン切り替え
37514265 if( strcmp(NewCommand, "window") == 0 ){
3752- bool ErrorFlag = false;
3753-
37544266 //現在の表示モード取得
37554267 bool flag = d3dg->GetFullScreenFlag();
37564268
@@ -3757,35 +4269,10 @@
37574269 if( flag == false ){ flag = true; }
37584270 else{ flag = false; }
37594271
3760- //切り替え処理(初回)
3761- WindowCtrl->ChangeWindowMode(flag);
3762- d3dg->SetFullScreenFlag(flag);
3763- if( ResetGame(WindowCtrl) != 0 ){
4272+ if( ChangeWindowMode(WindowCtrl, d3dg, inputCtrl, this, flag) != 0 ){
37644273 AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), "[Error] Change failed.");
3765-
3766- if( flag == false ){
3767- //フルスクリーン⇒ウィンドウが失敗したら、エラーとして終了。
3768- WindowCtrl->ErrorInfo("Resetに失敗しました");
3769- WindowCtrl->CloseWindow();
3770- ErrorFlag = true;
3771- }
3772- else{
3773- //ウィンドウ⇒フルスクリーンが失敗したら、ウィンドウモードへ戻してゲーム続行を試みる。
3774- // (GPUが指定解像度のフルスクリーンに対応してないとか・・?)
3775- flag = false;
3776-
3777- WindowCtrl->ChangeWindowMode(flag);
3778- d3dg->SetFullScreenFlag(flag);
3779- if( ResetGame(WindowCtrl) != 0 ){
3780- //戻しても失敗するなら、エラーとして終了。
3781- WindowCtrl->ErrorInfo("Resetに失敗しました");
3782- WindowCtrl->CloseWindow();
3783- ErrorFlag = true;
3784- }
3785- }
37864274 }
37874275 else{
3788- //初回で切り替えに成功したら、成功メッセージを表示。
37894276 if( flag == true ){
37904277 AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), "Changed FullScreen mode.");
37914278 }
@@ -3793,16 +4280,6 @@
37934280 AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), "Changed Window mode.");
37944281 }
37954282 }
3796-
3797- //切り替えに成功したら、回復などの後処理。
3798- if( ErrorFlag == false ){
3799- Recovery();
3800-
3801- //キー入力を取得
3802- // ※ディスプレイ解像度の変化によるマウスの移動分を捨てる
3803- inputCtrl->GetInputState(true);
3804- inputCtrl->MoveMouseCenter();
3805- }
38064283 }
38074284
38084285 //スクリーンショットを撮影
@@ -4176,4 +4653,55 @@
41764653 default:
41774654 break;
41784655 }
4656+}
4657+
4658+//! @brief ウィンドウ・フルスクリーン切り替え
4659+//! @return 成功:0 失敗(ゲーム続行):1 失敗(ゲーム終了):2
4660+int ChangeWindowMode(WindowControl *WindowCtrl, D3DGraphics *d3dg, InputControl *inputCtrl, scene *RecoveryScene, bool fullscreen)
4661+{
4662+ int returncode = 0;
4663+ bool ErrorFlag = false;
4664+
4665+ //切り替え処理(初回)
4666+ WindowCtrl->ChangeWindowMode(fullscreen);
4667+ d3dg->SetFullScreenFlag(fullscreen);
4668+ if( ResetGame(WindowCtrl) != 0 ){
4669+ if( fullscreen == false ){
4670+ //フルスクリーン⇒ウィンドウが失敗したら、エラーとして終了。
4671+ WindowCtrl->ErrorInfo("Resetに失敗しました");
4672+ WindowCtrl->CloseWindow();
4673+ ErrorFlag = true;
4674+ returncode = 2;
4675+ }
4676+ else{
4677+ //ウィンドウ⇒フルスクリーンが失敗したら、ウィンドウモードへ戻してゲーム続行を試みる。
4678+ // (GPUが指定解像度のフルスクリーンに対応してないとか・・?)
4679+ fullscreen = false;
4680+
4681+ WindowCtrl->ChangeWindowMode(fullscreen);
4682+ d3dg->SetFullScreenFlag(fullscreen);
4683+ if( ResetGame(WindowCtrl) != 0 ){
4684+ //戻しても失敗するなら、エラーとして終了。
4685+ WindowCtrl->ErrorInfo("Resetに失敗しました");
4686+ WindowCtrl->CloseWindow();
4687+ ErrorFlag = true;
4688+ returncode = 2;
4689+ }
4690+ else{
4691+ returncode = 1;
4692+ }
4693+ }
4694+ }
4695+
4696+ //切り替えに成功したら、回復などの後処理。
4697+ if( ErrorFlag == false ){
4698+ RecoveryScene->Recovery();
4699+
4700+ //キー入力を取得
4701+ // ※ディスプレイ解像度の変化によるマウスの移動分を捨てる
4702+ inputCtrl->GetInputState(true);
4703+ inputCtrl->MoveMouseCenter();
4704+ }
4705+
4706+ return returncode;
41794707 }
\ No newline at end of file
--- trunk/gamemain.h (revision 226)
+++ trunk/gamemain.h (revision 227)
@@ -36,6 +36,8 @@
3636 #define MAINMENU_Y (SCREEN_HEIGHT - 340) //!< メニューの表示 Y座標(〃)
3737 #define TOTAL_MENUITEMS 8 //!< メニュー1画面に表示するミッション数
3838 #define MAINMENU_H (TOTAL_MENUITEMS+2)*30 + 25 //!< メニューの表示サイズ・高さ
39+#define MAINMENU_OPTION_X 10 //!< メニューの表示 オプション項目リンクのX座標(左上基準)
40+#define MAINMENU_OPTION_Y (MAINMENU_Y+MAINMENU_H - 16) //!< メニューの表示 オプション項目リンクのY座標(〃)
3941
4042 #define INPUT_ARROWKEYS_ANGLE DegreeToRadian(4) //!< 方向キーでの回転角度
4143 #define INPUT_F1NUMKEYS_ANGLE DegreeToRadian(2) //!< 三人称視点でのテンキーの回転角度
@@ -66,6 +68,19 @@
6668 #endif
6769 #include "main.h"
6870
71+#ifdef ENABLE_MENUOPTIONS
72+ #define OPTIONS_P1_W 360 //!< オプション画面 No.1 幅
73+ #define OPTIONS_P1_H (30*6) //!< オプション画面 No.1 高さ
74+ #define OPTIONS_P1_X (SCREEN_WIDTH - 360) //!< オプション画面 No.1 X座標
75+ #define OPTIONS_P1_Y (MAINMENU_Y+MAINMENU_H - OPTIONS_P1_H - 24) //!< オプション画面 No.1 Y座標
76+ #define OPTIONS_P1_DATAS 3 //!< オプション画面 No.1 リンクテキストの数
77+ #define OPTIONS_P2_W 600 //!< オプション画面 No.2 幅
78+ #define OPTIONS_P2_H 360 //!< オプション画面 No.2 高さ
79+ #define OPTIONS_P2_X ((SCREEN_WIDTH - OPTIONS_P2_W)/2) //!< オプション画面 No.2 X座標
80+ #define OPTIONS_P2_Y (105 + (SCREEN_HEIGHT-105 - OPTIONS_P2_H)/2) //!< オプション画面 No.2 Y座標
81+ #define OPTIONS_P2_DATAS 32 //!< オプション画面 No.2 リンクテキストの数
82+#endif //ENABLE_MENUOPTIONS
83+
6984 #ifdef ENABLE_DEBUGCONSOLE
7085 #define MAX_CONSOLELEN 78 //!< デバック用コンソールの文字数(行)
7186 #define MAX_CONSOLELINES 12 //!< デバック用コンソールの行数
@@ -87,6 +102,20 @@
87102 int headshot; //!< 敵の頭部に命中した数
88103 };
89104
105+#ifdef ENABLE_MENUOPTIONS
106+//! メニューリンクテキスト構造体
107+struct MenuLinkTextData{
108+ bool enable; //!< リンクテキストとしての有効化フラグ
109+ int pos_x; //!< X座標
110+ int pos_y; //!< Y座標
111+ int text_w; //!< 文字の幅
112+ int text_h; //!< 文字の高さ
113+ int text_defaultcolor; //!< 標準の文字色
114+ int text_cursorcolor; //!< 選択時の文字色
115+ char text[32]; //!< テキスト
116+};
117+#endif //ENABLE_MENUOPTIONS
118+
90119 #ifdef ENABLE_DEBUGCONSOLE
91120 //! コンソールを管理する構造体
92121 struct ConsoleData{
@@ -123,10 +152,11 @@
123152 class mainmenu : public D3Dscene
124153 {
125154 char demopath[MAX_PATH]; //!< デモファイルのパス
126- int mainmenu_mouseX; //!< メニュー画面マウスX座標
127- int mainmenu_mouseY; //!< メニュー画面マウスY座標
128- int mainmenu_scrollitems_official; //!< メニュー画面のスクロールしたアイテム数
129- int mainmenu_scrollitems_addon; //!< メニュー画面のスクロールしたアイテム数
155+ int modescreen; //!< 表示画面
156+ int mainmenu_mouseX; //!< メニュー画面マウスX座標
157+ int mainmenu_mouseY; //!< メニュー画面マウスY座標
158+ int mainmenu_scrollitems_official; //!< メニュー画面のスクロールしたアイテム数
159+ int mainmenu_scrollitems_addon; //!< メニュー画面のスクロールしたアイテム数
130160 float mainmenu_scrollbar_official_height; //!< メニュー画面のスクロールバーの高さ
131161 float mainmenu_scrollbar_official_scale; //!< メニュー画面のスクロールバーの目盛
132162 int mainmenu_scrollbar_official_y; //!< メニュー画面のスクロールバーのY座標
@@ -133,10 +163,25 @@
133163 float mainmenu_scrollbar_addon_height; //!< メニュー画面のスクロールバーの高さ
134164 float mainmenu_scrollbar_addon_scale; //!< メニュー画面のスクロールバーの目盛
135165 int mainmenu_scrollbar_addon_y; //!< メニュー画面のスクロールバーのY座標
136- bool mainmenu_scrollbar_flag; //!< メニュー画面のスクロールバーを操作中を示すフラグ
137- int gametitle; //!< ゲームタイトル画像
166+ bool mainmenu_scrollbar_flag; //!< メニュー画面のスクロールバーを操作中を示すフラグ
167+ int gametitle; //!< ゲームタイトル画像
168+#ifdef ENABLE_MENUOPTIONS
169+ MenuLinkTextData Options_p1LinkTextData[OPTIONS_P1_DATAS]; //!< オプション画面 No.1 リンクテキストデータ
170+ MenuLinkTextData Options_p2LinkTextData[OPTIONS_P2_DATAS]; //!< オプション画面 No.2 リンクテキストデータ
171+ int Options_p2LinkTextID; //!< オプション画面 No.2 押されたリンクテキストのID
172+ bool Options_FullscreenFlag_old; //!< オプション画面 No.2 フルスクリーンフラグ
173+ int Options_KeyConfigID; //!< オプション画面 No.2 キー設定ID
174+ int Options_KeyConfigCnt; //!< オプション画面 No.2 キー設定カウント(フレーム数)
175+#endif //ENABLE_MENUOPTIONS
176+
138177 void Render3D();
139178 void Render2D();
179+#ifdef ENABLE_MENUOPTIONS
180+ void CreateOptions();
181+ void InputOptions();
182+ void ProcessOptions();
183+ void RenderOptions();
184+#endif //ENABLE_MENUOPTIONS
140185
141186 public:
142187 mainmenu();
@@ -257,5 +302,6 @@
257302
258303 void InitScreen(WindowControl *WindowCtrl, opening *Opening, mainmenu *MainMenu, briefing *Briefing, maingame *MainGame, result *Result);
259304 void ProcessScreen(WindowControl *WindowCtrl, opening *Opening, mainmenu *MainMenu, briefing *Briefing, maingame *MainGame, result *Result, unsigned int framecnt);
305+int ChangeWindowMode(WindowControl *WindowCtrl, D3DGraphics *d3dg, InputControl *inputCtrl, scene *RecoveryScene, bool fullscreen);
260306
261307 #endif
\ No newline at end of file
--- trunk/input.cpp (revision 226)
+++ trunk/input.cpp (revision 227)
@@ -354,6 +354,53 @@
354354 return false;
355355 }
356356
357+//! @brief オリジナルキーコードの入力チェック
358+//! @return 押されたオリジナルキーコード
359+//! @attention オリジナルキーコードに存在しないキーは判定しない。
360+int InputControl::CheckInputAll()
361+{
362+ for(int i=0; i<=0x4A; i++){
363+ int KeyCode = OriginalkeycodeToDinputdef(i);
364+
365+ if( KeyCode == -1 ){
366+ if( CheckMouseButtonUpL() == true ){
367+ return i;
368+ }
369+ }
370+ if( KeyCode == -2 ){
371+ if( CheckMouseButtonUpR() == true ){
372+ return i;
373+ }
374+ }
375+ if( KeyCode == -3 ){
376+ int CodeL, CodeR;
377+ GetDoubleKeyCode(0, &CodeL, &CodeR);
378+ if( CheckKeyUp(CodeL) == true ){
379+ return i;
380+ }
381+ if( CheckKeyUp(CodeR) == true ){
382+ return i;
383+ }
384+ }
385+ if( KeyCode == -4 ){
386+ int CodeL, CodeR;
387+ GetDoubleKeyCode(1, &CodeL, &CodeR);
388+ if( CheckKeyUp(CodeL) == true ){
389+ return i;
390+ }
391+ if( CheckKeyUp(CodeR) == true ){
392+ return i;
393+ }
394+ }
395+
396+ if( CheckKeyUp(KeyCode) == true ){
397+ return i;
398+ }
399+ }
400+
401+ return -1;
402+}
403+
357404 //! @brief オリジナルキーコードをDirectInputキーコードへ変換
358405 //! @param code オリジナルキーコード
359406 //! @return 1以上:DirectInputキーコード -1以下:特殊 0:失敗
--- trunk/input.h (revision 226)
+++ trunk/input.h (revision 227)
@@ -88,6 +88,7 @@
8888 bool CheckMouseButtonNowR();
8989 bool CheckMouseButtonDownR();
9090 bool CheckMouseButtonUpR();
91+ int CheckInputAll();
9192 };
9293
9394 int OriginalkeycodeToDinputdef(int code);
--- trunk/main.h (revision 226)
+++ trunk/main.h (revision 227)
@@ -64,12 +64,13 @@
6464 #include <math.h>
6565 #include <string.h>
6666
67-#define ENABLE_BUG_HUMANWEAPON //!< 範囲外の人・武器種類番号を用いたバグを再現する(コメント化で無効)
68-#define ENABLE_BUG_TEAMID //!< チーム番号を負数に設定した際のバグを再現する(コメント化で無効)
69-#define ENABLE_ADDOBJ_PARAM8BIT //!< 追加小物の設定値をchar型 8bitにする(コメント化で無効)
70-#define ENABLE_DEBUGCONSOLE //!< デバック用コンソールの有効化(コメント化で機能無効)
71-#define ENABLE_DEBUGLOG //!< デバック用ログ出力の有効化(コメント化で機能無効)
67+#define ENABLE_BUG_HUMANWEAPON //!< 範囲外の人・武器種類番号を用いたバグを再現する(コメント化で無効)
68+#define ENABLE_BUG_TEAMID //!< チーム番号を負数に設定した際のバグを再現する(コメント化で無効)
69+#define ENABLE_ADDOBJ_PARAM8BIT //!< 追加小物の設定値をchar型 8bitにする(コメント化で無効)
70+#define ENABLE_DEBUGCONSOLE //!< デバック用コンソールの有効化(コメント化で機能無効)
71+#define ENABLE_DEBUGLOG //!< デバック用ログ出力の有効化(コメント化で機能無効)
7272 #define ENABLE_CHECKOPENXOPSEVENT //!< OpenXOPS動作判定用イベントの有効化(コメント化で機能無効)
73+#define ENABLE_MENUOPTIONS //!< メニューにオプション画面追加(コメント化で機能無効)
7374 //#define ENABLE_PATH_DELIMITER_SLASH //!< パス区切り文字を、'\'から‘/’へ変換する。
7475
7576 //windows.hを使用しないならば