スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

カテゴリ : スポンサー広告

KAGEXの表情欄についてメモ

KAGEXでは、メッセージレイヤに対して表情欄を指定できます。
その欄には名前欄に指定されたキャラクタの立ち絵が表示されます。

実際に表情欄と名前欄を使用しているサンプルです。
http://www.biscrat.com/krkr/files/face_sample.zip
サンプルを見て以下の説明を読むと大体わかると思います。


表情欄を使用するには以下の4つのことが必要です。
1.envinit.tjs で characters を定義
2.envinit.tjs の positions で出, 立, 顔, 消, 無を定義
3.envinit.tjs で faceLevelName を定義
4.[position]タグで表情欄の位置を指定


1.envinit.tjs で characters を定義
まずは立ち絵が表示できる状態にしてください。説明は省きます。
ブログ内のKAGEX講座などを参考にしてください。


2.envinit.tjs の positions で出, 立, 顔, 消, 無を定義
サンプルに入ってるenvinit.tjsのpositionsをコピペして使います。
出, 立, 顔, 消, 無のコマンドを使って、立ち絵と表情欄の表示/非表示の状態を切り替えます。
立ち絵の表示/非表示はshow/hideコマンドを使っても変更できますが、こちらのコマンドを使う方が便利です。

出:立ち絵を表示します。このキャラクタを表情欄に表示するようになります。
立:立ち絵を表示します。このキャラクタを表情欄に表示しなくなります。
顔:立ち絵を非表示にします。このキャラクタを表情欄に表示するようになります。
消:立ち絵を非表示にします。このキャラクタを表情欄に表示しなくなります。
無:立ち絵を非表示にします。このキャラクタを表情欄に表示しなくなります。

消と無の違いについては説明しません。消を使っていれば問題ありません。
; "出"なので立ち絵が表示される。
@しおり 通常 夏制服  
; "しおり"が名前欄に指定されているので表情欄にしおりの画像が表示される
【しおり】「しおりのセリフ」

; 名前欄が指定されていないので表情欄にも表示されません
地の文。

; "しおり"が名前欄に指定されているので、ここでも表情欄にしおりの画像が表示される
【しおり】「しおりのセリフ2」

; 立ち絵は表示されたままだが、表情欄には表示されない
@しおり 
【しおり】「しおりのセリフ3」

; 立ち絵は非表示、表情欄にのみ表示
@しおり 
【しおり】「しおりのセリフ4」


3.envinit.tjs で faceLevelName を定義
立ち絵の表示レベルについてまだ説明していないため、いい加減な説明だけします。
何のことかわからなければサンプルのfaceLevelNameの行をコピペすればいいです。
これがないと表情欄には何も表示されません。

前提として、立ち絵定義の image, faceImage について現在の表示レベルに合わせて"LEVEL"の部分が置換され、立ち絵として表示される画像のファイル名が決まります。
立ち絵ではなく表情欄の画像の場合、"LEVEL"はfaceLevelNameの定義と置換されます。
これによって表情欄用の特別な画像を使うこともできます。


4.[position]タグで表情欄の位置を指定
[position]タグではメッセージレイヤや名前欄の位置、サイズなどを指定できます。
これに加えて、表情欄の位置とサイズも指定できます。これにはfacewidth, faceheight, faceorigin, faceleft, facetopという5つの属性を使います。

まず facewidth と faceheight で表情欄のサイズを指定します。それぞれ幅と高さです。
立ち絵の画像が読み込まれ、このサイズの領域に表示されます。

以下の例では赤色の枠が立ち絵画像のサイズで、黄色の枠が表情欄のサイズになっています。
表情欄に表示されるのは黄色の枠の内側のみです。
このように、表情欄が画像のサイズより小さい場合は左上部分が切り取られて表示されます。
face_sample_1.jpg

次に、 faceorigin で表情欄の表示原点を指定します。0~8の数値が指定できます。
表示原点は表情欄上の座標です。次に説明する faceleft と facetop との関係で表情欄の位置を決定します。

0~8でそれぞれ以下の画像の位置になります。
0が表情欄左上、1が表情欄上中央、・・・・・・と時計回りに回って、最後の8が表情欄中央となります。
face_sample_2.jpg


最後に、 faceleft と facetop で表情欄の位置を指定します。
メッセージレイヤ左上からの距離を指定します。
ここで指定した位置が、先ほど faceorigin で指定した表示原点の位置となります。

下記の画像は"faceorigin=5"のときの例です。
face_sample_3.jpg

faceleft と facetop は同じでも "faceorigin=7"とすれば以下のようになります。
face_sample_3.jpg

続きを閉じる▲

スポンサーサイト

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

『KAGEXを使わないいくつかの理由』より

