JavaScriptが無効です。ダウンロード:
HTML5 KISS
これは何?
いわゆるHTML5 対応Webブラウザの標準機能だけで、KISekae Set system (KISS)のデータを表示します。LZH書庫の展開も行います。Java VMやプラグインなどは一切必要としません。
読み取るのは純正のKISS/GS 形式のデータそのものです。ブラウザからアクセスしやすくするための事前変換などは一切必要ありません。
何がうれしいの?
実用的な意味はあまりありません。ぶっちゃけ、新規にWeb着せ替えを自作するならsiori でも使ったほうがよほど高速で古いブラウザとの互換性も高いでしょう。KISSデータをWeb上で遊ばせるにはきすちょこ やJavaアプレット版KISS などの選択肢もありましたが、最近のブラウザやJava実行環境では困難になりました:
(2018-03-20追記)Java 10 (18.3)から、Javaプラグインは廃止されました。Java 10のリリースに伴いJava 9のサポートは終了したため、現在サポートされていて、アプレットを使うことができるJavaバージョンは8のみです。
(2016-11-25追記)Oracleは、JDK 9からJavaプラグインを非推奨にすると発表しました 。(2018-02-03追記)Java 6u171とJava 7u161からJavaプラグインが削除されました 。
(2015-11-05追記、2018-02-03更新)Mozilla Firefoxはバージョン52以降、Flash以外のNPAPIプラグインのサポートを終了したため、Javaアプレットは動作しなくなりました。またWindows用64bit版はそれ以前からFlashとSilverlight以外のNPAPIプラグインのサポートを廃止していたので、Javaアプレットは動作しません。
(2015-09-02追記)Google Chromeは、バージョン45以降(Linux版はバージョン35以降)NPAPIプラグインのサポートを廃止したので、Javaアプレットは動作しません。
(2015-04-17追記)Windows 10のMicrosoft EdgeはカスタムActiveXコントロールをサポートしない ので、Javaアプレットは動作しません。
Linux版のGoogle Chromeでは、バージョン35以降Javaアプレットの実行がサポートされなくなりました(参照: Issue 363053: IcedTea Java Plugin not recognized with 35.0.1916.27 beta aura )。)(2015-04-17追記)また、全プラットフォームのChromeでバージョン42以降、Java Plug-inを含めNPAPIプラグインが既定で無効化されました。
Java SE 7u11 以降、既定で無署名のJavaアプレットの実行前に警告が表示されるようになりました。(2014-01-29追記)またJava SE 7u51 以降、無署名のJavaアプレットの実行は既定でブロックされるようになりました。
Windows 8では、MetroスタイルのIEはプラグインをサポートしない ので、Javaアプレットは動作しません。(2013-07-28追記、2014-04-22更新) 現時点でJava Plug-inはIE10以降の拡張保護モードに対応していないので、デスクトップ版のIEでも拡張保護モードを有効にするとJavaアプレットは動作しなくなります。JRE 7 Update 51以降、Windows 8.1のIE 11では拡張保護モードに対応したようです。IE9以降のActiveXフィルター が有効だとJavaアプレットの実行はブロックされます。またGoogle Chrome 11 (Chromium Revision 72766 )やFirefox 26 以降ではデフォルトでJavaアプレットがブロックされ、実行にはユーザーの許可が必要になっています。
これに対して、HTML5版をデフォルトでブロックするブラウザは今のところありません(ブラウザが古くて動かないことはありえますが)。
そのほか、次のような点についてはJavaアプレット版よりメリットがあります。
Javaアプレットの領域上でホイールを回してもほとんどの場合ブラウザはスクロールしません。JRE 6 Update 21でほぼこの問題は解消したようです。HTML5版はブラウザに組み込みの機能で表示を行っているので、ホイールスクロールを妨げません。
Javaアプレットによる実装はブラウザのズームに追随しません。プラグインAPIに現在の拡大率を知る方法が提供されていないので、Javaアプレットでは原理的に対応困難です。HTML5版はブラウザのズームに合わせて自然に拡大・縮小されます。…と思っていたのですが、Canvas 2D Contextの仕様とW3Cのメーリングリストを見直していたら、ImageDataオブジェクトのwidthとheightはデバイスピクセル単位で、createImageDataで指定するCSSピクセル単位の幅や高さと同一になるとは限らないという衝撃の事実が判明しました。つまり原理的にはズームするとバッキングストアのビットマップのサイズも変わる実装のブラウザがあってもいいようです。現物にお目にかかっていませんが。
(2013-06-13追記) アプレットの表示領域はHigh DPIモードでも自動的に拡大されません。
いっぽう次のような点はJavaアプレット版に劣ります。
第二次ブラウザ戦争の結果JavaScriptの実行速度が飛躍的に向上しましたが、それ以前のちょっと古いブラウザではロードが非常に重いです。10年以上前からJITコンパイルをサポートして高速化を重ねてきたJavaと比べると、この点は大変に不利です。
JavaScriptの組み込み型にはバイト配列が存在しないので、解凍データやセル画像の保持のためメモリを大量に消費します。この点も、強く型付けされているJavaより不利です。この点はCanvasPixelArrayオブジェクトやTyped Array のサポートにより改善するかもしれません。
HTML5版は古いブラウザが本質的にサポートしていない機能を必要とします(バイナリデータの読み取り、ピクセル単位の画像データ操作など)。その代わりiPadなどでも動くかもしれません(未確認)。(2011-04-29) iOSにはマウスがないので、少なくともタッチ用のイベント処理を書き足さないと動かないようです。
技術情報
更新履歴
2024-08-20
letfixを実装(puzzconc.lzh/puzzfk3.cnfが使用)。
ghostの実装以来、セルの隙間やghost化されたセルを通して下のセルにマウスイベントが伝わらなくなっていた問題を修正。
2024-08-19
ghostを実装(mbk.lzhのMBK-FK3.CNFなどが使用)。データがPlayFKiSSのバグを前提にしているかどうかは自動判別する。
movebyyアクションの移動量で変数をサポート(mbk.lzhのMBK-FK3.CNFなどが使用)。
未サポートの箇所で変数が使用されていたときfkissバージョンの判定を誤る問題を修正。
"!"をfkissトークンとして使用できる文字に追加(FKiSS4グループ指定を少なくともパースできるようにするため)。
randomtimerアクションの第2・第3引数で変数をサポート(whksanta.lzhが使用)。
initializeイベント中でtransparentアクションにより設定した透明度が表示に反映されない問題を修正(whksanta.lzh対策)。
changecolの引数で変数をサポート。colイベント、letcatch/letpalアクションを実装(いずれもk-hanoi.lzhが使用)。
quitアクションのダミー実装(quitを要求されたことをログ出力するのみ)を追加(k-hanoi.lzh対策)。
FKiSS2.1以下の未実装命令はversionイベント起動の判定対象としないよう変更。
パレット組を変更してからセットを切り替えて戻ってくるとパレット組の変更が失われる問題を修正。
2024-08-12
overflow/exitevent/mod/letinsideを実装(PlayFKiSS 0.83b付属のCALC.LZHが使用)。
letobjectxを実装(PlayFKiSS 0.83b付属のBALLS.LZHが使用)。
未知または未実装の文法やアクション・イベントがない場合、FKISS4(versionの引数5)まではversionイベントを起動するようにした(FKiSS3以上を完全実装するつもりはあまりないため)。
gosubなどのアクションで変数を使用するとFKiSS4と誤認する問題を修正(ロード時のバージョン表示に影響するのみで、動作に問題はない)。
セル指定行のセルファイル名が二重引用符(")で囲まれていても認識するようにした(PlayFKiSS 0.83b付属のCALC.LZH対策。PlayFKiSSとUltraKiss互換だが、DirectKiSSは対応していない模様)。代わりにセルファイル名に二重引用符(")を使えなくなった(KISS/GSではもともと禁止されているしこれで読めなくなるデータはないと思うが)。
2024-08-07
乱数が指定された範囲で正しく一様に生成されていなかった問題を修正。最大値が指定より1つ小さくなる、負数から正数の範囲を指定されるとゼロの出現確率が2倍になるうえ最小値も指定より1大きくなる等の問題があった。
2024-08-05
Firefoxで音声の再生が中断されたときwebコンソールにエラーメッセージが出る問題を修正。ただしエラーを握りつぶしているだけなのでときどき音が鳴らない問題は解消しないようだ。
randomtimer/moverandx/moverandy/movetorandが非整数値の乱数を生成していた問題を修正。collideの判定が正しく行われなくなるなどの実害が生じていた。
unmap状態で重なったセルがmapされたときcollideが発生しない問題を修正(厳密にはmapされたときではなく、その次にmoveしたときにcollideが発生する)。Bio Lady by SHIN.lzhで意図した衝突判定が行われない原因だった。ただしPlayFKiSSやDirectKiSSではcollideが発生しないようで、このデータがKISSLD依存だった模様。
fkissのmove系アクションで画面右下方向の移動制限を実装。Bio Lady by SHIN.lzhで敵機が右端の画面外に出ていって戻ってこない問題が発生していた。
2024-08-04
goto/gosub/gosubrandomのジャンプ先引数で変数をサポート(Aurelie_Stormbringer_Kiss_Doll_by_LessRuthがgosubで使用)。
letmousex/letmouseyを実装(Aurelie_Stormbringer_Kiss_Doll_by_LessRuthが使用)。
ロード直後にsetイベントを発生させる。fkiss、KISSLD、PlayFKiSS、DirectKiSSでも発生する。本家で発生するのだから仕様と言っていいだろう(ただしset→version→beginの順で他のローダーとは逆順になる模様)。Aurelie_Stormbringer_Kiss_Doll_by_LessRuth.lzh(セット0のunmap)やBinael Mary-chan's Kiss dolls.lzh(初期表示される翼の種類)がこの動作に依存している。
2024-08-03
subアクションを実装(Astronaut.lzhが使用)。
addアクションで演算結果が32ビット整数の範囲を超えないよう調整(overflowイベントは未実装)。
move系アクションで移動量に変数を指定できるようにした(Astronaut.lzhなどが使用)。
elseアクションが正しく動作していなかった(else節を常に実行していた)問題を修正。
pressなどのイベントの引数に存在しないセルが指定されていたとき、例外が発生していた問題を修正(asuka2.lzhで発見)。
mul/div/random/letsetを実装(Aurelie_Stormbringer_Kiss_Doll_by_LessRuthが使用)。
transparentの第3引数とtimerの第1引数で変数をサポート(Aurelie_Stormbringer_Kiss_Doll_by_LessRuthが使用)。
2024-07-29
gosubrandom/let/add/letobjecty/ifnotequal/ifgreaterthan/iflessthan/elseを実装(Angel.lzhが使用)。
未実装のFKiSS4の拡張構文を検出してコンソールに警告を出力するようにした。
データ読み込み時、コンソールにKISS/GS規格やfkissなどの準拠レベルを出力するようにした。
initializeイベント中でmusicを実行したときエラーになる問題を修正(再生はされない)。
移動したオブジェクトに所属するセルがcollideの引数で指定されていても、所属する最初のセルでなかった場合にcollideイベントが発生しない問題を修正(ansby Mezzochan.lzhで発覚)。
2024-07-29
changesetアクションを実装。
label/goto/gosub/letmapped/letcollide/ifequal/endif(FKiSS3)、文字列ラベル(FKiSS4)を実装(Anajime by Elisa.lzhが使用)。変数の実装は非常に限定的で、長さは32文字まで認識する(FKiSS4仕様)が今のところ整数のみ格納可能(FKiSS3仕様)で、letmapped/letcollide/ifequalでのみ認識する。
shellアクションを実装。ただし渡された文字列をコンソールに出力するだけで、当然コマンド実行は行わない(できない)。一部ローダーは渡された文字列をURLとして開く機能をサポートしているが、KISSデータの古さから考えてURLが無効になっている可能性が高いので、これも対応していない。
in/out系イベントとsetのみならず、すべてのイベントを実行中に再度ネストして発火したときは無視するようにした。ただし実際に影響を受けるのはlabelだけで、残りのイベントはそもそもネストすることがないはず。
2024-07-26
セットの切り替えに時間がかかったときReferenceErrorが発生していた問題を修正(多数のデータ読込後HORNDALE_-_Misaki-chan.LZHで発生していた。具体的にはtimer_idを参照できるようchangeset_baseを移動)。
現在shell/quite/changeset/windowsize/viewportアクションは何もしないしcolイベントは決して発生しない空実装なので、未実装の警告を出すようにする。
2024-07-25
書庫の末尾にだけエラーがあるが必要なファイルは問題なく読み込めるデータがまったく開けない問題を修正(Yuki_Saegusa_-_Gundam_Gal.lzh対策。unlzh.jsの修正による)。
2024-07-23
WAVコンテナー+μ-lawコーデックの音声ファイルに対応したブラウザーで.au形式ファイルの再生に対応(yav_-_Fly_Me_To_The_Moon.lzh対策)。
soundで鳴らしているBGMはデータを閉じたとき強制停止する仕様に変更。ただしendイベント中のsoundは停止の対象としない(実際に使っているデータが存在するうえ、endイベントでそんなに長い音声を鳴らさないだろうと仮定)。
8-bitリニアPCMの.au形式ファイルに対応(Dov_Sherman_-_Cinder.lzh対策)。
sound/musicで同じ音声ファイルの再生が何度も出現すると、その都度無駄に同じファイルから何度も読み込んでいた問題を修正(実際はキャッシュしているのでそこまで無駄ではなかったようだが8-bitリニアPCMでは毎回変換が走ってしまう)。
同じ書庫内から同じ8-bitリニアPCMの.au形式ファイルを読み込む別のCNFに切り替えたとき、音が壊れる問題を修正(Dov_Sherman_-_Cinder_v3.lzh)。
2024-07-22
複数のCNFを含むLZHを読み込んだとき、CNFを選択できるようにした。
読み込めなかったセルがあるとき、canvasの個数と内部で管理しているセル情報の個数の食い違いにより、セット切替時にエラーが発生していた問題を修正(yav_-_Rei_Hino_Exp1-4.lzh)。
読み込めなかったセルがあるとき、一部のfkiss命令(map系とtransparent)がうまく動作していなかった問題を修正(Momochin_-_Tatebayashi_Miharu.lzh / OMAKE.CNF)。
音声ファイルが見つからなかったとき、エラーが発生して読み込みに失敗する問題を修正(MIDI対応時のデグレ。frkismi4.lzhで発見)。
オブジェクト番号(マーク)がセット情報に含まれているオブジェクトの座標情報の数より多いとき、move系命令が効かない問題を修正(2024-07-17修正時のデグレ。frkismi4.lzhで発見)。
move系命令で負の座標へ移動できないように仕様を戻す(2024-07-17修正時の既知の問題。frkismi4.lzhで問題を確認したため対応)。
2024-07-21
MIDIjs を使ってmusicでのMIDI再生に対応(Sailor Senshi.LZHなど)。外部サイト依存はできれば増やしたくないが…。
IEでは非標準のbgsound要素を使って.wavの再生に対応(BlobをサポートするIE10以降が必要なことには変わりない)。IE11でもbgsoundのサポートが続いていたのはちょっと驚きである。
旧形式のパレットファイルを使用しているデータで、セット情報に不正なパレット組番号が含まれるという警告を誤って出力することがあった問題を修正(EVE_-_Rei_Ayanami.LZHなど)。
パレットファイル内のパレット組数にかかわらずパレット組番号0-9の指定は不正とみなさないよう変更(Tanuki_-_Ellis.LZH対策。しかし実際PlayFKiSSではロード直後に色がおかしくなることがあるので、警告したほうがいいのかもしれない)。
2024-07-20
ducanvas.jsにES5のshimをいくつか追加してIE8サポートを復活させたので、コメントアウトしていた記述を一部復帰。ただしFlash Playerのサポート終了によってほとんど無意味になったFlashCanvas関連の記述はコメントアウトしたまま(公式サイトも消えているみたいだし…)。
2024-07-19
in/out/stillin/stillout/collide/apart/versionを実装。これによりFKiSS2.1に対応。
movebyx/movebyyがそれぞれ正しくY座標/X座標を保存しない問題を修正。
本家fkissでも長らく未実装だったleftside/rightside/upside/downsideが、v0.30のFKiSS2.1対応に伴いソースコードやドキュメントからも完全に消されたことに追従して削除。おそらく実装しているローダーも使っているデータも存在しないので実質的には何も影響ないと思われる。
2024-07-17
movebyx/movebyy/moveto/moverandy/moverandx/movetorandを実装(Bio Lady by SHIN.lzhなどが使用)。
オブジェクトを動かしてからセットを切り替え、元のセットに戻ってくると移動したオブジェクトが初期位置に戻っている問題を修正。
イベントが1つも出現しないうちにアクションが出現したときエラーになっていた問題を修正(Black Lady.lzh対策)。
notifyとdebugの引数が日本語文字を含んでいるとき文字化けする問題を修正(Block Editor.lzh対策)。
soundとmusicを実装(現時点ではLZH圧縮されている場合に限り対応)。
iffixed/ifnotfixed/ifmapped/ifnotmapped/ifmoved/ifnotmoved/setfixを実装。
2024-07-16
";@"の後に空白のみが続く行が存在するとエラーになってCNFの読み込みそのものに失敗していた問題を修正(akiba1024.lzh対策)。
fkissのオブジェクト指定でオブジェクト番号に0を前置しているとき番号を正しく解釈できない問題を修正(akiba1024.lzh対策)。
セルファイル指定行の"*"とパレットファイル番号の間に空白があるとパレットファイル指定を認識できず、以降の内容(セット番号指定など)もすべて読み飛ばされてしまう問題を修正(k_athe01.lzh対策)。
巨大なコンフィグファイルの読み込みでエラーになっていた問題を修正(Aurelie Stormbringer対策。コンフィグファイルのサイズ510,050バイト)。
セット情報に不正なパレット組番号を含むデータの読み込みでフリーズすることがある問題を修正(Auxiee対策)。
notifyを実装(Azuko.lzhなどが使用)。メッセージの出力先はwebコンソール。
2024-07-15
2023-01-18
2023-01-17
navigator.msSaveOrOpenBlobを使ってIE10以降/IEモード/EdgeHTMLでの画面キャプチャーに対応(今さら…)。
2023-01-15
画面キャプチャーのSVGでhref属性の代わりにxlink:href属性を使うよう変更(Inkscape 1.2.2 / Krita 5.1.5 / その他古いSVG実装対策。またhref属性だとW3Cのvalidator でSVG 1.1を指定したときもエラーになる)。
画面キャプチャーのSVGでvisibility属性ではなくdisplay属性を使うよう変更(Inkscape 1.2.2 対策。またvisibility="hidden"だとpointer-eventsが透過しない点も不適切)。
透明度が未設定のimageにも値が空のopacity属性が設定されてしまう問題を修正(MediaWikiのSVGラスタライザーが空のopacityをopacity="0"と誤認する問題の対策)。
2023-01-09
現在の画面キャプチャーをSVG形式で保存する機能を追加([Cap]ボタン)。
2023-01-08
fkissイベント拡張を無効化もしくは@initializeのみ実行するオプションを追加。
2015-12-31
二重アーカイブの追加セットによるファイル名の上書きが正しく行われないことがある問題を修正(kissdata;n=68。regression testでkissdata;n=118,317,335,468,478あたりを確認)。
2015-12-29
追加セットによるDOSファイル名の上書きが正しく行われないことがある問題を修正(kissdata;n=255)。
三重アーカイブ対応。
2015-12-22
LZHファイルを指定しているときはコンフィグファイル名を省略できるようにした(省略時は最初に見つけた拡張子.cnfのファイルを使う)。
2015-12-05
IE8ではおそらく動作しなくなったのでIE8に関する言及をコメントアウト。
DOSファイル名生成のバグを修正。
セット情報($コマンドと継続行)の行末に空白があると正しくパースできない問題を修正。
同一オブジェクトの複数セルに固定値が設定されている場合の計算方法を修正(合計ではなく最大を取る。kissdata;n=24など)。
固定値の設定されたセルが1つもないと最大固定値が0になってオブジェクトをまったく動かせなくなる問題を修正。
パレットインデックスが範囲外だったときは「*0」とみなしてロードを続行(kissdata;n=241など)。
ディレクトリ付き書庫の展開を改善(kissdata;n=317;moon_r.lzh対策。その他n=53,335,413,419など)。
「;@」のみの行でパースエラーが起きていた問題を修正(kissdata;n=481,482,538など)。
とりあえず解凍結果をキャッシュ(キャッシュが役に立つことはほとんどないからメモリを節約したほうがいいか?)。
二重アーカイブ対応(kissdata;43,53,64,66,67,68,76,173,202,335,413,414,419,432,434,436,468,473,474,475,478,495,496,500,520,531,532,543)
セルが見つからないときできるだけロードを続行するようにした(kissdata;118,242など)。
パレットファイルが見つからないときはPC-98のデフォルトパレットを使用してロードを続行(kissdata;n=407など)。もちろん正しい色で表示できるわけではないが。
大文字の%Tも透明度指定として認識するようにした(kissdata;n=407;cnfname=ellis3.cnf)。
不正なセル指定行があってもロードを続行するようにした(junkdata;n=129)。
コメントを含むセット情報に対応(kissdata;n=528)
initializeイベントが正常に動かない問題を修正(kissdata;n=375,423,528)。ちなみに528はKISSLDでも正常にイベントを解釈できなかった(向かって右のおさげが切り替わらず残る。)
セット情報が10個に満たず、セット情報の存在しないセットに切り替えようとしたとき、エラーになっていた問題を修正(KISS.EXEやKISSLDと同様セット0から情報をコピーする)(kissdata;n=379)。
kissdata;n=439,477でfkissを認識しないのは仕様(";@EventHandler"はcase sensitive)。
kissdata;n=514 最大固定値のオブジェクトでcatchイベントが発生しないのは仕様。
move命令の移動制限を左上方向のみ実装(kissdata;n=533など)。
setイベントを実装(kissdata;n=536などで使用)。
changecolアクションを実装(kissdata;n=413(angel11),536などで使用)。
既知の問題・ToDo
背景色がDark Readerの影響を受ける。
fkissデータの初期表示時にsetイベントが発火しない(ki_alask.lzh、Blythe.lzhなどの初期表示が正しくない)。本家fkissの仕様?
画面より大きいセルがあっても画面を拡張しない(ki_alask.lzhなど)。
PlayFKiSSが生成するCNFではセット情報行("$")の座標指定に負の値が入っていることがあるが、そのときの解釈がKISSLDと異なる(がPlayFKiSSとは一致する)ようだ(Aline、Sailor Senshi.LZHなど。KISSLDで見たときのほうが背景のセルが意図した位置からずれているように見えるけど)。KISSLDでは「セルの画面外への移動を許可」の設定にかかわらず負の値を0に補正するが、PlayFKiSSは負の座標をそのまま採用する模様。PlayFKiSSではセルが画面からはみ出せるかどうかはTools > Options > GUI > Boundingの設定によるようだ。Compatible=はみ出し不可、Enhanced(デフォルト)=周囲の透明な部分のみはみ出し可、None=制限なくはみ出し可となる模様。ただしはみ出させてから制限を強める方向に設定を変えても、セルを動かすかTools > Patrol Boundsを使用するまではみ出したままになるらしい。
FKiSS2/2.1/3のサポート。
ifmapped/moveto/collide: k_athe01.lzhで使用。
in/movebyx/movebyy: PlayFKiSSにはオブジェクト位置の自動補正を行うFKiSS2イベントを自動生成する機能があるらしく、非常に多くのデータが使用している。
ifnotmapped/ifnotfixed/iffixed: Ayumiで使用。
Azi.lzh: セット1以降の背景がずれる。そうなるようなセット情報が定義されているが、KISSLDではなぜかずれない。
Bianca.lzh: version/ifmapped/ifnotmapped/ifmoved/in/moveto/setfix/out/ifnotmoved/ifnotfixed
オブジェクトをユーザー操作で移動する場合の現行の仕様は以下の通り。オブジェクトはちょうど画面に外接する(ギリギリ画面内に見えない)位置まで動かせる。ただしオブジェクトの幅(=所属するセルのうちもっとも横幅が大きいもの)が画面幅以上になった場合、そのオブジェクトは画面から横にはみ出すことができない。高さについても同様。またオブジェクトが画面より大きいとき、位置補正のコードがややバグっている模様(それがbutter cup.lzhでの怪しい動作の理由)。fkissのmove系アクションでの動作は画面からはみ出さないよう修正された。
90 Seconds.lzh: 上記の仕様によりブロックの移動制限が意図したとおりに行われない。
他のローダーはfkissイベント名の大文字小文字を区別していないかもしれない(Black Lady.lzhでInitialize(先頭大文字)イベントが発火しているように見える)。
Bluniverse.lzh: (2024/07/17更新以前から同様)ghostを使っているが未使用の変数(つまり0)を第2引数に指定しているので、意味のある使い方ではない。右下の人形(haze.cel)の位置がKISSLDと一致しない(たぶんmove_toのはみ出し関連)。
board2.lzh: (2024/07/17更新で変化)2本めの矢が画面からはみ出す(たぶん移動制限関連)。PlayFKiSSだとまた矢の位置が異なる。もう何が正しいのやら…。
Bra.lzh: (2024/07/17更新以前から同様)右上の服の初期位置がKISSLDと異なる(がPlayFKiSSとは一致しているようだ)。
Buchi Mel's Kiss Dolls.lzh: (2024/07/17更新以前から同様)セット0の白背景がKISSLDだけずれている。
butter cup.lzh: (2024/07/17更新以前からの既存バグ)画面がセルの大きさに合わせて拡張されない。背景をグリグリすると表示がおかしい(はみ出し処理のバグっぽい)。
DirctKiSSの仕様 によると、setfixによってドラッグ中のオブジェクトに固定値がつけられた場合fixdropイベントが発生するそうだが、未実装。
セットの切替えに伴うオブジェクトの移動で、collideは発火しない(発火するローダーもある が、標準的な動作ではないらしい)。
in/out系イベントはマップ状態やセットに存在しているかどうかの影響を受けるが、unmap/map/altmapやchangesetはイベントのトリガーにならない。あくまでもmove系アクションやユーザー操作による移動のみを契機として発火する。
SVG出力にclipPathを追加する。collide対応のおかげで容易になったはず。
prototype pollution対策。
ドラッグ・アンド・ドロップでの追加セット対応(今でも複数ファイルをドロップすることはできるが、ファイルの順番を制御できないので同名ファイルの上書きが発生する場合などいまいちうまく行かない。また同名のCNFが複数あっても1つしか選択できない。具体的には拡張セットが4つもあるyav_-_Rei_Hino.lzhとかパレットの上書き順序で真っ黒になったりするVarious_-_Himeko_Nonohara.lzhとか)。
16-bit以上のリニアPCMの.au形式も変換して対応する。エンディアンの変換が必要になると考えられる。
endの中でサウンドを再生できない(すぐに停止されてしまう)のでKISSLDと同様、end中の処理を特別扱いする必要があるかも(endでの再生には対応しなくていいという方向性も考えられるが)。
ブラウザーがμ-lawに対応したのはBlobコンストラクターよりかなり後なので(Firefoxがバージョン47以降 、Chromeはissue を見てもGSMの話が混ざったりしてはっきりしないしOSによっても異なるようだが、バージョン33あたり?)、対応範囲を広げるためにはリニアPCMへの変換を実装する必要がある。
endイベント後にalarmが発火したり、endイベント中でtimerを仕掛けられたりしないかな?
Dov_Sherman_-_Cinder.lzh: fkissイベントが認識されないが、これは「@eventhandler」を小文字で書いているためで、他のローダーでもこうなる。fkissに至っては小文字のキーワードを認識しないことを確認するためのテストすら付属のfrkismi4.lzhに仕込まれている。
Hayasaka_Kurisu_-_Lum.lzh / LUM.CNF: ボディのセルに対して縦の高さが足りない。ボディのセルに触ると位置がずれる。他のローダーでも似たような感じになるしKISSLDではマップ拡張の影響で初めから位置がずれるしデータが悪いということでいいかもしれない。
Wario_-_Emilio_Michaelov.lzh: 最大固定セルにcatchイベントが設定されているので○○○が反応しない。PlayFKiSSだとcatchは発生してもdropが発生しないので、○○○が上がったきり戻らない。Byuu_-_Bishoujo_Game_Girl_2_Exp.lzhも同様。KISSLDみたいにcatchイベントが設定されているオブジェクトは最大固定とみなさないようにすべきだろうか。
Kumataro_-_Rei_Hino.lzh、Totoro_-_Kukuri.lzh、Ko-kichi_-_Tifa_Lockhart.lzh: 三連チャンで本体と同じ固定値999設定が出てくるとちょっと対応を考えたくなってくる(本家には最大固定の概念がないことを考えると予期しない結果のはずだし)。
soundで指定された音声ファイルが存在しなくても空のblobを作成している(そしてそれを再生しようとしてエラーを吐く)ようだ。
ページをリロードせず多数のデータを読み込み続けると、どこかでメモリリークしているらしくだんだんと開いたりセットを切り替えたりするのが遅くなる模様(changesetに時間がかかったときのみ発生するエラーが出て表面化した)。
EWIGKEIT_-_Purin_Exp.lzh: (HTML5 KISSの問題ではないが)yavさんがfkissで動くよう修正したCNFらしいが、KISSLDではうまく動いていない。大文字小文字の違いを利用するというfkiss専用の技を使っている模様。
bgsoundを使用しているIE以外、Microsoft ADPCMコーデックのWAVファイルに未対応(Anajime by Elisa.lzhが使用)。
Aurelie_Stormbringer_Kiss_Doll_by_LessRuth.lzh: ロードのたびに各セットの服装が変わるのは仕様らしい。服を脱がせてセットを切り替え、切り替えたセットに戻ると脱がせた服が消えたり消えなかったりするのはもはやバグか仕様かわからん(他のローダーでも毎回動作が変わるしそもそもランダム要素のあるデータだし)。ghostを使っているが意味のある使い方ではなさげなので実装は見送り。
Ayumi.lzh: 動作がなんかおかしい。腕が増えたり。でもPlayFKiSSでも同じバグがおきたしデータの不具合かもしれない。
ghostアクションはFKiSS3提案仕様書には含まれていないが、少なくともPlayFKiSS 0.83bはサポートしており、付属のBALLS.LZHでも使用しており、後のバージョンのFKiSS仕様書でもバージョン3からとされている。ただしPlayFKiSSでは第2引数の解釈が他のビューアーと逆になっているというバグがある らしい。致命的では? とも思うが回避策もちゃんと紹介されている。
INT_MIN / -1がoverflowしない。
BALLS.LZHのボールの動きが他のローダーと比べて異常に早い。最初はそこまででもないのにだんだん早くなるので、タイマー処理が追いついていない気がする。
マウス押下中のセルにghostが設定されても強制release/dropは発生しない(他のローダーがどうしているかは未調査)。右クリック等を透過したくなかったのでghostされたセルにpointer-events:noneは設定していない。
mbk.lzh: 画面中央付近のオブジェクトがマウス操作を受け付けないが、これはversionイベントで透明度255のセルがマップされるため。なんでこんなことをしているのか理解に苦しむが、transoarentで透明度を255(以上?)に設定したセルはマウスイベントを受け取らなくなるという(ckiss仕様に反する)仮定をしているのかもしれない。KISSLDで問題ないのも謎。MBK-FK3.CNFではHTML5 KISSでも問題ないのも謎。MBK-FK2.CNFは(別にMBK-FK21.CNFがあるので)FKiSS2を想定しているようだが、実際にはFKiSS2.1のmoverandxを使用している。
testsetu.lzh: FKiSS3までのすべてのイベント/アクションを使用しているが、テスト・デモセットなのでこれだけのためにFKiSS3の全命令を実装する気はあまりない。
fk4test.lzh: testsetu.lzhと同様。ちなみにこのデータですらFKiSS4命令は11種類しか使っていないようである。
gngbman.lzh: FKiSS4 frameのテストデータなので以下略。
wsvptest.lzh: windowsize/viewportのテストデータなので以下略。どうやらKISSLDはいつの間にかviewportサポートが壊れていたようである(v0.09iでは確かに動作した)。
slide.lzh: SLIDE-3A.CNFで読み込み時のシャッフルが行われない。initializeイベント(からgoto/gosub経由で呼ばれたlabelイベント)中ではセルのピクセルデータをまだ読み込んでいないため、letinsideが正常に動作しないのが原因。
k-hanoi.lzh: カラー1→セット1→セット0→カラー0→セット1と変更したとき、カラーが0から1に変わってしまう。どうもPlayFKiSSのバグ対策が裏目に出ているようなので(実際DirectKiSSもHTML5 KISSと同じように動く)あまり対応する気はない。
puzzconc.lzh: puzzfk3.cnfでghostest.celが全画面表示を覆って操作ができない(ghostが正しくマウスイベントを透過していない?)ようだ。
量的スペック・制限事項
Webブラウザの性能が許す限り、いくらでも多くのセルと大きな表示領域を使えます(とはいえちょっと大きいデータになるとあまり実用的ではありません)。コメント機能、追加セットには今のところ未対応です。
ckissにはいちおう対応していますが、データが大きくなるのでロードが非常に遅いです。
今のところ並列実行を全く考慮していないので、同じページで複数データを同時に開いたり、ロード中にセットを切り替えたりすると動作がおかしくなります。
現在、LZH圧縮していないデータの読み込みではXMLHttpRequestを同期的に使っているので、データの読み込み中ブラウザが固まります。遅い通信回線や巨大なデータでは顕著な問題になります。
sound/musicによる音声再生はLZH圧縮しているデータにのみ対応しています。musicはMIDIjs を使って実装しています。soundは.wavのみ、musicはMIDIのみといったファイル形式の事前チェックはしていませんが、実際に再生できるかは別問題です。
高速化のため、collide/apartは多くの場合に正しく動作するものの完全にピクセルごとの判定を行わない方法で実装されています。
X68k標準のADPCMフォーマットである拡張子.pcmの音声ファイルを含むデータがありますが(BakuretuKen_-_Flare.lzhなど)さすがに対応の予定はありません(.wav版も含まれているのでとくに不都合ないし)。当時はKISSGA/21/CL/SV付属の設定ファイルに、標準でpcmplay という外部コマンドで音声再生を行う設定が書かれており、このpcmplayがX68kのADPCMに対応していたようです。
CRCはチェックしますが、CRCエラーを検出しても解凍した内容は捨てずにそのまま使っています。CRCエラーを含む(けど無視して解凍すれば問題なく遊べる)データが存在するためです(Kyo-he-_-_Nakoruru.lzhなど)。KISSLDではそもそもCRCチェックをしていませんでした。
set(0) changeset(1) set(1) changeset(0)のような無限ループ防止のため、同じセットに対するネストしたsetイベント中で再び同じセットへの切り替えたときはsetイベントの発火を抑制しています。他のローダーでは(そのまま無限ループも含め)異なる動作をする可能性があります。
initializeイベント中でmusicアクションを呼び出しても反応しません(Anita Blake.lzhなど)。fkiss仕様にあるとおり、nop/debug/shell/unmap以外のアクションの動作保証はされません(データを動かすために必要性が高ければ対応する可能性はあります)。
システム要件
プラグインなどは必要ありませんが、WebブラウザはいわゆるHTML5対応と呼ばれる、比較的新しいものでなければなりません。とくにInternet Explorer 6/7にはまったく対応していません。Internet Explorerはバージョン8以降を、少なくともIE8モードで動作させなければなりません。
具体的には以下の機能をサポートしている必要があります。また、任意のバイナリファイルからの読み取りを実現するためにunlzh.jsのシステム要件 も満たす必要があります。
HTML5のCanvas 2D Context 、またはdata URLスキーム
canvasはピクセルデータの読み書きをサポートしている必要があります。具体的にはCanvasRenderingContext2DインターフェースにgetImageDataメソッドとputImageDataメソッドが必要です。古い(たとえばWeb Application 1.0 の時代の)canvas要素の実装はこれらのメソッドをサポートしていない場合があります。putImageDataをサポートしていない場合にはdata URLスキームによるシミュレートを行います。createImageDataメソッドはサポートされていれば使いますが、必ずしもサポートされている必要はありません。
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1)
セルを任意の座標に表示するための絶対配置(position: absoluteなど)、セットに存在しないセルを隠したりするために可視性(visibilityプロパティ)などの機能を使っています。ckissのセル全体透明度(%t)を実現するためにopacityプロパティを使っています。
Document Object Model (DOM) Level 2 Events
マウス操作を検知するためにaddEventListenerメソッドやMouseEventインターフェースなどを使用しています。
CSSOM View Module
ポインタの要素に対する相対位置を求めるために、getBoundingClientRect()メソッドを使用しています。offsetX/offsetYのほうが直接的なのですが、ブラウザにより実装されていなかったり実装がCSSOM Viewの仕様通りでなかったりするので使用していません(参考 )。仕様ではgetBoundingClientRect()により得られる値はfloatなので、セルの当たり判定で誤差を生じないようにMath.roundで丸めを行っています(ただし実際には、IEやWebKitは丸めを行なった値を返すようです)。
またページの幅を取得するのにinnerWidthプロパティを、CSSのfloatプロパティを変更するためにcssFloatプロパティを、CSSプロパティの計算値を取得するためにgetComputedStyle()メソッドを使用しています。一部のブラウザではバグ対策のためにCSSOM Viewで定義されている他のプロパティやブラウザの独自拡張を使っている場合があります。
高速なJavaScriptエンジン
Internet Explorerはバージョン8でもかなり厳しいです。あくまで私の環境での参考ですが、Chrome 2はFirefox 3.5の2〜3倍、Safari 4は10倍近くも速いです。Internet Explorer 8はFirefox 3.5の10倍以上遅い ですが。Minefield 3.7a3preではJavaScriptがさらに高速化 されてCanvasPixelArrayがサポート されたため、Chrome/Safari/Opera 10.50並みに速くなっているようです(これらの機能の導入前後のビルドではっきり体感できるほど速度が違う)。技術的な解説
IE9 Platform Preview 3では大幅に速くなっていますが、Microsoftの宣伝から受けるイメージほどではありませんでした(ハードウェアが貧弱でアクセラレーションが効いていないのかもしれませんが)。
また最低でもECMA-262 第3版の機能が必要です。たとえば、第3版で初めて定義されたtry...catchを使用しています。もっともいわゆるHTML5対応ブラウザのJavaScript実装が第3版の機能すらサポートしていないほど古いということはありえないので、事実上この条件は問題になりません。
また、画面キャプチャー機能を動作させるには以下の機能が必要です。
HTMLCanvasElement.toDataURL
今のところdata URLのcanvasシミュレートはtoDataURLをサポートしていないため、canvasのネイティブサポートが必要です(img.srcを返すだけなので画像のスライスが必要なIE8以外なら対応は簡単そうですが)。もっともcanvasすらサポートしていないブラウザーが以下の他の必要条件を満たしている可能性はほとんどないと思います。
SVG 1.1
画面キャプチャー用SVGを作成するとき内部でSVG DOMを使用しているため、SVGサポートが必要です。
XMLSerializer
SVG文書断片をシリアライズ(文字列化)するためにXMLSerializerを使用しています。
Blobコンストラクター
一部のBlobコンストラクターをサポートしていない旧ブラウザーがサポートするBlobBuilderは考慮していません。
URL.createObjectURL
一部のURLオブジェクトをサポートしていない旧ブラウザーがサポートするwebkitURLは考慮していません。
a要素のdownload属性
ダウンロード時のファイル名指定と、強制的にダウンロード動作を発生させるために必要です。download属性をサポートしていないブラウザーでも画面遷移が発生してSVG画像が表示されるかもしれません。その場合は「名前を付けて保存」で画像をダウンロードできます。
HTMLAnchorElement.clickメソッド
リンクのクリック動作を発生させるために必要です。一部の旧ブラウザーのためにdispatchEventによるpolyfillなどは行っていません。
また、sound/musicによる音声再生には型付き配列、Blobコンストラクター、URL.createObjectURLとHTML audio要素のサポートが必要です。
ブラウザ別のhack・制限
canvasをサポートしていない環境(たとえばInternet Explorer 8)やcanvasにputImageDataがない環境(Safari 3.2など)では、data URLスキームによりputImageDataをシミュレートしています。ただしそういう環境は概してJavaScriptも低速なので、あまり実用的ではないでしょう。
Internet Explorer 8はシステム要件に挙げた機能の多くをサポートしていないので、同等あるいは類似の機能を持ったInternet Explorerの独自拡張によってシミュレートしています。
Internet Explorer 8では、同じページでリロードを繰り返しているとメモリ使用量がだんだん増えていきます。別のページに移動すると回復するようです。
Safari 3.2.2/3.2.3/Chrome 1.0はgetBoundingClientRectに未対応なので、CSSOM View Moduleの他の機能を使ってシミュレートしています。
Firefox 2はgetBoundingClientRectをサポートしていないので、Gecko独自のgetBoxObjectForによりシミュレートしています。またCSSの固定配置の実装バグにより、ときどき着せ替えウィンドウがシェードの背後に回って操作不能になることがあったので、この対策として(またブラウザのバグとは関係なくページのフッタが固定配置要素であるような場合を考慮して)z-indexを指定しています。さらにCSSのfloatの実装バグにより、着せ替えウィンドウの幅が正しく計算されないので(またブラウザのバグとは関係なく固定配置を使わないモードを考慮して)、幅を明示的に指定しています。
各種シミュレートは原則としてKISSを動かすのに必要な最低限の実装しか行っていないので、そのまま他のページで使い回せるとは限りません。また同様のシミュレーションを行っている他のライブラリと衝突するおそれがあります。ご注意ください。
Opera 10.50〜12.18 (Presto Opera)ではバイナリファイルのダウンロードに対応して 動作可能になりましたが、細かな不具合があります:
ウィンドウを閉じても、シェードが再描画されずにゴミとして残ります。スクロールすると消えるようです。(2011-05-10) Opera 11.10では修正されているようです。
セルをドラッグしたとき、背景のテキストが選択されてしまいます。
ウィンドウが正しくセンタリングされません。(2011-05-10) Opera 11.10では修正されているようです。
メイリオをフォントに設定しているとウィンドウが右端に伸びます。(2011-05-10) Opera 11.10では修正されているようです。
Opera 15以降(Blink Opera)はChromeと同様です。
IE9では、開発者ツールを開くとwindow.consoleが再定義されるため、動作しなくなります。
IE9はBlobが未サポート なので、画面キャプチャー機能は動作しません。
Firefox 70/ESR68未満では文書に挿入されていないa要素でclickメソッドが動作しない ため、clickを呼び出す瞬間だけ文書に挿入しています。clickの代わりにdispatchEventでclickイベントを発火しても回避できるようですが、今のところ採用していません。
画面キャプチャーのSVGはシリアライズをブラウザーに丸投げしているので、出力はブラウザー依存です(xmlns:xlinkがIEでは個々のimage要素につくのに対してEdgeHTML/Firefox 108/Chrome 109ではsvg要素に1つだけつくなど)。
soundによる音声再生もほぼブラウザーに丸投げしているので、対応形式はブラウザー依存です。IEはKISSでよく使われる.wav形式に対応していないので、IE独自拡張のbgsound要素を使って対応しています。本家fkissがサポートし、一部のKISSデータで使われている.au形式 (MIMEタイプaudio/basic)は、μ-lawコーデックのものに限りWAVコンテナーに変換することで対応しています。これは、.au形式のままではSafari (とbgsoundを使ったときのIE)くらいしか対応していないのに対して、WAVコンテナーならばμ-lawコーデックでも主要ブラウザーは(少なくともFirefox 128とChrome 126は)ほぼ対応しているからです。ただしChromeはcanPlayType("audio/wav;codecs=7")に対して嘘をつきます。IEでは変換の必要はない(bgsoundを使うならそのまま.au形式を再生できる)のですが、特に害もなさそうなので判定はしていません。
またブラウザーのセキュリティ制限により音を鳴らせない可能性があります。
.au形式からWAV形式への変換については、以下のサイトなどを参照しました。
μ-lawコーデックについては以下のページなどを参照しました(今回コーデックの変換は不要という結論に達したので結果として使いませんでしたが)。
Math.imulを実装していないブラウザーでは、mulの結果が正確でない場合があります(不正確なのはオーバーフローが起きるような計算をしたときだけです)。
未対応ブラウザ
Internet Explorer 7以前は、ブラウザの標準機能のみではピクセル単位で任意の絵を描くことがほとんど不可能に近いので、対応していません。絶対配置のspanをたくさん並べてシミュレートするという手もいちおう試してみましたが、案の定まるで使いものにならなかったので(私のスキル不足の可能性もありますが)あきらめました。
Opera 10.10以前のバージョンはバイナリファイルをJavaScriptから読み取る手段がなかったので、(KISS/GSのファイルをそのまま読めるという要件を満たす限り)対応できませんでした。
(2011-05-14) Firefox for mobile 4.0.1は(少なくともWindows用のエミュレータ上では)マウスイベントが取れない ため、服を移動させることができない(ページ全体がスクロールしてしまう)ようです。
設置方法
現在は他者が設置することを想定していませんが、勝手に解析して設置する分にはかまいません。
リンク
という不親切さにもかかわらず、設置していただいたページがあるようです。
他のKISS互換実装
Copyright© 2009-2015 Masatoshi Kimura (emk)