Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/04/18 (月)

シナリオファイルの仕様兼機能説明のサンプルシナリオ

| 21:53 | シナリオファイルの仕様兼機能説明のサンプルシナリオ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - シナリオファイルの仕様兼機能説明のサンプルシナリオ - 雪乃☆雫のなでしこ日和 シナリオファイルの仕様兼機能説明のサンプルシナリオ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 指定のファイル名で保存し、全部前のプログラムと同じフォルダに置いて実行。


・シナリオ.csv

$,自動改行,オン

!,ジャンプ,メニュー
#,---------------------------------------------------------------------
 *,メニュー
!,立ち絵オフ
!,テキストウィンドウオフ
#,--------------------------------------------------------
#, メニュー用
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|28|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,170,20
$,メッセージ速度,0
$,行,0
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,170,0,300,25
#,--------------------------------------------------------
!,背景色,$FFFFFF,0
!,背景色,$DD6666,1
 
どの説明を見る? 
 
 
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3

!,選択肢,5
 -,  テキスト表示関係,説明1
 -,  グラフィック関係,説明2
 -,  シナリオ命令一覧,説明3
 -,  シナリオ設定一覧,説明4
 -,    終了する,終了
#,---------------------------------------------------------------------

#,---------------------------------------------------------------------
 *,説明1
#,--------------------------------------------------------
#, サウンドノベル風
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,20,20
$,メッセージ速度,10
$,行,10
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,20,20,600,0
#,--------------------------------------------------------
!,背景色,$FFFFFF,1
!,テキストウィンドウオン,1
 サウンドノベル風の画面です。
 と言っても、中身はまったく一緒で、テキ
ストウィンドウのサイズや、メッセージの表
示位置を調整しているだけなので、背景はも
ちろん、立ち絵なども表示できるのですが、
とりあえず、文字の表示関係について。
/
 基本的に、普通に文章が入っている行は全
て、メッセージとして表示されます。
 して、『/』 半角スラッシュのみの行で
改ページと、どんどん沢山文章を表示したい
向きには、とっても楽ちんなんです。
/
 改行コードだけの行は、無視されるので、

1行けて表示したい時は、行頭にスペース
を入れます。
 
 こんな風に。
 
 自動では折り返さないので、自分で必要文字数に成型してください。
/
 末尾に『。』『」』『!』『?』があった
場合、改行(?)と見なし、クリック待ちに
なります。
 文中にあっても、それは普通に表示します。
$,自動改行,オフ
 これは、解除出来ます。
 文章を一気に全画面表示したり!
 止めずにどんどん流したい場合?
 解除時も、手動で改行は入れられます。
!,改行
 『。』『」』『!』『?』以外で改行した
い場合も、改行コマンドを入れて改行します。
/
$,自動改行,オン
メッセージは、
!,改行
$,メッセージ速度,150
表示速度も変えられますし、
$,メッセージ速度,10
!,改行
$,メッセージ書式,MS ゴシック|20|太字,$FFAAAA,$330000,3
色も、
!,改行
$,メッセージ書式,MS 明朝|20|太字,$FFFFFF,$000000,3
書体も、
!,改行
$,メッセージ書式,MS ゴシック|14|太字,$FFFFFF,$000000,3
 
サイズも、
!,改行
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,200,100
表示位置も、
変えられます。
/
$,メッセージ表示位置,20,20
 改行、改ページの時に出る、ピカピカ。
 あれ、なんていうんですかね?
 とりあえずブリンクカーソルって呼んでる
けど・・・カーソルなのか・・・?
 
 とりあえず、それw
!,改行
$,ブリンク表示,600,445,300
 表示位置も、
!,改行
$,ブリンク表示,600,445,100
 表示速度も変えられますが、
!,改行
 のところ大きさや形状は変えられません。
 のうち変えられるようにするかも。
/
!,ジャンプ,選択肢説明

 *,選択肢説明
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,20,20
$,メッセージ速度,10
$,行,10
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,20,20,600,0
#,--------------------------------------------------------
!,背景色,$FFFFFF,1
!,テキストウィンドウオン
 選択肢も表示出来ます。
 っていうか、メニュー画面自体が、選択肢
を使ったものでした。
 選択肢の隔を広く調整すると、メニュー
ボタンっぽくも使えます。
 サウンドノベルだと、表示してるメッセー
ジの下に選択肢がでるのが多いですかね?
!,選択肢,2
 -,先へ進む,選択肢説明2
 -,メニュー戻る,メニュー

 *,選択肢説明2
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,120
$,テキストウィンドウ表示位置,0,360
$,テキストウィンドウ半透明,0,0,640,120,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,15,15
$,メッセージ速度,10
$,行,0
$,ブリンク表示,600,445,300
$,選択肢表示位置固定,オン
$,選択肢表示,15,375,600,0
#,--------------------------------------------------------
!,テキストウィンドウオフ
!,背景色,$FFFFFF,1
!,テキストウィンドウオン
ビジュアルノベルだと、表示してるメッセー
ジをクリアして、先頭から表示するのが普通
ですよね。
!,選択肢,2
 -,先へ進む,選択肢説明3
 -,メニュー戻る,メニュー

 *,選択肢説明3
また、テキストウィンドウじゃない場所に、
選択肢を表示するパターンもあるかも?
メニュー画面もそれで作れます。
$,メッセージ書式,MS ゴシック|20|太字,$00AA77,$000000,2
$,選択肢表示,170,80,450,25

!,選択肢,4
 -,先へ進む,選択肢説明4
 -,サウンドノベル風選択肢を見る,選択肢説明
 -,ビジュアルノベル風選択肢を見る,選択肢説明2
 -,メニュー戻る,メニュー

 *,選択肢説明4
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,20,20
$,メッセージ速度,10
$,行,10
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,20,20,600,0
#,--------------------------------------------------------
!,テキストウィンドウオフ
!,背景色,$FFFFFF,1
!,テキストウィンドウオン
 という感じで選択出来るのですが、指定し
たラベルへジャンプするだけで、フラグを立
てて先の方で分岐したりという機能は、の
ところありません。
 
 あと、セーブが出来ないとか、致命的;
!,改行
 
 それも、後の課題ですが・・・
/
 サウンドノベル風って言ってるのに、音が
鳴らないし!
 BGMにMIDIを鳴らすだけは出来たん
だけど、色々不備もあっては未実装です。
/
!,テキストウィンドウオフ,1
!,待機,1
!,ジャンプ,メニュー
#,---------------------------------------------------------------------

#,---------------------------------------------------------------------
 *,説明2
#,--------------------------------------------------------
#, ビジュアルノベル風
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,120
$,テキストウィンドウ表示位置,0,360
$,テキストウィンドウ半透明,0,0,640,120,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,15,15
$,メッセージ速度,10
$,行,0
$,ブリンク表示,600,445,300
$,選択肢表示位置固定,オン
$,選択肢表示,15,375,600,0
#,--------------------------------------------------------
!,背景色,$FFFFFF,1
!,テキストウィンドウオン
はやり(?)のビジュアルノベルと言えば、
やっぱりこんな感じの画面でしょうか。
/
ここから、グラフィック関係の説明をします
が、同じフォルダに画像がないと、たちまち
エラーが出るので、ご注意です。
/
!,選択肢,2
 -,先へ進む,グラフィック関係
 -,やめる,メニュー
#,---------------------------------------------------------------------

#,---------------------------------------------------------------------
 *,グラフィック関係
まずは背景を表示します
/
!,背景,背景1.jpg,1
こんな感じ。
パラメーターがあって、簡単なものですが、
トランジョンが付けられます。
/
!,ジャンプ,背景

 *,背景
$,選択肢表示,400,40,150,15
!,選択肢,7
 -,瞬時,トランジョン0
 -,フェード,トランジョン1
 -,縦スリット,トランジョン2
 -,横スリット,トランジョン3
 -,ブラック,トランジョン4
 -,モザイク,トランジョン5
 -,次へ進む,立ち絵

 *,トランジョン0
!,背景,背景2.jpg,0
0,瞬時
/
!,背景,背景1.jpg,0
!,ジャンプ,背景

 *,トランジョン1
!,背景,背景2.jpg,1
1,フェード
/
!,背景,背景1.jpg,1
!,ジャンプ,背景

 *,トランジョン2
!,背景,背景2.jpg,2
2、縦スリット
/
!,背景,背景1.jpg,2
!,ジャンプ,背景

 *,トランジョン3
!,背景,背景2.jpg,3
3,横スリット
/
!,背景,背景1.jpg,3
!,ジャンプ,背景

 *,トランジョン4
!,背景,背景2.jpg,4
4,ブラックインアウト
!,改行
 これだけもう一つパラメーターがあって、
黒以外の色も指定出来ます。
/
!,背景,背景1.jpg,4,$FF0000
!,ジャンプ,背景

 *,トランジョン5
!,背景,背景2.jpg,5
5,モザイク
/
!,背景,背景1.jpg,5
!,ジャンプ,背景


 *,立ち絵
 立ち絵を表示します
/
!,立ち絵ロード,立ち絵.bmp
!,立ち絵オン,1
背景は、ファイルを指定して直接表示しまし
たが、立ち絵とテキストウィンドウは、まず
ロードして、オンオフを設定します。
/
!,立ち絵オフ,3
オフにすると、いなくなったり・・・
/
!,立ち絵オン,1,50
半透明に表示することも出来ますよ。
サウンドノベルや、幽霊なんかに使えます。
/
のところ、サイズ固定で、一枚づつ表示す
るかたちで、立ち位置を変えたり、動かした
りは、できません。
/
テキストウィンドウも変えられます。
は画像を使わず、色とサイズを指定して、
半透明コピーしているだけですが・・・
/
#,--------------------------------------------------------
#, ビジュアルノベル風(テキストウィンドウ.bmp)
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,120
$,テキストウィンドウ表示位置,0,360
$,テキストウィンドウ半透明,15,13,608,95,60
$,テキストウィンドウ透過色,$00FF00
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,18,18
$,メッセージ速度,10
$,行,0
$,ブリンク表示,590,438,300
$,選択肢表示位置固定,オン
$,選択肢表示,20,380,600,0
#,--------------------------------------------------------
!,テキストウィンドウロード,テキストウィンドウ.bmp
!,テキストウィンドウオン,1
このように、任意の画像を表示出来ます。
X,Y,W,Hで指定した範囲を半透明に、
それ以外を透過付きにできます。
/
だいぶ、ゲーム画面っぽくなりましたね!
/
・・・ぽくなっただけですけれどねぇ~;
/
うるさ~い!
/
!,振動
バキッ!
!,振動
ドカッ!!
!,振動
ゲシッ!!!
/
!,立ち絵オフ
ぴう~(飛んでった)
/
このように画面を揺らすことも出来ます。
/
!,立ち絵オン,3,50
ひ、ひどい・・・
/
あと、右クリックでテキストウィンドウが
隠せます。(選択肢表示中は不可です)
左右のクリックで復帰します。
/
!,立ち絵オフ
!,テキストウィンドウオフ
!,背景色,$000000,1
!,待機,1
!,ジャンプ,メニュー
#,---------------------------------------------------------------------


