見出し画像

ききよ.ティラノ.インデックス

ここ1年ぐらいの情報をまとめます。


ティラノは相変わらず専門家が専門家にだけしかわからない自己愛的な説明記事しかないのでここらで一つ下衆な記事でも書こうと思う。

なお、上のような感情になるのには理由があって
・その情報の知識(INT)が単純に足りない
・情報提供者をどこか見下している

というのがあるので、同じ気持ちを感じていたら君も今日から仲間だ。
ようこそ下衆へ。

主な参考リンク先

>>ティラノスクリプトカテゴリ

>>ティラノスクリプトカテゴリ

>>ティラノスクリプト関連のまとめ

公式リンク集

どこに何があるのか把握したいときに。


TRPGスタジオ関連

Q.ティラノスクリプトやビルダーに動画出力機能ある?

A.ねえよ

Q.ゲームのログを公開できる場所はないの?

A.ねえよ(将来的にできるかもしれない:非公開回答2020年)

Q.動画撮影するのに便利なものある?

;撮影の初めに。
[autostart]

;撮影の終わりに。(自動でゲームが終了して録画が止まる)
[close ask="false"]

;リロードボタンを消す
[eval exp="$('.ui-draggable').remove()"]

https://onl.bz/f9rtaq8

ティラノスタジオ関連

Q.便利機能ない?

A1.自分のマシンと違う環境でテストするとか?

空リプ。
合わせ技でデベロッパーツールの左から2番目の

画像7

青い部分のボタンを押すとスマホやpadのシミュレーションもできる。
(実機でしかわからない不具合もある)

ゲームのウィンドウを閉じて、「ゲーム再生」ボタンを押さないと適応されないので注意。


A2.F5リセット

コンソールの何かしらを選択した状態でF5を押すとゲームが再起動する。

全般

Q.ティラノ無料版と有料版どっちがいいの?

A.有料版。作者に金を落として業界潤わせてくれ。

Q.ティラノ系の割引っていつ?

A.不定期。年末にあることが多い。定価で買って。

Q.ビルダーとスクリプトどっちがいい?

A.スクリプト。ビルダーは楽だが不便。

Q.ティラノのあれやこれがわからない


ティラノスクリプト🔰初心者向け内容

抜粋

ティラノビルダーからティラノスクリプトへの移行(外部記事)
▲V5対応していないプラグインや、画面サイズで非対応になるもの有。
スクリプト編集の環境づくり
ティラノスタジオ/公式ガイドブック/Atom の三種の神器を手に入れろ。
公式ガイドブック。V4→V5で変わったところ。
ティラノスタジオとAtomの連携
ティラノスクリプト公式 テクニックサンプル集で遊べ(魔改造)
ティラノスクリプトを始める前に
後で思う、最初に知っとけばよかったこと

===
中級者の心得的な。

書き方

Q.""が必要な場合とそうじゃない場合がわからない(タグ)

A.文字列は必要。数字、boolean型(論理値)=True,False、変数、引数は不要
ティラノだと""を入れた数字でもTFでも意味合いは違うが対応する。

[image name="piyo" width=500 x=f.hoge cond="f.fuga=True"]

;" "の中に文字列を入れる場合は' '(シングルダッシュ)が必要。

[dialog text="dialogやembは基本的に直でいいんだけど"]
@eval exp="tf.txt='変数'"
[dialog text="& tf.txt + 'を組み合わせるとかの時は'"]
[dialog text="シングルダッシュで文字列を囲むよ"]

Q.裏技教えて

A.『三項演算子』でぐぐってみて。

[if exp="f.ef==true"]
    tf.ef='通常版'
[else]
    tf.ef='軽量版'
[endif]

は

[iscript]
tf.ef=(f.ef)?"通常版":"軽量版";
[endscript]

と同じ!

A2.『正規表現』でぐぐってみて。

@eval exp="f.action=[]"
@eval exp="f.action.push('C')" cond="/^(?=.*6).*$/.test(f.kekka)"
@eval exp="f.action.push('T')" cond="/^(?=.*[4-5]).*$/.test(f.kekka)"
@eval exp="f.action.push('F')" cond="/^(?=.*[2-3]).*$/.test(f.kekka)"
@eval exp="f.action.push('Z')" cond="/^(?=.*1).*$/.test(f.kekka)"