KAGEXを使わないいくつかの理由(http://www.geocities.jp/keep_creating/DojinDOC/WhyDontIUseKAGEX.html)
を読んでのコメント。

KAGEXの残念さが良い感じに書かれてる。
以下、じゃあどうしようか、という話。


■理由1:バイナリ配布されていない
ですよねー。
subversionくらい使えよ便利だから、というのが本音だけど使わない人は使わないし。
コミティア合わせでzipにまとめてKAGEX SDKとしてダウンロードできるようにします。

時間ある限りSDKも定期的に更新したいけど……どうなるかな……。



■理由2:十分なドキュメントがない
ですよねー。
現在解説を絶賛執筆中。

KAGEXタグリファレンスは今となっては役立たずなんだよね。
そこに載ってないワールド拡張がKAGEXのメインで、そこのタグの2/3以上は実際使わない。

ブログの解説記事は自分が調べたところから書いていったのでまとまりがない。
一部の機能しか解説してなくて網羅性もないし。
それでも自分が始めたころよりは大分マシなはず。



■理由3:最初に動かすまでの道のりが長い
ですよねー。
envinit.tjsは手書きするものじゃないです。
これ以外にも設定ファイルが結構あるのでちゃんと使おうとすると自動化しないとやってられない。
コミティア版だとenvinit.tjsは一切触らなくて済みます。

スクリプト書き始める前に立ち絵や背景の素材登録が必要で、これがそもそもめんどくさい。
とりあえず素材登録済みですぐ触れる練習用プロジェクトフォルダも準備します。

ところでKAGももうちょっと最初使いやすくしていいんじゃないかと思う。
config.~newのリネームって意味あるの?
それとマクロ保存/BGM再生メディア/メッセージレイヤ表示モードの初期値は変えたほうが……。
ここで無駄に突っかかるのは初心者が必ず通る道になってる気がする。



■理由4:KAGEXじゃないとできない機能がない
製作初心者にプラグイン入れさせるのはハードル高い。
まともな(?)ノベルゲーム作るのにプラグイン何個必要なんだろ。
プラグイン入れずにデフォルトのKAGつかって糞ゲー作るのは誰も幸せにならないし……。
ユーザ的にはむしろKAGEX使ったほうがシステムそろってるので幸せになります。

今まで使ってきた製作者側から見るとKAGそのまま拡張する方が気が楽だとは思う。



■理由5:ユーザが少なく、プラグイン作っても嬉しい人が少ない
これからユーザ増える。かも。
以前よりは確実に増えているように見えます。



■おまけ
KAGEXから見てごった煮的配布場所に無さそうな機能

・名前欄/表情欄の管理
メッセージレイヤなんて触りたくない……。
メッセージレイヤ周りはKAGEXでもまだ微妙な感じで要改造。

・ラインモード
改行、改ページでいちいちタグ入れるのは……。

・自動インデント
カギ括弧内自動インデント。まあこれは無くても?

・汎用の非同期トランジション
改ページで強制的にトランジション停止入れとけばいいんだけど……やっぱり改ページタグ使いたくない。

・自動トランジション
・ボイス/バックボイス再生管理
自分でマクロ組むのかな。。。めんどくさい。。

・アクション機能
KAGEXからaction.tjsとAffineLayer.tjsを持っていって……便利な形にするのは結構大変そう。
time属性1つで手軽に移動とか回転とかができるのが便利でいいんだけども。
モジュール系もすぐに使えて何気に便利。
わざわざアクション定義まですることはめんどくさくて実際ほとんど無いんだよね。

・遅延実行
ボイス合わせでアクションとかによく使ったりします。

・カメラ機能
まあ使わない。いらね。

・動画再生
KAGの動画再生は無駄にめんどくさかった記憶が……。

・炎エフェクト
使い所はかなり限られる。
gfxEffect.dll直接使うのはしんどいので簡単に使えるようになれば。

・ラスターエフェクト
こっちは割りと使いやすいエフェクトな気がする。
layerExRaster.dll直接使いたくない。

・選択肢
seladd/selopt/selact/selectは結構便利だと思う。
マップ選択肢は……使わないなあ……。

・マウスジェスチャ
自分の趣味です。付けてほしい。

・システム画面生成
これは作り中でコミティア間に合いそうにない……。
オプション画面1つ作るだけでスクリプト書きたくない。
メニュー弄ったりキーコンフィグしたりも簡単にならんかなあ。

・マルチディスプレイ対応
確認ダイアログがメインディスプレイの方に出たり、フルスクリーンにするとやっぱり強制的にメインディスプレイ使われたり。
何とかしてほしい。

・その他システム設定とか
ボイス音量1つつけるようとするだけでも各人でマクロか何か作るのかなあ。
ちょっと面倒なところだとボイス速度/エフェクト速度/クイックセーブ/オートモード速度などなど。
あっちは汎用で作ってるからそんな細かいところは各自やれって考え方なんだろうなあ。
まあKAGスクリプトだけでも頑張れば出来てしまうという……しかしめんどくせえ……。

コミティア版KAGEXだとノベルゲーム用に作り方固定してる。
その分効率的に作れるしマクロなんかほとんど使わなくても済むはず。
想定範囲外のことをしようとするとtjs使う必要が出てきて大変なんだけども。

こうしてみると汎用的に作れるのは限られそう。

続きを閉じる▲

タグ : 吉里吉里 KAGEX

カテゴリ : KAGEX

KAGEXのススメ

たんすかいさん主催の第1回同人ゲーム製作勉強会でKAGEXの話をしてきました。
その時の講演内容です。
自分が改造したKAGEXの話で、元のKAGEXとは違う部分もあるので注意してください。
スライドも使いましたがよろしくない部分があるので非公開です。
一部、表現など変えてますが内容としてはほぼ同じです。

■イントロダクション
ここではノベルゲーム製作の話をします。
ノベルゲームを作るには、まずシナリオやグラフィック、サウンドなどの素材を作って、それから実際にゲームとして動くようにスクリプトを作ります。
この「スクリプト」の部分について話していきます。


スクリプトの工程では、大抵はノベルゲーム専用の開発ツールを使います。
ツールには吉里吉里/KAGやNScripter、YU-RISなど、おどろくほどたくさんの種類があります。
それら膨大な数のツールから1つだけ選び、実際に使用してゲームを作るということになる訳です。
ノベルゲームを作るのが初めてとなれば、当然どれがいいかわかりません。
ツールを選ぶ、というのがゲーム製作の一つの壁になっていました。
ただし、これは昨日までの話です。

今日は、新しくKAGEXというノベルゲーム開発ツールを紹介します。
KAGEXを使うと、プロレベルのノベルゲームを簡単に作ることができます。
この記事を読んだ方は、どのツールを使うか、もう悩まなくて済みます。
迷わずKAGEXを使いましょう。



■これまでの開発ツールについて
さっそくKAGEXの話をしたいところですが、その前に、これまでの開発ツールについて少しだけ見ていきます。

たくさんある中から、ここでは吉里吉里/KAGとNScripterを取りあげます。
どちらも非常に有名な開発ツールで、多くの同人サークル、企業で使われています。
それぞれ初心者向けの解説本も市販されてます。
本を買わずとも検索すれば解説サイトがたくさん出てきます。

「みんな使っていて、解説も色々とあって初心者でも何とかなりそうだ。
なら、吉里吉里/KAGやNScripterを使えば、新しい開発ツールなんていらないじゃないか。」
そう思うかもしれません。

もちろん、そんなことは無いわけです。
KAGとNScripterには色々と問題があります。
その問題について、2点にしぼって説明します。


1点目として、吉里吉里/KAGとNScripterは非常に古いです。
たしかに昔は凄かった。でも、今となっては時代遅れの骨董品です。
10年以上前、というか20世紀から存在しています。
例えばNScripterで作られた『月姫』は2000年にリリースされてます。
2000年といえば自分はまだ小学生でした。2000円札とか出てました。古すぎ。
もう2012年です。そろそろ21世紀の開発ツールを使ってください。

古いと何が問題かといいますと、KAGとNScripterで作れるのは昔のノベルゲームです。
昔のノベルゲームというのは、背景と立ち絵とテキストをただ表示するだけのシンプルなものです。

最近はノベルゲームといっても演出面、システム面ともにかなり進化しています。
最近のノベルゲームのイメージが湧かない、という方は一度やってみてください。
検索すれば、無料でできる体験版がたくさんあります。
ほとんどは18禁のエロゲーですが見ておく価値があります。
これに慣れると、昔のノベルゲームはプレーするのが苦行となります。

演出面で言えば、立ち絵が動いたり、目パチ口パクがついたり、ボイス再生も当たり前です。
システム面では、名前欄、表情欄がついたり、システムボタンがついてたりします。
スキップ、オートモードなどの基本的な機能すら実は進化しています。
これらをKAG、NScripterで実現しようとすると大変な事になります。
なぜなら、そんな機能が全く無い、ノベルゲームが貧相だった頃の開発ツールだからです。


2点目のKAG、NScripterの問題として、スクリプトがめんどくさいです。
ちょっとサンプルを見てみると、何だかアルファベットが並んでてひどい事になってます。
これを1から勉強して自分で書けるようになりたいと思いますか?

スクリプトを打ち込むのに長い時間をかけるべきではありません。
よく分からないスクリプトの時間は短くして、その分シナリオやグラフィックなどのゲーム内容に時間をかけたいはずです。


ここに、新しい開発ツールを使用する理由が出てきます。
今時のノベルゲームを作る機能がそろっていて、しかもスクリプトが簡単であるような開発ツールが必要になります。
そんな夢のような開発ツールがKAGEXです。



■KAGEXの特徴
KAGEXを使うと、非常に簡単に、プロレベルのノベルゲームを作る事ができます。
その特徴を3点で説明します。


1点目として、KAGEXは今までの開発ツールとは比較にならないほど高機能です。
立ち絵を動かしたり、目パチ口パクをさせたり程度の演出は朝飯前です。
ボイス再生やボイスとの連動機能も準備されています。
システム面でも、非常に広い標準機能の中からゲームの動作を設定することができます。
快適でストレスの無いシステムでゲームを楽しんでもらえます。


2点目として、KAGEXは自由度も高いです。
スキルアップしていけば、ノベルゲーム以外の様々なジャンルのゲームを作れるポテンシャルを秘めています。
ノベルゲームであっても、ちょっとしたミニゲームを付ければ他とは一味違うゲームにする事ができます。
今回は初心者向けなのでこの点についてはこれ以上触れません。


3点目として、これが一番重要ですが、KAGEXでは簡単かつ効率的にゲームを作れます。
ほとんどのスクリプトは日本語です。
覚えることはほとんどありません。
開発ツールがあるので、むしろ覚えなくてもいいです。

効率的、というのも大切です。
最近はシナリオの量も増えて、スクリプトを書いて演出を付けるのも大変になっています。
例えば、あるゲームではシナリオが1000KBあるとします。つまり、50万文字です。
ライトノベル1冊が200KBなどと言われたりしますが、1000KBなら、当然「ライトノベル5冊分」です。
この分量をしっかり読み、解釈した上で演出していく事になります。
ちょっとやってられないです。
これを吉里吉里/KAGのスクリプトでやれと言われたら無理です。
スクリプトを打ち込むなんて無駄な時間は、可能な限り短くするべきです。

KAGEXでは「シンプルなスクリプト」と「開発ツール」の両輪でもって、簡単かつ効率的なゲーム製作を実現しています。


■デモ
(実際にテキスト入力、背景、立ち絵表示、システムなどのデモをしました)
(時間ができたらサンプル動画とか作るかも。とりあえず省略)

以下、箇条書きで書いておきます。
より短い時間で、便利に開発ができるような機能を詰め込んでいます。

・簡単に使えます。
スクリプトは開発ツールが生成します。
背景や立ち絵の画像を選び、生成されたスクリプトをテキストエディタに貼り付けるだけです。
何も知らなくても今すぐ使えます。
期限に間に合わない、となれば人海戦術が可能です。

・ツールとスクリプトの手打ち、好きな方が使えます。
熟練するとツールを使わず、テキストエディタでキーボード入力の方が速いです。

・たとえるとツールはオートマ車でスクリプト手打ちはマニュアル車みたいなものです。
KAG,NScripterではマニュアルを強いられますが、KAGEXではオートマも使えます。
わざわざマニュアルの免許を取るのは大変でした。

・開発中は動作確認のためセーブ/ロードを何度も繰り返しますが、これはマウスの1クリックでできます。
メニューを開いたり、セーブロード画面を開いたりしていると2クリック、3クリックかかります。
時間の無駄なのでやめてください。

・ウィンドウサイズは自由に変えられます。
開発中はゲームウィンドウを小さくすればモニタを広く使えます。

・ツールで実際のゲーム画面を見ながら作れます。位置調整もドラッグでいけます。

・スクリプトの記述量自体が少ないです。
改行、ページ送りごときでキーボードをすり減らすのはやめましょう。
改行はそのまま反映されますし、空行を挟めばページ送りです。
トランジションも自動的に行われます。
無駄にキーボードを打たないでください。

・タイトルやセーブ/ロードなどの画面も簡単に作れます。
専用の画像を用意して、ちょっとだけツールで設定すれば、変換プログラム一発です。
Photoshopのpsdデータから直接、画像や座標データなどを吐き出せばすぐにゲームとして動きます。
どのノベルゲームも、見た目は変わっても動作は変わらないはずです。
KAGEXでは最初から動作するスクリプトが準備されています。
ノベルゲームを作るのに複雑なスクリプトを書く必要は無くなりました。


■まとめ
KAGEXの特徴をもう一度まとめます。
・非常に高機能です。
今時のノベルゲームを作るのに十分な機能が始めからそろっています。
・自由度が高く、色々なゲームが作れます。
興味があればがんばってください。
・簡単、かつ効率的にゲーム開発ができます。
スクリプトではなくゲーム内容に時間をかけられます。

実はもう1点、大切な特徴があって、KAGEXはなんと無料で使えます。
フリーウェアです。
ツールも含めてオープンソースとなる予定です。


ここで残念なお知らせがあります。
今のところ、KAGEXは未完成です。
一部のツールなどができていません。
なので、5月5日のコミティア100にあわせて、ツールも完成させて公開予定です。
コミティアではKAGEXの使い方の解説本も出すので、興味を持っていただけた方はそちらもチェックしてください。
同人サークル「Biscrat」名義でサークル参加しています。(配置は「そ24」です)

最後にもう一度繰り返します。
KAGとNScripterは時代遅れの不便な開発ツールです。
新しい開発ツールであるKAGEXを使ってください。
圧倒的に少ない労力で、今時のノベルゲームが作れるようになります。

続きを閉じる▲

カテゴリ : KAGEX

envinit.tjs書式メモ

envinit.tjsの項目一覧。
多分これで全部。

%[
//◆時間関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    times : %[
        // 時間定義。
        (時間定義名) : %[
            prefix : (文字列),
                // 背景画像定義のTIMEと置換される文字列。
            lightColor : (0xAARRGGBB or 0xRRGGBB), 
            lightType : (ltXXX),
                // 背景画像の環境光補正。
            brightness : (-255~255),
                // 背景画像の明度補正。
            contrast : (-100~100),
                // 背景画像のコントラスト補正。
            charLightColor : (0xAARRGGBB or 0xRRGGBB),
            charLightType : (ltXXX),
                // キャラクタ画像の環境光補正。
            charBrightness : (-255~255),
                // キャラクタ画像の明度補正。
            charContrast : (-100~100),
                // キャラクタ画像のコントラスト補正。
            trans : (トランジション),
                // この時間に変更されるときのトランジション。
        ] ... ,
    ]
    defaultTime : (文字列),
        // デフォルトの時間。
    timeTrans : (トランジション),
        // 時間が変更されるときのトランジション。

//◆舞台関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    stages : %[
        // 舞台定義。
        (舞台定義名) : %[
            image : (文字列),
                // 背景画像名。TIMEが置換される。
            cox : (座標値),
            coy : (座標値),
                // カメラ注視点。
            xoff : (座標値),
            yoff : (座標値),
                // デフォルトの x/ypos。
            blurx : (数値),
            blury : (数値),
                // ぼかし強度。
            resolution : (数値),
            resolutionx : (数値),
            resolutiony : (数値),
                // 解像度。
            trans : (トランジション),
                // この舞台に変更されるときのトランジション。
            dispTrans : (トランジション),
                // この舞台を表示/消去するときのトランジション。
            layers : %[
                // ステージレイヤの登録。
                (ステージレイヤ定義名) : %[
                    name : (文字列),
                        // ステージレイヤ定義名差し替え。
                    condition : (配列 or コンマ区切り文字列),
                        // 登録条件。列挙された時間の場合のみ表示。省略時は常に登録。
                    (コマンド名) : (属性値) ... ,
                        // 環境レイヤで実行するその他のコマンド。登録時に実行される。
                ] ... ,
            ], 
        ] ... ,
    ],
    bglevelz : (数値)
        // 舞台のカメラ用Z位置。
    stageDispTrans : (トランジション)
        // 舞台を表示/消去するときのトランジション。
    stageTrans : (トランジション)
        // 舞台 or 時間のトランジション。