#,---------------------------------------------------------------------
 *,説明3
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,0
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|14|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,20,20
$,メッセージ速度,0
$,行,10
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,20,20,600,0
$,自動改行,オフ
#,--------------------------------------------------------
!,背景色,$333377
!,テキストウィンドウオン
 このシナリオは、二次元配列を利用した『,』半角カンマ区
切りのcsvファイルです。
 エクセルとかで作って、csv出力した方が、書きやすいか
も知れないですが、むろんテキストエディタで書いても、拡張
子が『*.txt』であっても、問題ありません。
 ・・・が、本文中に半角カンマは絶対に使えません。
 どんな括弧で括ろうとも使えませんw
 必要の際は、全角カンマでごまかしてください;
 
 ちなみに、当然タブ区切りのテキストでも動作するようだし、
他にも何かあるかも知れないけど、そういうわけで本文はなる
べく全角で統一するのを推奨です。
/
 ・・・というわけで、ここではコマンドは全て、全角にして
表記しますが、実際は全部半角ですのでよろしくお願いします。
 
 テキスト関連の所でも述べましたが、二次元配列の0の桁に、
コマンドに指定されていない普通の文字列が入っていた場合は
全て、メッセージテキストと認識されます。
 画面の設定を変えずに、どんどん物語をすすめていくなら、
普通のテキストを必要文字数に成型し、必要行数で改ペー
ジしていけばいいのです。(『/』半角スラッシュ)
 なでしこで作ってるんだから、このくらい楽じゃなかったら
意味ないよ!
 でも、自動で折り返したり、改ページまではしませんので、
それはよろしくお願いします。
/
・改ページ
『/』または『!,改ページ』
 ぴかぴかを出して、クリック待ち。
 クリック後は、テキストウィンドウをクリアし、メッセージ
表示位置を先頭に戻す。
 
・改行
『!,改行』
 ぴかぴかを出して、クリック待ち。
 
・クリック待ち
『!,クリック待ち』
 ぴかぴかを出さずに、クリック待ち。
/
・待機待機,秒』
  (秒{数値=0})
 たとえ秒数が正確でなくても、気にしないで!
 
・コメント
『#,-----コメント行--------------』
 
・終了
『END,背景色』
  (背景色{数値=$000000})
 背景色にフェードアウト後、終了。
/
●シナリオ制御関連
 
・選択肢
『!,選択肢,選択肢数』
『-,選択肢表示文字列1,ラベル文字列1』
『-,選択肢表示文字列2,ラベル文字列2』
  (選択肢数{数値=3})
  (選択肢表示文字列ラベル文字列)
 
 『-』の行が実際の選択肢になります。
 選択肢と選択肢表示文字列は、必ずくっつけて書くこと。
白行が入ったら駄目。
 ラベル文字列に指定したラベルないとエラーになります。
/
・ジャンプ
『!,ジャンプ,ラベル文字列』
  (ラベル文字列)
 指定したラベルに飛ぶ。
 ラベル文字列に指定したラベルないとエラーになります。
 
『*,ラベル文字列』
 『*』の行はラベル。
 ラベル文字列は重複しないよう、要注意のこと。
 選択肢もジャンプも経ずにラベルに到達すると、「おわり」
と言って終了します。
/
●グラフィック関連
 
・背景の変更
『!,背景,背景画像ファイル名,トランジョン番号(0-5)
,トランジョン4の色』
  (背景画像ファイル名)
  (トランジョン番号{数値=0})
  (トランジョン4の色{数値=$000000})
『!,背景色,背景色,トランジョン番号(0-5),トラン
ジョン4の色』
  (背景色{数値=$000000})
  (トランジョン番号{数値=0})
  (トランジョン4の色{数値=$000000})
/
・立ち絵ロード
『!,立ち絵ロード,立ち絵画像ファイル名,透過色』
  (立ち絵画像ファイル名)
  (透過色{数値=$00FF00})
 
・立ち絵オンオフ
『!,立ち絵オン,トランジョン番号(0-3),透明度』
  (トランジョン番号{数値=0})
  (透明度{数値=100})
 
『!,立ち絵オフ,トランジョン番号(0-3)』
  (トランジョン番号{数値=0})
/
・テキストウィンドウロード
『!,テキストウィンドウロード,テキストウィンドウ画像フ
ァイル名,透過色』
  (テキストウィンドウ画像ファイル名)
  (透過色{数値=$00FF00})
 
・テキストウィンドウ オンオフ
『!,テキストウィンドウオン,トランジョン番号(0-3)』
  (トランジョン番号{数値=0})
 
『!,テキストウィンドウオフ,トランジョン番号(0-3)』
  (トランジョン番号{数値=0})
/
※トランジョン番号
 0、瞬時
 1、フェードイン
 2、縦スリット
 3、横スリット
 4、ブラックアウトイン(色{数値=$000000})
 5、モザイクアウトイン
 
 
・画面を揺らす
『!,振動』
 ちょっと画面を揺らした風に見せかける処理です。
/
!,テキストウィンドウオフ
!,背景色,$000000,1
!,ジャンプ,メニュー
#,---------------------------------------------------------------------

#,---------------------------------------------------------------------
 *,説明4
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,480
$,テキストウィンドウ表示位置,0,0
$,テキストウィンドウ半透明,0,0,640,480,0
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|14|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,20,20
$,メッセージ速度,0
$,行,10
$,ブリンク表示,295,440,300
$,選択肢表示位置固定,オフ
$,選択肢表示,20,20,600,0
#,--------------------------------------------------------
!,背景色,$333377
!,テキストウィンドウオン
●設定関連
 
・ウィンドウタイトルの変更
『$,キャプション,母艦のタイトル』
  (母艦のタイトル{文字列=なこノベル}
 
・自動改行
『$,自動改行,自動改行オンorオフ)』
  (自動改行数値オン})
 文末の『。』『」』『?』『!』で、改行処理を行うかどう
かを指定。
/
・メッセージの設定
 
『$,メッセージ書式,書体,文字色,影色,影距離』
  (書体{フォント|サイズ|スタイル=MS ゴシック|
20|太字})
  (文字色数値=$FFFFFF})
  (影色{数値=$000000})
  (影距離{数値=2}) ※大きいほど影が離れます。
/
『$,メッセージ表示位置,X,Y』
  (X,Y{数値=20,20})
 画面全体ではなく、テキストウィンドウ上のX,Yを指定し
ます。
 
『$,メッセージ速度,速度』
  (速度{数値=10}) ※0で瞬時。小さいほど早い。
 
『$,行,行』
  (行数値=0})
/
・選択肢の設定
 
『$,選択肢表示位置固定,選択肢表示位置固定(オンorオ
フ)』
  (選択肢表示位置固定{数値オン})
 オフにすると、表示しているメッセージの下に続けて表示。
 オンならメッセージを消し、選択肢表示Xと選択肢表示Yで
指定された位置に表示
/
『$,選択肢表示,X,Y,幅,隔』
  (X,Y{数値=20,20})
  (幅{数値=520})
  (隔{数値=0})
 選択肢の位置は、テキストウィンドウ上ではなく、画面全体
のX,Yを指定します。
 選択肢表示位置固定がオフの場合、選択肢表示Yの値は無視。
選択肢表示Xの値は有効です。
 初期値は,メッセージ表示位置と一緒。
/
・ぴかぴかの設定
 
『$,ブリンク表示,X,Y,速度』
  (X,Y{数値=*,*})
  (速度{数値=300}) ※小さいほど早い。
 画面全体ではなく、テキストウィンドウ上のX,Yを指定し
ます。
 初期値はテキストウィンドウの中央下部。
/
・テキストウィンドウの設定
 
『$,テキストウィンドウサイズ,幅,高さ』
  (幅,高さ{数値=640,480})
 
『$,テキストウィンドウ表示位置,X,Y』
  (X,Y{数値=0,0})
 初期値は、画面全体
/
『$,テキストウィンドウ半透明,X,Y,W,H,透明度』
  (X,Y,W,H{数値=0,0,640,480})
  (透明度{数値=50})
 テキストウィンドウの半透明にする部分の矩形。
 この範囲内に透過色があっても無視されます。
 初期値はテキストウィンドウ全体。
 
『$,テキストウィンドウ透過色,透過色』
  (透過色{数値=$00FF00})
 半透明にしないテキストウィンドウの枠に、透過したい部分
があった場合の透過色。
 テキストウィンドウロード時に個別にも指定出来ます。
/
『$,テキストウィンドウ色,テキストウィンドウ色』
  (テキストウィンドウ色数値=$000077})
 テキストウィンドウに画像を使わない場合の色。
 
 
・立ち絵の設定
『$,立ち絵透過色,透過色』
  (透過色{数値=$00FF00})
 全立ち絵の透過色を変えたい場合に使います。
 一枚だけという場合は、立ち絵ロード時に個別に設定出来ま
す。
/
!,テキストウィンドウオフ
!,背景色,$000000,1
!,ジャンプ,メニュー
#,---------------------------------------------------------------------
 *,終了
END

・背景1.jpg

f:id:snowdrops89:20160418214617j:image

・背景2.jpg

f:id:snowdrops89:20160418214616j:image

・立ち絵.bmp

f:id:snowdrops89:20160418214615j:image

・テキストウィンドウ.bmp

f:id:snowdrops89:20160418214614j:image

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160418

2016/04/10 (日)

とりあえず、半分くらいは完成?!