/*
f.kekkaは1-6のどれか数字1つが出る。
f.kekkaの数字がいずれかの場合、f.actionという変数に文字列のいずれかが配列に追加される。
JSでswitchするよりは短くなってみやすい。
*/

なお上の1とか6自体を変数にする場合はRegExpコンストラクタを使用する。

@eval exp="tf.mdc='赤'"

[iscript]
var pattern= new RegExp( '^(?=.*'+tf.mdc+').*$' );
var pattern2= new RegExp( tf.mdc+'.','gm' );

if(pattern.test(f.kekka)){
     f.hoge=f.kekka.join('').match(pattern2);
};

[endscript]

A3.アロー関数と、変数直輸入。

ティラノ変数の中身をJS計算で1纏めで決める場合など便利。


Q.テスト環境構築がめんどい

A.手順が逆。Cを作ってからAと繋げるBを作る。

Q.コメント文がコメント文にならない

A.[iscript]の中は「 ; 」はコメント文にならない。

hoge.ks内

;これはコメント文
/*
これはコメント文
*/

[iscript]
;これはコメント文じゃない

/*
これはコメント文
*/

//これはコメント文
[endscript]
;コメント文じゃないのに読み込むから挙動が遅い原因の1つかも。

Q.経験則からなんかくれ

A.小技集

https://note.com/preview/nf42a01c5982a?prev_access_key=3eefdeeb7eadc9a5f9972e2a3b748e4b



削除

Q.特定の変数のみ削除したい

[iscript]
delete f.flag1;
[endscript]

https://tyrano.jp/usage/tech/hensuu

Q.一時変数を全て開放したい

@eval exp="tf.i=0"
[autosave]
[autoload cond="tf.i!=undefined"]

;オートセーブをかますことで、仕様として開放する。


Q.ゲームセーブデータも全て削除したい

[iscript]
localStorage.removeItem(TG.config.projectID + "_tyrano_data")
[endscript]

http://www.goihama.games/ts/ts016/?

Q.deleteで想定外の変数まで削除される

A.[eval]だとそうなる。[iscript]で。

evalは実行時にスペースを削除して値を渡すからdeleteの後ろのスペースも削除されて使えないってパターンかな

https://onl.sc/2Ug8URq

変数がundefinedになって、マクロが止まるっていうこともある。
なおこれらはエラーを吐かない。



見た目、UI

Q.テキストの行間や字間を編集したい

A.大きさは[font]系タグ、行間字間はconfig.tjs(Data>system)
config.tjsを開いたら「Ctrl+F」で「行間」で調べれば出る。

;defstyleタグと同じらしい
[defstyle linespacing=8 pitch=0]

;↑を入れても同じ効果かもしれない。(未検証)

Q.メッセージ枠の角を丸くしたい

A.radiusパラメーター。ただしV5からの追加要素。

'0=直角(未定義)、100=角丸
[position radius="0-100"]

Q.ボタンなどの位置をサンプル画面みながら調整したい

会話

Q.#akane の部分を変数にしたい

@eval exp="f.sekaiichikawaii='akane'"

#&f.sekaiichikawaii
;↓
#akane

Q.登場人物の名前を途中で変えたい

;name="tyrano"の名前を変更する
[iscript]
TYRANO.kag.stat.charas['tyrano'].jname = 'ティラ乃'
[endscript]

Q.変数記述のキャラで強調表示を適応したい(ビルダー)


Q.名前欄を任意箇所で消したい

[free name="chara_name_area" layer="message0"]

なお、ただ見えなくするだけなら「 # 」だけでよい。
[fuki]でこれやると壊れる。

Q.メッセージレイヤーから文字が飛び出る

A.[position]のverticalを単独で書くと発生する。

[position layer="message0" margint="11" marginl="55" marginr="55" marginb="10"]
[position layer="message0" vertical="false"]
;↑✖
;↓〇
[position layer="message0" margint="11" marginl="55" marginr="55" marginb="10" vertical="false"]


バックログ

Q.バックログのみ文を残したい

A.[pushlog]

[pushlog text="※※※見せてあげないよーーー!!※※※" join="true"]