//◆イベント絵関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    events : %[
        // イベント絵定義。event_[定義名].tjsでenvinit.tjs外に記述可。
        (イベント絵定義名) : (以下のa, b, c のいずれか) ... ,
            (
                (a)    (イベント絵画像名)
                (b)    %[
                        xoff : (座標値),
                        yoff : (座標値),
                            // デフォルトの x/ypos。
                        trans : (トランジション),
                            // このイベント絵に変更されるときのトランジション。
                    ]
                (c)    func(kag.flags, kag.sflags, env) {};
                        // (b)の辞書配列を返す関数
            )
    ],
    eventLevel : (数値),
        // イベント絵の表示レベル。省略時5。
    eventDispTrans : (トランジション),
        // イベント絵を表示/消去するときのトランジション。
    eventTrans : (トランジション),
        // イベント絵関連のトランジション
    envTrans : (トランジション),
        // 背景 or イベント絵のトランジション。

//◆位置関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    positions : %[
        // 位置定義。
        位置定義名 : %[
            xpos : (座標値),
            ypos : (座標値),
                // xpos, yposの値。
            time : (ms時間),
                // xpos, yposの変更にかける時間。
            disp : (KAGEnvImage.XXX),
                // 表示状態。
            level : (数値),
                // 表示レベル。
            trans : (トランジション)
                // この位置に変更するときのトランジション。
        ] ... ,
    ],
    positionTrans : (トランジション)
        // 位置変更するときのトランジション。

