今回は、セリフのロードについて
スクリプトで、
名前(なしの時に0)*セリフ*選択肢(なしでも可)
のように管理することにしました。
セリフの途中の@は改行として扱われます。
また、選択肢の数は@の数で管理しようと思っています。
セリフの表示について
半角に弱い状況なので直せたら、直したいかなといった感じですね
haii。
おまけ
一応、テスト結果をのせておきますので、
ひまときに見てくだふぁい!!
次は、選択肢の選択とストーリー分岐ですね。
*セリフの管理するための構造体
► スポイラーを表示
CODE:
struct Display_t{
//名前
char name[100];
//セリフ
char words[256];
//選択肢
char choice[256];
};
struct Novel_t{
//表示管理
Display_t display[10];
//時間
int time;
//文字位置
int cpos;
//行位置
int tpos;
//カーソル
int cursor;
};
*スクリプトロード
► スポイラーを表示
CODE:
//スクリプトロード
void Load( int FileHandle ){
int line,pos,env;
line=0;
pos=0;
env=0;
char words;
for(;;){
/*ファイルの終わりか*/
if( FileRead_eof(FileHandle)!=0 ){
break;
}
/*文字の取得*/
words = (char)FileRead_getc( FileHandle );
switch(env){
case 0:/*名前*/
switch(words){/*読み込みルール*/
case '*':
novel.display[line].name[pos]='\0';
env++;
pos=0;
break;
case 10:
break;
case '0':
novel.display[line].name[pos]=0;
pos++;
break;
default:/*それ以外*/
novel.display[line].name[pos]=words;
pos++;
break;
}
break;
case 1:/*セリフ*/
switch(words){/*読み込みルール*/
case '*':
env++;
pos=0;
break;
case 10:/*改行*/
break;
case 13:/*復帰*/
novel.display[line].words[pos]='\0';
line++;
pos=0;
env=0;
break;
default:/*それ以外*/
novel.display[line].words[pos]=words;
pos++;
break;
}
break;
case 2:/*選択肢*/
switch(words){/*読み込みルール*/
case 10:/*改行*/
break;
case 13:/*復帰*/
novel.display[line].choice[pos]='\0';
line++;
pos=0;
env=0;
break;
default:/*それ以外*/
novel.display[line].choice[pos]=words;
pos++;
break;
}
break;
}
}
}
*テスト例
► スポイラーを表示
CODE:
ラグナ*第六六六拘束機関解放!@次元干渉虚数方陣展開@ブレイブルー起動
ラグナ*第六六六拘束機関解放!@次元干渉虚数方陣展開@ブレイブルー起動*選択肢1@選択肢2
*セリフのみ結果
*セリフと選択肢結果