;参照:https://tyrano.jp/sample2/code/tech/7#demo

Q.複数行を[pushlog]したい

A.Javascriptでは`(Shift+@)で囲んだ部分は文字列になる。

[iscript]
let html=`
//////////  <br>
<br>
おわり!!<br>
//////////  <br>

`;
TG.ftag.startTag("pushlog", {text:html,} );
[endscript]

このtextパラメーターはhtml形式なので、htmlをぶち込める。

Q.直前までのバックログを削除したい

[iscript]
tf.system.backlog=[];
[endscript]

http://www.goihama.games/ts/ts043/

Q.バックログを装飾したい(文字自体)

A.バックログはHTML5でできてるよ。


レイヤー構造

レイヤー構造は
←低い 高い→
bg / bg2 / 0,1…,message0,message1 …/ free / fix / mask
/はzindexで超えられない壁。


変数

Q.変数を確認したい

A.4つ方法がある。

1.TRPGスタジオの変数ウォッチで変数を確認する。(要[s])
2.[emb]でテキストボックスに変数を出す。
3.[dialog]のtextに&をつけて変数を出す。
4.JSでalert(【変数】)で出す。

Q.変数が消えるんだが

tf.(一時変数)は、主にゲームを閉じる、再起動した時のみと考えがちだが、
メニューを開く、ダイアログを見る、[sleepgame]をするでも消滅する。

Q.変数の裏技教えて

@eval exp="tf.hoge='あああああああああああ'"

@dialog text="&tf['hoge']"

呼び出す変数を変数で呼べる。情報源

ポップアップ

Q.ポップアップの種類は?

A.[dialog]とJSのconfirm()やalert()。

Q.ティラノタグでconfirmが使いたいが?

A.V4ではあったがV5では廃止されたので無理。JS使って。

[preload]

Q.小技ある?

A.読込に配列が使える。

配列インデックスそれぞれに素材までのパスを書けば全部読んでくれる。


[camera]

Q.不具合あるが?

A.[camera]は使う前に[camera x=0 y=0]を書け。
A2.waitパラメーターは信用するな。そのあとに[wait]タグを置け。

[button]

Q.visibleパラメーターって意味あんの?

A.fixパラメーター併用で使う。
fixボタンにして、layoptでfixレイヤーを指定すれば再表示できる。
非表示の間にanimで透明度をいじるなどするなどの使い方ができる。

[chara~]

Q.[chara_hide_all]が[bg]配置前に反応しないが??

A.現在選択中のレイヤーが違う。layer="1"とか指定で解決。

Q.[chara_move]と[anim]ってなんか違いある??

A.waitパラメーターがついた制限つき[anim]が、[chara_move]である。


Q.他に何かある?

A.face="default"は前の画像を消さずに上に重ねる処理。

炎の画像が重ねられて濃くなっている

A.[chara_show x=0 y=0]配置は
[chara_config pos_mode="false"]で自動配置を切れ。

[image]

Q.charaからimageにタグを書き換えたら表示されないが?

A.[chara_show]はvisibleの基準がtrue、[image]のvisibleの基準はfalse。
レイヤーを visible="true" にしたあとの初めてのimageはvisible="true"
にしないと見えない。
imageより以前に[chara_show]がある場合、そのimageは表示される。

[font]

Q.なんかある?

A.[cm]するとconfig.tjsの設定にもどるよ。↓をやると↓になる。
A.[font]の変更を定着させるなら[deffont]+[resetfont]。
一時的に変更するものは[font]
永久的に変更するものは[deffont]

[ruby]

Q.[glink]の選択肢にルビつけたい

A.無理。[ruby]でやると、メッセージレイヤーに暴発する。

[iscript]
f.clast0=TG.ftag.startTag("ruby", { text:"アマデ"} )+TG.ftag.startTag("text", { val:"神"} )+TG.ftag.startTag("ruby", { text:"ウス"} )+TG.ftag.startTag("text", { val:"子"} );
f.clast1=TG.ftag.startTag("ruby", { text:"モンス"} )+TG.ftag.startTag("text", { val:"怪"} )+TG.ftag.startTag("ruby", { text:"ター"} )+TG.ftag.startTag("text", { val:"物"} );
[endscript]


@glink text="&f.clast0"
@glink text="&f.clast1"


;↑無理やり、textの変数の中に[ruby]を入れてみた図。
こうなる。

変化球でいいなら

;ルビ用
@glink color="btn_12_purple" text="アマデウス" y="50" x="&230+640"
@glink color="btn_12_black " text="モンスター" y="50" x=" 230"

ボタンの上にルビだけのボタンを作成する。

見た目だけ"っぽく"なる。




[fuki]

Q.設定したのに初期設定のままなんだが???

A.『#キャラ名』 で台詞出した???

その他自由研究


[cond]

Q.空白と0って同じじゃないの?

A.空白<=0,1<=2, a<=b, あ<=い   これ全部Trueね。

マクロ

Q.マクロに条件つけたいが?

A.呼び出すマクロにcondが付けられる。生成してるマクロには無理。

[macro name="hello"]
 @dialog text="へろー!"
[endmacro]

[hello cond="tf.hoge==true"]

;===================================
;↓これは無理。
[macro name="hello" cond="tf.huga==true"] 
 @dialog text="へろー!"
[endmacro]

Q.マクロでマクロを作りたい

A.無理。

「マクロでマクロ作成しちゃえばよくね!?」

[macro name="hoge"]

[macro name="hoge2"]
略
[endmacro]

[macro name="hoge3"]
略
[endmacro]

[endmacro]

✖できなかった

Q.同じパラメーターを用いるマクロの引数をまとめたい

A.無理

「複数の同じ引数のマクロまとめちゃおうぜ!」

[macro name="hoge"]

[hoge2 name="%name|akane" layer="%layer" x=%x|600]
[hoge3 * x=%x|800]

[endmacro]

[hoge name="yamato" layer="0" x="500"]

✖hoge2だけ。hoge3はエラーで表示されない

Q.マクロ内でジャンプしたい

A.階層が同じならできる。

[macro name="kaiso1"]
@jump target="*label1"
[endmacro]

[macro name="kaiso2"]
[kaiso1]

*label1
[endmacro]

↑✖
↓○

[macro name="kaiso1"]
@jump target="*label1"
[s]
*label1
[endmacro]

Q.マクロをネスト化したい

A.引数で可能。ただし、別のマクロで消えるのでゲーム変数に記録する。

[macro name="hoge1"]
;別のマクロの前に処理をしておく。
@eval exp="f.test=mp.test"

;別のマクロを挟む
[hoge2]


@dialog text="&f.test"
;出るのは1

[endmacro]



[hoge1 test=1]
/*
注意:
引数は全て文字列になる。
数字を渡したい場合、
@eval exp="f.test=mp.test *1 "
など、計算式にする。

*/

HTML

Q.HTMLはどう使う?

A.[HTML]タグ。マスクのように全ての上のレイヤーに表示。

****なんとか.ks****

'必ず脱出のためのボタンを作成しておく。
@glink target="*Exit"
[html]
'通常のhtmlと同様の使い方。(制限あり)

[endhtml]
[s]
*Exit
'[cm]を通過するまでゲームは進行しない。
[cm]
・・・
・・
・
[s]

Q.ティラノのHTMLの制限とは?

A.<a>、イベントハンドラ、<script>(外部)、HTML5で使えないもの全般。

Q.ティラノ内で外部URLに飛ぶには?

A.Normalize.cssを入れる。

Q.HTMLのフォーム入力したものを反映させたい

****なんとか.jsにて****

f.hoge=$('【フォームのクラスかID】').val();

//htmlのvalue=""が取得できる

CSS

Q.記入場所(cssファイルを作ってシナリオと別のところに配置する)

A.フルパス繋げればどこでもいける。other以下に入れてる人が多い。

Q.CSSの導入方法と効果

A.3種。ティラノタグか、JSかHTML。効果は上書きの常駐効果。

静的に効果を出す(表示させるものより前に記述する)

;前提: ./data/others/ 以下にhoge.cssがあり、これを読み込む。
;これ自体にcssが記載されている。
;↑これ「外部参照」

;ティラノタグ(これを入れた直後からcss適用)===============================
[loadcss folder="./data/others/hoge.css"]

;JS(これまだ未検証)====================================================
[iscript]
var d = document;
var link = d.createElement('link');
link.href = './data/others/hoge.css';
link.rel = 'stylesheet';
link.type = 'text/css';
var h = d.getElementsByTagName('head')[0];
h.appendChild(link);
[endscript]

;HTML=================================================================
[html]
 <head>
       <link rel="stylesheet" href="./data/others/hoge.css">
 </head>
 <body>
        (略)
 </body>
[endhtml]

動的に効果を出したい場合はこっち(表示させてから動かす)

;要素に直接書き込む(jQuery)
[iscript]
 $(.akane).css{
  transform:rotate(45deg);
  }
[endscript]

Q.CSSで変更したUIを元に戻したい

A.プラグインのCSSを上書きしろ
デフォルトで入っているプラグイン

これのCSSを上書き。

Q.特定のCSSのみ初期値に戻したい

A.スタイル==initial

ちな全てに適応する場合

.jsのとき
[iscript]
$('*').css({all: "initial"});
[endscript]


.cssのとき
.init{
all: initial;
}

結果


Javascript+jQuery(+css)記述まとめ

Javascript

Q.Javascriptって何ができるの?

A.ティラノタグにない動作が可能。(主に数字計算処理)

Q.数字計算処理ができるとどうなるの?

A.配列と組み合わせると処理が短縮できたりする。

↑HTMLも含む

Q.何から学べばいいかわからない

A.参考書数十冊を斜め読みが良かった。

Q.グローバル変数できる?

A.できない。

[iscript]
 var hoge = "あいうえお"
 tf.piyo = hoge ;
[endscript]

[dialog text="&tf.piyo"]

同じ役割にするにはティラノのゲーム変数(f./tf./sf.)に入れる。

Q..ksでなく、.jsでティラノ変数を定義する方法は?

ティラノスクリプト内のf.name変数の読み書き
TYRANO.kag.stat.f[name]
ティラノスクリプト内のtf.name変数の読み書きTYRANO.kag.variable.tf[name]
ティラノスクリプト内のsf.name変数の読み書きTYRANO.kag.variable.sf[name]

参照

loadを挟むとtyrano.kagは上手く行かなくなるらしいので、
TYRANO.kagがいいらしい。

Q.JSで作った関数が呼び出せない

A. .ks内で[iscript]で作らず、.jsで作り、[loadjs]で呼び出す。

.ks内

[iscript]
function hello(){

 alert(こんちは!)

};

[endscript]

[iscript]
 hello();
[endscript]

↑これは✖

↑✖
↓○

test.js内
function hello(){

 alert(こんちは!)

};
.ks[loadjs  storage="~~~/test.js" ]

[iscript]
 hello();
[endscript]


;「こんちは!」とシステムメッセージで表示される。

また、[loadjs]はシナリオファイル(.ks)ごとに呼び出す必要あり。


Q.JSを仕込めるものは?

A.nameパラメーターがあるもの全部。
ただし、クリックで発動するものは、[button]はできるが[image]は不可。
↑レイヤー階層が違うため。フリーレイヤーより上じゃないと、画面全体の"Next"処理に邪魔される。
つまり、フリーレイヤーzindex:999999以上の位置(button)
あるいは、fixレイヤー(fix設定したbutton)
あるいは、マスクは仕込める。
[s]で止めている場合は関係ない。

tip:
フリーレイヤーにzindex:999999のクラス名「layer layer_free」という透明な画像がある。これに触れた時、マウスジェスチャーの"Next"が処理される。

Q.他なんかある?

A.onとかclickメゾッドは[button]しか対応しない。[image]無理。
htmlで<button>要素で囲んだとこしか対応しない仕様なので。

$(document).on('click','【セレクタ】',function(){});

で対応できる。(liveメゾッドも使えるが、最新のjQueryで廃止された)

A.[awakegame]で仕込んだJS全部ぶっ飛ぶ。
おそらくセーブロード、メニュー表示でも同じ。

make.ksにマクロで再定義しておく必要あり。

A.他細かいとこの記事リンク
配列の中の一番大きいものを取得する
配列の中の重複を削除する。(set)


A.配列の空欄をぶっ飛ばすにはfilter(Boolean)

[iscript]
~~~(略)
f.tf=n1+','+n2+','+n3+','+n4+','+n5+','+n6+','
f.tf=f.tf.split(',').filter(Boolean);
[endscript]


jQuery

Q.jQueryって何?

A.Javascriptのライブラリの1つ。(ティラノでいうプラグイン)

Q.導入方法は?

A.元からティラノを構成するのに入っているので最初から使える。

Q.何ができるの?

A.動的操作。(表示させてから要素を変更させる)

Q.jQuery UIを使いたい

Q.画像ぐるぐる回したい

A.clearTimeout+rotateで回転。

let deg = 0;
f.id = 0;
clearTimeout(f.id);

let rotate = () =>  {
     deg += 1;
     deg %= 360;
     $("#play_rtt").css( {
       "transform-origin": "center center",
       "transform": "rotate("+ deg +"deg)"
       } )
     f.id =setTimeout(rotate, 1);
   }
   f.id = setTimeout(rotate, 1);
//BGM再生へジャンプ
 tyrano.plugin.kag.ftag.startTag("jump", {storage:"battle/freemenu.ks",target:"*repnow"} );

"transform-origin": "center center",を加えることで、左端0,0から画像中央を中心地に回るようになりました。


スマホ対応周り

1.デバイスがPCかスマホか判定する
 →ここにて解決
2.スマホの場合タップ操作からスワイプ操作に対応させる
 →ここにて解決

Q.スワイプやタップにJSで仕込みたい

A.透明fix[button]を表示。その[button]に仕込め。
jQueryのセレクタに透明ボタンのname=class名で埋め込めばOK。


外部プラグイン説明書

目パチ・口パクプラグイン

えもふり

[awakegame]を使うと、callスタックが残っているためフリーズする。
[emote_restore ]をmake.ksに入れるんだ。
なお[emote_new]の定義位置は無視される模様。

spine

https://note.com/preview/nc90d8a2b242c?prev_access_key=fdd9b42b317782655865e1b91b6d06bc

一番わかりやすい公式説明↓↓↓↓

この動画(日本語訳まで)のとこまで見てから説明書見た方がいい。

バグ対策

バグった!どうしよう!?

最初にティラノスタジオの再起動
スタジオを開いたままスリープ状態にすると発生する
理不尽バグはいっぱいある。


主なバグ(仕様)の一覧と対策

これは、何でもかんでもバグっていうと嫌な顔されるので未公開のやつ
解決策見つけてない。↓

https://note.com/preview/n6e83477b6346?prev_access_key=f41feb5393a782038b66c14e9def1d57

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

[wa]フリーズ

[kanim]と併合すると死ぬ。

[macro name="clearAnimCount"]
[eval exp="TYRANO.kag.tmp.num_anim=0"]
[endmacro]

https://kido0617.github.io/tyrano/2018-10-03-plugin-macro-work1/

文字が水色になる

答え:既読管理機能がTrueになっている。
方法1
config.tjsにてalreadyReadTextColorをdefaultに変更する。
方法2
上をしているのに起きている場合。
config.ksを通った時にTG.config.autoRecordLabel = "true"にされている。
configを出る前にfalseに設定しなおせばOK。

キャラが現れない、または消えない

[chara_hide_all time="2000"]                ←ここがwait=trueでもfalseでも
[chara_show name="hoge" wait="false"]        ←ここは表示されない
[chara_show name="hoge2" wait="true"]

処理が重い場合に発生しやすい。

hide系の効果時間中にshow系の効果またはその逆のときに発生。
hide系には time と wait を1つずつ設定した方が確実。

[chara_hide_all]
↓
[chara_hide_all time="500" wait="true"]

処理落ちする

Javascriptで同じ処理を書くと動くこともある。

スマホのみフリーズする

解決例
・[HTML]を[cm]で消える前に新たに[HTML]を追加する(処理落ち)と、タップジェスチャーの"NEXT"が発生しなくなる。
   →[p]ではなく[wait]でタップなしで先に進むようにした。

机上の計算では合ってるがバグる

[p]や[s]までの間の処理が多すぎる。
[preload]など、事前読み込みができる素材はしておくなどすると正しく表示されることがある。


昔からあって直ってないやつ(22/5/27現在)

[iscript]の中でTGを使うと止まらなくなる
[endscript end="true"]でスクリプト内では止まる。

[iscript]
let html1=`
あああああ
`;
let html2=`
いいいいい
`;
for(let i=1; i<=2, i++){
 alert(i)
TG.ftag.startTag("dialog", {text:eval("html"+i),} );
 alert(i+'おわり')
}
[endscript]
;このとき、あああああは表示されず、いいいいいだけ表示される。

[iscript]
tf.html=[]
tf.html[0]=`

