home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 December
/
VPR9712A.ISO
/
Ffilly
/
SUNDAY1
/
Sunday1.tfy
< prev
Wrap
Text File
|
1997-09-15
|
32KB
|
1,119 lines
// 汎用MIDIカラオケTOFFYシナリオ Version 4.1
// SUNDAY1.tfy
//作品情報
#info INAM "今日は素敵な日曜日"
#info GENR "music,lyric,picture"
#info VIDO "640x480 256色以上"
#info COMP "TAMUrA,GAF07007@niftyserve.or.jp"
#info LYRC "TAMUrA,GAF07007@niftyserve.or.jp"
#info GRPC "あんまん,DZD13663@niftyserve.or.jp"
#info MDFY "Ask Me"
#info TRNS "Ask Me"
#define COMMAS_S ,,,,,,
#define COMMAS ,,,,,,,,
#define MAX 128
//X position of buttons
#define PLAYBUTTON 112
#define PAUSEBUTTON 144
#define STOPBUTTON 176
#define PLUSBUTTON 264
#define MINUSBUTTON 376
#define TEMPORESETBUTTON 408
#define MESGBUTTON 448
#define ABOUTBUTTON 480
#define POSITIONWINDOW 216
#define TEMPOWINDOW1 296
#define TEMPOWINDOW2 336
int wordchg[]; //歌詞色変え情報格納用
//シナリオ本体
main(){
str midifile; //演奏するMIDI曲ファイル
int wait[]; //一行の長さを延長するための、延長分の長さ(1/8行分)
int pic[]; //表示したい画像のID
str words[]; //歌詞格納用
int wordchgmode; //0=通常, 1=滑らか
int picchg[]; //画像切り換えのタイミングであれば1、なければ0
int worddif[]; //行の横方向の位置の調整用
int framepic; //枠用画像ID
int writepic, erasepic; //歌詞表示作業用画像ID
int temppic;
int wordmax,wordcnt; //歌詞行数カウンター用
int picmax,piccnt; //画像枚数カウンター用
int ln; //文字列の長さ
int i, j, k;
int win1; //ウィンドウのID
int screen_w, screen_h; //画面サイズ取得用
int winX, winY; //ウィンドウ表示位置設定用
str title, subtitle; //題名など表示用
str artist[]; //作詩作曲者等表示用
int titlemode; //0=通常 1=影付き(タイトル)
int subtitlemode; //0=通常 1=影付き(サブタイトル)
int artistmode; //0=通常 1=影付き(タイトル)
int wordmode; //0=通常 1=影付き(歌詞)
str titlefont;
str subtitlefont;
str artistfont;
str wordfont;
int titleItalic; //イタリック体の指定
int subtitleItalic;
int artistItalic;
int wordItalic;
int titlesize;
int subtitlesize;
int titlecolor_R; //タイトルの色
int titlecolor_G;
int titlecolor_B;
int subtitlecolor_R; //サブタイトルの色
int subtitlecolor_G;
int subtitlecolor_B;
int artistcolor_R; //作者情報表示の色
int artistcolor_G;
int artistcolor_B;
int wordcolor_R; //歌詞の色
int wordcolor_G;
int chgcolor_B;
int chgcolor_R; //歌詞の色
int chgcolor_G;
int wordcolor_B;
int lineflag; //歌詞表示位置の切り換え
int wordcnt2, wordcnt3;
int x,y;
int xPos,yPos;
str msgtxt;
int BC, BFC, BTCR, BTCG, BTCB; //ボタンの色
real tempo, new_tempo, orgtempo;
real tempo_bias;
int flag;
int winmode;
int tmp;
int pic_default;
int nn;
tempo = 0.0;
orgtempo = 0.0;
tempo_bias = 1.0;
flag = 0;
//画像を読み込む
framepic=LoadPic("frame3.bmp"); //枠
pic_default=1;
pic[0]=CreatePic(framepic,600,400);
pic[1]=LoadPic("1.bmp"); //枠内に表示する画像
pic[2]=LoadPic("2.bmp"); //枠内に表示する画像
pic[3]=LoadPic("3.bmp"); //枠内に表示する画像
pic[4]=LoadPic("4.bmp"); //枠内に表示する画像
pic[5]=LoadPic("1.bmp"); //枠内に表示する画像
pic[6]=LoadPic("5.bmp"); //枠内に表示する画像
pic[7]=LoadPic("6.bmp"); //枠内に表示する画像
pic[8]=LoadPic("1.bmp"); //枠内に表示する画像
pic[9]=LoadPic("7.bmp"); //枠内に表示する画像
pic[10]=LoadPic("8.bmp"); //枠内に表示する画像
pic[11]=LoadPic("end.bmp"); //枠内に表示する画像
picmax=11;
//演奏するMIDIファイルを設定する
midifile="sunday1.mid";
//タイトルを設定する
title="今日は素敵な日曜日";
subtitle="";
artist[0]="作曲者:TAMUrA";
artist[1]="作詞者:TAMUrA";
artist[2]="作画者:あんまん";
//歌詞を設定する
words[0]="";
words[1]="";
words[2]="";
words[3]="";
words[4]="";
words[5]="ドキドキハートが揺れる今日は素敵な日曜日";
words[6]="お気に入りの白い靴をはいたら駆け出して行こう";
words[7]="キラキラ太陽の下 駅であなたを待つの";
words[8]="遠くに姿を見つけたらハンカチ振って知らせよう";
words[9]="Please hold me! あなたの瞳";
words[10]="見つめているだけで 胸を熱い風が過ぎる";
words[11]="Please hold me and take me to the harbor.";
words[12]="二人だけの時間 時間をください";
words[13]="";
words[14]="";
words[15]="";
words[16]="";
words[17]="ユラユラ光が踊る海に願いかけてみるの";
words[18]="もっと素直にこの気持ちあなたに伝えられるように";
words[19]="Please hold me! 夕日が沈む";
words[20]="二人だけのシルエット ちょっとロマンチックにキメる";
words[21]="Please hold me and take me to the sky.";
words[22]="二人だけの世界 世界をください";
words[23]="";
words[24]="";
words[25]="";
words[26]="";
words[27]="ああ 遠くを見つめないで そんな寂しい瞳で";
words[28]="ねえお願い、どんなときだっていつもそばにいて";
words[29]="Please x 2 hold me tight and take me to the star.";
words[30]="二人だけの未来 未来が欲しいの";
words[31]="Please hold me and take me to the Heaven.";
words[32]="二人だけの世界 神様お願い";
words[33]="";
words[34]="";
words[35]="";
words[36]="";
words[37]="";
wordmax=37;
//歌詞の色替えのタイミングを設定する
wordchg[651]=2;
wordchg[653]=2;
wordchg[655]=2;
wordchg[657]=2;
wordchg[662]=2;
wordchg[667]=2;
wordchg[672]=2;
wordchg[676]=2;
wordchg[678]=2;
wordchg[692]=2;
wordchg[694]=2;
wordchg[702]=2;
wordchg[704]=2;
wordchg[706]=2;
wordchg[710]=2;
wordchg[717]=2;
wordchg[724]=2;
wordchg[726]=2;
wordchg[735]=2;
wordchg[742]=2;
wordchg[743]=-1;
wordchg[772]=2;
wordchg[776]=2;
wordchg[780]=2;
wordchg[782]=2;
wordchg[787]=2;
wordchg[792]=2;
wordchg[796]=2;
wordchg[804]=2;
wordchg[808]=2;
wordchg[814]=2;
wordchg[826]=2;
wordchg[828]=2;
wordchg[830]=2;
wordchg[832]=2;
wordchg[842]=2;
wordchg[844]=2;
wordchg[846]=2;
wordchg[848]=2;
wordchg[852]=2;
wordchg[856]=2;
wordchg[860]=2;
wordchg[862]=2;
wordchg[863]=-1;
wordchg[899]=2;
wordchg[902]=2;
wordchg[904]=2;
wordchg[906]=2;
wordchg[910]=2;
wordchg[920]=2;
wordchg[926]=2;
wordchg[940]=2;
wordchg[944]=2;
wordchg[950]=2;
wordchg[954]=2;
wordchg[958]=2;
wordchg[968]=2;
wordchg[972]=2;
wordchg[974]=2;
wordchg[984]=2;
wordchg[988]=2;
wordchg[990]=2;
wordchg[991]=-1;
wordchg[1028]=2;
wordchg[1032]=2;
wordchg[1034]=2;
wordchg[1038]=2;
wordchg[1052]=2;
wordchg[1060]=2;
wordchg[1064]=2;
wordchg[1066]=2;
wordchg[1070]=2;
wordchg[1078]=2;
wordchg[1083]=2;
wordchg[1084]=2;
wordchg[1086]=2;
wordchg[1088]=2;
wordchg[1098]=2;
wordchg[1100]=2;
wordchg[1101]=2;
wordchg[1103]=2;
wordchg[1107]=2;
wordchg[1112]=2;
wordchg[1115]=2;
wordchg[1118]=2;
wordchg[1119]=-1;
wordchg[1158]=7;
wordchg[1161]=5;
wordchg[1167]=4;
wordchg[1176]=2;
wordchg[1180]=2;
wordchg[1182]=2;
wordchg[1186]=2;
wordchg[1190]=2;
wordchg[1191]=-1;
wordchg[1282]=2;
wordchg[1284]=2;
wordchg[1285]=2;
wordchg[1287]=2;
wordchg[1290]=2;
wordchg[1295]=2;
wordchg[1297]=2;
wordchg[1300]=2;
wordchg[1302]=2;
wordchg[1304]=2;
wordchg[1308]=2;
wordchg[1310]=2;
wordchg[1312]=2;
wordchg[1316]=2;
wordchg[1318]=2;
wordchg[1325]=2;
wordchg[1328]=2;
wordchg[1332]=2;
wordchg[1334]=2;
wordchg[1335]=-1;
wordchg[1421]=7;
wordchg[1425]=5;
wordchg[1431]=3;
wordchg[1436]=4;
wordchg[1440]=5;
wordchg[1444]=3;
wordchg[1448]=3;
wordchg[1452]=4;
wordchg[1457]=3;
wordchg[1461]=4;
wordchg[1462]=-1;
wordchg[1539]=2;
wordchg[1541]=2;
wordchg[1544]=2;
wordchg[1546]=2;
wordchg[1550]=2;
wordchg[1552]=2;
wordchg[1556]=2;
wordchg[1560]=2;
wordchg[1564]=2;
wordchg[1566]=2;
wordchg[1571]=2;
wordchg[1574]=2;
wordchg[1576]=2;
wordchg[1580]=2;
wordchg[1582]=2;
wordchg[1583]=-1;
wordchg[2187]=2;
wordchg[2189]=2;
wordchg[2190]=2;
wordchg[2193]=2;
wordchg[2197]=2;
wordchg[2210]=2;
wordchg[2213]=2;
wordchg[2230]=2;
wordchg[2236]=2;
wordchg[2241]=2;
wordchg[2245]=2;
wordchg[2255]=2;
wordchg[2259]=2;
wordchg[2262]=2;
wordchg[2268]=2;
wordchg[2271]=2;
wordchg[2275]=2;
wordchg[2277]=2;
wordchg[2278]=-1;
wordchg[2309]=2;
wordchg[2312]=2;
wordchg[2315]=2;
wordchg[2319]=2;
wordchg[2325]=2;
wordchg[2332]=2;
wordchg[2340]=2;
wordchg[2344]=2;
wordchg[2346]=2;
wordchg[2350]=2;
wordchg[2358]=2;
wordchg[2362]=2;
wordchg[2364]=2;
wordchg[2366]=2;
wordchg[2368]=2;
wordchg[2379]=2;
wordchg[2382]=2;
wordchg[2384]=2;
wordchg[2388]=2;
wordchg[2392]=2;
wordchg[2396]=2;
wordchg[2397]=2;
wordchg[2399]=2;
wordchg[2400]=-1;
wordchg[2436]=7;
wordchg[2440]=5;
wordchg[2446]=4;
wordchg[2455]=2;
wordchg[2462]=2;
wordchg[2466]=2;
wordchg[2469]=2;
wordchg[2475]=2;
wordchg[2476]=-1;
wordchg[2562]=2;
wordchg[2565]=2;
wordchg[2567]=2;
wordchg[2570]=2;
wordchg[2574]=2;
wordchg[2577]=2;
wordchg[2580]=2;
wordchg[2582]=7;
wordchg[2588]=6;
wordchg[2590]=2;
wordchg[2592]=2;
wordchg[2594]=2;
wordchg[2596]=2;
wordchg[2598]=4;
wordchg[2602]=2;
wordchg[2606]=2;
wordchg[2609]=2;
wordchg[2613]=2;
wordchg[2615]=2;
wordchg[2616]=-1;
wordchg[2696]=7;
wordchg[2700]=5;
wordchg[2706]=3;
wordchg[2712]=4;
wordchg[2716]=5;
wordchg[2719]=3;
wordchg[2723]=3;
wordchg[2727]=4;
wordchg[2731]=4;
wordchg[2732]=-1;
wordchg[2818]=2;
wordchg[2820]=2;
wordchg[2823]=2;
wordchg[2826]=2;
wordchg[2830]=2;
wordchg[2832]=2;
wordchg[2836]=2;
wordchg[2838]=2;
wordchg[2844]=2;
wordchg[2846]=2;
wordchg[2851]=2;
wordchg[2855]=2;
wordchg[2856]=2;
wordchg[2860]=2;
wordchg[2862]=2;
wordchg[2863]=-1;
wordchg[3464]=2;
wordchg[3468]=2;
wordchg[3471]=1;
wordchg[3479]=2;
wordchg[3482]=2;
wordchg[3484]=2;
wordchg[3488]=2;
wordchg[3492]=2;
wordchg[3494]=2;
wordchg[3504]=2;
wordchg[3508]=2;
wordchg[3510]=2;
wordchg[3513]=2;
wordchg[3532]=2;
wordchg[3536]=2;
wordchg[3539]=2;
wordchg[3542]=2;
wordchg[3547]=2;
wordchg[3549]=2;
wordchg[3552]=2;
wordchg[3558]=2;
wordchg[3559]=-1;
wordchg[3604]=2;
wordchg[3606]=2;
wordchg[3608]=2;
wordchg[3611]=2;
wordchg[3622]=4;
wordchg[3636]=2;
wordchg[3640]=2;
wordchg[3642]=2;
wordchg[3646]=2;
wordchg[3648]=2;
wordchg[3652]=2;
wordchg[3656]=2;
wordchg[3660]=2;
wordchg[3667]=2;
wordchg[3672]=2;
wordchg[3674]=2;
wordchg[3678]=2;
wordchg[3683]=2;
wordchg[3687]=2;
wordchg[3690]=2;
wordchg[3694]=2;
wordchg[3695]=-1;
wordchg[3712]=6;
wordchg[3716]=4;
wordchg[3720]=5;
wordchg[3724]=3;
wordchg[3730]=6;
wordchg[3736]=4;
wordchg[3740]=5;
wordchg[3744]=3;
wordchg[3748]=3;
wordchg[3752]=4;
wordchg[3756]=6;
wordchg[3757]=-1;
wordchg[3841]=2;
wordchg[3844]=2;
wordchg[3846]=2;
wordchg[3850]=2;
wordchg[3854]=2;
wordchg[3856]=2;
wordchg[3859]=2;
wordchg[3862]=2;
wordchg[3868]=2;
wordchg[3870]=2;
wordchg[3875]=2;
wordchg[3878]=2;
wordchg[3880]=2;
wordchg[3883]=2;
wordchg[3885]=2;
wordchg[3886]=-1;
wordchg[3972]=6;
wordchg[3976]=5;
wordchg[3982]=3;
wordchg[3988]=4;
wordchg[3992]=5;
wordchg[3996]=3;
wordchg[4000]=3;
wordchg[4004]=4;
wordchg[4008]=8;
wordchg[4009]=-1;
wordchg[4096]=2;
wordchg[4099]=2;
wordchg[4102]=2;
wordchg[4105]=2;
wordchg[4110]=2;
wordchg[4112]=2;
wordchg[4115]=2;
wordchg[4121]=2;
wordchg[4125]=2;
wordchg[4128]=2;
wordchg[4134]=2;
wordchg[4137]=2;
wordchg[4141]=2;
wordchg[4142]=-1;
//画像の切り換えのタイミングを設定する
picchg[0]=1;
picchg[1]=40;
picchg[2]=0;
picchg[3]=0;
picchg[4]=0;
picchg[5]=22;
picchg[6]=0;
picchg[7]=1;
picchg[8]=0;
picchg[9]=1;
picchg[10]=0;
picchg[11]=0;
picchg[12]=0;
picchg[13]=-40;
picchg[14]=0;
picchg[15]=0;
picchg[16]=0;
picchg[17]=22;
picchg[18]=0;
picchg[19]=1;
picchg[20]=0;
picchg[21]=0;
picchg[22]=0;
picchg[23]=-40;
picchg[24]=0;
picchg[25]=0;
picchg[26]=0;
picchg[27]=22;
picchg[28]=0;
picchg[29]=1;
picchg[30]=0;
picchg[31]=0;
picchg[32]=0;
picchg[33]=0;
picchg[34]=0;
picchg[35]=0;
picchg[36]=-12;
picchg[37]=0;
//タイミング調整の長さを設定する
wait[0]=-2;
wait[1]=0;
wait[2]=0;
wait[3]=0;
wait[4]=-1;
wait[5]=9;
wait[6]=8;
wait[7]=8;
wait[8]=7;
wait[9]=-1;
wait[10]=0;
wait[11]=0;
wait[12]=2;
wait[13]=-4;
wait[14]=4;
wait[15]=0;
wait[16]=-1;
wait[17]=9;
wait[18]=7;
wait[19]=-1;
wait[20]=0;
wait[21]=0;
wait[22]=2;
wait[23]=-4;
wait[24]=4;
wait[25]=0;
wait[26]=-1;
wait[27]=7;
wait[28]=12;
wait[29]=0;
wait[30]=1;
wait[31]=-1;
wait[32]=0;
wait[33]=-4;
wait[34]=4;
wait[35]=20;
wait[36]=0;
wait[37]=0;
//タイトル・歌詞の表示属性を設定する
titlemode=1;
subtitlemode=0;
artistmode=1;
wordmode=1;
titleItalic=1;
subtitleItalic=0;
artistItalic=1;
wordItalic=0;
titlefont="MS ゴシック";
subtitlefont="MS ゴシック";
artistfont="MS ゴシック";
wordfont="MS ゴシック";
titlecolor_R=255;
titlecolor_G=0;
titlecolor_B=255;
subtitlecolor_R=128;
subtitlecolor_G=128;
subtitlecolor_B=128;
artistcolor_R=255;
artistcolor_G=255;
artistcolor_B=0;
wordcolor_R=0;
wordcolor_G=128;
wordcolor_B=0;
chgcolor_R=0;
chgcolor_G=255;
chgcolor_B=0;
//歌詞の色替えのモードを設定する
wordchgmode=1;
msgtxt="今日が素敵な日(?)曜日になりますように!";
winmode=1;
//歌詞の表示位置の調整
for (i=0; i<=wordmax; i=i+1){
ln = StrLen(words[i]);
worddif[i] = (50 - ln) / 2 - 1;
}
//タイトルのフォントサイズの調整
ln = StrLen(title);
if (ln > 15) {
titlesize = 36;
} else {
titlesize = 48;
}
ln = StrLen(subtitle);
if (ln > 40) {
subtitlesize = 16;
} else {
subtitlesize = 24;
}
//変数の初期化
wordcnt = 0;
piccnt = 0;
//最初の画像が無指定の場合に黒一色にする処理
if (pic_default == 1){
MovePic(framepic,20,20,600,400,pic[piccnt],0,0);
}
//タイトルを書く
BackMode(1);
for (i=0; i<=picmax; i=i+1){
SetFont(titlesize,titlefont,128, 0, 0, 0, 800, titleItalic);
TextWriteX(title, pic[i], 32, 64-titlesize,titlemode,titlecolor_R,titlecolor_G,titlecolor_B,2);
SetFont(subtitlesize,subtitlefont,128, 0, 0, 0, 800, subtitleItalic);
TextWriteX(subtitle, pic[i], 80, 70,subtitlemode,subtitlecolor_R,subtitlecolor_G,subtitlecolor_B,2);
SetFont(16,artistfont,128, 0, 0, 0, 600, artistItalic);
for (j=0; j<3; j=j+1){
TextWriteX(artist[j], pic[i], 400, 16+j*18,artistmode,artistcolor_R,artistcolor_G,artistcolor_B,1);
}
}
//ウィンドウ表示の準備
screen_w= WinInfo(0);
screen_h= WinInfo(1);
winX= (screen_w-640)/2;
winY= (screen_h-480)/2;
writepic=CreatePic(pic[piccnt],600,60);
erasepic=CreatePic(pic[piccnt],600,60);
temppic=CreatePic(pic[piccnt],600,400);
MovePic(pic[piccnt],0,330,600,60,writepic,0,0);
MovePic(pic[piccnt],0,330,600,60,erasepic,0,0);
MovePic(pic[piccnt],0,0,600,400,temppic,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
SetPaintColor(0xC0C0C0);
TextColor(0,0,0);
TextWrite(RealtoStr("ラ%.2lf",tempo_bias),framepic,TEMPOWINDOW2+4,452);
TextWrite(StrPrint("%ld/%ld",wordcnt,wordmax),framepic,POSITIONWINDOW+4,452);
mes (RBDOWN){ //右クリックで終了しないようにする
}
mes (LBUP){
if (winmode == 0) {
xPos = MesP2;
yPos = MesP3;
} else {
i = GetCurPos( );
xPos = GetLowWord(i)-(screen_w-640)/2;
yPos = GetHiWord(i)-(screen_h-480)/2;
}
if (PLAYBUTTON <= xPos && xPos < PLAYBUTTON+32 && 435 <= yPos && yPos <= 465){
MCI("Play song"); //一時停止中のMIDIの演奏再開
} else if (PAUSEBUTTON <= xPos && xPos < PAUSEBUTTON+32 && 435 <= yPos && yPos <= 465){
MCI("Pause song"); //演奏中のMIDIの一時停止
} else if (PLUSBUTTON <= xPos && xPos < PLUSBUTTON+32 && 435 <= yPos && yPos <= 465){
if (flag == 0){
if (tempo_bias < 3.0){ //テンポを速くする
flag = 1;
tempo_bias = tempo_bias + 0.05;
MCI(RealtoStr("set song tempo %.0lf", orgtempo * tempo_bias)); //テンポを設定する
tempo = StrtoReal(StrMCI("status song tempo")); //テンポを調べる
DrawRect(framepic,TEMPOWINDOW1+2,452,TEMPOWINDOW1+38,464,0,0);
DrawRect(framepic,TEMPOWINDOW2+2,452,TEMPOWINDOW2+38,464,0,0);
TextColor(0,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
TextWrite(RealtoStr("%.0lf",tempo),framepic,TEMPOWINDOW1+4,452);
TextWrite(RealtoStr("ラ%.2lf",tempo_bias),framepic,TEMPOWINDOW2+4,452);
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
flag = 0;
}
}
} else if (MINUSBUTTON <= xPos && xPos < MINUSBUTTON+32 && 435 <= yPos && yPos <= 465){
if (flag == 0){
if (tempo_bias > 0.5){ //テンポを遅くする
flag = 1;
tempo_bias = tempo_bias - 0.05;
MCI(RealtoStr("set song tempo %.0lf", orgtempo * tempo_bias)); //テンポを設定する
tempo = StrtoReal(StrMCI("status song tempo")); //テンポを調べる
DrawRect(framepic,TEMPOWINDOW1+2,452,TEMPOWINDOW1+38,464,0,0);
DrawRect(framepic,TEMPOWINDOW2+2,452,TEMPOWINDOW2+38,464,0,0);
TextColor(0,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
TextWrite(RealtoStr("%.0lf",tempo),framepic,TEMPOWINDOW1+4,452);
TextWrite(RealtoStr("ラ%.2lf",tempo_bias),framepic,TEMPOWINDOW2+4,452);
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
flag = 0;
}
}
} else if (TEMPORESETBUTTON <= xPos && xPos < TEMPORESETBUTTON+32 && 435 <= yPos && yPos <= 465){
//テンポリセット
if (flag == 0){
flag = 1;
tempo_bias = 1.0;
MCI(RealtoStr("set song tempo %.0lf", orgtempo * tempo_bias)); //テンポを設定する
tempo = StrtoReal(StrMCI("status song tempo")); //テンポを調べる
DrawRect(framepic,TEMPOWINDOW1+2,452,TEMPOWINDOW1+38,464,0,0);
DrawRect(framepic,TEMPOWINDOW2+2,452,TEMPOWINDOW2+38,464,0,0);
TextColor(0,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
TextWrite(RealtoStr("%.0lf",tempo),framepic,TEMPOWINDOW1+4,452);
TextWrite(RealtoStr("ラ%.2lf",tempo_bias),framepic,TEMPOWINDOW2+4,452);
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
flag = 0;
}
} else if (MESGBUTTON <= xPos && xPos < MESGBUTTON+32 && 435 <= yPos && yPos <= 465){
//メッセージを表示
MCI("Pause song"); //演奏中のMIDIの一時停止
MsgBox(msgtxt, 0x40);
MCI("Play song"); //一時停止中のMIDIの演奏再開
} else if (STOPBUTTON <= xPos && xPos < STOPBUTTON+32 && 435 <= yPos && yPos <= 465){
ExitTitle(); //作品を終了
} else if (ABOUTBUTTON <= xPos && xPos < ABOUTBUTTON+32 && 435 <= yPos && yPos <= 465){
//バージョン表示
MCI("Pause song"); //演奏中のMIDIの一時停止
MsgBox("Made by KARAYAN Version 4.1", 0x40);
MCI("Play song"); //一時停止中のMIDIの演奏再開
}
}
//初回の歌詞を書く
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
TextWriteX(words[wordcnt],temppic,16+worddif[wordcnt]*12,330,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt+1],temppic,16+worddif[wordcnt+1]*12,360,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt],writepic,16+worddif[wordcnt]*12,0,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
TextWriteX(words[wordcnt+1],writepic,16+worddif[wordcnt+1]*12,30,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
//ウィンドウを表示する
if (picchg[0] == 0 || picchg[0] == 1){
MovePic(temppic,0,0,600,400,framepic,20,20);
}else{
MovePicX(temppic,0,0,600,400,framepic,20,20,picchg[0]);
}
if (piccnt < picmax) { //画像が無くなるまで加算する
piccnt = piccnt+1;
}
if (winmode == 0){
CapTitle(title);
win1 = OpenWin(framepic, winX, winY, 640, 480, 0, 0, 0x000000);
}else{
CapTitle("");
win1 = OpenWin(framepic, 0, 0, screen_w, screen_h, 0-winX, 0-winY, 0x000000);
}
mes(MIDI_END){ // 演奏終了処理
j=0;
mes(TIME){
j=j+1;
// 終了画面保持(2秒)
if(j>20*2){
CloseWinAll();
DelPic(framepic);
DelPic(writepic);
DelPic(erasepic);
DelPic(temppic);
for (i=0;i<=picmax;i=i+1){
DelPic(pic[i]);
}
del_all;
del_me; // for mes(TIME)
}
}
del_me; // for mes(MIDI_END)
}
//lineflag初期値設定
// 0: 最初の歌詞の段階
// 1: 1行目の歌詞を歌っている状態
// 2: 2行目の歌詞を歌っている状態
lineflag = 1;
if (words[0] != ""){
//1行目から歌詞がある場合は、lineflagを0にする
lineflag = 0;
}
// 歌詞表示実行
mes (MIDI_TIME) { step (1) {
TextChange(wordcnt,writepic,framepic,wordchgmode,lineflag, worddif[wordcnt]); //歌詞の色替え開始
//次に使うwords[]の配列番号をwordcnt2,3に入れる
if (wordcnt < wordmax){
wordcnt2 = wordcnt + 1;
}else{
wordcnt2 = wordmax;
}
if (wordcnt2 < wordmax){
wordcnt3 = wordcnt2 + 1;
}else{
wordcnt3 = wordmax;
}
//次の歌詞の表示位置設定
if (lineflag == 1){
x = 16;
y = 30;
}else if (lineflag == 2){
x = 16;
y = 0;
}
nn = wait[wordcnt];
if (nn == -1){
goto J1;
}else if (nn == -2){
goto J2;
}else if (nn == -3){
goto J3;
}else if (nn == -4){
if (lineflag != 0){
MovePic(erasepic,0,y,600,30,framepic,20,y+350,12,4);
MovePic(erasepic,0,y,600,30,writepic,0,y);
}
goto J4;
}
LP:;
COMMAS
if (nn > 0){
nn = nn - 1;
goto LP;
}
J1:;
COMMAS
J2:;
COMMAS
J3:;
//前の歌詞を消す
if (lineflag != 0){
MovePic(erasepic,0,y,600,30,framepic,20,y+350,12,4);
MovePic(erasepic,0,y,600,30,writepic,0,y);
}
COMMAS
J4:;
COMMAS
//次の歌詞を書く
// (初回は更に次の歌詞が表示されているので書き換えない)
if (lineflag != 0){
if (words[wordcnt] == "" && words[wordcnt2] != "") {
//次から歌詞が始まる場合
TextWriteX(words[wordcnt2],framepic,36+worddif[wordcnt2]*12,350,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt3],framepic,36+worddif[wordcnt3]*12,380,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt2],writepic,16+worddif[wordcnt2]*12,0,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
TextWriteX(words[wordcnt3],writepic,16+worddif[wordcnt3]*12,30,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
}else{
TextWriteX(words[wordcnt2],framepic,x+20+worddif[wordcnt2]*12,y+350,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt2],writepic,x+worddif[wordcnt2]*12,y,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
}
}
COMMAS
COMMAS_S
COMMAS_S
//次の画像切り替えの準備
if (picchg[wordcnt2] != 0) {
MovePic(pic[piccnt],0,330,600,60,writepic,0,0);
MovePic(pic[piccnt],0,330,600,60,erasepic,0,0);
MovePic(pic[piccnt],0,0,600,400,temppic,0,0);
}
,,
//歌詞の再描画
if (picchg[wordcnt2] != 0) {
if (words[wordcnt] == "" && words[wordcnt2] != "") {
//次が初回の歌詞表示の場合、次とその次の2行を新規に表示する
TextWriteX(words[wordcnt2],temppic,16+worddif[wordcnt2]*12,330,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt3],temppic,16+worddif[wordcnt3]*12,360,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt2],writepic,16+worddif[wordcnt2]*12,0,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
TextWriteX(words[wordcnt3],writepic,16+worddif[wordcnt3]*12,30,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
} else { //初回表示以外は、現在の行を残して次の行を表示する
if (lineflag == 0 || lineflag == 1) {
TextWriteX(words[wordcnt2],temppic,16+worddif[wordcnt2]*12,360,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt],temppic,16+worddif[wordcnt]*12,330,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
TextWriteX(words[wordcnt2],writepic,16+worddif[wordcnt2]*12,30,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
} else {
TextWriteX(words[wordcnt2],temppic,16+worddif[wordcnt2]*12,330,wordmode,wordcolor_R,wordcolor_G,wordcolor_B,2);
TextWriteX(words[wordcnt],temppic,16+worddif[wordcnt]*12,360,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
TextWriteX(words[wordcnt2],writepic,16+worddif[wordcnt2]*12,0,wordmode,chgcolor_R,chgcolor_G,chgcolor_B,2);
}
}
}
,
//次の歌詞の表示位置へフラグを切り換える
if (lineflag == 1){
lineflag=2;
}else if (lineflag == 2){
lineflag = 1;
}
//今回が初回の歌詞表示だった場合
if (lineflag == 0){
lineflag = 2;
}
//次が初回の歌詞表示の場合
if (words[wordcnt] == "" && words[wordcnt2] != ""){
lineflag = 0;
}
//画像を切り換える(歌詞付)
if (picchg[wordcnt2] != 0) {
if (picchg[wordcnt2] == 1){
MovePic(temppic,0,0,600,400,framepic,20,20);
}else{
MovePicX(temppic,0,0,600,400,framepic,20,20,picchg[wordcnt2]);
}
if (piccnt < picmax) { //画像が無くなるまで加算する
piccnt = piccnt+1;
}
}
//wordcntを加算する
wordcnt = wordcnt2;
DrawRect(framepic,POSITIONWINDOW+2,452,POSITIONWINDOW+38,464,0,0);
TextColor(0,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
TextWrite(StrPrint("%ld/%ld",wordcnt,wordmax),framepic,POSITIONWINDOW+4,452);
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
}}
PlayMIDI(midifile);
mes (MIDI_TIME) {
if (flag == 0){
flag = 1;
new_tempo = StrtoReal(StrMCI("status song tempo")); //テンポを調べる
if (new_tempo != tempo){ //テンポが変更されている場合
orgtempo = new_tempo; //基本のテンポを更新
if (tempo_bias != 1.0) { //基本のテンポを元にテンポを変更
MCI(RealtoStr("set song tempo %.0lf", orgtempo * tempo_bias));
}
tempo = StrtoReal(StrMCI("status song tempo")); //テンポを調べる
DrawRect(framepic,TEMPOWINDOW1+2,452,TEMPOWINDOW1+38,464,0,0);
TextColor(0,0,0);
SetFont(14,"Ariel",0, 0, 0, 0, 400);
TextWrite(RealtoStr("%.0lf",tempo),framepic,TEMPOWINDOW1+4,452);
SetFont(24,wordfont,128, 0, 0, 0, 400, wordItalic,0,0,0,0,0,1,0);
}
flag = 0;
}
}
}
//テキスト表示
TextWriteX(str word, int pic, int X, int Y, int wordmode, int R, int G, int B, int dif) {
if (wordmode == 1){
TextColor(R/2,G/2,B/2);
TextWrite(word, pic, X+dif, Y+dif);
}
TextColor(R,G,B);
TextWrite(word, pic, X, Y);
}
//歌詞一行分の色替え
TextChange(int wordcnt, int writepic, int framepic, int wordchgmode, int lineflag, int worddif){
int n;
int charcnt;
int ypos;
if (lineflag == 2) { //Y方向の表示位置の設定
ypos = 30;
} else {
ypos = 0;
}
n = 0;
charcnt = 0;
mes (MIDI_TIME) { step (1) {
if (wordchg[wordcnt*MAX+n] != 0){
if (wordchgmode == 0){ //通常の色替え
TextColorChange(writepic,framepic,charcnt*12+worddif*12+16,ypos,wordchg[wordcnt*MAX+n]);
} else { //滑らか色替え
TextColorScroll(writepic,framepic,charcnt*12+worddif*12+16,ypos,wordchg[wordcnt*MAX+n]);
}
}
charcnt = charcnt + wordchg[wordcnt*MAX+n]; //既に色を変えた文字の数を更新する
n = n + 1;
if (wordchg[wordcnt*MAX+n] == -1){ //この行の歌詞の終わり
del_me;
}
if (n == MAX){ //この行の歌詞の終わり
del_me;
}
}}
}
//歌詞の文字単位の色変え
TextColorChange(int backPic, int forePic, int XPos, int YPos, int n_char){
int charcnt;
for (charcnt=0; charcnt<n_char; charcnt=charcnt+1){
MovePic(backPic,XPos+charcnt*12,YPos,12,24,forePic,XPos+20+charcnt*12,YPos+350);
}
}
//歌詞の文字単位の滑らか色変え
TextColorScroll(int backPic, int forePic, int XPos, int YPos, int n_char){
int n_split; //文字の分割数
int w_split; //文字の分割幅
int splitcnt;
int charcnt;
if (n_char <= 2) {
n_split = 4;
w_split = 3;
} else if (n_char <= 4) {
n_split = 3;
w_split = 4;
} else {
n_split = 2;
w_split = 6;
}
charcnt = 0;
splitcnt = 0;
mes(TIME){ step(1){
MovePic(backPic,XPos+charcnt*12+splitcnt*w_split,YPos,w_split,24,forePic,XPos+charcnt*12+splitcnt*w_split+20,YPos+350);
splitcnt = splitcnt + 1;
if (splitcnt == n_split){ //1文字の表示が終わったらカウンターをリセットする
splitcnt = 0;
charcnt = charcnt + 1; //次の文字を処理するためにカウンターを上げる
}
if (charcnt == n_char){ //最後までいったらmes文を終わる
del_me;
}
} }
}
MovePicX(pic1,x1,y1,w,h,pic2,x2,y2,mode){
int time;
int i;
if (mode < 0){ //slowモード
time = 28;
mode = -mode;
} else {
time = 10;
}
if (mode == 20){ //close (H)
MovePic(pic1,x1 ,y1,w/2,h,pic2,x2 ,y2 ,6,time);
MovePic(pic1,x1+w/2,y1,w/2,h,pic2,x2+w/2,y2 ,7,time);
} else if (mode == 21){ //open (H)
MovePic(pic1,x1 ,y1,w/2,h,pic2,x2 ,y2 ,7,time);
MovePic(pic1,x1+w/2,y1,w/2,h,pic2,x2+w/2,y2 ,6,time);
} else if (mode == 22){ //close (V)
MovePic(pic1,x1, y1, w,h/2,pic2,x2 ,y2 ,4,time);
MovePic(pic1,x1, y1+h/2,w,h/2,pic2,x2 ,y2+h/2,5,time);
} else if (mode == 23){ //open (V)
MovePic(pic1,x1, y1, w,h/2,pic2,x2 ,y2 ,5,time);
MovePic(pic1,x1, y1+h/2,w,h/2,pic2,x2 ,y2+h/2,4,time);
} else if (mode == 30){ //wipe
MovePic(pic1,x1 ,y1 ,w/2,h/2,pic2,x2 ,y2 ,2,time);
MovePic(pic1,x1 ,y1+h/2,w/2,h/2,pic2,x2 ,y2+h/2,3,time);
MovePic(pic1,x1+w/2,y1 ,w/2,h/2,pic2,x2+w/2,y2 ,3,time);
MovePic(pic1,x1+w/2,y1+h/2,w/2,h/2,pic2,x2+w/2,y2+h/2,2,time);
} else if (mode == 31){ //Roll in
MovePic(pic1,x1 ,y1 ,w/2,h/2,pic2,x2 ,y2 ,4,time);
MovePic(pic1,x1 ,y1+h/2,w/2,h/2,pic2,x2 ,y2+h/2,6,time);
MovePic(pic1,x1+w/2,y1 ,w/2,h/2,pic2,x2+w/2,y2 ,7,time);
MovePic(pic1,x1+w/2,y1+h/2,w/2,h/2,pic2,x2+w/2,y2+h/2,5,time);
} else if (mode == 32){ //Roll out
MovePic(pic1,x1 ,y1 ,w/2,h/2,pic2,x2 ,y2 ,5,time);
MovePic(pic1,x1 ,y1+h/2,w/2,h/2,pic2,x2 ,y2+h/2,7,time);
MovePic(pic1,x1+w/2,y1 ,w/2,h/2,pic2,x2+w/2,y2 ,6,time);
MovePic(pic1,x1+w/2,y1+h/2,w/2,h/2,pic2,x2+w/2,y2+h/2,4,time);
} else if (mode == 33){ //Scroll in
MovePic(pic1,x1 ,y1 ,w/2,h/2,pic2,x2 ,y2 ,8,time);
MovePic(pic1,x1 ,y1+h/2,w/2,h/2,pic2,x2 ,y2+h/2,10,time);
MovePic(pic1,x1+w/2,y1 ,w/2,h/2,pic2,x2+w/2,y2 ,11,time);
MovePic(pic1,x1+w/2,y1+h/2,w/2,h/2,pic2,x2+w/2,y2+h/2,9,time);
} else if (mode == 34){ //Scroll out
MovePic(pic1,x1 ,y1 ,w/2,h/2,pic2,x2 ,y2 ,9,time);
MovePic(pic1,x1 ,y1+h/2,w/2,h/2,pic2,x2 ,y2+h/2,11,time);
MovePic(pic1,x1+w/2,y1 ,w/2,h/2,pic2,x2+w/2,y2 ,10,time);
MovePic(pic1,x1+w/2,y1+h/2,w/2,h/2,pic2,x2+w/2,y2+h/2,8,time);
} else if (mode == 40){ //Magnification
i = 10;
while(i <= 100){
MoveSPic(pic1,0,0,600,400,pic2,x2+300-i*3,y2+200-i*2,i*6,i*4);
if (mode < 0){ //slowモード
i = i + 1;
}else{
i = i + 10;
}
}
} else {
MovePic(pic1,x1,y1,600,400,pic2,x2,y2,mode,time);
}
}