//◆レベル関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    levels : [
        // レベル定義。添字0から順に表示レベル0,1,2... のときの定義
        %[
            name : (文字列),
                // キャラクタ画像名のLEVELと置換される文字列。省略時0,1,2...。
            xoffset : (座標値),
            yoffset : (座標値),
                // キャラクタのXYオフセット。
            zoom : (数値),
                // キャラクタのカメラ用Z位置。
            emozoom : (拡大率),
                // エモーションの拡大率。省略時はzoomの値が使われる。
            trans : (トランジション),
                // この位置に変更されるときのトランジション。
            imgzoom : (拡大率),
                // 拡張立ち絵用
        ] ... ,
    ],
    defaultLevel : (数値),
        // キャラクタの表示レベルのデフォルト値。省略時0。

//◆キャラクタ関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    characters : %[
        // キャラクタ定義。
        (キャラクタ定義名) : %[
            initName : (文字列),
                // キャラクタ定義名差し替え。
            standName : (文字列),
                // 立ち絵名。
            nameAlias : (&TJS式 or 文字列),
                // 名前枠での表示名。
            voiceName : (文字列),
                // ボイス名。
            voiceVolume : (数値),
                // ボイス音量。
            voiceFile : (文字列),
                // ボイスファイル名の形式。
            noVoice : true,
                // 定義するとボイス未使用。    
            xoffset : (座標値),
            yoffset : (座標値),
                // キャラクタのXYオフセット。
            afx : (座標値 or "left"など文字列),
            afy : (座標値 or "top"など文字列),
                // デフォルトの回転原点。
            emoX : ([座標値 ...] or 座標値),
            emoY : ([座標値 ...] or 座標値),
                // 表示レベルごと or 一括でエモーションのXYオフセット
            emoRev : (true or false),
                // true を指定するとRevエモーション指定を使う。
            fadeValue : (ms時間),
                // デフォルトのフェード時間。
            faceLevelName : (文字列),
                // 表情枠の画像名のLEVELと置換される文字列。
            poses : %[
                // ポーズ定義。
                image : (文字列),
                    // ベース画像名。LEVEL,DRESSは置換される。
                faceImage : (文字列),
                    // 表情部分の画像名。LEVEL,DRESSは置換される。
                msgImage : (文字列),
                    // 表情枠でのベース画像名。LEVEL,DRESSは置換される。
                msgFaceImage : (文字列),
                    // 表情枠での表情部分の画像名。LEVEL,DRESSは置換される。
                afx : (座標値 or "left"など文字列),
                afy : (座標値 or "top"など文字列),
                    // デフォルトの回転原点。
                emoX : (数値),
                emoY : (数値),
                    // エモーションのXYオフセット。
                emoRev : (true of false),
                    // trueのときRevエモーション指定を使う。
                dresses : %[
                    // 服装定義。DRESSと置換される文字列。
                    (表情定義名) : (置換文字列) ... ,
                ],
                defaultDress : (文字列),
                    // デフォルトの服装。
                faces : %[
                    // 表情定義。 FACEと置換される文字列。
                    (表情定義名) : (置換文字列) ... ,
                ],
                defaultFace : (文字列),
                    // デフォルトの表情。
                levels : [
                    // 表示レベルごとの定義。添字0から順に0,1,2... のときの定義
                    %[
                        xoffset : (座標値),
                        yoffset : (座標値),
                            // キャラクタのXYオフセット。
                        zoom : (数値),
                            // カメラ用Z位置。
                        emozoom : (拡大率),
                            // エモーションの拡大率。省略時はzoomの値が使われる。
                    ] ... ,
                ],
                trans : (トランジション),
                    // このポーズに変更されるときのトランジション。
            ] ... ,
            defaultPose : (文字列),
                // デフォルトのポーズ。
            facePose : (true or false),
                // 表情ポーズを使用するか。
            noPose : (true or false),
                // trueのときポーズなし扱い。
            defaultBU : (true or false),
                 // trueのときバストアップのみ(表情枠なし)で表示。
            poseTrans : (トランジション),
                // ポーズが変更されるときのトランジション
            dressTrans : (トランジション),
                // 服装が変更されるときのトランジション。
            faceTrans : (トランジション),
                // 表情が変更されるときのトランジション。
            charTrans : (トランジション),
                // ポーズ、服装、表情が変更されるときのトランジション。
            dispTrans : (トランジション),
                // 表示/消去するときのトランジション。
            faceArea : %[ /* */ ],
            faceDiffMap : %[ /* */ ],
            faceZoom : (拡大率),
            diffTrans : (トランジション),
                // 拡張立ち絵用。
        ] ... ,
    ],
    defaultXpos : (座標値),
    defaultYpos : (座標値),
        // キャラクタのデフォルトのx/ypos。
    xoffset : (座標値),
    yoffset : (座標値),
        // キャラクタのXYオフセット。
    bothFace : (true or false),
        // trueのとき立ち絵と表情枠を同時に表示可。省略時true。
    showFaceMode : (true or false),
        // trueのときキャラクタのポーズ、服装、表情変更時に必ず表情枠再描画。
    defaultBU : (true or false),
         // trueのときキャラクタをバストアップのみ(表情枠なし)で表示。
    clearFace : (ファイル名),
        // 表情枠クリア時の画像ファイル名。
    faceApplyColor : (true or false),
        // trueのとき表情枠に時間定義による補正を適用。
    faceLevelName : (文字列),
        // 表情枠の画像名のLEVELと置換される文字列。
    dispNameFace : (true or false),
        // trueのとき名前枠の表示名、falseのときキャラ定義名でnameFacesをひく。
    nameFaces : %[
        // 表情枠の画像名マップ
        (定義名) : (画像ファイル名 or 描画関数) ... ,
    ],
    faceFadeTime : (ms時間),
        // 表情枠のフェード時間。
    charFadeValue : (ms時間),
        // キャラクタのデフォルトのフェード時間。
    poseTrans : (トランジション),
        // キャラクタのポーズが変更されるときのトランジション。
    dressTrans : (トランジション),
        // キャラクタの服装が変更されるときのトランジション。
    faceTrans : (トランジション),
        // キャラクタの表情が変更されるときのトランジション。
    charTrans : (トランジション),
        // キャラクタのポーズ、服装、表情が変更されるときのトランジション。
    charDispTrans : (トランジション),
        // キャラクタを表示/消去するときのトランジション。

//◆エモーション関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    emotionmap : %[
        // ポーズ別のエモーション名変換マップ。
        ([standName]_[emoPose]_[name]) : (変換後のエモーション名) ... ,
    ],
    emotions : %[
        // エモーション定義。
        (エモーション名) :%[
            name : (エモーション名),
                // エモーション名差し替え。
            image : (画像名),
                // エモーション画像。LEVELは置換される。
            xoff : (座標値),
            yoff : (座標値),
                // XY位置。
            action : (アクション),
                // このエモーションに適用するアクション。
            origin : (回転原点指定 1~9),
                // エモーションの回転原点。
            time : (ms時間),
                // アクションの時間指定。
            nowait : (true or false),
                // アクションのnowait指定。
            hide : (true or false),
                // アクションのhide指定。
            imageRev : (画像名),
                // emoRevがtrueのときのエモーション画像。LEVELは置換される。
                // emoRevはキャラクタ定義で定義。
            actionRev : (アクション),
                // emoRevがtrueのときのアクション。
            originRev : (回転原点指定1~9),
                // emoRevがtrueのときの回転原点。
        ] ... ,
    ],
    emoX : ([座標値 ...] or 座標値),
    emoY : ([座標値 ...] or 座標値),
        // 表示レベルごと or 一括でエモーションのXYオフセット。
    emoZoom : (拡大率),
        // エモーションの基準拡大率。省略時100。
    emoHideTime : (ms時間),
        // エモーションを隠すときのデフォルトの時間。

//◆環境レイヤ関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    layers : %[
        // 環境レイヤ定義
        (環境レイヤ定義名) : %[
            init : %[
                (コマンド名) : (属性値) ... ,
                    // 環境レイヤで実行するコマンド。登録時に実行される。
            ],
            layerDispTrans : (トランジション),
                // 表示/消去するときのトランジション。
            trans : (トランジション),
                // 画像が変更されるときのトランジション。
        ],
    ],
    layerTrans : (トランジション),
        // 環境レイヤの画像が変更されるときのトランジション。
    layerDispTrans : (トランジション),
        // 環境レイヤを表示/消去するときのトランジション。