| 22:43 | とりあえず、半分くらいは完成?! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - とりあえず、半分くらいは完成?! - 雪乃☆雫のなでしこ日和 とりあえず、半分くらいは完成?! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 選択肢の怪現象が解消され、おかげさまで原因もなんとなく分かって、本当の意味でナゾ解明と言えそう

 やはり、キー表示のナゾと、問題の根源は同じだったらしく思われます。


 ・・・とゆうわけで、やっぱり、念のため、シナリオから読んだ数値は全部、整数変換を付けとくことにした;

 まだまだほかにも、絶対必要なセーブとロードの機能や、BGM(MIDIを鳴らすところまでは学んだけど、よく考えたらシナリオにBGMやSEの機能を盛り込んでなかった(^^;)、フルスクリーン表示など、やるべきことはいろいろ残っているけれど、それはまたぼちぼち学びながら作っていくこととして、とりあえず、いま出来ているところまでは、希望どうりに動くようになったように思うので、現状をUPしておくことにする。

 なんでかってゆうと、ちょっと飽きてきた(爆)のと、ちょっとひらめいて、別のモノを作ってみたくなったからですw


のところ出来ること》

 ・ウエイトをかけた影付文字での文章の表示。(フォントスタイルは自由に設定可)

 ・背景の表示と変更。(しょぼいトランジョンあり)

 ・マスクで透過した立ち絵の表示。(半透明にもできます)

 ・テキストウィンドウのサイズは自由に変更でき、サウンドノベル風にも、ビジュアルノベル風にも設定可能です。

 ・テキストウィンドウの画像は、指定した矩形を半透明に、それ以外の枠部分を、マスクの透過付きで表示出来ます。(こだわりです!)

 ・右クリックでテキストウィンドウを隠す。

 ・ちょっと画面を揺らす的な機能あり。(ぶつかったとか殴られたとか)

 ・選択肢によるシナリオ分岐。(選択肢の表示位置も自由に変えられます)

#-----------------------------------------------------------------------
# なこノベル(半分くらい完成版w)
#-----------------------------------------------------------------------
!母艦設計=「母艦の可視はオフ」

#-----基本設計----------------------------------------------------------

# シナリオファイル
シナリオファイルとは文字列。シナリオファイル=「シナリオ.csv」

# 自動改行
自動改行とは整数。自動改行オン

# 背景の大きさはゲーム画面の大きさ。母艦のクライアントの大きさでもある。
背景幅とは整数。背景幅=640
背景高さとは整数。背景高さ=480
背景色とは整数。背景色=$000000    #背景画像がない場合

# 立ち絵の大きさ。は一枚表示のみ。
立ち絵幅とは整数。立ち絵幅=背景幅
立ち絵高さとは整数。立ち絵高さ=背景高さ
元立ち絵透過色とは整数。元立ち絵透過色=$00FF00
立ち絵透過色とは整数。立ち絵透過色=元立ち絵透過色

# 立ち絵表示位置
立ち絵Xとは整数。立ち絵X=背景幅-立ち絵幅
立ち絵Yとは整数。立ち絵Y=背景高さ-立ち絵高さ

# テキストウィンドウの大きさ(画像の大きさ)
テキストウィンドウ幅とは整数。テキストウィンドウ幅=640
テキストウィンドウ高さとは整数。テキストウィンドウ高さ=480
テキストウィンドウ色とは整数。テキストウィンドウ色=$000077    #画像がなかった場合

# テキストウィンドウ表示位置
テキストウィンドウXとは整数。テキストウィンドウX=背景幅-テキストウィンドウ幅
テキストウィンドウYとは整数。テキストウィンドウY=背景高さ-テキストウィンドウ高さ

# テキストウィンドウ内部の透過する矩形(テキストウィンドウ画像上のX,Yで指定)
TW透過Xとは整数。TW透過X=0
TW透過Yとは整数。TW透過Y=0
TW透過Wとは整数。TW透過W=テキストウィンドウ幅
TW透過Hとは整数。TW透過H=テキストウィンドウ高さ
TW透明度とは整数。TW透明度=50
元TW透過色とは整数。元TW透過色=$00FF00
TW透過色とは整数。TW透過色=元TW透過色

# メッセージ表示位置(テキストウィンドウ上のX,Yを指定)
メッセージXとは整数。メッセージX=20
メッセージYとは整数。メッセージY=20

# 文字書体
メッセージ書体とは文字列。メッセージ書体=「MS ゴシック|20|太字」。文字書体はメッセージ書体。
メッセージ色とは整数。メッセージ色=$FFFFFF
メッセージ影色とは整数。メッセージ影色=$000000
メッセージ影とは整数。メッセージ影=2      #大きいほど影が離れる(現状では0-3くらいが妥当か)
メッセージ速度とは整数。メッセージ速度=10    #0で瞬時。小さいほど早い
行とは整数。行=0

# 選択肢
選択肢数とは整数。選択肢数=3
選択肢表示Xとは整数。選択肢表示X=テキストウィンドウX+メッセージX
選択肢表示Yとは整数。選択肢表示Y=テキストウィンドウY+メッセージY
選択肢幅とは整数。選択肢幅=テキストウィンドウ幅-選択肢表示X-100
選択肢隔とは整数。選択肢隔=0
選択肢表示位置固定とは整数。選択肢表示位置固定=オン  #オフにすると表示しているメッセージの下に続けて表示。(選択肢表示Xは指定できます)
                            #オンならメッセージを消し、選択肢表示Xと選択肢表示Yで指定された位置に表示
# ブリンク
ブリンク幅とは整数。ブリンク幅=「▼」の文字幅取得+メッセージ影
ブリンク高さとは整数。ブリンク高さ=「▼」の文字高さ取得+メッセージ影
ブリンク透過色とは整数。ブリンク透過色=$000001
ブリンク表示Xとは整数。ブリンク表示X=(テキストウィンドウX+テキストウィンドウ幅/2-ブリンク幅/2)
ブリンク表示Yとは整数。ブリンク表示Y=(テキストウィンドウY+テキストウィンドウ高さ)-40。
ブリンク速度とは整数。ブリンク速度=300
#-----------------------------------------------------------------------

#-----母艦設計----------------------------------------------------------
母艦のタイトルは「なこノベル」
母艦を$000000で画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦のクライアント幅は背景幅。母艦のクライアント高さは背景高さ。
母艦中央移動
母艦の可視はオン。
#-----------------------------------------------------------------------

#-----宣言--------------------------------------------------------------
改ページ待機とは整数オフ。
選択肢待機とは整数オフ。
メッセージ行数とは整数=0。
ラベル一覧とは配列ラベルとは文字列ラベル文字列とは文字列。
色指定とは整数改行文字列とは文字列改行文字列改行確認とは整数改行確認はオフ。
立ち絵透明度とは整数。立ち絵透明度=0
テキストウィンドウ隠すとは整数。テキストウィンドウ隠す=オフ。
#-----------------------------------------------------------------------

#-----裏画面作成--------------------------------------------------------
裏画面とはイメージの可視はオフ。
裏画面の幅は背景幅。裏画面の高さは背景高さ。

裏_背景とはイメージの可視はオフ。
裏_背景の幅は背景幅。裏_背景の高さは背景高さ。
裏_背景を背景色で画面クリア。

裏_立ち絵とはイメージの可視はオフ。
裏_立ち絵の幅は立ち絵幅。裏_立ち絵の高さは立ち絵高さ。
裏_立ち絵を立ち絵透過色で画面クリア。    #立ち絵をロードせずにオンしても透明になるように
立ち絵表示とは整数オフ。

裏_テキストウィンドウとはイメージの可視はオフ。
裏_テキストウィンドウの幅はテキストウィンドウ幅。裏_テキストウィンドウの高さはテキストウィンドウ高さ。
裏_テキストウィンドウをテキストウィンドウ色画面クリア。    #画像無しの場合のベタウィンドウ
テキストウィンドウ表示とは整数オフ。
#-----------------------------------------------------------------------

#-----ブリンクカーソル--------------------------------------------------
ブリンク画像とはイメージの可視はオフ。
ブリンク画像の幅はブリンク幅*2。ブリンク画像の高さはブリンク高さ。

# カーソルを描く
ブリンク画像をブリンク透過色で画面クリア文字色黒色。ブリンク画像のメッセージ影,メッセージ影へ「▼」を文字描画文字色白色。ブリンク画像の0,0へ「▼」を文字描画アニメ処理用とはイメージの可視はオフ
アニメ処理用の幅はブリンク幅。アニメ処理用の高さはブリンク高さ。

セル1とはイメージの可視はオフ。
セル1の幅はブリンク幅。セル1の高さはブリンク高さ。

セル2とはイメージの可視はオフ。
セル2の幅はブリンク幅。セル2の高さはブリンク高さ。

ブリンクとはアニメ。
#-----------------------------------------------------------------------


#-----の他処理用の裏画面----------------------------------------------
保持用とはイメージの可視はオフ。
保持用の幅は母艦のクライアント幅。保持用の高さは母艦のクライアント高さ。
保持用を背景色で画面クリア。

トランジョン用とはイメージの可視はオフ。
トランジョン用の幅は母艦のクライアント幅。トランジョン用の高さは母艦のクライアント高さ。

選択肢用とはイメージの可視はオフ。
選択肢ボタンとは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ

テキスト保存用とはイメージの可視はオフ。
テキスト保存用の幅はテキストウィンドウ幅。テキスト保存用の高さはテキストウィンドウ高さ。
#-----------------------------------------------------------------------

#-----表画面------------------------------------------------------------
表画面とはイメージの可視はオン。
表画面の幅は母艦のクライアント幅。表画面の高さは母艦のクライアント高さ。
表画面のXは0。表画面のYは0。
表画面を背景色で画面クリア。

表画面のマウス移動した時は~
  もし、選択待機オンならば
    選択肢用の選択肢ボタンを表画面へ選択肢数でマウスインアウト反映。
  
表画面のマウス押した時は~
  もし、改ページ待機オンならば
    もし、表画面の押されたボタン=右ならば
      もし、テキストウィンドウ隠す=オフならば
        テキストウィンドウ隠す=オン
        テキストウィンドウ表示オフ
        ADV画面合成
        ブリンクを停止
        描画処理反映
      違えば
        テキストウィンドウ復帰
  
    違えばもし、表画面の押されたボタン=左ならば
      もし、テキストウィンドウ隠す=オンならば
        テキストウィンドウ復帰
        
      違えば
        もし、コマンドが「改ページ」ならば
          テキストウィンドウクリア。
           ブリンクを停止。
           シナリオ解析
        違えばもし、コマンドが「改行ならば
           ブリンクを停止。
           シナリオ解析
        違えばもし、コマンドが「クリック待ち」ならば
          シナリオ解析
        違えば
          戻る
    違えば
       戻る
      
  違えばもし、選択待機オンならば
    もし、表画面の押されたボタン=左ならば
      もし、前選択ボタン=0でなければ
        選択肢ボタン
        ラベルは「*」
         ラベル文字列ラベル一覧¥(前選択ボタン-1)
        シナリオの0でラベルを0から表検索。
        ジャンプ先はそれ。
        ラベル検索ジャンプ
      違えば
        戻る
    違えば
      戻る
  違えば
    戻る
#-----------------------------------------------------------------------

#-----シナリオ開く-------------------------------------------
シナリオファイルを開く。
シナリオはそれ
シナリオ行数はシナリオの要素数。
新規シナリオとは整数。新規シナリオ=オン
シナリオ解析
#------------------------------------------------------------

#------------------------------------------------------------
*シナリオ解析
  改ページ待機オフ。
  もし、新規シナリオ=オンならば
    行番号=0
    新規シナリオ=オフ
  違えば    
    行番号=行番号+1

  コマンドはシナリオ¥行番号,0
  もし、行番号>シナリオ行数ならば
    「おわり」と言う。
    終了。
  違えば、
    もし、コマンドがならば   
      シナリオ解析
      
    違えばもし、コマンドが「#」ならば      #コメント行
      シナリオ解析

    違えばもし、コマンドが「*」ならば      #ラベル
      「おわり」と言う。
      終了。

    違えばもし、コマンドが「/」ならば      #改ページ
      コマンドは「改ページ」
      改ページ処理。
    
    違えばもし、コマンドが「END」ならば    #終了処理
      背景色=シナリオ¥行番号,1
      裏_背景を背景色で画面クリア。
      エフェクトナンバー=1
      立ち絵表示オフ
      テキストウィンドウ表示オフ
      ADV画面合成
      終了
       
    #------------------------------------------------------------
    # 設定
    #------------------------------------------------------------
    違えばもし、コマンドが「$」ならば      #設定
      コマンドはシナリオ¥行番号,1
      
      もし、コマンドが「キャプション」ならば
        もし、シナリオ¥行番号,2=でなければ母艦のタイトルはシナリオ¥行番号,2
        シナリオ解析
      
      違えばもし、コマンドが「テキストウィンドウサイズ」ならば
        もし、シナリオ¥行番号,2=でなければテキストウィンドウ幅=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければテキストウィンドウ高さ=(シナリオ¥行番号,3)を整数変換
        裏_テキストウィンドウの幅はテキストウィンドウ幅。裏_テキストウィンドウの高さはテキストウィンドウ高さ。
        シナリオ解析

      違えばもし、コマンドが「テキストウィンドウ表示位置」ならば
        もし、シナリオ¥行番号,2=でなければテキストウィンドウX=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければテキストウィンドウY=(シナリオ¥行番号,3)を整数変換
        シナリオ解析

      違えばもし、コマンドが「テキストウィンドウ半透明」ならば
        もし、シナリオ¥行番号,2=でなければTW透過X=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければTW透過Y=(シナリオ¥行番号,3)を整数変換
        もし、シナリオ¥行番号,4=でなければTW透過W=(シナリオ¥行番号,4)を整数変換
        もし、シナリオ¥行番号,5=でなければTW透過H=(シナリオ¥行番号,5)を整数変換
        もし、シナリオ¥行番号,6=でなければTW透明度=(シナリオ¥行番号,6)を整数変換
        シナリオ解析

      違えばもし、コマンドが「テキストウィンドウ色ならば
        もし、シナリオ¥行番号,2=でなければテキストウィンドウ色=シナリオ¥行番号,2
        裏_テキストウィンドウをテキストウィンドウ色画面クリア
        シナリオ解析
              
      違えばもし、コマンドが「メッセージ表示位置」ならば
        もし、シナリオ¥行番号,2=でなければメッセージX=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければメッセージY=(シナリオ¥行番号,3)を整数変換
        シナリオ解析          

      違えばもし、コマンドが「メッセージ速度」ならば
        もし、シナリオ¥行番号,2=でなければメッセージ速度=(シナリオ¥行番号,2)を整数変換
        シナリオ解析
        
      違えばもし、コマンドが「メッセージ書式」ならば
        もし、シナリオ¥行番号,2=でなければメッセージ書体=シナリオ¥行番号,2
        もし、シナリオ¥行番号,3=でなければメッセージ色=シナリオ¥行番号,3
        もし、シナリオ¥行番号,4=でなければメッセージ影色=シナリオ¥行番号,4
        もし、シナリオ¥行番号,5=でなければメッセージ影=シナリオ¥行番号,5
        文字書体はメッセージ書体。
        シナリオ解析

      違えばもし、コマンドが「行ならば
        もし、シナリオ¥行番号,2=でなければ行=(シナリオ¥行番号,2)を整数変換
        シナリオ解析
      
      違えばもし、コマンドが「ブリンク表示ならば
        もし、シナリオ¥行番号,2=でなければブリンク表示X=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければブリンク表示Y=(シナリオ¥行番号,3)を整数変換
        もし、シナリオ¥行番号,4=でなければブリンク速度=(シナリオ¥行番号,4)を整数変換
        シナリオ解析

      違えばもし、コマンドが「自動改行ならば
        もし、シナリオ¥行番号,2=でなければ
          もし、シナリオ¥行番号,2=「オンならば
            自動改行オン
          違えば
            自動改行オフ
        シナリオ解析

      違えばもし、コマンドが「選択肢表示位置固定」ならば
        もし、シナリオ¥行番号,2=でなければ
          もし、シナリオ¥行番号,2=「オンならば
            選択肢表示位置固定=オン
          違えば
            選択肢表示位置固定=オフ
        シナリオ解析

      違えばもし、コマンドが「選択肢表示ならば
        もし、シナリオ¥行番号,2=でなければ選択肢表示X=(シナリオ¥行番号,2)を整数変換
        もし、シナリオ¥行番号,3=でなければ選択肢表示Y=(シナリオ¥行番号,3)を整数変換
        もし、シナリオ¥行番号,4=でなければ選択肢幅=(シナリオ¥行番号,4)を整数変換
        もし、シナリオ¥行番号,5=でなければ選択肢隔=(シナリオ¥行番号,5)を整数変換
        シナリオ解析

      違えばもし、コマンドが「テキストウィンドウ透過色」ならば
        もし、シナリオ¥行番号,2=でなければ元TW透過色=シナリオ¥行番号,2
        シナリオ解析
              
      違えばもし、コマンドが「立ち絵透過色」ならば
        もし、シナリオ¥行番号,2=でなければ元立ち絵透過色=シナリオ¥行番号,2
        シナリオ解析

      違えば
        シナリオ解析            
    #------------------------------------------------------------
    # コマンド
    #------------------------------------------------------------              
    違えばもし、コマンドが「!」ならば    #命令
      コマンドはシナリオ¥行番号,1

      もし、コマンドが「改行ならば
        もし改行確認=オンならば    #自動改行した直後の改行コードは無視する
          改行確認=オフ
          シナリオ解析
        違えば
          点滅カーソル
          改ページ待機オン。

      違えばもし、コマンドが「改ページ」ならば
        改ページ処理。
      
      違えばもし、コマンドが「クリック待ち」ならば    #点滅カーソルを出さずに入力待ち
        改行確認=オフ
        改ページ待機オン。
        
      #------------------------------------------------------------
      #    イメージ関連
      #------------------------------------------------------------
      違えばもし、コマンドが「背景」ならば        #背景はロードと同時に表示で構わないかな
        裏_背景の画像はシナリオ¥行番号,2
        エフェクトナンバー=シナリオ¥行番号,3
        色指定=シナリオ¥行番号,4
        ADV画面合成
        メッセージ行数=0      #メッセージ表示位置を先頭に戻し
        シナリオ解析

      違えばもし、コマンドが「背景色」ならば
        背景色=シナリオ¥行番号,2
        裏_背景を背景色で画面クリア。
        エフェクトナンバー=シナリオ¥行番号,3
        色指定=シナリオ¥行番号,4
        ADV画面合成
        メッセージ行数=0      #メッセージ表示位置を先頭に戻し
        シナリオ解析
#------------------------------------------------------------

      違えばもし、コマンドが「立ち絵ロード」ならば
        裏_立ち絵の画像はシナリオ¥行番号,2
        もし、シナリオ¥行番号,3=ならば
          立ち絵透過色=元立ち絵透過色
        違えば
          立ち絵透過色=シナリオ¥行番号,3
        シナリオ解析

      違えばもし、コマンドが「立ち絵オフならば
        もし、立ち絵表示オフならば    #オフなのにオフしようとした場合は無視する
          シナリオ解析
        違えば
          立ち絵表示オフ
          エフェクトナンバー=シナリオ¥行番号,2
          ADV画面合成
          テキスト保存
          メッセージ行数=0  
          シナリオ解析
        
      違えばもし、コマンドが「立ち絵オンならば    #違う立ち絵をロードして置いてオンする場合もあるが・・・
        立ち絵表示オン
        エフェクトナンバー=シナリオ¥行番号,2
        立ち絵透明度=シナリオ¥行番号,3
        ADV画面合成
        テキスト保存
        メッセージ行数=0  
        シナリオ解析
#------------------------------------------------------------

      違えばもし、コマンドが「テキストウィンドウロード」ならば
        裏_テキストウィンドウの画像はシナリオ¥行番号,2
        もし、シナリオ¥行番号,3=ならば
          TW透過色=元TW透過色
        違えば
          TW透過色=シナリオ¥行番号,3
        シナリオ解析

      違えばもし、コマンドが「テキストウィンドウオフならば
        もし、テキストウィンドウ表示オフならば    #オフなのにオフしようとした場合は無視する
          シナリオ解析
        違えば
          テキストウィンドウ表示オフ
          エフェクトナンバー=シナリオ¥行番号,2
          ADV画面合成
          メッセージ行数=0
          シナリオ解析

      違えばもし、コマンドが「テキストウィンドウオンならば
        もし、テキストウィンドウ表示オンならば    #オンなのにオンしようとした場合
          テキストウィンドウ表示オフ        #一旦オフしてから
          エフェクトナンバー=シナリオ¥行番号,2    #再びオンする
          ADV画面合成
        テキストウィンドウ表示オン
         エフェクトナンバー=シナリオ¥行番号,2
         ADV画面合成
        メッセージ行数=0
        シナリオ解析
#------------------------------------------------------------

      #------------------------------------------------------------
      #    分岐
      #------------------------------------------------------------
      違えばもし、コマンドが「選択肢」ならば
        改行確認=オフ
        選択肢数=シナリオ¥行番号,2
        もし、選択肢表示位置固定=オンならば
          保持用を表画面の0,0へ画像コピー。
          メッセージ行数=0
         違えば
          選択肢表示Y=(テキストウィンドウY+メッセージY)+((「あ」の文字高さ取得+メッセージ影+行)*(メッセージ行数+1))

        #選択肢ボタンの設定
        #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ
        (選択肢数)
          選択肢ボタン回数,0は選択肢表示X
          選択肢ボタン回数,1は選択肢表示Y+(回数-1)*((「あ」の文字高さ取得+メッセージ影+選択肢隔))

          選択肢ボタン回数,2は選択肢幅
          選択肢ボタン回数,3は(「あ」の文字高さ取得+メッセージ影)
          
        (選択肢数)
          行番号=行番号+1
          もし、シナリオ¥行番号,0=「-」でなければ
            選択肢数=回数-1
            抜ける
          ラベル一覧¥(回数-1)=シナリオ¥行番号,2
          シナリオ¥行番号,1を(「あ」の文字高さ取得+メッセージ影+選択肢隔)*(回数-1)へ選択肢表示。
        選択肢をボタン化。

        選択待機オン

      違えばもし、コマンドが「ジャンプ」ならば
        改行確認=オフ
        ラベルは「*」
        ラベル文字列はシナリオ¥行番号,2
        シナリオの0でラベルを0から表検索。
        ジャンプ先はそれ。
        ラベル検索ジャンプ
      
      違えばもし、コマンドが「待機ならば
        シナリオ¥行番号,2秒待つ
        シナリオ解析

      違えばもし、コマンドが「振動」ならば
        もし、メッセージ行数=0ならば
          保持用のテキストウィンドウX,テキストウィンドウY,テキストウィンドウ幅,テキストウィンドウ高さをテキスト保存用の0,0へ画像部分コピー
        裏画面の10,10,裏画面の幅,裏画面の高さを表画面の0,0へ画像部分コピー
        描画処理反映
        0.01秒待つ
        裏画面の0,0,裏画面の幅,裏画面の高さを表画面の10,10へ画像部分コピー
        描画処理反映
        0.01秒待つ
        裏画面を表画面の0,0へ画像コピー
        テキスト保存用を表画面のテキストウィンドウX,テキストウィンドウYへ画像コピー
        描画処理反映
        シナリオ解析
      
      違えば          #存在ない命令だったらスキップ
        シナリオ解析
#------------------------------------------------------------

    違えば
      改行確認=オフ
      シナリオ¥行番号,0をメッセージ表示。
      
      もし、自動改行オンならば
        改行文字列はシナリオ¥行番号,0の1文字右部分。    #自動改行するかどうか判断
        メッセージ行数=メッセージ行数+1
        もし改行文字列=「{カッコ閉じ}」または
          改行文字列=「。」または
          改行文字列=「?」または
          改行文字列=「!」ならば
            改行確認=オン。
            コマンドは「改行」
            点滅カーソル
            改ページ待機オン。
        違えば
          シナリオ解析
      違えば
        メッセージ行数=メッセージ行数+1
        シナリオ解析
#------------------------------------------------------------

#-----改ページ-----------------------------------------------
*改ページ処理
  メッセージ行数=0
    もし改行確認=オンならば    #自動改行した直後の改ページはマウス入力待ちをしない        
      改行確認=オフ
      テキストウィンドウクリア
      シナリオ解析
    違えば
      点滅カーソル
      改ページ待機オン。
#------------------------------------------------------------

#-----メッセージ表示-----------------------------------------
*メッセージ表示(Sを)
  表画面の(テキストウィンドウX+メッセージX),(テキストウィンドウY+メッセージY)+(「あ」の文字高さ取得+メッセージ影+行)*メッセージ行数へメッセージ色,メッセージ影色,メッセージ影,メッセージ速度でSをノベルテキスト描画。
  テキスト保存
#------------------------------------------------------------

#-----選択肢表示---------------------------------------------
*選択肢表示(Sを{数値=0}Yへ)
  表画面の(選択肢表示X),(選択肢表示Y)+Yへメッセージ色,メッセージ影色,メッセージ影,0でSをノベルテキスト描画。
  テキスト保存
  
*選択肢をボタン化
  選択肢用の幅は選択肢幅*2。選択肢用の高さは(「あ」の文字高さ取得+メッセージ影)*選択肢数。
  選択肢用を選択肢幅*2,(「あ」の文字高さ取得+メッセージ影)*選択肢数で画像リサイズ。
  
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の選択肢幅,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

   選択肢用を画像ネガポジ。
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の0,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

#------------------------------------------------------------

#-----ジャンプ-----------------------------------------------
*ラベル検索ジャンプ
  もし、ジャンプ先=-1ならば
    「ラベルがありません」と言う。
    終了。
  違えばもし、シナリオ¥ジャンプ先,1がラベル文字列ならば
    行番号=ジャンプ先
    テキストウィンドウクリア。
    シナリオ解析。
  違えば
    シナリオの0でラベルをジャンプ先+1から表検索。
    ジャンプ先はそれ。
    ラベル検索ジャンプ
#------------------------------------------------------------

#-----テキストウィンドウクリア-------------------------------
*テキストウィンドウクリア
  保持用を表画面の0,0へ画像コピー。
  改ページ待機オフ。
  選択待機オフ。
  メッセージ行数=0
#------------------------------------------------------------

#------------------------------------------------------------
*テキスト保存
  表画面のテキストウィンドウX,テキストウィンドウY,テキストウィンドウ幅,テキストウィンドウ高さをテキスト保存用の0,0へ画像部分コピー。

*テキストウィンドウ復帰
  テキストウィンドウ隠す=オフ
  テキストウィンドウ表示オン
  ADV画面合成
  テキスト保存用を表画面のテキストウィンドウX,テキストウィンドウYへ画像コピー
  描画処理反映
  点滅カーソル
#------------------------------------------------------------

#-----点滅カーソル表示---------------------------------------
*点滅カーソル
  保持用のブリンク表示X,ブリンク表示Y,ブリンク幅,ブリンク高さをセル1の0,0へ画像部分コピー。
  ブリンク画像の0,0,ブリンク幅,ブリンク高さをアニメ処理用の0,0へ画像部分コピー。
  アニメ処理用をブリンク透過色,100でセル1の0,0へキャラ合成。  

  保持用のブリンク表示X,ブリンク表示Y,ブリンク幅,ブリンク高さをセル2の0,0へ画像部分コピー。
  ブリンク画像のブリンク幅,0,ブリンク幅,ブリンク高さをアニメ処理用の0,0へ画像部分コピー。
  アニメ処理用をブリンク透過色,100でセル2の0,0へキャラ合成。

  ブリンクのXはブリンク表示X。ブリンクのYはブリンク表示Y
  
  ブリンクの画像は「セル1
セル2」

  表示隔はブリンク速度。
#------------------------------------------------------------

#-----画面合成-----------------------------------------------
*ADV画面合成
  裏_背景を裏画面の0,0へ画像コピー。

  もし、立ち絵表示オンならば
    もし、立ち絵透明度=ならば
      立ち絵透明度=100
    裏_立ち絵を立ち絵透過色,立ち絵透明度で裏画面の立ち絵X,立ち絵Yへキャラ合成。

  もし、テキストウィンドウ表示オンならば
    裏_テキストウィンドウのTW透過X,TW透過Y,TW透過W,TW透過HをTW透過色,TW透明度で裏画面のテキストウィンドウX,テキストウィンドウYへテキストウィンドウ合成。

  トランジョン
  裏画面を保持用の0,0へ画像コピー。
  エフェクトナンバー=0
  色指定=0

*トランジョン
  もし、エフェクトナンバー=0ならば
    裏画面を表画面の0,0へ画像コピー。

  違えばもし、エフェクトナンバー=1ならば    #フェードイン
    25
      保持用を表画面の0,0へ画像コピー
      裏画面を表画面の0,0へ回数*4で画像半透明コピー。
      描画処理反映
      0.01秒待つ

  違えばもし、エフェクトナンバー=2ならば    #縦スリット
    20
      コピー幅=回数
      32
        裏画面の20*(回数-1),0,コピー幅,母艦のクライアント高さを表画面の20*(回数-1),0へ画像部分コピー。
      描画処理反映
      0.02秒待つ

  違えばもし、エフェクトナンバー=3ならば     #横スリット
    15
      コピー幅=回数
      32
        裏画面の0,15*(回数-1),母艦のクライアント幅,コピー幅を表画面の0,15*(回数-1)へ画像部分コピー。
      描画処理反映
      0.03秒待つ

  違えばもし、エフェクトナンバー=4ならば    #ブラックアウトイン
    塗り色=色指定                #(色指定可($RRGGBB)
    線色=色指定                 #主に背景専用
    トランジョン用の0,0から母艦のクライアント幅,母艦のクライアント幅へ四角。
    25
      保持用を表画面の0,0へ画像コピー
      トランジョン用を表画面の0,0へ回数*4で画像半透明コピー。
      描画処理反映
      0.01秒待つ
    25
      トランジョン用を表画面の0,0へ画像コピー
      裏画面を表画面の0,0へ回数*4で画像半透明コピー。
      描画処理反映
      0.01秒待つ

  違えばもし、エフェクトナンバー=5ならば    #モザイクアウトイン
    表画面をトランジョン用の0,0へ画像コピー。   #主に背景専用
    50
      トランジョン用を表画面の0,0へ画像コピー。
      表画面に回数画像モザイク。
      描画処理反映
      0.01秒待つ
    50
      裏画面を表画面の0,0へ画像コピー。
      表画面に50-回数画像モザイク。
      描画処理反映
      0.01秒待つ
      
  違えば、
    裏画面を表画面の0,0へ画像コピー。
#------------------------------------------------------------

#------------------------------------------------------------
●ノベルテキスト描画({グループ=?}OBJのX,Yへ{数値=$FFFFFF}表示色,{数値=$000000}影色,{数値=2}影,{数値=200}速度でSを)
  XXは整数。
  もし、速度=0ならば
    文字色は影色。
    OBJのX+影,Y+影へSを文字描画。
    文字色表示色。
    OBJのX,YへSを文字描画。
    描画処理反映
     
  違えば、
    XX=X
    (Sの文字数
      Sの回数から1文字抜き出す。

      もしそれ=「{CHR(10)}」ならば
        X=XX
        Y=Y+(それ文字高さ取得+メッセージ影)
        続ける

      文字色は影色。
      OBJのX+影,Y+影へそれ文字描画。
      文字色表示色。
      OBJのX,Yへそれ文字描画。
      描画処理反映
      (速度/1000)秒待つ。
   
      X=X+(それ文字幅取得)
#------------------------------------------------------------

#------------------------------------------------------------
●テキストウィンドウ合成({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色,{数値=50}透明度で{グループ=?}コピー先のX2,Y2へ)
  透過処理用をイメージとして作成。透過処理用の可視はオフ。
  透過処理用の幅はW。透過処理用の高さはH。

  # 半透明にしたい部分を透過処理用に移す
  コピー元のX,Y,W,Hを透過処理用の0,0へ画像部分コピー

  # コピー元の半透明にしたい部分以外をコピー先へ合成
  塗り色は透過色。線色は透過色。線太さは0。
  コピー元のX,YからX+W,Y+Hへ四角。
  コピー元を透過色,100でコピー先のX2,Y2へキャラ合成。
  
  # 半透明にしたい部分を透過コピー
  透過処理用をコピー先のX+X2,Y+Y2へ透明度で画像半透明コピー

  # コピー元を元に戻す
  透過処理用をコピー元のX,Yへ画像コピー。

  VCL_FREE(透過処理用)
//  透過処理用→壊す。
#------------------------------------------------------------

#------------------------------------------------------------
●キャラ合成({グループ=?}コピー元を{数値=$00FF00}透過色,{数値=100}透明度で{グループ=?}コピー先のX,Yへ)
  キャラ透過用をイメージとして作成。キャラ透過用の可視はオフ。
  # コピー元を保存
  キャラ透過用の画像はコピー元→名前
  
  # マスクの作成(キャラの透過部分が白、表示部分が黒の画像)
  マスク画像をイメージとして作成。マスク画像の可視はオフ。
  マスク画像の画像はコピー元→名前
  マスク画像を透過色で画像マスク作成
  
  # 背景と立ち絵を半透明合成したものをキャラ画像とする
  # 背景の方を半透明合成しているので、透明度の値を逆にしている。
  # キャラ透過用に背景を重ねたいがどういうわけかエラーになる
   コピー先をコピー元のX,Yへ(100-透明度)で画像半透明コピー

  キャラ画像をイメージとして作成。キャラ画像の可視はオフ。
  キャラ画像の画像はコピー元→名前

  # コピー元を元に戻す
  キャラ透過用をコピー元の0,0へ画像コピー。
  
  # キャラの透過色部分を黒に変換
  # はじめからキャラの透過色を黒にすると髪や目や文字に黒が使用出来なくなる
  # また、先にマスクを作ってあるので背景と半透明合成したキャラ画像も使える
  マスク画像を画像ネガポジ
  マスク画像をキャラ画像の0,0へ画像ANDコピー
  マスク画像を画像ネガポジ

  # 合成実行
  マスク画像をコピー先のX,Yへ画像ANDコピー    #背景にマスクを重ねる
  キャラ画像をコピー先のX,Yへ画像ORコピー      #背景にキャラを重ねる

  VCL_FREE(マスク画像)
  VCL_FREE(キャラ画像)
  VCL_FREE(キャラ透過用)
//  マスク画像→壊す
//  キャラ画像→壊す
//  キャラ透過用→壊す。
#-----------------------------------------------------------------------
#------------------------------------------------------------
●マウスインアウト反映({グループ=?}OBJ1のAを{数値=0}Sで{グループ=?}OBJ2へ)
  (S)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>0ならば
      OBJ1の(A\0,0),(A\0,1)+(前選択ボタン-1)*(A¥(前選択ボタン),3),(A¥(前選択ボタン),2),(A¥(前選択ボタン),3)をOBJ2の(A¥(前選択ボタン),0),(A¥(前選択ボタン),1)へ画像部分コピー。
    もし、選択ボタン>0ならば
      OBJ1の(A\0,0)+(A¥(選択ボタン),2),(A\0,1)+(選択ボタン-1)*(A¥(選択ボタン),3),(A¥(選択ボタン),2),(A¥(選択ボタン),3)をOBJ2の(A¥(選択ボタン),0),(A¥(選択ボタン),1)へ画像部分コピー。
  前選択ボタン=選択ボタン
  選択ボタン=0
  描画処理反映
#-----------------------------------------------------------------------

 ちなみに、これだけでは動きません。

 最低限シナリオファイルが必要で、ほかに、背景やら立ち絵やらを用意しなくちゃなりません。

 あとでいちおう、機能説明と、シナリオファイルの仕様説明を兼ねたサンプルシナリオでも作ってUPするつもり~。


後の目標》

 ・セーブとロードが出来るようにする。(最低限必要!)

 ・フラグによるシナリオ分岐。

 ・BGMの再生と効果音。

 ・文章を読み返す機能。

 ・次の選択肢まで早送りする機能。

 ・フルスクリーン表示

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160410

2016/04/05 (火)

キー設定を作る・・・の前に、ナゾ現象についてぼやく

| 13:34 | キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 のブックマークコメント

 週末に札幌に行ってTクモを見てみたら、丁度デモ機のところにゲームパッドが置いてあったんだけど、あれれ~? A、Bボタンの位置がスーファミやプレステとは逆だ~?!(@_@)

 ・・・と思っていたら、海外ではーゆうふうになっていて、プレステも、×ボタンで決定、○ボタンキャンセルってことになってるので、海外製のゲームを日本人がやると、はじめはまごまごするとかΣ(゜д゜;


 まあ、なんかんなわけで、やっぱりキー設定を作った方がいいんだなあと思い、以前ちょっと試しに作ってみていたキーボードの場合のキー設定のプログラムを眺めていたんだけど、の時に件の選択肢の怪現象についての天啓がひらめいたんですよw

 エディタ上でキーを押したら、のキーの名称がエディタ表示され、キー番号がINIファイルに保存されるというプログラムだったんだけど、この時にもナゾ現象が発生して、の問題自体はわりとすぐに解決したんだけども、びみょーにナゾのものは解明しなかった。


 問題が発生していたのはこの関数

*キー表示(Sで)
  Sで条件分岐
    0ならば「」で戻る
    37ならば「←」で戻る
    38ならば「↑」で戻る
    39ならば「→」で戻る
    40ならば「↓」で戻る
#
#中略
#
    違えば
      もし、(ASC("A")<=S)かつ(S<=ASC("Z"))ならばCHR(S)で戻る
      違えばもし、(ASC("0")<=S)かつ(S<=ASC("9"))ならばCHR(S)で戻る
      違えばもし、(96<=S)かつ(S<=106)ならば、「テンキー{(S-96)}」で戻る
      違えば、Sで戻る
  ここまで

 ちなみにこれは、なでしこの行動タブの中にある「キー番号の挿入」の内容を、ほとんど引き写したものw

 エディタ上でキーを押した時には正常に表示するのに、INIファイルを読んだ内容を表示させようとすると、テンキー4、5、6、7、8、9の表示がおかしくなってしまう。

 これは、引数の「(Sで)」を「({整数}Sで)」とすることで解決した。

 INIファイルを読んで変数代入した内容は、数字であっても整数じゃ無くて文字列だよと言うのなら、それはまあ納得出来るんだけど、だったらなんで他のキーはもとより、テンキー1、2、3は問題が出ないのだ?

 びみょーに一部分にだけ問題が出るってゆうのが、どうもよくわかんないんだよねえ・・・

通り道通り道2016/04/05 21:02実際に並べると一目瞭然な感じですが・・・
0 96
1 97
2 98
3 99
4 100
5 101

以下の3つは成立しますが、
(96<=100)かつ(100<=106)
(96<=99)かつ(99<=106)
("96"<="99")かつ("99"<="1062)

以下はダメです。
("96"<="100")かつ("100"<="106")

雪乃☆雫雪乃☆雫2016/04/05 21:42 な、なるほど!
 ・・・と言いつつ、意味が分からず30分ほど固まっていたのは内緒(汗)
 配列ソートと配列数値ソートをしてみたら、ようくようく分かりましたデス(> <)/
 おかげさまでナゾ解明して、ひとつ賢くなることが出来ました。
 ありがとうございますっ!!


 ・・・いや~、誰も見てないかと思ってバカばっかし書き散らしていたら、見て下さってる方、いらっしゃるもんですねぇ~(^▽^;;;

通り道通り道2016/04/06 00:09すいません、訂正です。

よくよく見直すと、ここの式が成り立ってませんでした。
("96"<="99")かつ("99"<="106")
この、右の式が成り立っていません(falseになる)。実際は、こうなっているようです。
("96"<="99")かつ(99<=106)

同じように書きなおすと、ダメなパターンでは、
("96"<="100")かつ("100"<="106")
ではなく、
("96"<="100")かつ(100<=106)
となります。

確認してみたら、ソースのコメントに、
// (混合) 右辺を尊重して比較
とありました。この辺の細かい挙動、マニュアルにも記載があるとよいんですけどね・・・

雪乃☆雫雪乃☆雫2016/04/07 04:15 なるほど! やっと意味が分かったあぁぁ。(頭悪すぎ;)
 つまり、元のコードだと「(96<=S)かつ(S<=106)」で、Sは文字列だから、前の方の式は右辺のSを尊重して文字列、後の式は106で整数として扱われているとゆうことなんですねぇ~(.. )ψメモメモ
 ありがとうございます☆

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160405

2016/04/04 (月)

ナゾ解明!・・・なのか?(汗)

| 11:59 | ナゾ解明!・・・なのか?(汗) - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ナゾ解明!・・・なのか?(汗) - 雪乃☆雫のなでしこ日和 ナゾ解明!・・・なのか?(汗) - 雪乃☆雫のなでしこ日和 のブックマークコメント

 懸案の選択肢の怪現象、マウスオーバー不具合のナゾについて、突如天啓がひらめきましたw

 結論から言って、問題は、こないだ抜き出したトコじゃなかったwww


 あの辺りは、元のアドベンチャー時代のプログラムではもとより、なこノベルでも純粋な選択肢のみのテストシナリオでは正常動作していたんだよね。

 ここの記事では唐突に終了してしまって書いてなかったけど、サウンドノベルっぽい全画面での表示や、メニュー的な用途にも流用出来るように、シナリオ側から選択肢の表示位置や隔などを設定出来るように機能追加してたんだけど、色々試すとどうやらこの部分が良くないみたい。

 シナリオのの部分をコメントにすると正常に動くし、なでしこ側からなら同じ値を変数に入れても大丈夫なんだよね(@_@)

 

 シナリオ側で、

$,選択肢表示,15,375,600,0

 のように設定しておいて、

 プログラムのシナリオ解析で、

違えばもし、コマンドが「選択肢表示ならば
	もし、シナリオ¥行番号,2=でなければ選択肢表示X=シナリオ¥行番号,2
	もし、シナリオ¥行番号,3=でなければ選択肢表示Y=シナリオ¥行番号,3
	もし、シナリオ¥行番号,4=でなければ選択肢幅=シナリオ¥行番号,4
	もし、シナリオ¥行番号,5=でなければ選択肢隔=シナリオ¥行番号,5
	シナリオ解析

 という感じに設定している。


 さてこの、

選択肢表示X=シナリオ¥行番号,2

 の部分を、

選択肢表示X=(シナリオ¥行番号,2)を整数変換

 としたら直った風味。

 前、「関係ない気がする。」とした、まさに「選択肢表示X」です!(爆)


 なでしこでは、なんでもふつーに認識されてエラーにもならず正常動作するものだから、大助かりですっかり忘れ去っていたけれど、どうやら、昔やられまくって早々にプログラムを挫折する要因の一つにもなった、INTだのSTRだのとゆう問題ラシイ気がするんだけど、整数として宣言した変数代入してもダメだったんで、なんかよくわからん。

 それに、「選択肢表示X」ってゆうのは、選択肢を表示する場所のX座標を指定しているんであって、ここ数値に問題があったら、表示位置のものが狂うはずなのに、こは問題なく表示されて、ほんの一部分だけマウスオーバーがおかしくなるってのは・・・???

 しかもしかも、むしろじゃあ、それならなんで他の所では問題が出ないんだ?

 この選択肢表示の所だって、直したのはXだけで、Yや幅や隔の部分は、元のままだからね。

 わかんないけど、とりあえず気分良く選択肢が選択出来るようになったよ!

 他の所もみんな、整数変換付けた方が良いのかなあ? ・・・とは思いつつ、別に不具合が出てないもんで、この一カ所のみ直して、後は放置となった;;;

 いじって、かえってまた変になったりしたら、やだもね~w

 また何か、ナゾ現象が発生したら、この辺りもまず疑ってみるということで・・・

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160404

2016/03/21 (月)

続・選択肢の怪

| 13:45 | 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さて・・・現実逃避ばかりもしてられないので、ちょっと、選択肢に関係したところを、抜き出してみる。

#------------------------------------------------------------
#    分岐
#------------------------------------------------------------
違えばもし、コマンドが「選択肢」ならば
  改行確認=オフ
  選択肢数=シナリオ¥行番号,2
   もし、選択肢表示位置固定=オンならば
    保持用を表画面の0,0へ画像コピー。
    メッセージ行数=0
  違えば
    選択肢表示Y=(テキストウィンドウY+メッセージY)+((「あ」の文字高さ取得+メッセージ影+行)*(メッセージ行数+1))

  #選択肢ボタンの設定
  #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ
  (選択肢数)
    選択肢ボタン回数,0は選択肢表示X
    選択肢ボタン回数,1は選択肢表示Y+(回数-1)*((「あ」の文字高さ取得+メッセージ影+選択肢隔))
    選択肢ボタン回数,2は選択肢幅
    選択肢ボタン回数,3は(「あ」の文字高さ取得+メッセージ影)

  (選択肢数)
    行番号=行番号+1
    もし、シナリオ¥行番号,0=「-」でなければ
      選択肢数=回数-1
      抜ける
    ラベル一覧¥(回数-1)=シナリオ¥行番号,2
    シナリオ¥行番号,1を(「あ」の文字高さ取得+メッセージ影+選択肢隔)*(回数-1)へ選択肢表示。
  選択肢をボタン化。
  選択待機オン

 まず、シナリオの中に「選択肢」のコマンドがあったら、選択肢の表示位置を確認してる。

 これは、選択肢表示Xと、選択肢表示Yを、あらかじめ変数で指定しているんだけど、Yに関しては、サウンドノベル風にまで表示してきた文章の下に選択肢を表示するのか、それまでの文章は消して、毎決まった位置に選択肢を表示するのか選べるようにしているから、前者の場合Yの位置が毎変わるからなんだけど、問題のXの位置は基本固定なんだし、関係ない気がする。(ほんとか?!)

 いずれにしても、選択肢の位置を固定してるか否かに関わりなく怪現象は発生している。

 それから、表示位置とコマンドで指定した選択肢数に基づいて、ボタンの設定。

 画面に実際に選択肢を表示し、それをマウスオーバーボタン化するのは、以下関数

#-----選択肢表示---------------------------------------------
*選択肢表示(Sを{数値=0}Yへ)
  表画面の(選択肢表示X),(選択肢表示Y)+Yへメッセージ色,メッセージ影色,メッセージ影,0でSをノベルテキスト描画。
  テキスト保存

*選択肢をボタン化
  選択肢用の幅は選択肢幅*2。選択肢用の高さは(「あ」の文字高さ取得+メッセージ影)*選択肢数。
  選択肢用を選択肢幅*2,(「あ」の文字高さ取得+メッセージ影)*選択肢数で画像リサイズ。
  
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の選択肢幅,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

   選択肢用を画像ネガポジ。
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の0,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

#------------------------------------------------------------

 表示は、選択肢表示Xと、選択肢表示Yの位置に、選択肢として設定された文字列を、ほんとにただ表示してるだけだから問題ないでしょ。

 して、表示された選択肢の部分を一行ずつ切り取って、ボタン用の画像を作っている。

 面倒なようだけど、これで半透明に合成された背景なんかもちゃんと反映されたネガポジになるわけ。

 して・・・問題の実際にマウスオーバーを反映する部分は、元のマウスオーバーボタンとほぼ一緒だからね~。

表画面のマウス移動した時は~
  もし、選択待機オンならば
    選択肢用の選択肢ボタンを表画面へ選択肢数でマウスインアウト反映。
#------------------------------------------------------------
●マウスインアウト反映({グループ=?}OBJ1のAを{数値=0}Sで{グループ=?}OBJ2へ)
  (S)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>0ならば
      OBJ1の(A\0,0),(A\0,1)+(前選択ボタン-1)*(A¥(前選択ボタン),3),(A¥(前選択ボタン),2),(A¥(前選択ボタン),3)をOBJ2の(A¥(前選択ボタン),0),(A¥(前選択ボタン),1)へ画像部分コピー。
    もし、選択ボタン>0ならば
      OBJ1の(A\0,0)+(A¥(選択ボタン),2),(A\0,1)+(選択ボタン-1)*(A¥(選択ボタン),3),(A¥(選択ボタン),2),(A¥(選択ボタン),3)をOBJ2の(A¥(選択ボタン),0),(A¥(選択ボタン),1)へ画像部分コピー。
  前選択ボタン=選択ボタン
  選択ボタン=0
  描画処理反映
#------------------------------------------------------------

 僅かに変わっているのは、ボタン設定の配列要素数ではなく、引数で選択肢数を与えているところ。

 これは、シナリオの方のミスで、コマンドで指定した選択肢数より、実際に記載されてる選択肢が少なかった時に、表示がへんちくりんになるのを避するためだったような?

 選択肢を表示してから設定を行えば、ふつーに避出来るような気がするけど・・・っていうそれならむしろコマンドで選択肢数を指示する必要あるのか?ってゆう話だけど、何か訳があったような気もするし・・・ちょっとよく覚えておらんね;;;

 なんにしろ、この追加された引数が問題ではないことは、マウスオーバーボタンのサンプルプログラムで、検証済みなのだ。


 やっぱ、よく分からん~~~><

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160321

2016/03/06 (日)

選択肢の怪

| 01:55 | 選択肢の怪 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 選択肢の怪 - 雪乃☆雫のなでしこ日和 選択肢の怪 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 選択肢表示状態の時、何故か一部分だけ、マウスを認識せず、選択肢の色が変わらず、クリックしても次へ飛ばない部分があったり、逆に勝手に選択されてしまうなどの怪現象があり、これは当初、動的に作成した部品を壊すとエラーが出まくるために、壊さないで済ましていたことが原因で、新たに覚えた「VCL_FREE」のまじない追加したら直った! と思っていたのですが、なんかやっぱりおかしな時がある・・・?

 行き詰まった時には、現場に戻……ではなくて、初心に立ち返り、問題点を明確にすることが必要です。

 と、いうわけで――

 一体どーゆう現象かというと、以下のようなサンプルシナリオを実行すると、

#,選択肢の怪を確認するサンプルシナリオ
#,--------------------------------------------------------
#, ビジュアルノベル風
#,--------------------------------------------------------
$,テキストウィンドウサイズ,640,120
$,テキストウィンドウ表示位置,0,360
$,テキストウィンドウ半透明,0,0,640,120,50
$,テキストウィンドウ色,$000077
$,メッセージ書式,MS ゴシック|20|太字,$FFFFFF,$000000,3
$,メッセージ表示位置,15,15
$,メッセージ速度,10
$,行,0
$,ブリンク表示,600,445,300
$,選択肢表示位置固定,オン
$,選択肢表示,15,375,600,0
#,--------------------------------------------------------

!,背景,北竜.jpg
!,立ち絵ロード,立ち絵.bmp
!,立ち絵オン,,70
!,テキストウィンドウオン

!,選択肢,2
 -,1234567890,A
 -,1234567890,B

 *,A
 Aへとんだよ

 *,B
 Bへとんだよ

#,注:はてなでは、「-」や「*」が特別なヘッダーみたいで表示が変になっちゃうから頭に半角スペースを入れてるけど、実際には行頭。

 こういう画面になります。

f:id:snowdrops89:20160306162422j:image

 ここまでは、正しい。

 さて、これは選択肢なんで、マウスカーソルを合わせると、上の「1~0」のように反転し、クリックするとラベルに飛ぶわけ。

 ところが、どーゆうわけか、「4、5」の辺りだけ、マウスを認識しないんだよね。

 色も変わらないし、クリックしても反応しない

 それ以外の場所では問題なく反転もするし、ジャンプもするとゆう、まさに謎の怪現象なんだよ!

 まあ、こに目をつぶれば、ふつーに動作はするのだけど、だから、どってこと無い些細な問題と言えばそうなんだけど、一度気になったからには、どうしても気になるっ。

 ナゾ解明しないことには、気持ち悪い。

 この選択肢は、初期の頃に試行錯誤しながら作った無理矢理感満載のマウスオーバーボタンのまま流用しているから、違いが無いとも言い切れないけど、他のやつでまで問題が出たことはないんだよね。

 マウスオーバーボタンは、こんな感じ。

#--------------------------------------------------------------
# マウスオーバーボタン
#--------------------------------------------------------------

#-----母艦設計--------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「マウスオーバーボタン母艦を$FFFFFFで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦のクライアント幅は640。母艦のクライアント高さは480。
母艦中央移動
母艦の可視はオン。
#--------------------------------------------------------------

#-----ボタン準備------------------------------------------------
ボタン幅とは整数=600。
ボタン高さとは整数=40。
ボタン位置Xとは整数=20。
ボタン位置Yとは整数=50。
ボタン隔とは整数=20。
ボタン数とは整数=6
文字書体は「MS ゴシック|14|標準」。

裏画面とはイメージの可視はオフの幅はボタン幅*2。の高さはボタン高さ*ボタン数

#なんか画像を用意すればかっこいいんだけど、とりあえずボタンの画像を書いている。
#左側が通常時のボタンで、右側がマウスオーバー時のボタンとなる。
(ボタン数)
  塗り色は$AAAAAA
  裏画面の0,(回数-1)*ボタン高さからボタン幅,回数*ボタン高さへ四角。
  裏画面の25,(回数-1)*ボタン高さ+10へ「マウスオーバーボタン{回数}」を文字描画塗り色は$FFAAAA
  裏画面のボタン幅,(回数-1)*ボタン高さからボタン幅*2,回数*ボタン高さへ四角。
  裏画面のボタン幅+25,(回数-1)*ボタン高さ+10へ「マウスオーバーボタン{回数}」を文字描画。
#--------------------------------------------------------------

#-----ボタンを設定----------------------------------------------
選択肢とは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ
(ボタン数)
  選択肢¥回数,0はボタン位置X
  選択肢¥回数,1はボタン位置Y+(回数-1)*(ボタン高さ+ボタン隔)
  選択肢¥回数,2はボタン幅
  選択肢¥回数,3はボタン高さ
#--------------------------------------------------------------

#-----ボタンを描画------------------------------------------------------
裏画面の0,0を選択肢で母艦へマウスオーバーボタン表示
#-----------------------------------------------------------------------

#----マウス入力待ち----------------------------------------------
母艦マウス移動した時は~
  裏画面の選択肢を母艦へマウスインアウト反映。

母艦のマウス押した時は~
  もし、前選択ボタン=0でなければ
    「ボタン{前選択ボタン}をクリック」と言う
#--------------------------------------------------------------

#--------------------------------------------------------------
●マウスオーバーボタン表示({グループ=?}OBJ1のX,YをAで{グループ=?}OBJ2へ)
  A\0,0=X。A\0,1=Y
  (Aの要素数-1)
    OBJ1のX,Y+(回数-1)*(A¥回数,3),(A¥回数,2),(A¥回数,3)をOBJ2の(A¥回数,0),(A¥回数,1)へ画像部分コピー。

●マウスインアウト反映({グループ=?}OBJ1のAを{グループ=?}OBJ2へ)
  (Aの要素数-1)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>0ならば
      OBJ1の(A\0,0),(A\0,1)+(前選択ボタン-1)*(A¥(前選択ボタン),3),(A¥(前選択ボタン),2),(A¥(前選択ボタン),3)をOBJ2の(A¥(前選択ボタン),0),(A¥(前選択ボタン),1)へ画像部分コピー。
    もし、選択ボタン>0ならば
      OBJ1の(A\0,0)+(A¥(選択ボタン),2),(A\0,1)+(選択ボタン-1)*(A¥(選択ボタン),3),(A¥(選択ボタン),2),(A¥(選択ボタン),3)をOBJ2の(A¥(選択ボタン),0),(A¥(選択ボタン),1)へ画像部分コピー。
  前選択ボタン=選択ボタン
  選択ボタン=0
  描画処理反映
#--------------------------------------------------------------

 要するに、左側に通常時のボタン画像、右側にマウスオーバー時のボタン画像を並べた裏画面を用意して、配列に指定したボタン設定に基づいて画像部分コピーしてるんだよね。

 いちおう、ノベルの選択肢に合わせて、ボタンの幅を長~くしてみて色々ためしたけど、このサンプルプログラムではマウスの認識に問題のある箇所は見当たらなかった。

 というとはやっぱり、なこノベルの方に問題があるんだー><

 選択肢として表示したものをコピーして、都度ボタン化したりしていて、確かにこのサンプルとは少し変わっている部分もあるんだけど、それにしても肝心の、マウスの出入りは、「マウス移動した時~」の座標を単純に取って、「ボタン表示位置X、ボタン表示位置Y、ボタン幅、ボタン高さ」から、ボタンの中にマウスが入ったかどうかを判断しているだけで、どう考えても、ボタンの中の一部分にだけ抜けが生じるようなものには思えないんだけど・・・むむむ。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160306

2016/02/21 (日)

スピンエディタって・・・

| 02:02 | スピンエディタって・・・ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - スピンエディタって・・・ - 雪乃☆雫のなでしこ日和 スピンエディタって・・・ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 突然ですが、サイコロです。

 遊んでいたら、件の「→壊す」の問題で、エラーが出てしまうことが分かったので、「VCL_FREE」に直した。

 ついでに、微妙にレイアウトを変更し、胴元のセリフを増やしたりなどして、ゲームっぽさをUPさせてみたりしているw

 それでもって表題だけど、スピンエディタって、▼▲を押して変化する値って、1以外に変更出来ないんですかねえ?

 できれば、例えば10ずつ増減させたりするようにしたかったんだけど・・・

 エディタボタンを組み合わせて、自力で実現するしかないのかな? むむむ。

 でっ、ノベルはどうなったのかと言えば・・・

 ものすごく些細なことっぽいことに引っかかって、はまっている。

 何故か、選択肢の時に、マウスを認識しない場所があるんだよね;

 クイズや、サイコロでも使っている、マウスオーバーボタン関数を流用してるだけなのに、おっかしいなあ(@_@)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160221

2016/02/13 (土)

ノベル用関数の修正

| 21:12 | ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 ノベル用関数の修正 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ノベルテキスト描画は、んなには変わってないけど、それまで関数内で決め打ちだった文字色、影色、文字と影との距離を引数で指定出来るようにした。

 引数を増やした結果(?)引数の省略が出来なくなってしまった。省略しようとすると「引数『X』が不足しています。」と言われてしまうよ! 省略してるのはこじゃないんだが。どうゆうことかよくわからん。

 でも、まあ、プログラム中で全部きっちり指定するつもりだから、別にいいけどね。

 ところでこれまで、文字の高さを(「あ」の文字高さ取得)としていたんだけど、影を大きく取ると重なったり、特に選択肢の時のネガポジが良くないので、(「あ」の文字高さ取得+メッセージ影)に直した。

 文字書体関数内で決め打ちしていたのをやめて、外で指定されている値をのまま使用することにした。

●ノベルテキスト描画({グループ=?}OBJのX,Yへ{数値=$FFFFFF}表示色,{数値=$000000}影色,{数値=2}影,{数値=200}速度でSを)
	XXは整数。
  もし、速度=0ならば
    文字色は影色。
    OBJのX+影,Y+影へSを文字描画。
    文字色表示色。
    OBJのX,YへSを文字描画。
    描画処理反映
     
  違えば、
    XX=X
    (Sの文字数
      Sの回数から1文字抜き出す。

      もしそれ=「{CHR(10)}」ならば
        X=XX
        Y=Y+(それ文字高さ取得+メッセージ影)
        続ける

      文字色は影色。
      OBJのX+影,Y+影へそれ文字描画。
      文字色表示色。
      OBJのX,Yへそれ文字描画。
      描画処理反映
      (速度/1000)秒待つ。
   
      X=X+(それ文字幅取得


 キャラ合成は、立ち絵を背景に重ねるためのもの。

 なでしこの画像合成の不具合が直ったかどうかは試してないけど、とにかく画像合成の場合、左上のドットの色を取得して透過色として扱うことになっていましたが、指定したカラーを透過色として扱うようにしています。

 して、透明度を指定して、サウンドノベルの立ち絵っぽい表示ができるようにした。

●キャラ合成({グループ=?}コピー元を{数値=$00FF00}透過色,{数値=100}透明度で{グループ=?}コピー先のX,Yへ)
	キャラ透過用をイメージとして作成。キャラ透過用の可視はオフ。
	# コピー元を保存
	キャラ透過用の画像はコピー元→名前
	
	# マスクの作成(キャラの透過部分が白、表示部分が黒の画像)
	マスク画像をイメージとして作成。マスク画像の可視はオフ。
	マスク画像の画像はコピー元→名前
	マスク画像を透過色で画像マスク作成
	
	# 背景と立ち絵を半透明合成したものをキャラ画像とする
	# 背景の方を半透明合成しているので、透明度の値を逆にしている。
	# キャラ透過用に背景を重ねたいがどういうわけかエラーになる
 	コピー先をコピー元のX,Yへ(100-透明度)で画像半透明コピー

	キャラ画像をイメージとして作成。キャラ画像の可視はオフ。
	キャラ画像の画像はコピー元→名前

  # コピー元を元に戻す
	キャラ透過用をコピー元の0,0へ画像コピー。
	
	# キャラの透過色部分を黒に変換
	# はじめからキャラの透過色を黒にすると髪や目や文字に黒が使用出来なくなる
	# また、先にマスクを作ってあるので背景と半透明合成したキャラ画像も使える
	マスク画像を画像ネガポジ
	マスク画像をキャラ画像の0,0へ画像ANDコピー
	マスク画像を画像ネガポジ

	# 合成実行
	マスク画像をコピー先のX,Yへ画像ANDコピー		#背景にマスクを重ねる
	キャラ画像をコピー先のX,Yへ画像ORコピー			#背景にキャラを重ねる

	VCL_FREE(マスク画像)
	VCL_FREE(キャラ画像)
	VCL_FREE(キャラ透過用)

 以前の、「→壊す」でエラー出まくる件は、いまだに直っていないみたいなんだけど、のかわりに「VCL_FREE」とゆうまじないを覚えた!



 テキストウィンドウ合成は、矩形指定した範囲は半透明にし、それ以外のところは指定した透過色を透過し、普通に合成するもの。

 全体的には、画像部分透過コピーとかいういまいち分かりづらかった関数名を改めただけですが;

 キャラ合成を使っているので、キャラ合成とセットです。

●テキストウィンドウ合成({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色,{数値=50}透明度で{グループ=?}コピー先のX2,Y2へ)
  透過処理用をイメージとして作成。透過処理用の可視はオフ。
  透過処理用の幅はW。透過処理用の高さはH。

  # 半透明にしたい部分を透過処理用に移す
  コピー元のX,Y,W,Hを透過処理用の0,0へ画像部分コピー

  # コピー元の半透明にしたい部分以外をコピー先へ合成
  塗り色は透過色。線色は透過色。線太さは0。
  コピー元のX,YからX+W,Y+Hへ四角。
  コピー元を透過色,100でコピー先のX2,Y2へキャラ合成。
  
  # 半透明にしたい部分を透過コピー
  透過処理用をコピー先のX+X2,Y+Y2へ透明度で画像半透明コピー

  # コピー元を元に戻す
  透過処理用をコピー元のX,Yへ画像コピーVCL_FREE(透過処理用)

 キャラ合成の方の「透過色,透明度」は省略しても動くのに、テキストウィンドウ合成の方は、エラーになってしまうんだよね。なんでだ(?_?)

 そういえば、キャラ合成と書式を合わせたんだけど、以前画像部分透過コピーだったときには、({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色で{グループ=?}コピー先のX2,Y2へ{数値=50}透明度で)という感じに、透過色と透明度が分かれていて、の時は透過色の省略が出来てたような気がする。

 まだまだいろいろと深遠な謎が多いね。

 省略しないからいいんだけどさ。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160213

2016/01/17 (日)

トランジョンの実験

| 23:45 | トランジョンの実験 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - トランジョンの実験 - 雪乃☆雫のなでしこ日和 トランジョンの実験 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 トランジョンとゆうのは画像と画像(動画も)を切り替える際に、何らかのエフェクトをかけてつなぎ合わせる処理のことで、スライドショーとか動画編集ソフトとか見ると、多彩なトランジョンが実装されていますけど、無能なワタシには、どーいう仕掛けになっているのかさっぱりわからないのであります

 でも、なでしこにはもともと、いろいろ便利な画像処理関数が実装されているので、助かりますね。

 前に作ってみた時のまんまで、大して良いとも思えないけど、とりあえず、あると無いとではゲームっぽさが全然違う♪

母艦のクライアント幅は640。母艦のクライアント高さは480。
母艦の可視はオン。

裏画面とはイメージの可視はオフの幅は母艦のクライアント幅。の高さは母艦のクライアント高さ。
の画像は「背景1.jpg」
	
裏画面保持用とはイメージの可視はオフの幅は母艦のクライアント幅。の高さは母艦のクライアント高さ。
の画像は「背景2.jpg」

トランジョン用とはイメージの可視はオフの幅は母艦のクライアント幅。の高さは母艦のクライアント高さ。


表画面とはイメージの可視はオン。
表画面について
	幅は母艦のクライアント幅。高さは母艦のクライアント高さ。
	Xは0。Yは0。画像は「背景2.jpg」
	マウス押した時は~
		フェードイン
		#縦スリット
		#横スリット
		#ブラック
		#モザイク

*フェードイン
	25
  	裏画面保持用を表画面の0,0へ画像コピー
		裏画面を表画面の0,0へ回数*4で画像半透明コピー描画処理反映
		0.01秒待つ
	
*縦スリット
	20
  	コピー幅=回数
    32
      裏画面の20*(回数-1),0,コピー幅,母艦のクライアント高さを表画面の20*(回数-1),0へ画像部分コピー。
    描画処理反映
    0.02秒待つ

*横スリット
	15
    コピー幅=回数
    32
      裏画面の0,15*(回数-1),母艦のクライアント幅,コピー幅を表画面の0,15*(回数-1)へ画像部分コピー。
    描画処理反映
    0.03秒待つ

*ブラック
    トランジョン用の0,0から母艦のクライアント幅,母艦のクライアント幅へ四角。
    25
      裏画面保持用を表画面の0,0へ画像コピー
      トランジョン用を表画面の0,0へ回数*4で画像半透明コピー。
      描画処理反映
      0.01秒待つ
    25
      トランジョン用を表画面の0,0へ画像コピー
      裏画面を表画面の0,0へ回数*4で画像半透明コピー。
      描画処理反映
      0.01秒待つ

*モザイク
    表画面をトランジョン用の0,0へ画像コピー。
    50
      トランジョン用を表画面の0,0へ画像コピー。
      表画面に回数画像モザイク。
  	  描画処理反映
  	  0.01秒待つ
  	50
      裏画面を表画面の0,0へ画像コピー。
  	  表画面に50-回数画像モザイク。
  	  描画処理反映
  	  0.01秒待つ

・背景1

f:id:snowdrops89:20160117232938j:image

・背景2

f:id:snowdrops89:20160117232937j:image

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160117

2016/01/10 (日)

とりあえずシナリオの仕様の変更から

| 19:41 | とりあえずシナリオの仕様の変更から - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - とりあえずシナリオの仕様の変更から - 雪乃☆雫のなでしこ日和 とりあえずシナリオの仕様の変更から - 雪乃☆雫のなでしこ日和 のブックマークコメント

 なでしこで作るんだから、シナリオは、なでしこで直接書くよりはるかに、ずっと、ものすごく簡便に書けなかったら意味ないよね!

 というわけで――

①ただの文字列は全部、普通のメッセージとして扱い、行末に『。』『」』『?』『!』があれば自動的に改行、行頭に「/」(半角スラッシュ)で改ページとする。

改行コードのみで、中身のない行は飛ばす。(従ってメッセージ内に白行を入れたい場合は、行頭にスペースを入れる)

 ……という感じにした。

 これで、とりあえず文章だけをどんどん表示していくなら、簡単なはず♪

③シナリオファイルが二次元配列CSVなのは変わってないので、メッセージ内に「,」(半角カンマ)は使用不可。基本的にメッセージは全角に統一する方向にしたい。

④二次元配列の0列目が「#」の行をコメント行、「!」をコマンド、「*」をラベル、「-」を選択肢として扱う。(全て半角のみ)

⑤1列目を実際の命令として動作を振り分け、2列目以降はファイル名とかジャンプ先のラベルとかパラメーターとか。

 結局、0列目の扱いを変えて、メッセージの記載が簡単になっただけで、あんまり変わってないですかね;;;

 ともあれ、例えば、背景の表示は、

!,背景,背景画像ファイル名,トランジョン番号

 みたいな。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160110