このマニュアルは、KISSデータの拡張機能である fkissについての命令を 私T_Tenが、皆様のご協力を仰ぎつつ、かって気ままに述べた物です。 普通のKISSデータの製作は既に出来るもの として考えていますのでご注意下さい。
ローダー名 | 作者 | 動作環境 |
---|---|---|
fkiss ver 0.25 | yav氏 | fkiss の元祖。UNIX系OSで動作します。 |
WKISS.EXE ver 2.36a w0.68 | F.K氏 | Microsoft Windows3.1 で動作します。 |
WKISS32.EXE ver 0.04 | F.K氏 | Microsoft Windows95で動作します。 |
KISS21.EXE ver 1.50 | Hx2氏 | PC-9821シリーズ DOSで動作します。 |
KISSLD.EXE ver 0.07s | えむけい氏 | Microsoft Windows95 及び Windows3.1+Win32s v1.3で動作します。 |
これからの説明は、以上のローダーでの動作を目標に
fkiss ver 0.25 を基準として説明します。
しかし、全てのローダー毎の細かい違いや、バージョンによる違いを包含する
ものではないので、十分ご注意下さい。
fkiss命令におけるお約束。
fkissローダーは、これを目印にしています。
これを最初に書かないと fkiss命令は実行されません。
;@eventhandlerでは不可です。
「;@EventHandler」以降の「;@」を行頭にもつ行が
fkiss命令の記述行です。
セル記述行での「;@」はただのコメント「@」です。
たとえば、ワープロ的数え方では2行
エディタ(80桁表示の場合)的数え方では1行になる場合があります。
[*3]
そのために、Windows環境では、一行の表示桁数を変えられるエディタも
存在するので、どちらの数え方なのか、わからなくなります。
「ワープロ」的一行の数え方に設定できるテキストエディタを ご使用の方はエラーメッセージの表す行数と違う事があるので、 エラー探しの際はご注意下さい。
特にコメント機能を使用する時にはこれを超えやすいので注意すること。 これを超えると、ローダーはそれ以降の文字を読み取る事ができずに 作成者の意図した動作をしなかったり、エラーとなることがあります。
なお、「全角スペース」は、コメント領域以外では
使用しないようにして下さい。
私は、わからないときは「全角スペース」を「半角スペース2個」で
全て置換しています。
fkiss命令は、
;@[Event]命令 [Action]命令1 [Action]命令2 ..... ;注釈[RET]
の順番で構成されます。 *[RET]はリターンのこと。
なお、64個までが 元祖 fkissの保証範囲ですが、 ローダーによっては64を超えても動作する物があります。
極端な話、end()をbegin()の前に書いてもいいはずです。 しかし、わかりやすさで言えば、極端な順番表記はせずに、 initialize,begin,end の順番で命令を並べたほうがいいと思います。
そして、
ある[Event]が起こったときに、それがきっかけで指定された[Action]が起こる。
と考えて下さい。
この、「人間が何かした」事を「イベントが発生した」と言います。
fkissにおいて「イベントが発生」とは、マウスで何かをつかんだり、
離したり、セルを移動したりなどの人間がコンピュータに働きかける
事の他に、プログラム自身が、コンピュータに働きかける動作も
含まれます。
コンピュータの立場から見れば、「仕事が来た」と言う事ですね。
つまり、[Event]命令はコンピュータに[Action]命令を行わせるための きっかけを発生するものです。
が、あります。
これは入力系命令の信号を受けて、音を鳴らしたり、セルを消したり等の
様々な効果[Action]をもたらす命令です。
先に述べたように、[Action]命令は、[Event]命令に続いて いくつも記述出来ます。
... 普通のKISSデータを記述してある、と (640,400) 思って下さい。 #0 LOGO.CEL *0: 0 1 2.... #0 RIBON.CEL *0: 0 1 2.... .... .... #127 SAIGO.CEL *0: 0 1 2.... <CEL記述の最後の行と思って下さい。 ; ; <何行あけても構いません。 ; ;@EventHandler <ここから fkissデータの記述をします。 ; ;こめんと。 <普通のコメントも使用できます。 ; ;@initialize() < ;@ unmap(#1) unmap(#2) データを読み込んでから、画面に表示する ;@ unmap(#13) unmap(#14) までの間に実行する[Event]命令。 ;@... ;@initialize()から、;@begin()までの間に ;@ ... 画面の初期化の[Action]を記述できるが、 ;@ ... 現在はunmapしか使用できない事に なっています。[*7] ;@begin() ここからはじまる。本当は画面を表示する時 ;@ timer(0,1) の最初の一度だけ実行される[Event]命令。 ;@ timer(10,1) 主に、[timer]等の初期化を行います。 ;@ ;@alarm(0) ;@ map("EYE2.CEL") 普通は、 ;@ unmap("EYE.CEL") ;@initialize();@begin()から;@endまで、 ;@ 順番通りに様々な命令を記述します。 ;@ しかし、ローダーに依存するような記述を ;@... しない限り、[Event]はどの様な順番で ;@ ... 並べてもいいはずです。 ;@ ... ;@ ;@press("BUTTON.CEL");押す。 <このようにコメントを記述することも ;@ move(#8,0,20) できます。 ;@ ;@ ;@end() 終わる時の[Event]命令。 ;@ sound("SAYONARA.WAV") というより、終了ボタンを押したときに ; この[Event]に続く[Action]を実行します。 ; *0 123,223 21,23 54,126 ..... <位置データが書いてあるはずです。 ....
また、ローダーによってはinitializeでこれ以外の命令が実行できて
しまいます。
たとえば、timerはbegin以下で記述することが望ましいのですが、
その理由はtimerをinitializeで実行すると、皆様のお持ちのマシンの速度
により、initializeからbeginまでの処理実行時間が異なっているので
せっかく作成したデータが、他のマシンでは思った通りの動作をしないこと
もあります。
なので、将来のためにも、できるだけ仕様にあわせて使用しましょう。
;@EventHandler fkiss命令実行におけるお約束。 これを書かないと、fkissは動かない。 ;@eventhandler は不可。 大文字、小文字も正確に書くこと。 イベント拡張の識別子である。 また「;@ EventHandler」と空白をあけて記述すると 現在は、WKISS v0.68c/WKISS32/KISSLD v0.07q以降 でしか動作しない。
;@initialize() 実行前(画面表示前)の [Event] 初期化(initialize)を行う。 初期化の時に正式に使える[Action]は nop, debug, shell, unmap. の4つだけで、実用になるのは unmapだけであろう。 それ以外の[Action]は動作の保証が出来ない。 timer も使えるが、画面の初期化時間は マシンに依存するので、一般性のあるデータを 作成する為にも、timer は ;@begin() 以下で使用した方が望ましい。
;@begin() ここからはじまる。というより、 [Event] 初期化し終えた時に一度だけ実行する [Event]命令である。 これに続いて良く使用される[Action]は timerである。 想像次第で何でも記述可能。
;@end() 終わる。というより、終了を選択したときに [Event] 実行される[Event]命令である。 終了時に効果を狙う事が可能で、 さよならメッセージを示すのに便利である。
ここでは、
;@begin() から
;@.....
;@.....
;@.....
;@end() で、
はさまれる ;@..... で表された行の命令群について説明します。 [*8]
の2つに分けられると思います。
以下、その2つに分けて説明します。
[Event]の記述順ですが、;@EventHandler 以降の[Event]の 順番の制限はないはずです。 なので以下の例のように、
.... ;@end() ;@ sound("BYE.WAV") ;@begin() ;@ timer(0,500) timer(12,1000) ;@initialize() ;@ unmap("HOEHOE.CEL") unmap("HYOEHYOE.CEL") ....の順に[Event]を記述しても動作しますし、文法的に間違いでありません。
このマニュアルを作成し始めた時は、多くの既存データーの記述順より
先入観が有りましたので、時間軸にそった説明をしています。 m(__)m
動作順に書いた方が、あとでわかりやすいですしね。(^^)
;@begin()
;@ timer(n,t)
として、最初から動作
させること。
;@press("xxx.CEL")
;@ timer(n,t)
等、あるマウス入力をきっかけに
動作させること。
など、ができます。
どちらにしろ、上記のように (n)番目のtimerをセット及び起動してから、
;@alarm(n) | [Action] [Action] ....... timer(n+1,t1)[RET] |
;@alarm(n+1) | [Action] [Action] ....... timer(n+2,t2)[RET] |
;@alarm(n+2) | [Action] [Action] ....... timer(n+3,t3)[RET] |
;@alarm(n+3) | [Action] [Action] ....... |
のように連続して記述すると良いです。
timerの番号を繰り返すように指定すると、延々と[Action]を繰り返します。
以下のように命令の最後にrandomtimerを使用すると、目ぱちにぴったりです。
;@alarm(n) [Action] [Action] ... randomtimer(n+1,t,a)[RET]
;@alarm(n) その性質からラベルみたいな物と思う。 [Event] 自動入力系命令の、timer(n,t)と、 (n=0,1,2,3... randomtimer(n,t,a) によって 上限はローダーによる) この行へジャンプしてくる。 なので、[Event]begin()などに記述された [Action]timer(n,t)によって呼び出されないと alarmだけでは何も実行できない。 {;@}timer(n,t) 時間 t 後に alarm(n)を呼び出す。[*10] [Action] (BASICで言えば、 「IF timer=t THEN GOTO alarm(n)」 の様な物だとT_Tenは思っています。) timerの中の n には正の正数。[*9] t は、時間であり、1 は0.001秒に相当する。 t=1000なら、 1秒である。 [Event]begin()の後によく初期化と称して 記述されるほか、[Event]alarmの最後に よく使われる。 {;@}randomtimer(n,t,a) 使用法はtimerとほぼ同じ。 [Action] t 〜 [t + (a - 1)] 時間の間の[*11] ランダムな時間で、 alarm(n)で指定される行を実行する。 少なくとも必ず t時間は経過する。 aを 0または 1とすると、timer(n,t)と同じ。 aが小さいと t時間以降の時間間隔は短くなり aが大きいと t時間以降の時間間隔は長くなる 傾向がある。 ただし、 tは 0以上 32767以下、 aは 0以上 32767 - t 以下の値である。
randomtimer の第3引数[a] が大きければ、第2引数[t]時間経過後の
さらなる経過時間のばらつきが大きくなります。
よく使用されそうな例としては、クリックのたびに表示/非表示を
;-----------------ブラインドの表示/非表示------------------- ;@press("SWITCH.CEL") ;@ altmap("BLIND.CEL") ;表示/非表示 ;@ sound("SHU.WAV") ;効果音(無くてもぜんぜん構わない) ;------------------------------------------------------------
1:指を押すか離すか。(マウスの状態に依存する。) [*12] ;@press("CELNAME.CEL") マウスポインタを"CELNAME.CEL"で指定した [Event] セルに持って行き、そのときあなたの指が、 マウスを左クリックしたときに これに続く命令を実行。 つまり、セル上でマウスを左クリックした とき。 ;@release("CELNAME.CEL") 既にあなたは"CELNAME.CEL"で指定したセルを [Event] 左クリックしていて、その状態から指を離した ときにこれに続く命令を実行。 セルの移動後の位置や重ね合わせ unmap/altmapとは無関係。 [*13]
2:セルをつかむか離すか。(マウスの状態に依存しない。) ;@catch(#n) マウスポインタで、 [Event] 番号 #n で指定されたオブジェクトを つかんだときに、これに続く命令を実行。 pressとcatchの違いは現状では あまり無いらしい。 どちらでも良い場合は pressを推奨。[*14] ;@drop(#n) マウスポインタで、 [Event] 番号 #n で指定された既につかんでいる オブジェクトを離したときにこれに続 く命令を実行する。 セルに固定値が設定されている場合、 マウスのボタンを押していても、 セルが自動的に元の位置に戻った場合も dropとみなす。
3:固定値と比較してどうか。(マウスの状態に依存しない。) ;@fixcatch(#n) 固定値が 0でない場合、 [Event] 固定値が設定されている、番号 #nで指定 されたオブジェクトを、つっついたときに これに続く命令を実行する。 固定値が 0になると、この命令は 発生しない。 ;@fixdrop(#n) 固定値が 0でない場合、 [Event] ぺしぺししていると、セルがちょっとだけ 移動できるが、 そのときに、番号 #n で指定した既に つかんでいるオブジェクトを離したときに これに続く命令を実行する。 [*15] 固定値が 0になると、この命令は 発生しない。 ;@unfix(#n) 番号 #n で指定されたオブジェクトの [Event] 固定値が0になったとき、これに続く命令 を実行。 [*16]
4:セットや色を変えたときに。 ;@set(n) セット番号を、 n番に変えたときに [Event] これに続く命令を実行。 ( nは 0〜 9の整数 ) ;@col(n) カラーを、n番に変えたときに [Event] これに続く命令を実行。 ( nは 0〜 9の整数 )
マウスの入力をうけて、その結果マウスポインタは
セルをつかんだり(移動可能にすること)離したりしますが
固定値などの条件により、マウスボタンを押していても、マウスポインタは
セルを離している(移動不能であること)ことがあります。
これが本家fkiss で設定されているpressとcatch等の違いだと思います。
現時点では、WKISS,WKISS32,KISSGAでは固定値の設定されているセルが、
元の位置に戻った時点でも releaseを発生します。
例えば、固定値の設定されているセルを pressしてその状態で
マウスを移動させただけでreleaseが発生してしまいます。
本来この動作はdropのはずです。
注:1997/10/31
未公開版WKISS32 v0.04c 以降で修正済です。
元祖fkissでは、固定値が設定されているオブジェクトのうち
最大の固定値をもつものを(複数可)「最大固定オブジェクト」と言い、
決して移動できない事になっています。
最大固定オブジェクトのみcatchできません。
最大固定オブジェクトは 固定値が減算されないので、
愛と情熱は実らないのです。
WKISS,WKISS32,KISSGA,KISSLDには、「最大固定オブジェクト」
という概念は無く、
必ず愛と情熱は報われる事になっています。(笑)
なお、オブジェクトに固定値が残っているときは、 fixcatch/fixdropはcatch/dropと一緒に発生します。
{;@}nop() 「何もしない」という動作。 [*17] [Action] {;@}unmap("CELNAME.CEL") "CELNAME.CEL"で指定されたセルを、 [Action] 画面から、消去する 命令「map("CELNAME.CEL")」や 命令「altmap("CELNAME.CEL")」等で 再び画面に表示される。 {;@}map("CELNAME.CEL") "CELNAME.CEL"で指定されたセルを、 [Action] 画面に(再)表示する。 {;@}altmap("CELNAME.CEL") "CELNAME.CEL"で指定されたセルが、 [Action] 表示されていれば、画面から消去し 画面から消去されていれば、(再)表示する。 {;@}move(#n,x,y) #nのオブジェクトを [Action] 右へ xドット、下へ yドット移動させる。 普通のグラフ座標とは違い、画面座標である ことに注意。 {;@}sound("WAVEFILE.WAV") "WAVEFILE.WAV"で指定されたファイルを [Action] 効果音として、鳴らす。 Windows,DOSで再生可能な音は主に 拡張子が"*.WAV"のファイルだが fkissローダーによって鳴らす事のできる 音声ファイルの形式は異なっている。 {;@}changeset(n) セットを n番に変える。 [Action] ( nは 0〜 9の整数です。) {;@}changecol(n) 色を n番に変える。 [Action] ( nは 0〜 9の整数。) {;@}quit() 遊んでいるデーターを終了させる。 [Action]
[Event]命令も、[Action]命令も、「;@」直後に書く必要性は全くあり ません。行頭に「;@」があれば、半角スペースで見やすいように位置調整 をしても、記入場所はどこでもいいはずです。
でも、大抵の場合、[Event]命令は、「;@」の直後に 書くんじゃないかなと.......皆様のご自由にどうぞ。(^^;;
----いきなり例---------------------------------------------------------- #9 RIBON.CEL *0 : 0 1 2 ;りぼん #7 SH_COL.CEL *0 : 0 1 2 ;シャツのえり #8 TIE.CEL *0 : 0 1 2 ;ねくたい #7 SH_ARM.CEL *0 : 0 1 2 ;シャツのうで #7 SH_BODY.CEL *0 : 0 1 2 ;シャツのからだ #6 GPAN.CEL *0 : 0 1 2 ;じーぱん ------------------------------------------------------------------------上の例では、RIBON.CEL SH_ARM.CEL .... GPAN.CEL 等が セルファイル名。
ただしセルファイル名を直接記入するときは
示している通りに "" (ダブルクォーテーション)で囲んでください。
逆に、引数をオブジェクト番号で指定する時は "" で囲んではいけません。
【3】章の「命令の説明、一覧部分」では、
セルファイル名とオブジェクト番号を区別して書いてありますが、
これが 元祖fkissで説明されている引数の指定方法です。
それ以外の指定については、動作の保証が出来ません。
fkissには、オブジェクトのmap/unmap/altmapは間違いと書いてあります。
オブジェクトは非常にたくさんのセルから構成されていることもあるので、
その場合には非常に重い動作になってしまう場合もあるからです。
しかし、多くのローダーは、既に出回ってしまったデータの互換性の為に オブジェクトのmap/unmap/altmapを一応出来るようにしてはいます。
>・引数のない命令の場合、カッコは省略できるか > たとえば、 > >|;@initialize ダメです. fkissは,パーサが手抜きなんで,これでも通ってしまいますが, やっぱりカッコがついてたほうがカッコいい............. (ひゅうぅぅぅ..) >・引数にセルやオブジェクトを取る命令 > map/unmap/altmapについては、オブジェクトの指定は不可である、と明言さ >れていますが、それ以外の命令に関しても、FKISSEX*.DOCで触れている組み合 >わせ、つまり > > press/releaseはセルとオブジェクトの両方 > catch/drop/fixcatxh/fixdrop/move/unfixはオブジェクトのみ > >が有効で、それ以外は保証されないと考えるべきでしょうか? そのとおりです. とくに,moveについては,(あとあとのことを考えると) セルでの指定はしないほうがいいと思います.
また、オブジェクト番号とセルファイル名の両方を使用した場合、 矛盾した指定をしないようにしてください。