//◆トランジション関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    transitions : %[
        // トランジション定義。trans_[定義名].tjsでenvinit.tjs外に記述可。
        (トランジション定義名) : (トランジション) ... ,
            // 文字列の場合はトランジション定義名を再帰的に検索。
            // 辞書配列の場合はトランジションのコマンドを指定。
    ],
    fadeValue : (ms時間),
        // デフォルトのフェード時間。
    nosynctrans : (true or false),
        // trueのときトランジションをデフォルトで非同期実行。
    allall : (true or false),
        // all系命令においてデフォルトで全体トランジションを使うか。
    allnosync : (true or false),
        // all系命令においてデフォルトで非同期動作とするか。

//◆アクション関連
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    actions : %[
        // アクション定義。action_[定義名].tjsでenvinit.tjs外に記述可。
        (アクション定義名) : (アクション定義)
            // 文字列、配列、辞書配列などでアクションを定義。
    ],

//◆その他
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    scripts : %[
        // 画像加工スクリプト定義。script_[定義名].tjs or envscript.tjsでenvinit.tjs外に記述可。
        (スクリプト定義名) : (関数) ... ,
            // レイヤを加工する関数。
    ],
    textstyles : %[
        // テキスト書式定期。textstyle_[定義名].tjsでenvinit.tjs外に記述可。
        (書式定義名) : %[
            size : (数値),
                // 文字の大きさ。
            color : (0xRRGGBB),
                // 文字色。
            rubysize : (数値),
                // ルビサイズ。
            rubyoffset : (数値),
                // ルビオフセット。
            shadow : (true or false),
                // trueのとき影をつける。
            shadowcolor : (0xRRGGBB),
                // 影の色。
            edge : (true or false),
                // trueのとき縁取りする。
            edgecolor : (0xRRGGBB),
                // 縁取りの色。
            linespacing : (数値),
                // 行間。
            pitch : (数値),
                // 字間。
            linesize : (数値),
                // ライン高さ。
            fontface : (文字列),
                // フォント。
            bold : (true or false),
                // trueのとき太字。
        ] ... ,
    ],

//◆その他拡張立ち絵用
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    faceArea : %[/* */],
    faceZoom : (拡大率),
    searchSmallLevel : (true or false),
    diffTrans : (トランジション),
];

続きを閉じる▲

タグ : 吉里吉里 KAGEX

カテゴリ : KAGEX

KAGEX講座(28) - メッセージレイヤについて(名前表示)

前回 KAGEX講座(27) - ラインモード([linemode])
KAGEXのメッセージレイヤにはキャラクタの名前や表情を表示する機能があります。

イメージとしては↓のようになります。
これにシステムボタンを付けたりもできますが、それは後にまわします。
messagelayer_0.png

メッセージ枠の画像は↓を「frameWithName.png」として使います。
frameWithName.png


名前レイヤ
名前レイヤには喋っているキャラクタの名前を表示します。
名前レイヤの設定は position タグで行います。
;↓ラインモードは none 以外にします。
@linemode mode=vn
;↓メッセージレイヤの設定。
;見やすいように途中で改行してますが、実際は一行で書いてください。
@position visible frame=frameWithName left=0 top=0 width=640 height=480
 marginl=160 margint=350 marginr=20 marginb=20
 nameleft=130 nametop=300 namewidth=130 nameheight=30 namealign=0 namevalign=0
;↓背景とキャラクタを表示
@道路
@しおり show

【しおり】
「メッセージレイヤだよ。」

ただの文章です。

【しおり】
「またセリフです。」
横に長くなりすぎてしまうので position タグの途中で改行しています。
実際には一行で書かないと動かないので注意してください。

メッセージ枠のサイズと位置は↓のようになっています。
fwnSize.png
marginl/t/r/b 属性では通常の文字の表示位置を指定しています。KAGと同じです。
※枠ぴったりだと見栄えが悪いので10px内側にしています。
nameleft, nametop 属性で名前レイヤの位置、 namewidth, nameheight 属性で名前レイヤの大きさ、 namealign, namevalign で名前レイヤの文字の位置を指定します。
namealign, namevalign に0を指定すると、名前レイヤの中央に名前を表示させることができます。
詳しくはリファレンスのpositionタグの欄を参照してください。

【】で囲んだ部分がキャラクタの名前として解釈され、名前レイヤに表示されます。
※ラインモードが "none" のときには表示されません。
囲まれていない部分は通常のメッセージとなります。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEXクラス図

これまでのものをリビジョン4963のものに対応させて更新。
大体あってるはず。

kag3ex2からの変更点
・KAGTransMove AnimKAGLayerTransMove AnimationLayerTransMove クラスが追加。
・MessageLayerとGraphicLayerクラスがそれらを継承するように変更。
・DialogLayerクラスがAnimKAGLayerを継承するように。
・ワールド拡張では大元としてKAGEnvBaseクラス追加。
・トランジションするクラスとしてKAGEnvTransクラス追加。
・背景レイヤの管理がKAGEnvironmentクラスから切り離されてKAGEnvStsageクラスに。

多少きれいになったように見える。
それでもごちゃごちゃなのはどうしようもない。

kag3ex3_class.png

続きを閉じる▲

タグ : 吉里吉里 KAGEX TJS

カテゴリ : KAGEX

5/24日のKAGEX更新メモ

新しくKAGEX更新されたので、それ見ながらメモしてたらミスって消した。
めんどくせーから思い出せるのだけ。

・レポジトリのURLが変更になってます。
最新版は https://sv.kikyou.info/svn/kirikiri2/branches/kag3ex3
※以前のは https://sv.kikyou.info/svn/kirikiri2/branches/kag3ex2

KAGEX
・暗転トランジションってのができてる
・squirrel処理系組み込み
・レイヤの継承関係変更。KAGTransMoveとかそのへん
・栞とか音のあたりもちょこちょこ変更されてる
・プラグイン用の拡張ポイント増えとる
historyLayer.visible参照してくる残念仕様がなおった

ワールド拡張
・KAGEnvBase KAGEnvTrans クラス追加。ちょっと綺麗になったっぽい。
・環境オブジェクトと舞台オブジェクトが分離。
・イベントオブジェクトの動作も変更。
・hide系命令、cleare命令削除、all系命令追加
・コマンドの内部処理組み直されとる
・カメラ回転できるっぽい
・表情用のポーズ設定できるらしい

続きを閉じる▲

タグ : 吉里吉里 KAGEX

カテゴリ : KAGEX

KAGEX講座(27) - ラインモード([linemode])

前回 KAGEX講座(26) - メッセージ操作([eraftername])
KAGEXではラインモードというものがあります。
ラインモードは linemode タグで変更することができます。

ラインモードを使うと、クリック待ち(KAGでは[l])や改行(KAGでは[r])などのタグを省略できるようになります。

linemode タグの mode 属性にラインモードの種類を指定します。

ここでは "vn" というモードを使ってみます。
@linemode mode=vn
「ぜんたい、ここらの山は怪しからんね。鳥も獣も一疋も居やがらん。
なんでも構わないから、早くタンタアーンと、やって見たいもんだなあ。」

「鹿の黄いろな横っ腹なんぞに、二三発お見舞もうしたら、ずいぶん痛快だろうねえ。
くるくるまわって、それからどたっと倒れるだろうねえ。」

それはだいぶの山奥でした。
案内してきた専門の鉄砲打ちも、ちょっとまごついて、どこかへ行ってしまったくらいの山奥でした。

@s
"vn" では、シナリオ中の改行でクリック待ち([l])と改行([r])、空行でクリック待ち([p])と文字消去([er])が行われます。
実際にどうなるかは実行してみればわかるはずです。
他にもいくつかのラインモードがあるので、リファレンスの linemode タグや、KAGEX付属リファレンス(kagex.txt)の該当箇所を参照してください。


