特にアーカイブを利用する処理に関してあまり理解していないためそこら辺が怪しいと思ってます。
関係あるか分かりませんがデバッグのログ(?)に「Cannot find or open the PDB file」という怪しい文が大量にみられました。
会話システム(talk.cpp)
#include "../include/GV.h"
void talk_story(){
char String[256] ;
int y,x,i=0;
y=350;
x=70;
FileRead_gets( String, 256, FP ) ;//最初に一行自動で表示
DrawFormatString(x,y,GetColor(255,255,255),"%d",String);
i=1;
y=366;
while(FileRead_gets(String,256,FP)!=NULL && stateKey[ KEY_INPUT_Z ] == 1){//現在の行数取得
i++;
if(FileRead_gets(String,256,FP)==NULL)//文字がなければ終了
i=-1;
break;
}
while(i!=-1){//文字があるかぎりループ
FileRead_gets(String,256,FP) ;//文字が一番下でキーを押したら自動的に上から一行表示
if(y==350){
ClearDrawScreen();//前の文字を消す
DrawFormatString(x,y,GetColor(255,255,255),"%d",String);
y+=16;
}
if(FileRead_getc(FP)=='/'&& y<414){//スラッシュならスルー
y+=16;
continue;
}
if(FileRead_getc(FP)=='/'&& y==414&&talk.boss==1&&talk.ch!=1){//4の倍数の行数がスラッシュなら次は上から表示させるようにしてからスルー
talk.ch=1;
talk.boss=0;
y=350;
continue;
}
if(FileRead_getc(FP)=='/'&& y==414&&talk.ch==1&&talk.boss!=1){
talk.ch=0;
talk.boss=1;
y=350;
continue;
}
if(FileRead_getc(FP)!='/'&& y==350&&talk.boss==1&&talk.ch!=1){//コメントごとにキャラの明るさを交代する
talk.boss=0;
talk.ch=1;
}
if(FileRead_getc(FP)!='/'&& y==350&&talk.ch==1&&talk.boss!=1){
talk.boss=1;
talk.ch=0;
}
if(stateKey[ KEY_INPUT_Z ] == 1){//Zが押されたらコメントを描く
DrawFormatString(x,y,GetColor(255,255,255),"%d",String);
y+=16;
}
if(i==-1)//テキストファイルに文字がなければ終了
break;
}
FileRead_close( FP ) ;//ファイルを閉じる
talk.flag=0;//会話を終了
}
void talk_main(){
talk_story();
}
void load(){
int t,FP;
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS ) ;
t=GetNowCount();
img_talk_ch[0]=LoadGraph("../dat/img/char/face0.png"); //会話中の主人公の画像
~略~
img_talk_boss[0]=LoadGraph("../dat/img/char/reimu0.png"); //会話中のボスの画像
~略~
FP=FileRead_open("../dat/csv/39章/test.txt");//テキストファイルの読み込み
~略~
}
void graph_talk(){
if(talk.flag==1){//会話が始まったら
if(talk.ch==1){//主人公が話しているなら
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );//明るくする
DrawGraph(FX-50,FMY-100,img_talk_ch[0],TRUE);//主人公の描画
}
else{//主人公が聞き手なら
SetDrawBlendMode( DX_BLENDMODE_ADD, 128 );//暗くする
DrawGraph(FX-200,FMY-100,img_talk_ch[0],TRUE);//主人公の描画
}
if(talk.boss==1){//ボス
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
DrawGraph(FMX-150,FMY-200,img_talk_boss[0],TRUE);
}
else{
SetDrawBlendMode( DX_BLENDMODE_ADD, 128 );
DrawGraph(FMX-150,FMY-100,img_talk_boss[0],TRUE);
}
SetDrawMode(DX_DRAWMODE_NEAREST);
}
}
void boss_shot_main(){
if(stage_count==talk.cnt[0]){//会話開始時間なら
talk.flag=1;//会話を始める
talk.boss=1;//ボスから話す
}
if(stage_count==boss.appear_count[0] && boss.flag==0){//ボス開始時間なら
input_phy_pos(FMX/2,FMY/2, 50);
if(talk.flag==0)//会話がちゃんと終了していれば
enter_boss(0);
~略~
}
~略~
case 100://通常処理
calc_ch(); //キャラクタ計算
ch_move(); //キャラクタの移動制御
cshot_main();//自機ショットメイン
enemy_main();//敵処理メイン
boss_shot_main();
shot_main(); //ショットメイン
out_main(); //当たり計算
effect_main();//エフェクトメイン
calc_main();//ゲームタイトル表示計算
if(talk.flag==1){
talk_main();//会話システム
}
graph_main();//描画メイン
if(boss.flag==0&&talk.flag==0)//ボスがいなくて会話中でなければステージカウントを進める
stage_count++;
break;
~略~
}
void ini(){
~略~
memset(&talk,0,sizeof(talk_t));//会話に関する構造体の初期化
~略~
boss.appear_count[0]=500;//中ボスが出現するカウント
talk.cnt[0]=498;//会話を始めるカウント
~略~
}