ゲ製同時進行34週目
本日12月19日は!!!神話創世RPGアマデウスの基本ルールブック発売6周年です!!!(ソースは開発ブログ)
さて、1年以上前からシナリオ集を出すといっていたききよさんの様子を見てみましょう。
ききよさーん??
AMD'sδ
キャラデータロード/セーブにtxtで出力する方法を探る。
CSSの導入方法を探すCSVデータ作成JSちゃんとオトモダチになるキャラ作成ページ制作
シナリオパート
機能増設/減量
判定マクロ
選択肢ボタンNew!ダイスランダム+並べ替えNew!選択肢内容生成 New!
まとめ
結論:19日完成不可。現在のできてるところを特色にした超短編出します。
心臓部MAP(フローチャート)
未 キャラ能力値に合わせたダイス数で出目を出す
済 出目を小さい順に左から並べる ←ここやった
済 並べた数字からCSVを引用して配列を作成する。
済 配列から色ごとにオブジェクトを取り出す
済 色ごとのオブジェクトを下記変換機の型に合わせる ←ここやった
再 オブジェクトから出現する選択肢を限定する ←ここやった
未 選択肢の条件分岐の配置デザイン
済 配置デザインの表示
今週はこんな感じでした。普段の6倍ぐらい頑張った。
超短編はこの心臓部を使った感じになります。5分ぐらいかな。
これ宣言してから12時間分も時間取れてないんすよ・・・ははっ
許して
以下制作メモ
状況整理から。
とりあえずf.modeをオブジェクト配列にして、それぞれの色のラベルにf.actionの中身を入れればいいらしい。
@eval exp="f.mode={}"
@eval exp="f.mode.黒=f.action" cond="tf.mdc=='黒'"
@eval exp="f.mode.赤=f.action" cond="tf.mdc=='赤'"
@eval exp="f.mode.青=f.action" cond="tf.mdc=='青'"
@eval exp="f.mode.緑=f.action" cond="tf.mdc=='緑'"
@eval exp="f.mode.白=f.action" cond="tf.mdc=='白'"
@eval exp="f.mode.虹=f.action" cond="tf.mdc=='虹'"
これでok。
ただし、dialogでf.modeを見ようとすると
ほんとは[緑:T]が出るハズ。
検索結果で出たjsonに一度入れるというのは意味なかったので止めた。
f.mode[‘緑‘]など個別で呼び出せば正しく返ってくるのでとりあえずほっとく。
次はこれをボタン出現に連動させていく。
[button cond="/^(?=.*1).*$/.test(f.mode)" name="no1" fix="true" graphic="cb/k.jpg" width="50" height="50" x="400" y="&180+60*0" target="*test1" preexp="'black'" exp="tf.co=preexp"]
[button cond="/^(?=.*2).*$/.test(f.mode)" name="no2" fix="true" graphic="cb/r.jpg" width="50" height="50" x="400" y="&180+60*1" target="*test1" preexp="'red'" exp="tf.co=preexp"]
[button cond="/^(?=.*3).*$/.test(f.mode)" name="no3" fix="true" graphic="cb/b.jpg" width="50" height="50" x="400" y="&180+60*2" target="*test1" preexp="'blue'" exp="tf.co=preexp"]
[button cond="/^(?=.*4).*$/.test(f.mode)" name="no4" fix="true" graphic="cb/g.jpg" width="50" height="50" x="400" y="&180+60*3" target="*test1" preexp="'green'" exp="tf.co=preexp"]
[button cond="/^(?=.*5).*$/.test(f.mode)" name="no5" fix="true" graphic="cb/w.jpg" width="50" height="50" x="400" y="&180+60*4" target="*test1" preexp="'white'" exp="tf.co=preexp"]
とりまf.modeをf.mode[‘色‘]にしたらダメだった(それはそう)
だったのでここも書き直し。
これはそのままf.modeをf.kekka[0]に直接繋げてOK
次は表示される文。
[macro name="hantei"]
(略)
[link target="*test2"][cho1 cond="/^(?=.*C).*$/.test(f.action")][endlink][r]
[link target="*test2"][cho2 cond="/^(?=.*T).*$/.test(f.action")][endlink][r]
[link target="*test2"][cho3 cond="/^(?=.*F).*$/.test(f.action")][endlink][r]
[link target="*test2"][cho4 cond="/^(?=.*Z).*$/.test(f.action")][endlink]
[endmacro]
現在設定だと、一番最後に入っているf.actionで文字を表示するかどうかになっているため、これを上で作ったf.mode[色]にする必要がある。
んでもって、ゲーム内で何度も呼び出すのでマクロ化している。
そのためマクロに引数を渡して利用する必要がある。(毎回値が変化した状態で判定を行うため)
マクロもなるべく短くしたい。引数はこれ以上増やしたくない。
[hantei iro="&tf.co"]
そのためf.mode[‘緑‘] だと二度手間になるのでそれ自体をf.mode[‘green‘]に変更する。
@eval exp="f.mode={}"
@eval exp="f.mode.black =f.action" cond="tf.mdc=='黒'"
@eval exp="f.mode.red =f.action" cond="tf.mdc=='赤'"
@eval exp="f.mode.blue =f.action" cond="tf.mdc=='青'"
@eval exp="f.mode.green =f.action" cond="tf.mdc=='緑'"
@eval exp="f.mode.white =f.action" cond="tf.mdc=='白'"
@eval exp="f.mode.rainbow=f.action" cond="tf.mdc=='虹'"
しかし何故か選択肢は出ない。
正規表現が間違ってるのかと四苦八苦。
結局、マクロの値引き渡しが%じゃなくてmpだった
しかし、mpを配列の引き出しに使うと何故か一番上のCのテキストを表示するだけで(一致するのに)TFZのテキストが出ない。
など色々あり・・・
[macro name="hantei"]
(略)
@eval tf.co2=mp.iro
[link target="*test2"][cho1 cond="/^(?=.*C).*$/.test(f.mode[tf.co2].join(''))"][endlink][r]
[link target="*test2"][cho2 cond="/^(?=.*T).*$/.test(f.mode[tf.co2].join(''))"][endlink][r]
[link target="*test2"][cho3 cond="/^(?=.*F).*$/.test(f.mode[tf.co2].join(''))"][endlink][r]
[link target="*test2"][cho4 cond="/^(?=.*Z).*$/.test(f.mode[tf.co2].join(''))"][endlink]
[endmacro]
[hantei iro="&tf.co"]
;tf.coの中身は'green'
マクロ内で、引数を引き継いだ変数を使って二段階処理にしました。
(@eval tf.co2=mp.iro)
これで一つの色の処理は全て終わり。
次は、f.kekkaに存在する全ての色のパターンに対応させる。
もうあとはf.modeの配列に全ての色のCTFZを突っ込めばいいだけだ。
そのためには処理を繰り返す必要がある。
方法は3つ。
[jump]か[call]で条件を満たすまで飛び続ける。
[iscript]でfor文で繰り返す。
マクロ化して引数を渡して繰り返す。
今回は元々tf.mdcの切り替えだけで済むように組んだので3のマクロにする。
[macro name="mdit"]
;行う前にまず中身をリセットする。
@eval exp="f.mode={}"
;調べる色
@eval exp="tf.mdc='黒'"
[modeinput cond="/^(?=.*黒).*$/.test(f.kekka)"]
@eval exp="tf.mdc='赤'"
[modeinput cond="/^(?=.*赤).*$/.test(f.kekka)"]
@eval exp="tf.mdc='青'"
[modeinput cond="/^(?=.*青).*$/.test(f.kekka)"]
@eval exp="tf.mdc='緑'"
[modeinput cond="/^(?=.*緑).*$/.test(f.kekka)"]
@eval exp="tf.mdc='白'"
[modeinput cond="/^(?=.*白).*$/.test(f.kekka)"]
@eval exp="tf.mdc='虹'"
[modeinput cond="/^(?=.*虹).*$/.test(f.kekka)"]
[endmacro]
ネストのマクロになっちゃった。
なお、その色が含まれてない場合は処理が飛ぶように設計した。
方法は合ってるのだが、結論から言えばマクロの中身の記述が間違っていたので不具合発生してた。
以下、バグを探し出すまで。
■■■■■■■■■■■■■■■■■■■■■■■■
何故か白の時だけ選択肢が少ない
繰り返すときに前の変数(f.)が残っている?
不必要なf.をtf.(一時変数)に変更
tf.はその場で削除するタグがないのでdeleteでtfを削除
[iscript]
delete tf.hoge ;
delete tf.cz ;
delete tf.tf ;
delete tf.keta ;
delete tf.action ;
[endscript]
それでも解決しなかった
選択肢を出す条件式か?
出すための変数f.modeの中身を知る必要がある
f.modeの中身が何故かdialogでもalertでも出ない。
最後の砦、変数ウォッチ先輩で中身を確認。(普段こっちの方が出ないのに)
このときCZが入っていないので中身確認。
@eval exp="tf.cz=tf.hoge.match(/1+|6+/g).join('')" cond="/1+|6+/g.test(tf.tf)"
で、この時まだtf.tfは存在しないので
↓
@eval exp="tf.cz=tf.hoge.match(/1+|6+/g).join('')" cond="/1+|6+/g.test(tf.hoge)"
に変更。直った。
以上バグ苦戦編。
■■■■■■■■■■■■■■■■■■■■■■■■
選択肢出現の時、虹色の処理
判定の時、ダイスが1個の場合
をそれぞれ入れ忘れたので入れる。
まず、虹の処理。
虹はダイスが6のときに好きな色のボタンを押せるようになるというもの。
ここからどうすればできるのか考えた結果
[if exp="/^(?=.*6).*$/.test(f.kekka[0])"]
[button cond="/^(?!.*1).*$/.test(f.kekka[0])" name="no11" fix="true" graphic="cb/k.jpg" width="50" height="50" x="400" y="&180+60*0" target="*test1" preexp="'rainbow'" exp="tf.co=preexp"]
[button cond="/^(?!.*2).*$/.test(f.kekka[0])" name="no21" fix="true" graphic="cb/r.jpg" width="50" height="50" x="400" y="&180+60*1" target="*test1" preexp="'rainbow'" exp="tf.co=preexp"]
[button cond="/^(?!.*3).*$/.test(f.kekka[0])" name="no31" fix="true" graphic="cb/b.jpg" width="50" height="50" x="400" y="&180+60*2" target="*test1" preexp="'rainbow'" exp="tf.co=preexp"]
[button cond="/^(?!.*4).*$/.test(f.kekka[0])" name="no41" fix="true" graphic="cb/g.jpg" width="50" height="50" x="400" y="&180+60*3" target="*test1" preexp="'rainbow'" exp="tf.co=preexp"]
[button cond="/^(?!.*5).*$/.test(f.kekka[0])" name="no51" fix="true" graphic="cb/w.jpg" width="50" height="50" x="400" y="&180+60*4" target="*test1" preexp="'rainbow'" exp="tf.co=preexp"]
[endif]
ボタン表示の下部分にこれを追加して終わり。
そこそこあっけなかった。
要は、6が含まれている時限定で、上の処理でボタンが表示されなかった色(kekka[0]に対応する数字が含まれなかった)のボタンを虹として表示させるというもの。
式も、上の正規表現から「それを含まない」に条件を変更して、tf.coに入れる内容をrainbowに変えるだけ。(?=を?!に変えた)
次は、1つしかダイスを振らなかった場合のボタン表示処理。
1個の場合色ボタンは表示されず、そのまま選択肢が出るようにする。
今まで作って来たのは、色に合わせて処理を変えるというもので、入口が異なり出口が異なる。中間は同じというものだった。
ので、
入り口部分を[jump]して中間に飛んで、出口をその専用処理をすればいい。
1つしかダイスを振らないという状況は、f.dice==1or2or3or4or5or6ということ。
つまり、f.diceの入っている文字数が1の時を条件式にすればいいわけだ。
なので
cond="(f.dice+'').length==1"
こうする。f.diceの中身はstring(文字列)ではなく、number(数字)なので、lengthは使えない。ので、文字列に変換する。
文字列に変換するために「+''」を使い、その処理のあと、メゾッドチェーンで文字数を出す。
これで、tf.hogeに直接f.kekka[0]をぶっこみ、f.modeにはf.mode['none']というものを作成した。
ここから選択肢のボタンを[ignore]で1文字の時表示しないようにして、
選択肢の文字のtf.co2を
@eval exp="tf.co2='none'" cond="tf.co==undefined"
とすることで表示内容がf.mode['none']にすることができた。
これにて、虹とダイス1個の時の処理の追加が終わり。
これで心臓部の心臓部は完成。
マクロでまとめる。
;*******************************
;出たダイス目
@eval exp="f.dice=123456"
;補正値
@eval exp="f.hosei=0"
;色ボタンを出すところまで。
[judge]
;*******************************
*test1
[hantei iro="&tf.co"]
[s]
*test2
[dialog text="test1に飛んだ"]
[s]
この[judge]にいままでの処理が全て詰まってる。
やはりというか、別のシナリオから[call]や[macro]で呼び出すと若干重くなる。
やってみて、選択肢が表示されている間に色ボタンを押すとバグるということがわかった。
いくつか解決方法はあるが、今回は[nowait][endnowait]タグを使って瞬間表示させた。
このタグ知らんかったわ。
ここまで作って、ちょっと残り部分作ってる時間ないわってことに気付いたので即興で別のゲームを作ることに。
作ったマクロを移行したところエラー。
原因はconfig.tjsを設定が異なってた所為。具体的にはメッセージレイヤーの指定数が初期値では少なかった。
https://note.com/preview/n9c7b8ae6562f?prev_access_key=2cadec1cfbcde4e856cb9480d07e69aa
どうせなのでエラーまとめた。
移行先で元々の予定、出した出目を小さい順に並べ替えるをする必要があったのでやる。
;ランダムな文字列数字を作成する
;「サンプルスクリプト集2」のマクロ[getrand]を使用。
@getrand var="tf.rank1" min="1" max="6"
@getrand var="tf.rank10" min="1" max="6"
@getrand var="tf.rank100" min="1" max="6"
@getrand var="tf.rank1000" min="1" max="6"
;f.diceに1-6のランダムの文字列が入れられる。
@eval exp="f.dice=tf.rank1+''+tf.rank10+''+tf.rank100+''+tf.rank1000+''"
;=============================================================
;小さい順に並べる
;次に使う一時変数を設定しておく。設定しないとエラー吐く。
[iscript]
tf.rank1=''
tf.rank2=''
tf.rank3=''
tf.rank4=''
tf.rank5=''
tf.rank6=''
[endscript]
;match関数を使ってf.diceから数字を吸い出す。同時に数字がない場合は行わないようにする。
@eval exp="tf.rank1=f.dice.match(/1+/g).join('')" cond="/1+/.test(f.dice)"
@eval exp="tf.rank2=f.dice.match(/2+/g).join('')" cond="/2+/.test(f.dice)"
@eval exp="tf.rank3=f.dice.match(/3+/g).join('')" cond="/3+/.test(f.dice)"
@eval exp="tf.rank4=f.dice.match(/4+/g).join('')" cond="/4+/.test(f.dice)"
@eval exp="tf.rank5=f.dice.match(/5+/g).join('')" cond="/5+/.test(f.dice)"
@eval exp="tf.rank6=f.dice.match(/6+/g).join('')" cond="/6+/.test(f.dice)"
;小さい順に入っているので文字列で並べる。その後数字に直す(*1)
@eval exp="f.dice=(tf.rank1+''+tf.rank2+''+tf.rank3+''+tf.rank4+''+tf.rank5+''+tf.rank6+'')*1"
絶対もっとスマートな方法ありそう。
来週には超短編出せると思うので作品の拡散とかDLで遊ぶとかよろしくお願いします。
なお、たぶん二次創作なのでノベコレじゃなくてboothです。正気か?
幸子のデートプラン(仮)
ゲームデータ初期段階作成完了設定、仕組み、シナリオの案だし画面構成
キャラデザ
衣装デザイン
データ系
衣装データその他
素材導入シーン完成
お着換えシーン ←今ココ
デートシーン
リザルト画面
EDまで作る
まとめ
エアスケブ描いていただきました。
ぎゃんかわ
じゃんけんロワイヤルZ(仮)
ゲームデータ初期段階作成設定、仕組み、シナリオの案だしIPカードの効果のバランス調整。
全種類の能力確定。
テストバトル用の素材作成開始。テスト環境の充実化スキルの適用
1-3人目4人目
チートの適用
01-03「シロ」「ミント」「タクト」04「レオ」 ←今ココ
-13
14
スペシャルの適用New!コマンド入力による選択
EDまで作る
仮立ち絵作成
まとめ
スタラノ~スタイリッシュカードバトル「ラノベ」~
■アップデートver3予定表■
新ルール
ない正解
エース(ドロー撤廃)
フリーモード
ルール変更モード ←いまここ
キャスト変更モード
タッチ操作の不具合修正
その他
スマホで画面落とした時にゲームがストップするようにする
まとめ
34週目まとめ
今週はAMD'sの超集中期間、各ゲームの情報をまとめました。
まとめページに新規イラストめっちゃ入れました。
また、イベントナナ色ソウサクに参加しました。
参加者の中で一番気になっててまさかそちらからお声かけ頂けるなんて…!絵柄好きです!!というコメントいただきました。マジか、信じちゃうぞ。
エアスケブもやってました。
エアスケブは、ナナ色ソウサクのサークルスペース内の書き込みボードで受け付けてます。スペース左上の掲示板みたいな奴をクリックするとできます。
ナナ色ソウサクは本日12時まで!
いつものログ
ノベコレ同級会ログ
そして本日12月19日は神話創世RPGアマデウスの基本ルルブ発売6周年記念日です。
去年作ったやつ
今後、電子書籍化が決定してますので買った人はききよさんまで連絡ください。GMやりますよ。
(書籍は絶版です)
同時並行イベント
今日のさっちゃん(返信部位で過去絵追えるよ)
第二回フリコン端からやってく奴
今週は新規0件です(8周目)
プリンセスウイングのリプレイの掲載始まりました。
ティラノ技術部
今週はティラノ製ゲームを遊んでないです。(休み)
今週のぼやき(と解決)
TRPGでうっかりGMが勝ってしまいましてね。おまいう案件だけど、負け濃厚になったらお通夜モードじゃなくて負けロールモードに入ってください。
元ツイ。ABでBが素晴らしいっていうまとめ方だった。BはBで問題があり、Aはそれで美点もあるので客に合わせて使い分けようね。踊らされてはいかんですよ。
クリスマスプレゼントにみんなが望んでるものはこれです。
ティラノスクリプト、直接こうすればできる、の数が少なすぎる。
私はもうJS用の記事読んでるもん。
サンデーの頃から追ってる推し作家先生なんですけど、原作付き以外の作品全て3巻で終わってるんですよね。(サンデー時代を除く)
なんでやアニメ化してくれ。(メジャーのモブキャラにいたらしいけど)
元ツイ。TRPGにおけるクソシナリオの作り方。一番最初に用法容量掲示して募集すれば全部済むとは思います。人が集まるかは別として。
まあそれでもフリゲでありますよね。オブジェクト全て調べないと先に進めないヤツ。
こればっかな時期あって、シナリオはキャラがエモるための舞台装置なんだって叩きつけられましたね。押し返しましたけど。
なんか反応よかった。
雑草除去に楽だからっていう理由で塩まく人たちです。お願いだからアングラで眠ってて。
アマデウス界隈は反応0でフリゲ界隈から反応貰いました。察し。
お金払うのでもフリーでDLするのでも、途中で投げ出すのに罪悪感あるんですよね。かといって雑に駆け抜けるのも制作側に失礼だなと感じてしまうところがある。
UIの良いはわからなくても、当たり前にあるものがないと悪いと分かるんですわ。
ログイン不用で、なんならログインしないでやるといいね欄が埋まってよくわからなくなるみたいなことなくなるから遠慮なく押していいよ。
では応援よろしく~('ω')ノ