ゲーム中ではクリック待ちなどを入れずに、シナリオファイル中だけで改行を入れたい場合があります。
※1行で書くと横に長くなり、シナリオファイルが見づらくなってしまう場合など。
このような時は、行末に「\」を入れることでラインモードの動作を抑制できます。
@linemode mode=vn

「ぜんたい、ここらの山は怪しからんね。鳥も獣も一疋も居やがらん。\
なんでも構わないから、早くタンタアーンと、やって見たいもんだなあ。」

「鹿の黄いろな横っ腹なんぞに、二三発お見舞もうしたら、ずいぶん痛快だろうねえ。\
くるくるまわって、それからどたっと倒れるだろうねえ。」

それはだいぶの山奥でした。
案内してきた専門の鉄砲打ちも、ちょっとまごついて、どこかへ行ってしまったくらいの山奥でした。

@s
セリフ中の改行に「\」を入れました。
このように「\」がある改行では、クリック待ちと改行が行われません。

ラインモードはKAGEXとワールド拡張の様々な動作に影響します。
"none"以外のラインモードを使うことを強く推奨します。

次回 KAGEX講座(28) - メッセージレイヤについて(名前表示)

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEXドキュメントを読む world.txt(1)

←前回
今回は「●拡張タグ」から「◆begintrans/endtrans」まで。

◇基本処理の拡張
ワールド拡張のオブジェクトを操作するためのタグとして env stage event char layer ev bgm se などのタグが追加されます。
実際には、これらのタグの代わりに、省略表記が使用されることが多いです。
※省略表記については後で説明があります。
「タグ名に合致する~」というのは省略表記の1種です。
名前処理機能というのも後で説明があります。

「sflags に 「cg_名前」という値が自動的に登録されます。」というのは、イベントレイヤに表示した画像ファイル名が "eventImg"だった場合、sf.cg_EVENTIMG にtrue が代入されるということです。
画像ファイル名が大文字に変換されているので注意してください。
「sflags に 「bgm_名前」という値が自動的に登録されます。」というのも同様です。
bgm01というファイルを再生した場合は、sf.bgm_BGM01 に true が代入されます。
これはCG鑑賞モードやBGM鑑賞モードで、既に見た(聞いた)もののみを表示させる際に判定するための機能です。
※実際の鑑賞モードなどは別途準備する必要があります。

「SEオブジェクト群」という言葉がありますが、効果音バッファごとにSEオブジェクトが存在するので群という言葉がついているのだと思います。
重要ではないです。
ワールド拡張では基本的に効果音バッファを意識する必要はありません。

遅延実行についてはあまり説明がないので、また別の記事で説明します。

◇命令の拡張
ここまでのタグは、オブジェクトを操作するためのタグです。
その他にもいくつかワールド拡張用のタグが追加されます。

◆begintrans/endtrans
画面全体のトランジションを行うためのタグです。
※画面全体ではなくレイヤごとのトランジションというのもあります。
ここでは「begintransの属性」となっていますが、begintrans タグに指定できる属性はありません。
「endtransの属性」の間違いです。
begintrans から endtrans までで1つのセットです。
片方だけ使うことはありません。
使い方としては、 begintrans と endtrans の間にトランジションで変更したいレイヤだけを変更し、endtrans タグにはトランジションの属性を指定します。
変更していないレイヤはそのまま変わりません。
「表画面の内容が裏画面にコピーされます」などと書いてますが、細かい動作は考えないほうがいいと思います。

@begintrans
; begintrans と endtrans の間でレイヤの内容を変更します。
@env stage=教室
; ワールド拡張ではレイヤを直接操作するのではなくオブジェクトを通して操作します。
; env タグは環境オブジェクトを操作するタグです。ここでは舞台を「教室」に変更します。
; こうすることで、環境オブジェクトは背景レイヤに教室の画像を設定します。
; ここでは 背景レイヤの画像しか変わらないので  begintrans と endtrans タグを使う意味はありませんが、
; 実際はキャラクタなども同時に変更します。
@endtrans trans=crossfade time=1000
; begintrans ではなく endtrans タグの属性としてトランジションを指定します。
; ここでは 1000ms の crossfade を指定しています。
ここに書いている属性以外も、トランジションに関わるものなら使用できます。
envinit.tjs で定義したトランジションを使うことが多いので、属性を使って指定することはあまりありません。
※envinit.tjs でのアクション定義はここでは説明しません。

ltbegin/ltend タグの話が書いてますが、無視して構いません。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEXドキュメントを読む world.txt(0)

次回→
KAGEXのドキュメント(説明書)はdocフォルダに入っています。
使い方がかなりわかりづらいKAGEXですが、実はドキュメントに書いてたり書いてなかったりします。
そのドキュメントを読みながら適当に補足などを書いていきます。
このシリーズは古いバージョンが元になっているのであまり参考になりません

とりあえずworld.txtを読んでいきます。
予想外に長くなってしまったので今回は「●KAGEX ワールド拡張機能概要」と「●導入方法」の部分のみです。
記事中でいちいち引用はしないので自分でドキュメントを見ながら読んでください。

world.txtにはワールド拡張の基本的な部分の説明が書いています。

●KAGEX ワールド拡張機能概要
ワールド拡張はKAGEXのプラグインという形で提供されています。

KAGでは直接画像や音声を扱わなければなりませんでした。
しかも、表示する先のレイヤ番号やバッファ番号まで自分で指定していく必要があります。
自分でマクロを組んで省力化するのですが、マクロを組むのにもかなりの労力がかかります。
ワールド拡張はそれをノベルゲーム用に非常に実用的な形で実現させています。
※ノベルゲームに特化しています。その他のジャンルのゲームでは使えませんが、その分ノベルゲームを作るのには便利です。

ワールド拡張ではレイヤや音声バッファなどを直接意識せずにすむように、オブジェクトを通してそれらを操作します。

キャラクタオブジェクトというのは文字通りゲームのキャラクターを扱うためのオブジェクトです。
キャラクタの画像やボイス、位置、表情、服装などをまとめて管理しています。
使っていくとわかりますが、キャラクタの情報をまとめて扱うことができるというのは大変便利です。
このオブジェクトを通してキャラクタをレイヤに表示したり、ボイスを再生したりすることができます。
実際に画面に表示される画像は表情や服装などから自動的に判別されます。

イベントオブジェクトはイベントCGを扱うためのオブジェクトです
イベント画像やその既読管理などを行っています。

環境オブジェクトはゲーム全体の制御を行うオブジェクトです。
舞台やゲーム内時間、カメラなどを管理しています。
舞台から背景画像が判別され画面に表示されます。
ゲーム内時間も背景画像やキャラクタ画像の判別に影響を与えます。(昼なら明るい画像、夜なら暗い画像、など)
カメラ位置を変更したりズームさせたりすると、それに合わせて全てのレイヤ位置などがずらされます。

レイヤオブジェクトはキャラクタやイベントCGや背景以外の画像を表示させるために使います。
ワールド拡張では、 image タグなどでレイヤを直接触るのではなく、あくまでレイヤオブジェクトを通して画像の表示などを行います。


オブジェクトは属性をコマンドとみなして動作しています。
内部的な話になってしまうので割愛しますが、コマンドと言われたらワールド拡張で使われる属性のことだと思ってください。
あまり厳密に属性とコマンドを使いわけてもいないので重要ではないです。
コマンド(属性)を通してオブジェクトを操作します。

●導入方法
ワールド拡張は勝手に読み込まれます。
ワールド拡張を使わずともKAGEXは動きますが、KAGEXのみで使うことはまず無いと思います。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEX用キーワード定義ファイル

ダウンロード
KAGEXとワールド拡張の属性名一覧です。
おおむね入ってるはずですがところどころ抜けてるかも。
サクラエディタのキーワード定義ファイル形式ですが他のエディタでも簡単に使えるはず。

