• R/O
  • SSH
  • HTTPS

提交

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

修訂91 (tree)
時間2015-06-07 21:24:17
作者xops-mikan

Log Message

デバック用の実行ログを記録・保存する機能追加。 ※exeのコマンド引数に"log"を付けて起動することで、同ディレクトリにOpenXOPS_log.htmlとして出力します。

Change Summary

差異

--- trunk/debug.h (nonexistent)
+++ trunk/debug.h (revision 91)
@@ -0,0 +1,69 @@
1+//! @file debug.h
2+//! @brief DebugLogクラスの宣言
3+
4+//--------------------------------------------------------------------------------
5+//
6+// OpenXOPS
7+// Copyright (c) 2014-2015, OpenXOPS Project / [-_-;](mikan) All rights reserved.
8+//
9+// Redistribution and use in source and binary forms, with or without
10+// modification, are permitted provided that the following conditions are met:
11+// * Redistributions of source code must retain the above copyright notice,
12+// this list of conditions and the following disclaimer.
13+// * Redistributions in binary form must reproduce the above copyright notice,
14+// this list of conditions and the following disclaimer in the documentation
15+// and/or other materials provided with the distribution.
16+// * Neither the name of the OpenXOPS Project nor the names of its contributors
17+// may be used to endorse or promote products derived from this software
18+// without specific prior written permission.
19+//
20+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+// DISCLAIMED. IN NO EVENT SHALL OpenXOPS Project BE LIABLE FOR ANY
24+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27+// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+//--------------------------------------------------------------------------------
31+
32+#ifndef DEBUG_H
33+#define DEBUG_H
34+
35+#ifndef H_LAYERLEVEL
36+ #define H_LAYERLEVEL 1 //!< Select include file.
37+#endif
38+#include "main.h"
39+
40+#ifdef ENABLE_DEBUGLOG
41+//! @brief デバック情報を出力するクラス
42+//! @details デバック情報をファイルに出力します。
43+class DebugLog
44+{
45+ bool OutputFlag; //!< 出力有効
46+ char fname[MAX_PATH]; //!< ファイル名
47+ bool error; //!< エラーフラグ(次回エラーを記録する)
48+
49+public:
50+ DebugLog();
51+ ~DebugLog();
52+ void SetLogName(char* name);
53+ bool MakeLog();
54+ bool WriteLog(int tag, char* title, int id);
55+ bool WriteLog(int tag, char* title, char* text);
56+};
57+
58+//! ログの出力モードを表す定数
59+enum LogTag {
60+ LOG_CHECK,
61+ LOG_INIT,
62+ LOG_LOAD,
63+ LOG_CLEANUP,
64+ LOG_COMPLETE,
65+ LOG_ERROR
66+};
67+#endif //ENABLE_DEBUGLOG
68+
69+#endif
\ No newline at end of file
--- trunk/statemachine.cpp (revision 90)
+++ trunk/statemachine.cpp (revision 91)
@@ -132,6 +132,29 @@
132132 default:
133133 NowState = STATE_NULL;
134134 }
135+
136+#ifdef ENABLE_DEBUGLOG
137+ //ログに出力
138+ switch(NowState){
139+ case STATE_CREATE_OPENING:
140+ OutputLog.WriteLog(LOG_CHECK, "画面遷移", "オープニング");
141+ break;
142+ case STATE_CREATE_MENU:
143+ OutputLog.WriteLog(LOG_CHECK, "画面遷移", "メニュー");
144+ break;
145+ case STATE_CREATE_BRIEFING:
146+ OutputLog.WriteLog(LOG_CHECK, "画面遷移", "ブリーフィング");
147+ break;
148+ case STATE_CREATE_MAINGAME:
149+ OutputLog.WriteLog(LOG_CHECK, "画面遷移", "ミッション");
150+ break;
151+ case STATE_CREATE_RESULT:
152+ OutputLog.WriteLog(LOG_CHECK, "画面遷移", "リザルト");
153+ break;
154+ default:
155+ ;//
156+ }
157+#endif
135158 }
136159
137160 //! @brief マウスクリック を受けた
--- trunk/config.cpp (revision 90)
+++ trunk/config.cpp (revision 91)
@@ -61,6 +61,11 @@
6161 FILE *fp;
6262 char buf;
6363
64+#ifdef ENABLE_DEBUGLOG
65+ //ログに出力
66+ OutputLog.WriteLog(LOG_LOAD, "設定ファイル", fname);
67+#endif
68+
6469 #ifdef PATH_DELIMITER_SLASH
6570 //パス区切り文字を変換
6671 fname = ChangePathDelimiter(fname);
@@ -121,6 +126,11 @@
121126
122127 //ファイルハンドルを閉じる
123128 fclose(fp);
129+
130+#ifdef ENABLE_DEBUGLOG
131+ //ログに出力
132+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
133+#endif
124134 return 0;
125135 }
126136
--- trunk/datafile.cpp (revision 90)
+++ trunk/datafile.cpp (revision 91)
@@ -82,6 +82,11 @@
8282 {
8383 //blockdata構造体解放
8484 if( data != NULL ) delete [] data;
85+
86+#ifdef ENABLE_DEBUGLOG
87+ //ログに出力
88+ OutputLog.WriteLog(LOG_CLEANUP, "BD1", "");
89+#endif
8590 }
8691
8792 //! @brief ブロックデータファイルを読みこむ
@@ -94,6 +99,11 @@
9499 float bdata_main[80];
95100 char bdata_mainb[30];
96101
102+#ifdef ENABLE_DEBUGLOG
103+ //ログに出力
104+ OutputLog.WriteLog(LOG_LOAD, "BD1", fname);
105+#endif
106+
97107 #ifdef PATH_DELIMITER_SLASH
98108 //パス区切り文字を変換
99109 fname = ChangePathDelimiter(fname);
@@ -150,6 +160,11 @@
150160 //ファイルハンドルを解放
151161 fclose( fp );
152162
163+#ifdef ENABLE_DEBUGLOG
164+ //ログに出力
165+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
166+#endif
167+
153168 return 0;
154169 }
155170
@@ -348,6 +363,11 @@
348363 for(int i=0; i<MAX_POINTMESSAGES; i++){
349364 if( text[i] != NULL ) delete [] text[i];
350365 }
366+
367+#ifdef ENABLE_DEBUGLOG
368+ //ログに出力
369+ OutputLog.WriteLog(LOG_CLEANUP, "PD1", "");
370+#endif
351371 }
352372
353373 //! @brief ポイントデータファイルを読みこむ
@@ -361,6 +381,11 @@
361381 char pdata_mainc[200][4];
362382 char fname2[MAX_PATH];
363383
384+#ifdef ENABLE_DEBUGLOG
385+ //ログに出力
386+ OutputLog.WriteLog(LOG_LOAD, "PD1", fname);
387+#endif
388+
364389 #ifdef PATH_DELIMITER_SLASH
365390 //パス区切り文字を変換
366391 fname = ChangePathDelimiter(fname);
@@ -402,6 +427,11 @@
402427 //ファイルポインタを閉じる
403428 fclose( fp );
404429
430+#ifdef ENABLE_DEBUGLOG
431+ //ログに出力
432+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
433+#endif
434+
405435 //「同ファイル名.msg」を生成
406436 strcpy(fname2, fname);
407437 //PathRemoveExtension(fname2);
@@ -421,6 +451,11 @@
421451 //ファイルを読み込み
422452 fp = fopen( fname2, "r" );
423453 if( fp != NULL ){
454+#ifdef ENABLE_DEBUGLOG
455+ //ログに出力
456+ OutputLog.WriteLog(LOG_LOAD, "MSG", fname2);
457+#endif
458+
424459 //メッセージデータを取得
425460 for(int i=0; i<MAX_POINTMESSAGES; i++){
426461 if( fgets(text[i], MAX_POINTMESSAGEBYTE, fp) == NULL ){ break; }
@@ -431,9 +466,20 @@
431466 }
432467 }
433468
469+#ifdef ENABLE_DEBUGLOG
470+ //ログに出力
471+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
472+#endif
473+
434474 //ファイルポインタを開放
435475 fclose( fp );
436476 }
477+ else{
478+#ifdef ENABLE_DEBUGLOG
479+ //ログに出力
480+ OutputLog.WriteLog(LOG_CHECK, "MSG", "ファイルなし");
481+#endif
482+ }
437483
438484 return 0;
439485 }
@@ -601,6 +647,11 @@
601647 {
602648 char str[64];
603649
650+#ifdef ENABLE_DEBUGLOG
651+ //ログに出力
652+ OutputLog.WriteLog(LOG_LOAD, "MIF", fname);
653+#endif
654+
604655 mif = true;
605656
606657 //拡張子が.txtならば
@@ -739,7 +790,12 @@
739790 //ファイルハンドルを開放
740791 fclose( fp );
741792
793+#ifdef ENABLE_DEBUGLOG
794+ //ログに出力
795+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
796+#endif
742797
798+
743799 //追加小物情報を初期値へ
744800 strcpy(addsmallobject_modelpath, "");
745801 strcpy(addsmallobject_texturepath, "");
@@ -751,6 +807,11 @@
751807 //何かしらの追加小物情報ファイルが指定されていれば
752808 if( (strcmp(addsmallobject_path, "") != 0)&&(strcmp(addsmallobject_path, "!") != 0) ){
753809
810+#ifdef ENABLE_DEBUGLOG
811+ //ログに出力
812+ OutputLog.WriteLog(LOG_LOAD, "(追加小物)", addsmallobject_path);
813+#endif
814+
754815 #ifdef PATH_DELIMITER_SLASH
755816 //パス区切り文字を変換
756817 strcpy(addsmallobject_path, ChangePathDelimiter(addsmallobject_path));
@@ -789,7 +850,18 @@
789850 //ファイルハンドルを開放
790851 fclose( fp );
791852 }
853+
854+#ifdef ENABLE_DEBUGLOG
855+ //ログに出力
856+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
857+#endif
792858 }
859+#ifdef ENABLE_DEBUGLOG
860+ else{
861+ //ログに出力
862+ OutputLog.WriteLog(LOG_CHECK, "(追加小物)", "ファイルなし");
863+ }
864+#endif
793865
794866 return 0;
795867 }
@@ -1022,6 +1094,14 @@
10221094 //ミッション名をソートする
10231095 Sort();
10241096
1097+#ifdef ENABLE_DEBUGLOG
1098+ char str[128];
1099+ sprintf(str, "addonフォルダ調査(ディレクトリ:%s 合計数:%d)", dir, datas);
1100+
1101+ //ログに出力
1102+ OutputLog.WriteLog(LOG_CHECK, "ディレクトリ", str);
1103+#endif
1104+
10251105 return datas;
10261106 }
10271107
--- trunk/parameter.cpp (revision 90)
+++ trunk/parameter.cpp (revision 91)
@@ -62,6 +62,11 @@
6262 if( Weapon != NULL ){ delete [] Weapon; }
6363 if( SmallObject != NULL ){ delete [] SmallObject; }
6464 if( AIlevel != NULL ){ delete [] AIlevel; }
65+
66+#ifdef ENABLE_DEBUGLOG
67+ //ログに出力
68+ OutputLog.WriteLog(LOG_CLEANUP, "設定値", "");
69+#endif
6570 }
6671
6772 //! @brief 初期化(パラメータの設定)
@@ -68,6 +73,11 @@
6873 //! @attention この関数を呼び出さないと、クラス自体が正しく機能しません。
6974 void ParameterInfo::InitInfo()
7075 {
76+#ifdef ENABLE_DEBUGLOG
77+ //ログに出力
78+ OutputLog.WriteLog(LOG_INIT, "設定値", "");
79+#endif
80+
7181 Human = new HumanParameter[TOTAL_PARAMETERINFO_HUMAN];
7282 Weapon = new WeaponParameter[TOTAL_PARAMETERINFO_WEAPON];
7383 SmallObject = new SmallObjectParameter[TOTAL_PARAMETERINFO_SMALLOBJECT];
@@ -1532,6 +1542,11 @@
15321542 AIlevel[5].attack = 10;
15331543 AIlevel[5].search = 6;
15341544 AIlevel[5].limitserror = -3;
1545+
1546+#ifdef ENABLE_DEBUGLOG
1547+ //ログに出力
1548+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
1549+#endif
15351550 }
15361551
15371552 //! @brief 人の設定を取得
--- trunk/debug.cpp (nonexistent)
+++ trunk/debug.cpp (revision 91)
@@ -0,0 +1,214 @@
1+//! @file debug.cpp
2+//! @brief DebugLogクラスの定義
3+
4+//--------------------------------------------------------------------------------
5+//
6+// OpenXOPS
7+// Copyright (c) 2014-2015, OpenXOPS Project / [-_-;](mikan) All rights reserved.
8+//
9+// Redistribution and use in source and binary forms, with or without
10+// modification, are permitted provided that the following conditions are met:
11+// * Redistributions of source code must retain the above copyright notice,
12+// this list of conditions and the following disclaimer.
13+// * Redistributions in binary form must reproduce the above copyright notice,
14+// this list of conditions and the following disclaimer in the documentation
15+// and/or other materials provided with the distribution.
16+// * Neither the name of the OpenXOPS Project nor the names of its contributors
17+// may be used to endorse or promote products derived from this software
18+// without specific prior written permission.
19+//
20+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+// DISCLAIMED. IN NO EVENT SHALL OpenXOPS Project BE LIABLE FOR ANY
24+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27+// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+//--------------------------------------------------------------------------------
31+
32+#include "debug.h"
33+
34+#ifdef ENABLE_DEBUGLOG
35+
36+//! @brief コンストラクタ
37+DebugLog::DebugLog()
38+{
39+ OutputFlag = false;
40+ strcpy(fname, GAMENAME"_log.html");
41+ error = false;
42+}
43+
44+//! @brief ディストラクタ
45+DebugLog::~DebugLog()
46+{}
47+
48+//! @brief ログファイルのファイル名を変更
49+//! @param name ファイル名
50+void DebugLog::SetLogName(char* name)
51+{
52+ strcpy(fname, name);
53+}
54+
55+//! @brief ログファイルを新規作成
56+//! @return 成功:false 失敗:true
57+//! @warning この関数を正しく実行しないと、クラス自体が動作しません。
58+//! @attention 既にファイルが存在する場合、上書き保存されます。既存のファイルは失われます。
59+bool DebugLog::MakeLog()
60+{
61+ FILE *fp;
62+
63+ time_t timer;
64+ struct tm *local;
65+
66+ //日時を取得
67+ timer = time(NULL);
68+ local = localtime(&timer);
69+
70+
71+ fp = fopen(fname, "w");
72+ if( fp == NULL ){
73+ return true;
74+ }
75+
76+ //ヘッダー
77+ fprintf(fp, "<html>\n");
78+ fprintf(fp, "<head>\n");
79+ fprintf(fp, "<title>"GAMENAME" "GAMEVERSION" Debug Log</title>\n");
80+ fprintf(fp, "<style type=text/css>\n");
81+ fprintf(fp, "<!--//\n");
82+ fprintf(fp, "body{ font-size : 12px; }\n");
83+ fprintf(fp, "table { font-size : 12px; }\n");
84+ fprintf(fp, "//-->\n");
85+ fprintf(fp, "</style>\n");
86+ fprintf(fp, "</head>\n");
87+
88+ fprintf(fp, "<body>\n");
89+
90+ //ページ上部
91+ fprintf(fp, "<p>\n");
92+ fprintf(fp, "<b>"GAMENAME" "GAMEVERSION" 実行ログ</b><br>\n");
93+ fprintf(fp, "日時:%04d年%02d月%02d日 %02d時%02d分%02d秒<br>\n", local->tm_year + 1900, local->tm_mon + 1, local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec);
94+ fprintf(fp, "</p>\n");
95+
96+ fprintf(fp, "<table>\n");
97+
98+ fclose(fp);
99+
100+ //出力フラグを有効
101+ OutputFlag = true;
102+
103+ return false;
104+}
105+
106+//! @brief ログファイルに追記
107+//! @param tag 出力モードを表す定数
108+//! @param title タイトル
109+//! @param id ID
110+//! @return 成功:false 失敗:true
111+//! @attention WriteLog(int tag, char* title, char* text)関数をオーバーロードします。
112+bool DebugLog::WriteLog(int tag, char* title, int id)
113+{
114+ //出力フラグを有効なければ処理しない
115+ if( OutputFlag == false ){ return true; }
116+
117+ char str[16];
118+ sprintf(str, "ID:%d", id);
119+
120+ //オーバーロード
121+ return WriteLog(tag, title, str);
122+}
123+
124+//! @brief ログファイルに追記
125+//! @param tag 出力モードを表す定数
126+//! @param title タイトル
127+//! @param text 本文
128+//! @return 成功:false 失敗:true
129+//! @attention 前回、初期化(LOG_INIT)か読み込み(LOG_LOAD)が指定された状態で、完了(LOG_COMPLETE)が指定されなかった場合、先にエラー(LOG_ERROR)情報を記憶します。
130+//! @attention すなわち、初期化か読み込みを記録した場合、次に完了が記録されなければ、自動的にエラーとして記録します。
131+bool DebugLog::WriteLog(int tag, char* title, char* text)
132+{
133+ //出力フラグを有効なければ処理しない
134+ if( OutputFlag == false ){ return true; }
135+
136+ FILE *fp;
137+
138+ char tagcolor[32];
139+ char tagstr[32];
140+
141+ //完了情報か素直にエラーを伝えてきたなら、エラーフラグを下す
142+ if( (tag == LOG_COMPLETE)||(tag == LOG_ERROR) ){
143+ error = false;
144+ }
145+
146+ //エラーフラグが有効ならば、エラーが発生したものとして記録。
147+ if( error == true ){
148+ error = false;
149+ WriteLog(LOG_ERROR, "", "");
150+ }
151+
152+ //定数から文字と色を求める
153+ switch(tag){
154+ case LOG_CHECK:
155+ strcpy(tagcolor, "008000");
156+ strcpy(tagstr, "情報");
157+ break;
158+ case LOG_INIT:
159+ strcpy(tagcolor, "FF0080");
160+ strcpy(tagstr, "初期化");
161+ break;
162+ case LOG_LOAD:
163+ strcpy(tagcolor, "0000FF");
164+ strcpy(tagstr, "読み込み");
165+ break;
166+ case LOG_CLEANUP:
167+ strcpy(tagcolor, "FF8000");
168+ strcpy(tagstr, "解放");
169+ break;
170+ case LOG_COMPLETE:
171+ strcpy(tagcolor, "008000");
172+ strcpy(tagstr, "成功");
173+ break;
174+ case LOG_ERROR:
175+ strcpy(tagcolor, "FF0000");
176+ strcpy(tagstr, "失敗");
177+ break;
178+ default:
179+ strcpy(tagcolor, "000000");
180+ strcpy(tagstr, "");
181+ }
182+
183+ fp = fopen(fname, "a");
184+ if( fp == NULL ){
185+ return true;
186+ }
187+
188+ //現在のミリ秒
189+ fprintf(fp, "<tr><td> %d </tb>", GetTimeMS());
190+
191+ if( (tag != LOG_COMPLETE)&&(tag != LOG_ERROR) ){
192+ //通常の情報
193+ fprintf(fp, "<td width=100><b><font color=#%s>%s</font></b></tb>", tagcolor, tagstr);
194+ fprintf(fp, "<td width=100>%s</tb><td colspan=3>%s</tb>", title, text);
195+ }
196+ else{
197+ //完了・エラー情報
198+ fprintf(fp, "<td colspan=2></td><td width=100><b><font color=#%s>%s</font></b></tb>", tagcolor, tagstr);
199+ fprintf(fp, "<td>%s</tb><td>%s</tb>", title, text);
200+ }
201+
202+ fprintf(fp, "</tr>\n");
203+
204+ fclose(fp);
205+
206+ //初期化か読み込みなら、エラーフラグを立てる
207+ if( (tag == LOG_INIT)||(tag == LOG_LOAD) ){
208+ error = true;
209+ }
210+
211+ return false;
212+}
213+
214+#endif //ENABLE_DEBUGLOG
\ No newline at end of file
--- trunk/sound.cpp (revision 90)
+++ trunk/sound.cpp (revision 91)
@@ -48,6 +48,11 @@
4848 }
4949 }
5050 if( pDSound != NULL ){ pDSound->Release(); }
51+
52+#ifdef ENABLE_DEBUGLOG
53+ //ログに出力
54+ OutputLog.WriteLog(LOG_CLEANUP, "サウンド", "ezds.dll");
55+#endif
5156 }
5257
5358 //! @brief 初期化
@@ -55,6 +60,11 @@
5560 //! @return 成功:0 失敗:1
5661 int SoundControl::InitSound(WindowControl *WindowCtrl)
5762 {
63+#ifdef ENABLE_DEBUGLOG
64+ //ログに出力
65+ OutputLog.WriteLog(LOG_INIT, "サウンド", "DirectSound");
66+#endif
67+
5868 //DirectSoundオブジェクトを生成
5969 if( FAILED( DirectSoundCreate8(NULL, &pDSound, NULL) ) ){
6070 return 1;
@@ -82,6 +92,11 @@
8292 //ロール・オフ(減衰度合い)設定
8393 p3DListener->SetRolloffFactor(0.05f, DS3D_IMMEDIATE);
8494
95+#ifdef ENABLE_DEBUGLOG
96+ //ログに出力
97+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
98+#endif
99+
85100 return 0;
86101 }
87102
@@ -112,6 +127,11 @@
112127 {
113128 if( pDSound == NULL ){ return -1; }
114129
130+#ifdef ENABLE_DEBUGLOG
131+ //ログに出力
132+ OutputLog.WriteLog(LOG_LOAD, "サウンド", filename);
133+#endif
134+
115135 //開いている番号を探す
116136 int id=0;
117137 for(id=0; id<MAX_LOADSOUND; id++){
@@ -226,6 +246,11 @@
226246 pDSBuffer[id][0]->SetVolume(DSBVOLUME_MIN);
227247 pDSBuffer[id][0]->Play(NULL, 0, NULL);
228248
249+#ifdef ENABLE_DEBUGLOG
250+ //ログに出力
251+ OutputLog.WriteLog(LOG_COMPLETE, "", id);
252+#endif
253+
229254 return id;
230255 }
231256
@@ -331,6 +356,11 @@
331356 if( pDSBuffer[id][i] != NULL ){ pDSBuffer[id][i]->Release(); }
332357 pDSBuffer[id][i] = NULL;
333358 }
359+
360+#ifdef ENABLE_DEBUGLOG
361+ //ログに出力
362+ OutputLog.WriteLog(LOG_CLEANUP, "サウンド", id);
363+#endif
334364 }
335365
336366 //! @brief Waveファイルの情報を調べる
@@ -450,6 +480,11 @@
450480
451481 //DLLを開放
452482 FreeLibrary(lib);
483+
484+#ifdef ENABLE_DEBUGLOG
485+ //ログに出力
486+ OutputLog.WriteLog(LOG_CLEANUP, "サウンド", "ezds.dll");
487+#endif
453488 }
454489
455490 //! @brief 初期化@n
@@ -458,6 +493,11 @@
458493 //! @return 成功:0 失敗:1
459494 int SoundControl::InitSound(WindowControl *WindowCtrl)
460495 {
496+#ifdef ENABLE_DEBUGLOG
497+ //ログに出力
498+ OutputLog.WriteLog(LOG_INIT, "サウンド", "ezds.dll");
499+#endif
500+
461501 if( lib != NULL ){
462502 return 1;
463503 }
@@ -484,6 +524,11 @@
484524 //return 1;
485525 }
486526
527+#ifdef ENABLE_DEBUGLOG
528+ //ログに出力
529+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
530+#endif
531+
487532 return 0;
488533 }
489534
@@ -515,6 +560,11 @@
515560 {
516561 if( lib == NULL ){ return -1; }
517562
563+#ifdef ENABLE_DEBUGLOG
564+ //ログに出力
565+ OutputLog.WriteLog(LOG_LOAD, "サウンド", filename);
566+#endif
567+
518568 //使用していないデータ番号を探す
519569 for(int i=0; i<MAX_LOADSOUND; i++){
520570 if( useflag[i] == false ){
@@ -529,6 +579,11 @@
529579
530580 //使用中を新たすフラグをセット
531581 useflag[i] = true;
582+
583+#ifdef ENABLE_DEBUGLOG
584+ //ログに出力
585+ OutputLog.WriteLog(LOG_COMPLETE, "", i);
586+#endif
532587 return i;
533588 }
534589 }
@@ -602,6 +657,11 @@
602657
603658 //使用中フラグを解除
604659 useflag[id] = false;
660+
661+#ifdef ENABLE_DEBUGLOG
662+ //ログに出力
663+ OutputLog.WriteLog(LOG_CLEANUP, "サウンド", id);
664+#endif
605665 }
606666
607667 //! @brief 音源との距離を調べる
--- trunk/main.h (revision 90)
+++ trunk/main.h (revision 91)
@@ -52,7 +52,7 @@
5252 #define SCREEN_WIDTH 640 //!< スクリーンの幅
5353 #define SCREEN_HEIGHT 480 //!< スクリーンの高さ
5454
55-#define MAX_ADDONLIST 128 //!< ADDONを読み込む最大数
55+#define MAX_ADDONLIST 128 //!< ADDONを読み込む最大数
5656
5757 #define TOTAL_HAVEWEAPON 2 //!< 持てる武器の数
5858
@@ -63,6 +63,9 @@
6363 #include <math.h>
6464 #include <string.h>
6565
66+#define ENABLE_DEBUGLOG //!< @brief デバック用ログ出力の有効化(コメント化で機能無効)
67+//#define PATH_DELIMITER_SLASH //!< パス区切り文字を、'\'から‘/’へ変換する。
68+
6669 //windows.hを使用しないならば
6770 #ifndef _MAX_PATH
6871 #define _MAX_PATH 260 //!< _MAX_PATH is 260
@@ -71,8 +74,6 @@
7174 #define MAX_PATH 260 //!< MAX_PATH is 260
7275 #endif
7376
74-//#define PATH_DELIMITER_SLASH //!< パス区切り文字を、'\'から‘/’へ変換する。
75-
7677 //BorlandC++ Compiler用の処理
7778 #ifdef __BORLANDC__
7879 #define sqrtf(df) sqrt(df)
@@ -87,6 +88,7 @@
8788
8889 //低レイヤー
8990 #if H_LAYERLEVEL >= 1
91+ #include "debug.h"
9092 #include "window.h"
9193 #include "config.h"
9294 #include "datafile.h"
@@ -117,6 +119,9 @@
117119 //追加ライブラリ
118120 // not .lib
119121
122+#ifdef ENABLE_DEBUGLOG
123+ extern class DebugLog OutputLog;
124+#endif
120125 extern class StateMachine GameState;
121126 extern class Config GameConfig;
122127
--- trunk/d3dgraphics.cpp (revision 90)
+++ trunk/d3dgraphics.cpp (revision 91)
@@ -81,6 +81,11 @@
8181
8282 if( pd3dDevice != NULL ) pd3dDevice->Release();
8383 if( pD3D != NULL ) pD3D->Release();
84+
85+#ifdef ENABLE_DEBUGLOG
86+ //ログに出力
87+ OutputLog.WriteLog(LOG_CLEANUP, "グラフィック", "DirectX");
88+#endif
8489 }
8590
8691 //! @brief 初期化@n
@@ -91,6 +96,11 @@
9196 //! @return 成功:0 失敗:1
9297 int D3DGraphics::InitD3D(WindowControl *WindowCtrl, char *TextureFontFilename, bool fullscreen)
9398 {
99+#ifdef ENABLE_DEBUGLOG
100+ //ログに出力
101+ OutputLog.WriteLog(LOG_INIT, "グラフィック", "DirectX");
102+#endif
103+
94104 D3DPRESENT_PARAMETERS d3dpp;
95105 RECT rec;
96106
@@ -136,6 +146,11 @@
136146 }
137147 }
138148
149+#ifdef ENABLE_DEBUGLOG
150+ //ログに出力
151+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
152+#endif
153+
139154 //テクスチャフォント用画像のファイル名を設定
140155 strcpy(TextureFontFname, TextureFontFilename);
141156
@@ -187,6 +202,11 @@
187202 return 1;
188203 }
189204
205+#ifdef ENABLE_DEBUGLOG
206+ //ログに出力
207+ OutputLog.WriteLog(LOG_INIT, "グラフィック", "DirectX(リセット)");
208+#endif
209+
190210 //リソース解放
191211 CleanupD3Dresource();
192212
@@ -230,6 +250,11 @@
230250 return 2;
231251 }
232252
253+#ifdef ENABLE_DEBUGLOG
254+ //ログに出力
255+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
256+#endif
257+
233258 return 0;
234259 }
235260
@@ -326,6 +351,11 @@
326351 //! @return 成功:モデル認識番号(0以上) 失敗:-1
327352 int D3DGraphics::LoadModel(char* filename)
328353 {
354+#ifdef ENABLE_DEBUGLOG
355+ //ログに出力
356+ OutputLog.WriteLog(LOG_LOAD, "モデル", filename);
357+#endif
358+
329359 int id = -1;
330360
331361 //空いている要素を探す
@@ -354,7 +384,7 @@
354384 D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
355385 int num = nummaterials[id];
356386 pmaterials[id] = new D3DMATERIAL9[num];
357- if( pmaterials[id] == NULL ) return -3;
387+ if( pmaterials[id] == NULL ) return -1;
358388
359389 //構造体に代入
360390 for( int i=0; i<num; i=i+1 ){
@@ -365,6 +395,10 @@
365395 //バッファを開放
366396 pD3DXMtrlBuffer->Release();
367397
398+#ifdef ENABLE_DEBUGLOG
399+ //ログに出力
400+ OutputLog.WriteLog(LOG_COMPLETE, "", id);
401+#endif
368402 return id;
369403 }
370404
@@ -376,6 +410,14 @@
376410 //! @attention それぞれのモデルデータが正しくないか 頂点数が異なる場合、実行に失敗します。
377411 int D3DGraphics::MorphingModel(int idA, int idB)
378412 {
413+#ifdef ENABLE_DEBUGLOG
414+ char str[128];
415+ sprintf(str, "中間データ作成  ID:%d and %d", idA, idB);
416+
417+ //ログに出力
418+ OutputLog.WriteLog(LOG_LOAD, "モデル", str);
419+#endif
420+
379421 //データが正しいか調べる
380422 if( (idA < 0)||((MAX_MODEL -1) < idA) ){ return -1; }
381423 if( pmesh[idA] == NULL ){ return -1; }
@@ -442,6 +484,10 @@
442484 pvbN->Unlock();
443485 }
444486
487+#ifdef ENABLE_DEBUGLOG
488+ //ログに出力
489+ OutputLog.WriteLog(LOG_COMPLETE, "", idN);
490+#endif
445491 return idN;
446492 }
447493
@@ -455,6 +501,11 @@
455501
456502 pmesh[id]->Release();
457503 pmesh[id] = NULL;
504+
505+#ifdef ENABLE_DEBUGLOG
506+ //ログに出力
507+ OutputLog.WriteLog(LOG_CLEANUP, "モデル", id);
508+#endif
458509 }
459510 }
460511
@@ -469,6 +520,11 @@
469520 D3DXIMAGE_INFO info;
470521 int MipLevels;
471522
523+#ifdef ENABLE_DEBUGLOG
524+ //ログに出力
525+ OutputLog.WriteLog(LOG_LOAD, "テクスチャ", filename);
526+#endif
527+
472528 //空いている認識番号を探す
473529 for(int i=0; i<MAX_TEXTURE; i++){
474530 if( ptextures[i] == NULL ){
@@ -505,6 +561,11 @@
505561 return -1;
506562 }
507563 }
564+
565+#ifdef ENABLE_DEBUGLOG
566+ //ログに出力
567+ OutputLog.WriteLog(LOG_COMPLETE, "", id);
568+#endif
508569 return id;
509570 }
510571
@@ -545,6 +606,11 @@
545606 if( ptextures[id] != NULL ){
546607 ptextures[id]->Release();
547608 ptextures[id] = NULL;
609+
610+#ifdef ENABLE_DEBUGLOG
611+ //ログに出力
612+ OutputLog.WriteLog(LOG_CLEANUP, "テクスチャ", id);
613+#endif
548614 }
549615 }
550616
@@ -854,6 +920,11 @@
854920 }
855921 }
856922
923+#ifdef ENABLE_DEBUGLOG
924+ //ログに出力
925+ OutputLog.WriteLog(LOG_LOAD, "マップ", "(頂点データ)");
926+#endif
927+
857928 #ifdef BLOCKDATA_GPUMEMORY
858929 VERTEXTXTA* pVertices;
859930
@@ -926,6 +997,11 @@
926997 }
927998 }
928999 #endif
1000+
1001+#ifdef ENABLE_DEBUGLOG
1002+ //ログに出力
1003+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
1004+#endif
9291005 }
9301006
9311007 //! @brief マップデータを描画
@@ -1063,6 +1139,11 @@
10631139 bs = 0;
10641140
10651141 blockdata = NULL;
1142+
1143+#ifdef ENABLE_DEBUGLOG
1144+ //ログに出力
1145+ OutputLog.WriteLog(LOG_CLEANUP, "マップ", "(頂点データ)");
1146+#endif
10661147 }
10671148
10681149 //! @brief モデルファイルを描画
@@ -1601,6 +1682,11 @@
16011682
16021683 if( hGLRC != NULL ){ wglDeleteContext(hGLRC); }
16031684
1685+#ifdef ENABLE_DEBUGLOG
1686+ //ログに出力
1687+ OutputLog.WriteLog(LOG_CLEANUP, "グラフィック", "OpenGL");
1688+#endif
1689+
16041690 //libjpeg解放
16051691 jpeg_destroy_decompress(&cinfo);
16061692 }
@@ -1613,6 +1699,11 @@
16131699 //! @return 成功:0 失敗:1
16141700 int D3DGraphics::InitD3D(WindowControl *WindowCtrl, char *TextureFontFilename, bool fullscreen)
16151701 {
1702+#ifdef ENABLE_DEBUGLOG
1703+ //ログに出力
1704+ OutputLog.WriteLog(LOG_INIT, "グラフィック", "OpenGL");
1705+#endif
1706+
16161707 hWnd = WindowCtrl->GethWnd();
16171708
16181709 RECT prc;
@@ -1684,6 +1775,10 @@
16841775 //フォント名:MS ゴシック サイズ:18
16851776 SystemFont = CreateFont(18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, "MS ゴシック");
16861777
1778+#ifdef ENABLE_DEBUGLOG
1779+ //ログに出力
1780+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
1781+#endif
16871782
16881783 //テクスチャフォント用画像のファイル名を設定
16891784 strcpy(TextureFontFname, TextureFontFilename);
@@ -1727,8 +1822,18 @@
17271822 //! @return 成功:0 待ち:1 失敗:2
17281823 int D3DGraphics::ResetD3D(WindowControl *WindowCtrl)
17291824 {
1825+#ifdef ENABLE_DEBUGLOG
1826+ //ログに出力
1827+ OutputLog.WriteLog(LOG_INIT, "グラフィック", "OpenGL(リセット)");
1828+#endif
1829+
17301830 hWnd = WindowCtrl->GethWnd();
17311831
1832+#ifdef ENABLE_DEBUGLOG
1833+ //ログに出力
1834+ OutputLog.WriteLog(LOG_ERROR, "", "");
1835+#endif
1836+
17321837 return 2;
17331838 }
17341839
@@ -1737,6 +1842,11 @@
17371842 //! @return 成功:モデル認識番号(0以上) 失敗:-1
17381843 int D3DGraphics::LoadModel(char* filename)
17391844 {
1845+#ifdef ENABLE_DEBUGLOG
1846+ //ログに出力
1847+ OutputLog.WriteLog(LOG_LOAD, "モデル", filename);
1848+#endif
1849+
17401850 int id = -1;
17411851 FILE *fp;
17421852 char buf[256];
@@ -1966,6 +2076,11 @@
19662076 pmodel[id].VertexAry = VertexAry;
19672077 pmodel[id].ColorAry = ColorAry;
19682078 pmodel[id].TexCoordAry = TexCoordAry;
2079+
2080+#ifdef ENABLE_DEBUGLOG
2081+ //ログに出力
2082+ OutputLog.WriteLog(LOG_COMPLETE, "", id);
2083+#endif
19692084 return id;
19702085 }
19712086
@@ -1977,8 +2092,14 @@
19772092 //! @attention それぞれのモデルデータが正しくないか 頂点数が異なる場合、実行に失敗します。
19782093 int D3DGraphics::MorphingModel(int idA, int idB)
19792094 {
1980- return idA;
2095+#ifdef ENABLE_DEBUGLOG
2096+ char str[128];
2097+ sprintf(str, "中間データ作成  ID:%d and %d", idA, idB);
19812098
2099+ //ログに出力
2100+ OutputLog.WriteLog(LOG_LOAD, "モデル", str);
2101+#endif
2102+
19822103 /*
19832104 //データが正しいか調べる
19842105 if( (idA < 0)||((MAX_MODEL -1) < idA) ){ return -1; }
@@ -1999,6 +2120,13 @@
19992120
20002121 return -1;
20012122 */
2123+
2124+#ifdef ENABLE_DEBUGLOG
2125+ //ログに出力
2126+ OutputLog.WriteLog(LOG_ERROR, "", "");
2127+#endif
2128+
2129+ return idA;
20022130 }
20032131
20042132 //! @brief モデルファイルを解放
@@ -2012,6 +2140,11 @@
20122140 delete pmodel[id].ColorAry;
20132141 delete pmodel[id].TexCoordAry;
20142142 pmodel[id].useflag = false;
2143+
2144+#ifdef ENABLE_DEBUGLOG
2145+ //ログに出力
2146+ OutputLog.WriteLog(LOG_CLEANUP, "モデル", id);
2147+#endif
20152148 }
20162149
20172150 //! @brief テクスチャを読み込む
@@ -2025,6 +2158,11 @@
20252158 char filename2[MAX_PATH];
20262159 int format = 0;
20272160
2161+#ifdef ENABLE_DEBUGLOG
2162+ //ログに出力
2163+ OutputLog.WriteLog(LOG_LOAD, "テクスチャ", filename);
2164+#endif
2165+
20282166 //空いている認識番号を探す
20292167 for(int i=0; i<MAX_TEXTURE; i++){
20302168 if( ptextures[i].useflag == false ){
@@ -2114,6 +2252,11 @@
21142252 //テクスチャ無効
21152253 glDisable(GL_TEXTURE_2D);
21162254
2255+#ifdef ENABLE_DEBUGLOG
2256+ //ログに出力
2257+ OutputLog.WriteLog(LOG_COMPLETE, "", id);
2258+#endif
2259+
21172260 return id;
21182261
21192262
@@ -2554,6 +2697,11 @@
25542697 delete ptextures[id].data;
25552698 glDeleteTextures(1 , &(textureobjname[id]));
25562699 ptextures[id].useflag = false;
2700+
2701+#ifdef ENABLE_DEBUGLOG
2702+ //ログに出力
2703+ OutputLog.WriteLog(LOG_CLEANUP, "テクスチャ", id);
2704+#endif
25572705 }
25582706
25592707 //! @brief 全ての描画処理を開始
--- trunk/input.cpp (revision 90)
+++ trunk/input.cpp (revision 91)
@@ -74,6 +74,15 @@
7474 //DirectInputを開放
7575 if( pDI != NULL) pDI->Release();
7676 #endif
77+
78+#ifdef ENABLE_DEBUGLOG
79+ //ログに出力
80+ #ifdef INPUT_DIRECTINPUT
81+ OutputLog.WriteLog(LOG_CLEANUP, "入力", "DirectInput");
82+ #else
83+ OutputLog.WriteLog(LOG_CLEANUP, "入力", "WinAPI");
84+ #endif
85+#endif
7786 }
7887
7988 //! @brief 初期化
@@ -81,6 +90,15 @@
8190 //! @return 成功:0 失敗:1
8291 int InputControl::InitD3Dinput(WindowControl *WindowCtrl)
8392 {
93+#ifdef ENABLE_DEBUGLOG
94+ //ログに出力
95+ #ifdef INPUT_DIRECTINPUT
96+ OutputLog.WriteLog(LOG_INIT, "入力", "DirectInput");
97+ #else
98+ OutputLog.WriteLog(LOG_INIT, "入力", "WinAPI");
99+ #endif
100+#endif
101+
84102 //ウインドウハンドルを設定
85103 hWnd = WindowCtrl->GethWnd();
86104
@@ -109,6 +127,11 @@
109127 //カーソルを非表示
110128 ShowCursor(false);
111129
130+#ifdef ENABLE_DEBUGLOG
131+ //ログに出力
132+ OutputLog.WriteLog(LOG_COMPLETE, "", "");
133+#endif
134+
112135 return 0;
113136 }
114137
--- trunk/main.cpp (revision 90)
+++ trunk/main.cpp (revision 91)
@@ -39,6 +39,11 @@
3939 #pragma comment(lib, "Shlwapi.lib")
4040 #endif
4141
42+#ifdef ENABLE_DEBUGLOG
43+ //! ログ出力
44+ DebugLog OutputLog;
45+#endif
46+
4247 //! ステートマシン
4348 StateMachine GameState;
4449
@@ -65,6 +70,25 @@
6570 SetCurrentDirectory(path);
6671 #endif
6772
73+#ifdef ENABLE_DEBUGLOG
74+ //メモ:Windows環境なら、lpCmdLine引数とかGetCommandLine()関数でも取れますけどね・・。
75+
76+ //引数を分解
77+ for(int i=0; i<__argc; i++){
78+
79+ //"log"が与えられていたら、ログ出力を有効化
80+ if( strcmp(__argv[i], "log") == 0 ){
81+ //ファイル作成
82+ OutputLog.MakeLog();
83+
84+ MainWindow.ErrorInfo("Enable Debug Log...");
85+ }
86+ }
87+
88+ //ログに出力
89+ OutputLog.WriteLog(LOG_CHECK, "起動", "エントリーポイント開始");
90+#endif
91+
6892 //設定ファイル読み込み
6993 if( GameConfig.LoadFile("config.dat") == 1 ){
7094 MainWindow.ErrorInfo("config data open failed");
@@ -94,6 +118,11 @@
94118 InitScreen(&Opening, &MainMenu, &Briefing, &MainGame, &Result);
95119
96120
121+#ifdef ENABLE_DEBUGLOG
122+ //ログに出力
123+ OutputLog.WriteLog(LOG_CHECK, "起動", "メインループ");
124+#endif
125+
97126 unsigned int framecnt = 0;
98127
99128 for(int flag = 0; flag != -1; flag = MainWindow.CheckMainLoop()){
@@ -108,5 +137,9 @@
108137 }
109138 }
110139
140+#ifdef ENABLE_DEBUGLOG
141+ //ログに出力
142+ OutputLog.WriteLog(LOG_CHECK, "終了", "エントリーポイント終了");
143+#endif
111144 return 0;
112145 }
\ No newline at end of file