あああああ

`;

tf.html[1]=`

いいいいい

`;
tf.i=0
[endscript]
*repeat
[dialog text="&tf.html[tf.i]"]
@eval exp="tf.i=tf.i+1"
[jump target="*repeat" cond="tf.i<2" ]

[s]
;[iscript]の外にティラノ変数を記録して処理で同じことができる。



ノベルゲームコレクションに投稿周り

Q.mp3なの?oggなの?m4aなの?

A.V4ではoggとm4a、V5ではmp3(だけで対応できるように)。

最近、投稿確認ページに以下が表示されるようになった。(22/5/1確認)

Q.自サーバーにアップしたいが??


エディタ周り(Atom)

小技とか

・インデント(tab)すると、同じ階層同士で閉じられる。


弊作品のテクニック周り

★バッジ獲得RTA

https://note.com/preview/n2459e489f218?prev_access_key=f06eab3103da4ddd1525d1aafcf119b8

抜粋

秒数の返し方(ボタンを押すまでの秒数を数える)

@eval exp="f.timer=0"
[glink target="*end"]

;上のボタンが押されるまで1/10秒プラスしてジャンプを繰り返す
*link
@eval exp="f.timer=f.timer+1/10"
[jump target="*link"]
[s]
*end
@dialog text="'君の記録は'+f.timer+'秒だ!'"
[s]

30回連打ボタン

@eval exp=" f.num=0 , f.count=30-f.num "

*error
[dialog type="alert" target="*next" text="&'残り'+f.count+'回!'"]
*next

@eval exp=" f.num+=1" , f.count=30-f.num "
[jump target="error" cond="f.num!=30"]

★スタラノ~スタイリッシュカードバトルラノベ~

ランダムに山札からカードを引く。(一度引いたカードは出現しない)

;[image]のstorageに入れるURLを変数に入れる。
[iscript]
f.card=[]
f.card[1]='nnnn.png'
f.card[2]='mmmm.png'
f.card[3]='llll.png'
[endscript]

;テクニックサンプル集2のmacro.ksから持ってきたランダム詠唱を入れる
[macro name="getrand"]
 [iscript]
 var max = mp.max || '3'
 var min = mp.min || '1'
 max = Number(max)
 min = Number(min)
 tf.rand = min + Math.floor(Math.random() * (max - min + 1))
 if (mp['var']) eval(mp['var'] + ' = ' + tf.rand)
 [endscript]
[endmacro]

;初期カード枚数。=最大値
@eval exp="f.maxc=3"

;======================ここまで下準備

;======================
;ジャンプ転送先のラベル
*common

;ランダムの数値を出すマクロ。maxを上で設定した変数にしている。
[getrand min="1" max="&f.maxc"]

;tfだと不安なのでf.slctcdに中身をコピー。(1-3いずれが入る)
@eval exp="f.slctcd=f.card[tf.rand]"

;[image]でランダムに選んだstorageの中身を表示。
[image name="tsa" layer="0" storage="&f.slctcd" visible="true"]



;ここから===========================================
;ランダムで選んだ配列の中身を削除(rand数値を-1してる。趣味)
[iscript]
f.card.splice(tf.rand--,1)
[endscript]

;選ぶカードの最大値を1減少
@eval exp="f.maxc=f.maxc-1"

;最大値が0以外の時はジャンプ。
[jump target="*common" cond="f.maxc!=0"]

[dialog text="カードがなくなりました。"]
;終わり!
[s]

splice関数を使って、f.cardからtf.rand(ランダムで表示された数字)を削除している。

ブラウザかDLかスマホか判断する

[dialog text="DL版から繋いでいるよ" cond="$.isElectron()==true"]
[dialog text="ブラウザ版から繋いでいるよ" cond="$.isElectron()==false"]

;スマホかどうかの確認
[iscript]
function isSmartPhone() {
if (navigator.userAgent.match(/iPhone|Android.+Mobile/)) {
  return true;
} else {
  return false;
}
}
f.check=isSmartPhone()
//alert(f.check);
[endscript]

スマホ判定はこちらより


★AMD

無限に押せるボタン

マクロ内でラベルジャンプを完結させる。
この場合、どこにもジャンプせず、マクロを呼び出した下の行から続きが再生される。
つまり、ADVで最近よくみる「主人公の台詞をボタンとして出すやつ」ができる。

キャラクターを中央配置にする

三行まとめ
・jQueryで"表示している"画像の大元のサイズを割り出す。
・水平線を決め、画像の高さ-水平線高さにする。
・jQueryで画面横幅を割り出し、画面横幅/2-画像幅/2で横中心。

ゲームの宣伝

Q.全然アクセス数が増えない

A.魚影のないとこで魚は釣れねえぞ?


その他

Q.モチベ湧かないんだが?

A.制作辞めろ。向いてない。
誰かに認められたい(いいねが貰いたい、ちやほやされたい)の動機は
見分け方はそれの展示会や作者のSNSやオンラインで見れるものを見たときに「やる気なくした」ってなったらそれ。
需要ありそう」も同義。辞めろ。周りを巻き込んで燃やすまえに辞めろ。
成果が出なくて辞める奴は成果が出ても辞める。

もし動機が別の場合、三大欲求不足。休め食べろ寝ろオナニーしろ。

Q.ちょっとしたことで不満と怒りを感じるんだが?

A.誰もが感じること。ただ、誰もが感じた後すぐに解消できる。
自分に余裕がないと陥りやすい。貯金がたくさんあるとか、筋肉があるとかそういった安心や自信ですぐ解消できるよ。

Q.BoothでまったくDLされないんだけど!?

A.人類誰もがPixivID持ってると思うなよ?
ちなみに、IDでログインしてDLしても誰がDLしたとかわからないから安心してDLしてくれよな。
有料のものを購入する場合は別だし、送付するものは本名住所必要だけど。

Q.大会に出ても受賞できないんだけど

A.原因は多々あると思われる。
例えば、ゲームを審査員に遊ばれていないとか。
そのゲームの良点部分がマッチする人に遊ばれていないとか。
フリゲーの審査員って別にそれで給料もらってるわけじゃないだろうし。
遊んでもらえるような魅力的なパッケージデザイン、
遊んでくれる人が居そうなプラットフォーム、
遊んでくれるファンを増やす活動をする、

ともかく『起動して1分以上遊んでもらえる』ことを目指すのがいいと思う
内容勝負はその次。まずはスタートラインに立つ。
盤外戦術もやれ。

関連記事

Q.審査する気持ちってどんなん?

A.時間ないからはよ終われって思ってる。

まあ「せめて1作品だけ遊んで、それがどうであろうと投票すればいいや」の気持ち。
この時の基準は
・短く遊べるもの
・確実に面白いもの
・遊べる場が登録不要な場所

なので、トップ絵だけ頑張れば1次審査突破するんじゃないかな。何事も。


Q.受賞して何か変わった?

A.いや別に…。目に見える数値などに変化はないです。

Q.実況配信ってどう?

素晴らしい壁があるとして、その壁のファンがいる。
タギングがあるとして、そのタギングのファンがいる。
その素晴らしい壁に素晴らしいタギングを作った場合、果たして登場人物はそれぞれ何を思うだろうか。

実力者の上辺だけをなぞった初心者が扱いきれない題材

Q.ADVってどう?

その主人公(自分と他人の関係)の卒業アルバム見せられてる。

Q.いいゲームとは?

プレイ中に時間を気にしたり、別タブを開いたりしたらもうダメかな。

Q.全然関係ないけど六花ちゃんボイスどうやってんの?

ゆかりねっと(棒読みちゃん連携を選択)→CEVIOAIproxy→CEVIOAIトークボイス(引用元)

この記事が気に入ったらサポートをしてみませんか?