タグ名はワールド拡張で動的に変わってしまうので入ってません。
そちらは正規表現で色分けするのがいいとおもいます。

タグ : 吉里吉里 KAGEX

カテゴリ : KAGEX

TJSの辞書配列の話

envinit.tjs で普段から使ってる割には書いてなかったので辞書配列の話。
envinit.tjs をいじる上でのざっくりとした説明なので注意。

辞書配列では「名前」と「値」のペアが基本となります。
辞書配列は%[]で囲みます。
%[];
これはペアが1つも存在しない辞書配列です。
最後についたセミコロン(;)は TJS のお約束です。とにかく一番最後には付けておいてください。

名前と値をコンマ(,)で区切って順番に書くとペアになります。
%["name","value"];
これは "name" が名前、"value" が値となったペアを1つだけ含んだ辞書配列です。

たくさん並ぶと訳がわからなくなってきます。
%["defaultTime","昼","yoffset",400,"xoffset",400,"timeTrans","フェード"];
これは名前と値のペアが4つ含まれた辞書配列です。

改行と半角スペースを適当に入れて見やすいように整形してみます。
%[
    "defaultTime" , "昼",
    "yoffset" , 400,
    "xoffset" , 400,
    "timeTrans" , "フェード",
];
名前と値の対応がわかりやすくなったと思います。
※"フェード" のあとのコンマは付けても付けなくても構いません。
※あとでペアを追加するときにコンマが抜けていたりすることを防ぐことができます。

ペアの値の部分に、さらに辞書配列を入れることができます。
%[
    "times" , %[ "昼" , "01", ],
    "defaultTime" , "昼",
    "yoffset" , 400,
    "xoffset" , 400,
    "timeTrans" , "フェード",
];
名前が "times" となっているペアの値は、%[]で囲まれているので辞書配列です。
その辞書配列も名前が "昼" で値が "01" となったペアを1つ含んでいます。

辞書配列ではコンマの代わりに、イコール記号と大なり記号を組み合わせた「=>」という記号も使われます。
値と名前の間のコンマを「=>」で置き換えて、ペアがわかりやすいようにするのが一般的です。
%[
    "times" => %[ "昼" => "01", ],
    "defaultTime" => "昼",
    "yoffset" => 400,
    "xoffset" => 400,
    "timeTrans" => "フェード",
];
機能としてはコンマのみを使った物と全く同じです。

さらにコロン(:)を使う方法もあります。
この場合は名前を囲む "" を省略します。
%[
    times : %[  : "01", ],
    defaultTime : "昼",
    yoffset : 400,
    xoffset : 400,
    timeTrans : "フェード",
];
コンマと「=>」とコロンのどれを使っても構いません。
自分が好きなものを使ってください。

envinit.tjs において、実際のペアの名前や値をどのようにするのかは KAGEX 関連の記事などを参照してください。

続きを閉じる▲

タグ : 吉里吉里 TJS 講座 KAGEX

カテゴリ : KAGEX

KAGEXタグリファレンスなう

KAGEXリファレンスα6

ブログ書いてない分こっち書いてたんだよ!
ということでKAGEXタグリファレンス。
めっちゃ作りかけ。いつかできる。たまに見ると成長してるかも。
見事にめんどくさそーな所ばっか残ってるわろ。

完成したらワールド拡張なしでベターKAGとして使うには十分な環境できるんじゃないかな?
誤字脱字その他諸々はコメント欄まで。

タグ : 吉里吉里 KAGEX

カテゴリ : KAGEX

KAGEX講座(26) - メッセージ操作([eraftername])

前回 KAGEX講座(25) - 選択肢設定([selopt])
KAGEXにはテキスト入力を楽にするタグがあります。

ignoreCR
まずKAGにも存在するignoreCRについて説明します。
config.tjsのシナリオ解析モードの部分で設定できます。
以下引用
// ◆ シナリオ解析モード
// シナリオファイル中の改行に従わせたい場合に false を設定します。
// false を指定すると、KAG のシナリオ中の改行が、行末に \ または [p] を書か
// ない限りそのままメッセージレイヤ上での改行として扱われます。
// true を設定すると [r] タグを書かない限り改行されません。
// KAG2.x 互換にするには false を指定してください。
;global.ignoreCR = true;
デフォルトではtrueになっています。
falseにすると[r]タグを書かなくても改行されるようになります。
『クラムボンはわらつたよ。』[l]
『クラムボンはかぷかぷわらつたよ。』[l]
『クラムボンは跳てわらつたよ。』[l]
『クラムボンはかぷかぷわらつたよ。』
↓[r]タグを書かなくても改行されます。
ignorecr_1.png

