home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 November / VPR9811A.BIN / FFILLY / Nov_View / Nov_View.tfy < prev    next >
Text File  |  1998-08-13  |  25KB  |  990 lines

  1. //
  2. // マルチメディア・ノベルビューアー NOV_VIEW for FILLY    Version 1.1
  3. // 
  4. // designed by TAMUrA Aug.14,1998  ☆ミ
  5. //
  6.  
  7. #info INAM "Multimedia Novel Viewer (NOV_VIEW) V1.1"
  8. #info GENR "tool"
  9. #info ICOP "TAMUrA,GAF07007@nifty.ne.jp"
  10. #info MDFY "OK"
  11. #info TRNS "OK"
  12.  
  13. int PageCnt;    //現在のページ
  14. int PageMax;    //ページ数
  15. str IniName;    //シナリオファイル
  16. str UserIniName;    //設定保存ファイル
  17. int white, yellow, blue;
  18. int pic;
  19. int base_pic;                    //画像用のピクチャー
  20. int word_pic;                    //テキスト用のピクチャー
  21. int piccast, wordcast;            //画像用キャスト、テキスト用キャスト
  22. str Font, Title;                //テキストのフォント、ウィンドウに表示されるタイトル
  23. int base_pic_x, base_pic_y;
  24. int OldPic;
  25. str flag[];                        //条件分岐用フラグ
  26. int FlagMax;                    //条件分岐用フラグの数
  27. int Startpoint;
  28. int Menuflg;
  29. //ページごと
  30. str picname[];                    //画像
  31. str MIDIfile[];                    //音楽
  32. str WAVEfile[];                    //音声
  33. int R[],G[],B[];                //テキストの色
  34. int SelectR[],SelectG[],SelectB[];//選択肢の色
  35. int nextpage[];                    //次のページ
  36. int chgmode[];                    //シーンチェンジモード
  37. //行ごと
  38. int jumptag[],jumpto[];            //選択肢の行番号、選択肢の飛び先
  39. str Text[];                        //テキスト
  40. int Transcol;    //透明色
  41. int Shadow[];    //影
  42. str Date[];
  43.  
  44. main(){
  45.  
  46.     int i, cnt;
  47.     int oldR, oldG, oldB;
  48.     str dirstr;
  49.  
  50.     IniName="novel.ini"; //シナリオの書かれたファイル:必要に応じて書き換えること
  51.     UserIniName="nov_user.ini"; //しおり保存用ファイル:必要に応じて書き換えること
  52.  
  53.     //パスをカレントディレクトリにする
  54.     dirstr=GetCWD();
  55.     if(SubStr(dirstr,StrLen(dirstr)-1,1)!="\"){
  56.         dirstr=StrPrint("%s\",dirstr);
  57.     }
  58.     UserIniName=StrPrint("%s%s",dirstr,UserIniName);
  59.     IniName=StrPrint("%s%s",dirstr,IniName);
  60.  
  61.     //初期値設定
  62.     PageCnt=1;
  63.     Startpoint=1;
  64.     Menuflg=0;
  65.     BackMode(1);
  66.     white=LoadPic("white.bmp");
  67.     yellow=LoadPic("yellow.bmp");
  68.     blue=LoadPic("blue.bmp");
  69.     word_pic=CreatePic(white);
  70.     R[1]=GetIniInt("Page1","R",0,IniName);
  71.     G[1]=GetIniInt("Page1","G",0,IniName);
  72.     B[1]=GetIniInt("Page1","B",0,IniName);
  73.     SelectR[1]=GetIniInt("Page1","SelectR",255,IniName);
  74.     SelectG[1]=GetIniInt("Page1","SelectG",255,IniName);
  75.     SelectB[1]=GetIniInt("Page1","SelectB",0,IniName);
  76.     MoveWord_pic();
  77.     FlagMax=0;
  78.  
  79.     //設定読み込み:ウィンドウのタイトル
  80.     Title=StrPrint("%s  // [SPACE]→次頁, [ESC]→メニュー",GetIniStr("Main","Title","",IniName));
  81.  
  82.     //設定読み込み:セーブの日付
  83.     Date[1]=GetIniStr("A","Date","",UserIniName);
  84.     Date[2]=GetIniStr("B","Date","",UserIniName);
  85.     Date[3]=GetIniStr("C","Date","",UserIniName);
  86.  
  87.     //設定読み込み:絵
  88.     for(i=1;GetIniStr(StrPrint("Page%ld",i),"Text1","/E",IniName)!="/E";i=i+1){
  89.         picname[i]=GetIniStr(StrPrint("Page%ld",i),"Picture","",IniName);
  90.     }
  91.     PageMax=i-1;
  92.     if(PageMax==0){
  93.         ExitTitle();
  94.     }
  95.  
  96.     //設定読み込み:音楽
  97.     for(i=1;i<=PageMax;i=i+1){
  98.         MIDIfile[i]=GetIniStr(StrPrint("Page%ld",i),"MIDI","",IniName);
  99.     }
  100.  
  101.     //設定読み込み:音声
  102.     for(i=1;i<=PageMax;i=i+1){
  103.         WAVEfile[i]=GetIniStr(StrPrint("Page%ld",i),"Wave","",IniName);
  104.     }
  105.  
  106.     //設定読み込み:シーンチェンジモード
  107.     for(i=1;i<=PageMax;i=i+1){
  108.         chgmode[i]=GetIniInt(StrPrint("Page%ld",i),"Chgmode",0,IniName);
  109.     }
  110.  
  111.     //設定読み込み:次ページ
  112.     for(i=1;i<=PageMax;i=i+1){
  113.         nextpage[i]=GetIniInt(StrPrint("Page%ld",i),"Nextpage",i+1,IniName);
  114.     }
  115.  
  116.     //設定読み込み:フォント
  117.     Font=GetIniStr("Main","Font","MS ゴシック",IniName);
  118.     SetFont(22,Font,128,0,0,0,800);
  119.  
  120.     //設定読み込み:テキストの色
  121.     oldR=0;
  122.     oldG=0;
  123.     oldB=0;
  124.     for(i=2;i<=PageMax;i=i+1){
  125.         R[i]=GetIniInt(StrPrint("Page%ld",i),"R",oldR,IniName);
  126.         G[i]=GetIniInt(StrPrint("Page%ld",i),"G",oldG,IniName);
  127.         B[i]=GetIniInt(StrPrint("Page%ld",i),"B",oldB,IniName);
  128.         oldR=R[i];
  129.         oldG=G[i];
  130.         oldB=B[i];
  131.     }
  132.     oldR=255;
  133.     oldG=255;
  134.     oldB=0;
  135.  
  136.     //影付きの指定
  137.     for(i=1;i<=PageMax;i=i+1){
  138.         Shadow[i]=GetIniInt(StrPrint("Page%ld",i),"Shadow",0,IniName);
  139.     }
  140.  
  141.     //設定読み込み:選択肢の色
  142.     for(i=1;i<=PageMax;i=i+1){
  143.         SelectR[i]=GetIniInt(StrPrint("Page%ld",i),"SelectR",oldR,IniName);
  144.         SelectG[i]=GetIniInt(StrPrint("Page%ld",i),"SelectG",oldG,IniName);
  145.         SelectB[i]=GetIniInt(StrPrint("Page%ld",i),"SelectB",oldB,IniName);
  146.         oldR=SelectR[i];
  147.         oldG=SelectG[i];
  148.         oldB=SelectB[i];
  149.     }
  150.  
  151.     //1ページ目のテキストの影
  152.     if (Shadow[1]==1){
  153.         TextColor(R[1]/2,G[1]/2,B[1]/2);
  154.         for(i=1;i<=16;i=i+1){
  155.             Text[i]=GetIniStr("Page1",StrPrint("Text%ld",i),"",IniName);
  156.             TextWrite(Text[i],word_pic,13,10+(i-1)*24);
  157.         }
  158.     }
  159.  
  160.     //1ページ目のテキスト
  161.     TextColor(R[1],G[1],B[1]);
  162.     for(i=1;i<=16;i=i+1){
  163.         Text[i]=GetIniStr("Page1",StrPrint("Text%ld",i),"",IniName);
  164.         TextWrite(Text[i],word_pic,11,8+(i-1)*24);
  165.     }
  166.  
  167.     //1ページ目の選択肢
  168.     ShowSelection();
  169.  
  170.     //1ページ目のフラグのセット
  171.     SetFlag();
  172.  
  173.     //1ページ目のbmp
  174.     if(picname[1]!=""){
  175.         pic=LoadPic(picname[1]);
  176.     }else{    //絵の指定がなかった場合
  177.         DefPicLoad(1);
  178.     }
  179.  
  180.     //ウィンドウを開く
  181.     base_pic=CreatePic(pic);
  182.     piccast=PutCast(pic,base_pic,0,0);
  183.     wordcast=PutCast(word_pic,base_pic,0,0,Transcol);
  184.     base_pic_x=PicWidth(base_pic);
  185.     base_pic_y=PicHeight(base_pic);
  186.     CapTitle(Title);
  187.     OpenWin(base_pic);
  188.  
  189.     //1ページ目の音楽
  190.     if (MIDIfile[1]!="") {
  191.         if(MIDIfile[1]=="STOP"){
  192.             MCI("stop song");
  193.         }else{
  194.             PlayMIDI(MIDIfile[1]);
  195.         }
  196.     }
  197.  
  198.     //1ページ目の音声
  199.     if (WAVEfile[1]!="") {
  200.         PlayWAVE(WAVEfile[1]);
  201.     }
  202.  
  203.     //演奏終了後、再演奏
  204.     mes(MIDI_END){
  205.         for(cnt=PageCnt;cnt>=1;cnt=cnt-1){
  206.             if (MIDIfile[cnt]!=""){
  207.                 break;
  208.             }
  209.         }
  210.         if(cnt>0){
  211.             if(MIDIfile[cnt]!="STOP"){
  212.                 PlayMIDI(MIDIfile[cnt]);
  213.             }
  214.         }
  215.     }
  216.  
  217.     mes(RBUP){
  218.     }
  219.  
  220.     //メインメニュー表示(マウス)
  221.     mes(RBDOWN){
  222.         RBMenu();
  223.     }
  224.  
  225.     //キーボードによる処理
  226.     mes(KEY_DOWN){
  227.         if(Menuflg==0){    //本文表示中→メインメニューへ移行
  228.             if(MesP2==0x1B){    //ESC
  229.                 RBMenu();
  230.             }else{
  231.                 if(jumptag[1]==0){    //選択肢分岐なしの場合
  232.                     if(MesP2==0x20){    //SPACE
  233.                         DispStory();    //ストーリー表示
  234.                     }
  235.                 }else{    //選択肢分岐
  236.                     for(i=1;i<=9;i=i+1){
  237.                         if(jumptag[i]==0){
  238.                             break;
  239.                         }
  240.                         if(MesP2==48+i){    //該当する数字が押されたら
  241.                             //飛び先が最終ページより後ろか0以下であれば作品を終了する
  242.                             if(jumpto[i]<=0 || jumpto[i]>PageMax){
  243.                                 Exit_Nov_View();
  244.                             }else{
  245.                                 PlayWAVE("slam.wav");
  246.                                 Startpoint=jumpto[i];
  247.                                 //次ページに進む場合
  248.                                 if(jumpto[i]==PageCnt+1){
  249.                                     PageCnt=jumpto[i];
  250.                                     JmpNextPage();
  251.                                 //次ページ以外に進む場合
  252.                                 }else{
  253.                                     PageCnt=jumpto[i];
  254.                                     JmpPage();
  255.                                 }
  256.                             }
  257.                             break;
  258.                         }
  259.                     }
  260.                 }
  261.             }
  262.         }else{
  263.             if(Menuflg==-1){    //メインメニュー表示中→セーブ・ロードメニューへ移行
  264.             //メインメニュー操作(キーボード)
  265.                 MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  266.                 TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  267.                 if(MesP2==0x71){    //ロード(F2)
  268.                     LoadMenu();
  269.                 }
  270.                 if(MesP2==0x72){    //セーブ(F3)
  271.                     SaveMenu();
  272.                 }
  273.                 if(MesP2==0x73){    //先頭ページ(F4)
  274.                     Mnu_GoTop();
  275.                 }
  276.                 if(MesP2==0x74){    //前のページ(F5)
  277.                     Mnu_Back();
  278.                 }
  279.                 if(MesP2==0x1B){    //戻る(ESC)
  280.                     Mnu_ExitMenu();
  281.                 }
  282.                 if(MesP2==0x77){    //終了(F8)
  283.                     Exit_Nov_View();
  284.                 }
  285.             }else{
  286.                 if(Menuflg==-2){    //セーブメニュー
  287.                     if(MesP2==0x71){    //F2
  288.                         Mnu_Save("A");
  289.                     }
  290.                     if(MesP2==0x72){    //F3
  291.                         Mnu_Save("B");
  292.                     }
  293.                     if(MesP2==0x73){    //F4
  294.                         Mnu_Save("C");
  295.                     }
  296.                     if(MesP2==0x1B){    //ESC
  297.                         RBMenu();
  298.                     }
  299.                 }else{    //ロードメニュー
  300.                     if(MesP2==0x71){    //F2
  301.                         Mnu_Load("A");
  302.                     }
  303.                     if(MesP2==0x72){    //F3
  304.                         Mnu_Load("B");
  305.                     }
  306.                     if(MesP2==0x73){    //F4
  307.                         Mnu_Load("C");
  308.                     }
  309.                     if(MesP2==0x1B){    //ESC
  310.                         RBMenu();
  311.                     }
  312.                 }
  313.             }
  314.         }
  315.     }
  316.  
  317.     mes(LBDOWN){
  318.         //メインメニュー項目色反転
  319.         if(Menuflg==-1){
  320.             TextColor(255-R[PageCnt],255-G[PageCnt],255-B[PageCnt]);
  321.             if(MesP2>=260 && MesP2<380 && MesP3>=56 && MesP3<80){    //ロード
  322.                 TextWrite("F2 :ロード",base_pic,260,56);
  323.             }
  324.             if(MesP2>=260 && MesP2<380 && MesP3>=104 && MesP3<128){    //セーブ
  325.                 TextWrite("F3 :セーブ",base_pic,260,104);
  326.             }
  327.             if(MesP2>=240 && MesP2<410 && MesP3>=152 && MesP3<176){    //先頭ページ
  328.                 TextWrite("F4 :先頭ページ",base_pic,240,152);
  329.             }
  330.             if(MesP2>=240 && MesP2<410 && MesP3>=200 && MesP3<224){    //前のページ
  331.                 TextWrite("F5 :前のページ",base_pic,240,200);
  332.             }
  333.             if(MesP2>=270 && MesP2<368 && MesP3>=248 && MesP3<272){    //戻る
  334.                 TextWrite("ESC:戻る",base_pic,270,248);
  335.             }
  336.             if(MesP2>=270 && MesP2<368 && MesP3>=296 && MesP3<320){    //終了
  337.                 TextWrite("F8 :終了",base_pic,270,296);
  338.             }
  339.         }else{    //セーブ・ロードメニュー項目色反転
  340.             if(Menuflg==-2 || Menuflg==-3){
  341.                 TextColor(255-R[PageCnt],255-G[PageCnt],255-B[PageCnt]);
  342.                 if(MesP2>=180 && MesP2<450 && MesP3>=152 && MesP3<176){
  343.                     TextWrite(StrPrint("F2:A %s",Date[1]),base_pic,180,152);
  344.                 }
  345.                 if(MesP2>=180 && MesP2<450 && MesP3>=200 && MesP3<224){
  346.                     TextWrite(StrPrint("F3:B %s",Date[2]),base_pic,180,200);
  347.                 }
  348.                 if(MesP2>=180 && MesP2<450 && MesP3>=248 && MesP3<272){
  349.                     TextWrite(StrPrint("F4:C %s",Date[3]),base_pic,180,248);
  350.                 }
  351.                 if(MesP2>=180 && MesP2<350 && MesP3>=296 && MesP3<320){
  352.                     TextWrite("ESC:キャンセル",base_pic,180,296);
  353.                 }
  354.             }
  355.         }
  356.     }
  357.  
  358.     mes(LBUP){
  359.         if(Menuflg==-1){    //メインメニュー操作(マウス)
  360.             MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  361.             TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  362.             if(MesP2>=260 && MesP2<380 && MesP3>=56 && MesP3<80){    //ロード
  363.                 LoadMenu();
  364.             }
  365.             if(MesP2>=260 && MesP2<380 && MesP3>=104 && MesP3<128){    //セーブ
  366.                 SaveMenu();
  367.             }
  368.             if(MesP2>=240 && MesP2<410 && MesP3>=152 && MesP3<176){    //先頭ページ
  369.                 Mnu_GoTop();
  370.             }
  371.             if(MesP2>=240 && MesP2<410 && MesP3>=200 && MesP3<224){    //前のページ
  372.                 Mnu_Back();
  373.             }
  374.             if(MesP2>=270 && MesP2<368 && MesP3>=248 && MesP3<272){    //メニューから抜ける
  375.                 Mnu_ExitMenu();
  376.             }
  377.             if(MesP2>=270 && MesP2<368 && MesP3>=296 && MesP3<320){    //終了
  378.                 Exit_Nov_View();
  379.             }
  380.         }else{
  381.             if(Menuflg==-2){    //セーブメニュー操作(マウス)
  382.                 MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  383.                 if(MesP2>=180 && MesP2<450 && MesP3>=152 && MesP3<176){
  384.                     Mnu_Save("A");
  385.                 }
  386.                 if(MesP2>=180 && MesP2<450 && MesP3>=200 && MesP3<224){
  387.                     Mnu_Save("B");
  388.                 }
  389.                 if(MesP2>=180 && MesP2<450 && MesP3>=248 && MesP3<272){
  390.                     Mnu_Save("C");
  391.                 }
  392.                 if(MesP2>=180 && MesP2<350 && MesP3>=296 && MesP3<320){
  393.                     RBMenu();
  394.                 }
  395.             }else{
  396.                 if(Menuflg==-3){    //ロードメニュー操作(マウス)
  397.                     MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  398.                     if(MesP2>=180 && MesP2<450 && MesP3>=152 && MesP3<176){
  399.                         Mnu_Load("A");
  400.                     }
  401.                     if(MesP2>=180 && MesP2<450 && MesP3>=200 && MesP3<224){
  402.                         Mnu_Load("B");
  403.                     }
  404.                     if(MesP2>=180 && MesP2<450 && MesP3>=248 && MesP3<272){
  405.                         Mnu_Load("C");
  406.                     }
  407.                     if(MesP2>=180 && MesP2<350 && MesP3>=296 && MesP3<320){
  408.                         RBMenu();
  409.                     }
  410.                 }else{                //ストーリー表示
  411.                     if(jumptag[1]==0){    //選択肢分岐なしの場合
  412.                         if(MesP2>=0 && MesP2<base_pic_x && MesP3>=0 && MesP3<base_pic_y){
  413.                             DispStory();
  414.                         }
  415.                     }else{ //選択肢分岐の場合
  416.                         for(i=1;i<=9;i=i+1){
  417.                             if(jumptag[i]==0){
  418.                                 break;
  419.                             }
  420.                             if(MesP2>=0 && MesP2<base_pic_x && MesP3>=(jumptag[i]-1)*24+8 && MesP3<jumptag[i]*24+8){
  421.                                 //飛び先が最終ページより後ろか0以下であれば作品を終了する
  422.                                 if(jumpto[i]<=0 || jumpto[i]>PageMax){
  423.                                     Exit_Nov_View();
  424.                                 }else{
  425.                                     PlayWAVE("slam.wav");
  426.                                     Startpoint=jumpto[i];
  427.                                     //次ページに進む場合
  428.                                     if(jumpto[i]==PageCnt+1){
  429.                                         PageCnt=jumpto[i];
  430.                                         JmpNextPage();
  431.                                     //次ページ以外に進む場合
  432.                                     }else{
  433.                                         PageCnt=jumpto[i];
  434.                                         JmpPage();
  435.                                     }
  436.                                 }
  437.                                 break;
  438.                             }
  439.                         }
  440.                     }
  441.                 }
  442.             }
  443.         }
  444.     }
  445. }
  446.  
  447. //ストーリー表示
  448. DispStory(){
  449.     str FlagName[];
  450.     int FlagDest;
  451.     str workstr;
  452.     int Dest;
  453.     int i,j,k,n;
  454.     int max;
  455.     int found;
  456.  
  457.     Dest=0;
  458.  
  459.     //フラグ分岐の場合
  460.     for(i=1;i<=9;i=i+1){
  461.         if(Dest!=0){
  462.             break;
  463.         }
  464.         workstr=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("FlagJump%ld",i),"",IniName);
  465.         if(workstr==""){
  466.             break;
  467.         }
  468.         n=StrFind(workstr,",");
  469.         if(n!=-1){    // ","がない場合は無処理
  470.             //フラグの切り出し
  471.             for(j=1;j<=9;j=j+1){
  472.                 if(n==-1){    // ","がなくなったら残りを飛び先ページにして抜ける
  473.                     FlagDest=StrtoInt(workstr);
  474.                     max=j-1;
  475.                     break;
  476.                 }
  477.                 FlagName[j]=SubStr(workstr,0,n);
  478.                 workstr=SubStr(workstr,n+1,StrLen(workstr)-n-1);
  479.                 n=StrFind(workstr,",");
  480.             }
  481.             //フラグ分岐成立判定
  482.             found=-1;
  483.             for(j=1;j<=max;j=j+1){
  484.                 for(k=1;k<=FlagMax;k=k+1){
  485.                     if(flag[k]==FlagName[j]){
  486.                         break;
  487.                     }
  488.                 }
  489.                 if(k>FlagMax){    //フラグが立っていなかった場合
  490.                     found=0;
  491.                     break;
  492.                 }
  493.             }
  494.             //フラグ分岐が成立したら、指定ページをジャンプ先とする
  495.             if(found==-1){
  496.                 Dest=FlagDest;
  497.                 Startpoint=Dest;
  498.             }
  499.         }
  500.     }
  501.  
  502.     //フラグ分岐が不成立の場合はnextpageとして指定されているページをジャンプ先とする
  503.     if(Dest==0){
  504.         Dest=nextpage[PageCnt];
  505.     }
  506.     //飛び先が最終ページより後ろか0以下であれば作品を終了する
  507.     if(Dest<=0 || Dest>PageMax){
  508.         Exit_Nov_View();
  509.     }else{
  510.         //次ページに進む場合
  511.         if(Dest==PageCnt+1){
  512.             PageCnt=Dest;
  513.             JmpNextPage();
  514.         //次ページ以外に進む場合
  515.         }else{
  516.             Startpoint=Dest;
  517.             PageCnt=Dest;
  518.             JmpPage();
  519.         }
  520.     }
  521. }
  522.  
  523.  
  524. //PageCntで指定したページを表示する
  525. JmpPage(){
  526.     int i,n;
  527.     str workstr;
  528.  
  529.     //テキスト消去
  530.     MoveWord_pic();
  531.     MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  532.  
  533.     //絵
  534.     for(i=PageCnt;i>=1;i=i-1){
  535.         if(picname[i]!=""){
  536.             break;
  537.         }
  538.     }
  539.     OldPic=pic;
  540.     if(i>0){
  541.         pic=LoadPic(picname[i]);
  542.     }else{
  543.         DefPicLoad(i);
  544.     }
  545.     if(chgmode[PageCnt]!=0){
  546.         SceneChange();
  547.     }else{
  548.         MoveCast(piccast,pic,0,0,0,640,400,0,0,0x80000000);
  549.         DelPic(OldPic);
  550.     }
  551.  
  552.     //音楽
  553.     for(i=PageCnt;i>=1;i=i-1){
  554.         if (MIDIfile[i]!=""){
  555.             break;
  556.         }
  557.     }
  558.     if(i>0){
  559.         if(MIDIfile[i]=="STOP"){
  560.             MCI("stop song");
  561.         }else{
  562.             PlayMIDI(MIDIfile[i]);
  563.         }
  564.     }
  565.  
  566.     //音声
  567.     if (WAVEfile[PageCnt]!="") {
  568.         PlayWAVE(WAVEfile[PageCnt]);
  569.     }
  570.  
  571.     //テキストの影
  572.     if (Shadow[PageCnt]==1){
  573.         TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  574.         for(i=1;i<=16;i=i+1){
  575.             Text[i]=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("Text%ld",i),"",IniName);
  576.             TextWrite(Text[i],word_pic,13,10+(i-1)*24);
  577.         }
  578.     }
  579.  
  580.     //テキスト
  581.     TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  582.     for(i=1;i<=16;i=i+1){
  583.         Text[i]=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("Text%ld",i),"",IniName);
  584.         TextWrite(Text[i],word_pic,11,8+(i-1)*24);
  585.     }
  586.  
  587.     //選択肢
  588.     ShowSelection();
  589.  
  590.     //フラグをセットする
  591.     SetFlag();
  592.  
  593.     //テキスト表示
  594.     if(chgmode[PageCnt]==0){
  595.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  596.     }
  597. }
  598.  
  599. //PageCntで指定されたシーンの表示
  600. JmpNextPage(){
  601.     int i;
  602.  
  603.     //テキスト消去
  604.     MoveWord_pic();
  605.     MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  606.  
  607.     //絵
  608.     if(picname[PageCnt]!=""){
  609.         OldPic=pic;
  610.         pic=LoadPic(picname[PageCnt]);
  611.         if(chgmode[PageCnt]!=0){
  612.             SceneChange();
  613.         }else{
  614.             MoveCast(piccast,pic,0,0,0,640,400,0,0,0x80000000);
  615.             DelPic(OldPic);
  616.         }
  617.     }
  618.  
  619.     //音楽
  620.     if(MIDIfile[PageCnt]!=""){
  621.         if(MIDIfile[PageCnt]=="STOP"){
  622.             MCI("stop song");
  623.         }else{
  624.             PlayMIDI(MIDIfile[PageCnt]);
  625.         }
  626.     }
  627.  
  628.     //音声
  629.     if (WAVEfile[PageCnt]!="") {
  630.         PlayWAVE(WAVEfile[PageCnt]);
  631.     }
  632.  
  633.     //テキストの影
  634.     if (Shadow[PageCnt]==1){
  635.         TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  636.         for(i=1;i<=16;i=i+1){
  637.             Text[i]=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("Text%ld",i),"",IniName);
  638.             TextWrite(Text[i],word_pic,13,10+(i-1)*24);
  639.         }
  640.     }
  641.  
  642.     //テキスト
  643.     TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  644.     for(i=1;i<=16;i=i+1){
  645.         Text[i]=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("Text%ld",i),"",IniName);
  646.         TextWrite(Text[i],word_pic,11,8+(i-1)*24);
  647.     }
  648.  
  649.     //選択肢
  650.     ShowSelection();
  651.  
  652.     //フラグをセットする
  653.     SetFlag();
  654.  
  655.     //テキスト表示
  656.     if(chgmode[PageCnt]==0){
  657.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  658.     }
  659. }
  660.  
  661. //選択肢表示
  662. ShowSelection(){
  663.     int i,n;
  664.     str workstr;
  665.  
  666.     TextColor(SelectR[PageCnt],SelectG[PageCnt],SelectB[PageCnt]);
  667.     for(i=1;i<=9;i=i+1){
  668.         workstr=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("Selection%ld",i),"",IniName);
  669.         if(workstr==""){
  670.             jumptag[i]=0;
  671.             jumpto[i]=0;
  672.             break;
  673.         }
  674.         n=StrFind(workstr,",");
  675.         jumptag[i]=StrtoInt(SubStr(workstr,0,n));
  676.         jumpto[i]=StrtoInt(SubStr(workstr,n+1,StrLen(workstr)-n-1));
  677.  
  678.         //テキストの影
  679.         if (Shadow[PageCnt]==1){
  680.             TextColor(SelectR[PageCnt]/2,SelectG[PageCnt]/2,SelectB[PageCnt]/2);
  681.             TextWrite(Text[jumptag[i]],word_pic,13,10+(jumptag[i]-1)*24);
  682.             TextColor(SelectR[PageCnt],SelectG[PageCnt],SelectB[PageCnt]);
  683.         }
  684.         TextWrite(Text[jumptag[i]],word_pic,11,8+(jumptag[i]-1)*24);
  685.     }
  686. }
  687.  
  688. //シーンチェンジ
  689. SceneChange(){
  690.     mes(TIME){step(20){
  691.         MovePic(pic,0,0,640,400,base_pic,0,0,chgmode[PageCnt],20);,
  692.         MoveCast(piccast,pic,0,0,0,640,400,0,0,0x80000000);,
  693.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  694.         DelPic(OldPic);
  695.         del_me;
  696.     }}
  697. }
  698.  
  699. //フラグをセットする
  700. SetFlag(){
  701.     int i,j;
  702.     str workstr;
  703.  
  704.     for(i=1;i<=9;i=i+1){
  705.         workstr=GetIniStr(StrPrint("Page%ld",PageCnt),StrPrint("SetFlag%ld",i),"",IniName);
  706.         if(workstr==""){
  707.             break;
  708.         }
  709.         //同じフラグがすでに定義されていれば追加しない
  710.         for(j=1;j<=FlagMax;j=j+1){
  711.             if(flag[j]==workstr){
  712.                 workstr="";
  713.                 break;
  714.             }
  715.         }
  716.         if(workstr!=""){
  717.             FlagMax=FlagMax+1;
  718.             flag[FlagMax]=workstr;
  719.         }
  720.     }
  721. }
  722.  
  723. //メインメニュー表示ルーチン
  724. RBMenu(){
  725.     if(Menuflg!=-1){    //メインメニューへの移行
  726.         Menuflg=-1;
  727.         PlayWAVE("slam.wav");
  728.         MoveWord_pic();
  729.         //テキストの影
  730.         if (Shadow[PageCnt]==1){
  731.             TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  732.             TextWrite("F2 :ロード",word_pic,262,58);
  733.             TextWrite("F3 :セーブ",word_pic,262,106);
  734.             TextWrite("F4 :先頭ページ",word_pic,242,154);
  735.             TextWrite("F5 :前のページ",word_pic,242,202);
  736.             TextWrite("ESC:戻る",word_pic,272,250);
  737.             TextWrite("F8 :終了",word_pic,272,298);
  738.         }
  739.         //テキスト
  740.         TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  741.         TextWrite("F2 :ロード",word_pic,260,56);
  742.         TextWrite("F3 :セーブ",word_pic,260,104);
  743.         TextWrite("F4 :先頭ページ",word_pic,240,152);
  744.         TextWrite("F5 :前のページ",word_pic,240,200);
  745.         TextWrite("ESC:戻る",word_pic,270,248);
  746.         TextWrite("F8 :終了",word_pic,270,296);
  747.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  748.     }
  749. }
  750.  
  751. //セーブメニュー表示ルーチン
  752. SaveMenu(){
  753.     if(Menuflg==-1){    //セーブメニューへの移行
  754.         Menuflg=-2;
  755.         PlayWAVE("slam.wav");
  756.         MoveWord_pic();
  757.         //テキストの影
  758.         if (Shadow[PageCnt]==1){
  759.             TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  760.             TextWrite("どこにセーブしますか?",word_pic,182,58);
  761.             TextWrite(StrPrint("F2:A %s",Date[1]),word_pic,182,154);
  762.             TextWrite(StrPrint("F3:B %s",Date[2]),word_pic,182,202);
  763.             TextWrite(StrPrint("F4:C %s",Date[3]),word_pic,182,250);
  764.             TextWrite("ESC:キャンセル",word_pic,182,298);
  765.         }
  766.         //テキスト
  767.         TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  768.         TextWrite("どこにセーブしますか?",word_pic,180,56);
  769.         TextWrite(StrPrint("F2:A %s",Date[1]),word_pic,180,152);
  770.         TextWrite(StrPrint("F3:B %s",Date[2]),word_pic,180,200);
  771.         TextWrite(StrPrint("F4:C %s",Date[3]),word_pic,180,248);
  772.         TextWrite("ESC:キャンセル",word_pic,180,296);
  773.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  774.     }
  775. }
  776.  
  777. //ロードメニュー表示ルーチン
  778. LoadMenu(){
  779.     if(Menuflg==-1){    //ロードメニューへの移行
  780.         Menuflg=-3;
  781.         PlayWAVE("slam.wav");
  782.         MoveWord_pic();
  783.         //テキストの影
  784.         if (Shadow[PageCnt]==1){
  785.             TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  786.             TextWrite("どれをロードしますか?",word_pic,182,58);
  787.             TextWrite(StrPrint("F2:A %s",Date[1]),word_pic,182,154);
  788.             TextWrite(StrPrint("F3:B %s",Date[2]),word_pic,182,202);
  789.             TextWrite(StrPrint("F4:C %s",Date[3]),word_pic,182,250);
  790.             TextWrite("ESC:キャンセル",word_pic,182,298);
  791.         }
  792.         //テキスト
  793.         TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  794.         TextWrite("どれをロードしますか?",word_pic,180,56);
  795.         TextWrite(StrPrint("F2:A %s",Date[1]),word_pic,180,152);
  796.         TextWrite(StrPrint("F3:B %s",Date[2]),word_pic,180,200);
  797.         TextWrite(StrPrint("F4:C %s",Date[3]),word_pic,180,248);
  798.         TextWrite("ESC:キャンセル",word_pic,180,296);
  799.         MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  800.     }
  801. }
  802.  
  803. //しおりの読込
  804. Mnu_Load(str SectionName){
  805.     int i;
  806.  
  807.     PlayWAVE("slam.wav");
  808.     //フラグ再設定
  809.     FlagMax=GetIniInt(SectionName,"FlagMax",0,UserIniName);
  810.     for(i=1;i<=FlagMax;i=i+1){
  811.         flag[i]=GetIniStr(SectionName,StrPrint("Flag%ld",i),"",UserIniName);
  812.         if(flag[i]==""){
  813.             break;
  814.         }
  815.     }
  816.     PageCnt=GetIniInt(SectionName,"SavePoint",1,UserIniName);
  817.     Startpoint=GetIniInt(SectionName,"StartPoint",1,UserIniName);
  818.     JmpPage();
  819.     Menuflg=0;
  820. }
  821.  
  822. //しおりの保存
  823. Mnu_Save(str SectionName){
  824.     int i;
  825.     int nn;
  826.     int yy;
  827.     int mm;
  828.     int dd;
  829.     int t;
  830.     int m;
  831.     int s;
  832.  
  833. //    PlayWAVE("slam.wav");
  834.     WriteIniInt(SectionName,"SavePoint",PageCnt,UserIniName);
  835.     WriteIniInt(SectionName,"FlagMax",FlagMax,UserIniName);
  836.     WriteIniInt(SectionName,"StartPoint",Startpoint,UserIniName);
  837.     nn=WhatDay();
  838.     yy=nn/10000;
  839.     nn=nn-yy*10000;
  840.     mm=nn/100;
  841.     dd=nn-mm*100;
  842.     nn=WhatTime();
  843.     t=nn/10000;
  844.     nn=nn-t*10000;
  845.     m=nn/100;
  846.     s=nn-m*100;
  847.     WriteIniStr(SectionName,"Date",StrPrint("%2ld/%2ld/%2ld %2ld:%2ld:%2ld",yy,mm,dd,t,m,s),UserIniName);
  848.     for(i=1;i<=FlagMax;i=i+1){
  849.         WriteIniStr(SectionName,StrPrint("Flag%ld",i),flag[i],UserIniName);
  850.     }
  851.     //設定読み込み:セーブの日付
  852.     Date[1]=GetIniStr("A","Date","",UserIniName);
  853.     Date[2]=GetIniStr("B","Date","",UserIniName);
  854.     Date[3]=GetIniStr("C","Date","",UserIniName);
  855.     RBMenu();
  856. }
  857.  
  858. //先頭ページへジャンプ
  859. Mnu_GoTop(){
  860.     if(PageCnt>1){
  861.         PlayWAVE("slam.wav");
  862.         PageCnt=1;
  863.         Startpoint=1;
  864.         FlagMax=0;
  865.         JmpPage();
  866.         Menuflg=0;
  867.     }
  868. }
  869.  
  870. //前ページへ戻る
  871. Mnu_Back(){
  872.     if(PageCnt>Startpoint){
  873.         PlayWAVE("slam.wav");
  874.         PageCnt=PageCnt-1;
  875.         JmpPage();
  876.         Menuflg=0;
  877.     }
  878. }
  879.  
  880. //メニューから抜ける
  881. Mnu_ExitMenu(){
  882.     int i;
  883.  
  884.     PlayWAVE("slam.wav");
  885.     MoveWord_pic();
  886.  
  887.     //テキストの影
  888.     if (Shadow[PageCnt]==1){
  889.         TextColor(R[PageCnt]/2,G[PageCnt]/2,B[PageCnt]/2);
  890.         for(i=1;i<=16;i=i+1){
  891.             TextWrite(Text[i],word_pic,13,10+(i-1)*24);
  892.         }
  893.     }
  894.  
  895.     //テキスト
  896.     TextColor(R[PageCnt],G[PageCnt],B[PageCnt]);
  897.     for(i=1;i<=16;i=i+1){
  898.         TextWrite(Text[i],word_pic,11,8+(i-1)*24);
  899.     }
  900.  
  901.     //選択肢の影
  902.     TextColor(SelectR[PageCnt]/2,SelectG[PageCnt]/2,SelectB[PageCnt]/2);
  903.     for(i=1;i<=9;i=i+1){
  904.         if(jumptag[i]>0){
  905.             TextWrite(Text[jumptag[i]],word_pic,13,10+(jumptag[i]-1)*24);
  906.         }else{
  907.             break;
  908.         }
  909.     }
  910.  
  911.     //選択肢
  912.     TextColor(SelectR[PageCnt],SelectG[PageCnt],SelectB[PageCnt]);
  913.     for(i=1;i<=9;i=i+1){
  914.         if(jumptag[i]>0){
  915.             TextWrite(Text[jumptag[i]],word_pic,11,8+(jumptag[i]-1)*24);
  916.         }else{
  917.             break;
  918.         }
  919.     }
  920.     MoveCast(wordcast,word_pic,0,0,0,640,400,0,0,Transcol);
  921.     Menuflg=0;
  922. }
  923.  
  924. //作品を終了
  925. Exit_Nov_View(){
  926.     PlayWAVE("slam.wav");
  927.     DelCast(piccast);
  928.     DelCast(wordcast);
  929.     DelPic(base_pic);
  930.     DelPic(word_pic);
  931.     DelPic(white);
  932.     DelPic(yellow);
  933.     DelPic(blue);
  934.     DelPic(pic);
  935.     ExitTitle();
  936. }
  937.  
  938. //絵の指定がない場合にデフォルトの画像をロード
  939. DefPicLoad(int page){
  940.  
  941.     if(R[page]>200 && G[page]>200 && B[page]>200){    //白い字の場合
  942.         if(SelectR[page]==0 && SelectG[page]==0 && SelectB[page]>190){    //青
  943.             pic=LoadPic("yellow.bmp");
  944.             Transcol=0x00FFFF;
  945.         }else{
  946.             pic=LoadPic("blue.bmp");
  947.             Transcol=0xFF0000;
  948.         }
  949.     }else{
  950.         if(SelectR[page]>200 && SelectG[page]>200 && SelectB[page]>200){    //白
  951.             if(R[page]==0 && G[page]==0 && B[page]>190){    //青
  952.                 pic=LoadPic("yellow.bmp");
  953.                 Transcol=0x00FFFF;
  954.             }else{
  955.                 pic=LoadPic("blue.bmp");
  956.                 Transcol=0xFF0000;
  957.             }
  958.         }else{
  959.             pic=LoadPic("white.bmp");
  960.             Transcol=0xFFFFFF;
  961.         }
  962.     }
  963. }
  964.  
  965. //word_picへ背景色画像コピー
  966. MoveWord_pic(){
  967.     if(R[PageCnt]>160 && G[PageCnt]>160 && B[PageCnt]>160){    //白い字の場合
  968.         if(SelectR[PageCnt]==0 && SelectG[PageCnt]==0 && SelectB[PageCnt]>190){    //青
  969.             MovePic(yellow,0,0,640,400,word_pic);
  970.             Transcol=0x00FFFF;
  971.         }else{
  972.             MovePic(blue,0,0,640,400,word_pic);
  973.             Transcol=0xFF0000;
  974.         }
  975.     }else{
  976.         if(SelectR[PageCnt]>160 && SelectG[PageCnt]>160 && SelectB[PageCnt]>160){    //白
  977.             if(R[PageCnt]==0 && G[PageCnt]==0 && B[PageCnt]>190){    //青
  978.                 MovePic(yellow,0,0,640,400,word_pic);
  979.                 Transcol=0x00FFFF;
  980.             }else{
  981.                 MovePic(blue,0,0,640,400,word_pic);
  982.                 Transcol=0xFF0000;
  983.             }
  984.         }else{
  985.             MovePic(white,0,0,640,400,word_pic);
  986.             Transcol=0xFFFFFF;
  987.         }
  988.     }
  989. }
  990.