改行させたくない行では「¥」を入れます。
ただしコマンド行(@で始まるタグの行)はタグしかないことがわかっているので「¥」をつけなくても改行されません。
@font color=0xFF0000
『クラムボンはわらつたよ。』[l]
@font color=0x00FF00
『クラムボンはかぷかぷわらつたよ。』[l]
[font color=0xFF0000
『クラムボンは跳てわらつたよ。』[l]
[font color=0x00FF00
『クラムボンはかぷかぷわらつたよ。』
[font]タグのところの「¥」を忘れると改行が挟まってしまいます。

erafterpage
[erafterpage]タグを使うと[p]タグの後に自動で[er]タグを実行してくれるようにできます。
@erafterpage mode=true
『クラムボンはわらつたよ。』[p]
『クラムボンはかぷかぷわらつたよ。』[p]
『クラムボンは跳てわらつたよ。』[p]
『クラムボンはかぷかぷわらつたよ。』
[p]ごとにメッセージレイヤの文字が消去されます。
mode属性にtrueを指定すると有効、falseを指定すると無効にできます。

次回 KAGEX講座(27) - ラインモード([linemode])

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

選択肢まとめ - selopt, seladd, sellect, seldone

選択肢関係のタグまとめ。
もうちょっと文量まとまったら綺麗にリファレンスとしてまとめたいですがとりあえず。
まとめました→http://kagex.zouri.jp/

selopt (選択肢の属性)

属性必須?説明
leftnopixel 単位の数値選択肢領域の左端位置を指定します。
topnopixel 単位の数値選択肢領域の上端位置を指定します。
widthnopixel 単位の数値選択肢領域の幅を指定します。
heightnopixel 単位の数値選択肢領域の高さを指定します。
normalno画像ファイル名選択肢ボタンの画像として表示させる画像を分離ボタン形式で指定します。使用しない場合は "" を指定してください。
overno画像ファイル名選択肢ボタンの画像として表示させる画像を分離ボタン形式で指定します。使用しない場合は "" を指定してください。
onno画像ファイル名選択肢ボタンの画像として表示させる画像を分離ボタン形式で指定します。使用しない場合は "" を指定してください。
focusno画像ファイル名選択肢ボタンの画像として表示させる画像を分離ボタン形式で指定します。使用しない場合は "" を指定してください。
graphicno画像ファイル名選択肢ボタンの画像として表示させる画像を結合済みボタン形式で指定します。使用しない場合は "" を指定してください。
graphickeyno0xRRGGBB 形式 または パレットインデックス番号 または "adapt"結合済みボタン方式の場合の画像のカラーキーを指定します。分離ボタン形式では使用できません。
opacityno不透明度 ( 0 (全くの透明) ~ 255 (全くの不透明 ) )選択肢画像の不透明度を指定します。
selectcolorno0xRRGGBB 形式組み込みボタン形式の場合のボタンの文字の色を指定します。
selectbasecolorno0xRRGGBB 形式組み込みボタン形式の場合のボタンの色を指定します。
selectwidthnopixel 単位の数値組み込みボタン形式の場合のボタンの幅を指定します。
selectheightnopixel 単位の数値組み込みボタン形式の場合のボタンの高さを指定します。
fontfacenoフォント名文字のフォント名を指定します。 font タグの face 属性を参照してください。
sizenopixel 単位の数値文字サイズを pixel 単位で指定します。
colorno0xRRGGBB 形式選択肢の文字の色を指定します。組み込みボタン形式の場合は selectcolor 属性で指定してください。
selectedcolorno0xRRGGBB 形式選択済みの選択肢の文字の色を指定します。組み込みボタン形式の場合は無効です。
disabledcolorno0xRRGGBB 形式選択できない選択肢の文字の色を指定します。組み込みボタン形式の場合は無効です。
italicnotrue または false(デフォルト)文字を斜体にするかどうかを指定します。true を指定すると斜体になります。
boldnotrue または false(デフォルト)文字を太文字にするかを指定します。 true を指定すると太文字になります。
edgenotrue または false(デフォルト)文字を袋文字 ( 縁取り文字 ) にするかを指定します。true を指定すると袋文字になります。組み込みボタン形式の場合は無効です。
edgecolorno0xRRGGBB 形式文字の縁取りの色を指定します。
edgeemphasisno0以上の数値文字の縁取りの強調度を指定します。
edgeextentno0以上の数値文字の縁取りの太さを指定します。
shadownotrue または false(デフォルト)文字に影をつけるかを指定します。true を指定すると影がつきます。組み込みボタン形式の場合は無効です。
shadowcolorno0xRRGGBB 形式文字の影の色を指定します。
shadowoffsetxnopixel 単位の数値文字の影のX方向のずれの量を指定します。
shadowoffsetynopixel 単位の数値文字の影のY方向のずれの量を指定します。
shadowwidthno0以上の数値文字の影のぼかし具合を指定します。
overcolorno0xRRGGBB 形式マウスオーバー時の文字の色を指定します。組み込みボタン形式の場合は無効です。
overedgecolorno0xRRGGBB 形式マウスオーバー時の文字の縁取りの色を指定します。組み込みボタン形式の場合は無効です。
overshadowcolorno0xRRGGBB 形式マウスオーバー時の文字の影の色を指定します。組み込みボタン形式の場合は無効です。
oncolorno0xRRGGBB 形式マウスボタン押し下げ時の文字の色を指定します。組み込みボタン形式の場合は無効です。
onedgecolorno0xRRGGBB 形式マウスボタン押し下げ時の文字の縁取りの色を指定します。組み込みボタン形式の場合は無効です。
onshadowcolorno0xRRGGBB 形式マウスボタン押し下げ時の文字の影の色を指定します。組み込みボタン形式の場合は無効です。
focuscolorno0xRRGGBB 形式フォーカス時の文字の色を指定します。組み込みボタン形式の場合は無効です。
focusedgecolorno0xRRGGBB 形式フォーカス時の文字の縁取りの色を指定します。組み込みボタン形式の場合は無効です。
focusshadowcolorno0xRRGGBB 形式フォーカス時の文字の影の色を指定します。組み込みボタン形式の場合は無効です。
clickseno効果音ファイル名addbutton タグの clickse 属性のデフォルトの値を指定します。
enterseno効果音ファイル名addbutton タグの enterse 属性のデフォルトの値を指定します。
leaveseno効果音ファイル名addbutton タグの leavese 属性のデフォルトの値を指定します。
openseno効果音ファイル名選択肢を実行するときに再生する効果音を指定します。指定しなければ効果音は再生されません。
opensebufno効果音バッファ番号opense 属性で指定した効果音を鳴らす効果音バッファを指定します。
closeseno効果音ファイル名選択肢の実行終了時に再生する効果音を指定します。指定しなければ効果音は再生されません。※現ver.だとバグで再生されず。
closesebufno効果音バッファ番号closese 属性で指定した効果音を鳴らす効果音バッファを指定します。
msgoffnotrue または false(デフォルト)select タグの msgoff 属性のデフォルトの値を指定します。
msgonnotrue または false(デフォルト)select タグの msgon 属性のデフォルトの値を指定します。
fadetimeno時間(ms単位)選択肢を表示または隠すときのフェードにかける時間を指定します。デフォルトでは0です。
uistoragenoUI定義CSVファイル名UI定義ファイルを指定します。
uinameno文字列UI名を指定します。
select タグによる選択肢に対する様々な属性を指定します。
いずれの属性も、省略すれば設定は変更されません。
ボタンの各形式については button タグの説明を参照してください。分離ボタン形式、結合済みボタン形式、組み込みボタン形式の順に優先されます。


seladd (選択肢の登録)

属性必須?説明
storagenoシナリオファイル名ジャンプ先のシナリオファイルを指定します。省略すると現在のシナリオファイル内であると見なされます。
targetnoラベル名ジャンプ先のラベルを指定します。省略するとファイルの先頭から実行されます。
textno文字列選択肢上に表示される文字列を指定します。
evalnoTJS 式評価する TJS 式を指定します。この式の結果が false ならば選択肢は登録されません。
onceflagno変数名変数名を指定します。この変数が true ならば選択肢は登録されません。
この変数には選択されたときに true が代入されます。
この属性は eval 属性が指定されている場合は無視されます。
tagno文字列ボタン固有名タグを指定します。
この属性が指定された場合、選択されたときに sf.["select_"+tag] に true が代入されます。
clickseno効果音ファイル名選択肢ボタンがクリックされたときに再生する効果音を指定します。デフォルトの値は selopt タグの属性によります。再生しない場合は "" を指定してください。
clicksebufno効果音バッファ番号clickse 属性で指定した効果音を鳴らす効果音バッファを指定します。
enterseno効果音ファイル名選択肢ボタン内にマウスカーソルが入ってきたときに再生する効果音を指定します。デフォルトの値は selopt タグの属性によります。再生しない場合は "" を指定してください。
entersebufno効果音バッファ番号enterse 属性で指定した効果音を鳴らす効果音バッファを指定します。
leaveseno効果音ファイル名選択肢ボタン内からマウスカーソルが出ていった時に再生する効果音を指定します。デフォルトの値は selopt タグの属性によります。再生しない場合は "" を指定してください。
leavesebufno効果音バッファ番号leavese 属性で指定した効果音を鳴らす効果音バッファを指定します。
expnoTJS 式選択されたときに実行される TJS 式を指定します。
onenternoTJS 式選択肢ボタン内にマウスカーソルが入ってきたときに実行される TJS 式を指定します。
onleavenoTJS 式選択肢ボタン内からマウスカーソルが出ていった時に実行される TJS 式を指定します。
disablenotrue または falsetrue が指定された場合、選択肢が選択できないようになります。
省略すると false を指定したと見なされます。
選択肢を登録します。登録した選択肢は select タグで実行されます。


select (選択肢の実行)

属性必須?説明
storagenoシナリオファイル名seldone タグによるジャンプ先のシナリオファイルを指定します。省略すると seldone タグ実行時のシナリオファイル内であると見なされます。
targetnoラベル名seldone タグによるジャンプ先のラベルを指定します。省略するとファイルの先頭から実行されます。
msgoffnotrue または falsetrue が指定された場合、選択肢実行前に現在のメッセージレイヤを隠します。
デフォルトの値は selopt タグの属性によります。
msgonnotrue または falsetrue が指定された場合、選択肢実行前に現在のメッセージレイヤを表示します。
デフォルトの値は selopt タグの属性によります。
msgoff 属性が true の場合は無視されます。
seladd タグで登録された選択肢を表示し、選択肢が選択されるのを待ちます。
選択された選択肢に storage または target 属性でジャンプ先が指定されていた場合、指定先にジャンプします。指定されていない場合、ジャンプせずに次の行からシナリオファイルの実行を再開します。
選択肢が登録されていない場合、このタグは無視されます。


seldone (選択肢後の合流)

最後に実行された select タグの storage 属性と target 属性で指定されたジャンプ先へジャンプします。
ジャンプ先が指定されていない場合はシナリオファイルの進行を停止します。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

最新記事
カテゴリ

openclose

記事一覧
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。