「 とりあえず 会話シーンと 戦闘シーンのスクリプトを分けるところから始めたらいいんじゃない?」
「 👆 画面下のメッセージ・ウィンドウの制御をやっと できたというところで
戦闘シーン作るのは ハードルが高いな」
「 その ビジュアルノベル部門
と書いてある本のところに
バトル部門
という本が増えたらいいんじゃないの?」
「 まあ 今のままでは何も進まんし
ソースコードの掃除ぐらいするか」
「 ランダム・エンカウントの戦闘シーンって いつでも 突然 戦闘シーンへ飛ぶよな」
「 現在の状態を知っていて、それをオフにしたり、
オフにしたときの状態を覚えていて あとでその状態に戻りたいこととかあるよな」
「 現在の状態が プログラムを書いた時点では 分からないこともある」
「 push_and_hide
と、 pop_and_show
かな?」
# どの部門で、そのキーを押されたら、どの部門へ移動するか?
var key_pressed_mappings = {
"📗ビジュアルノベル部門" : {
KEY_ESCAPE : "📗システムメニュー部門",
},
"📗システムメニュー部門" : {
KEY_ESCAPE : "📗ビジュアルノベル部門",
},
}
「 キーを押したときに どこへ飛ぶかは指定できるが、
命令を書けないのは不便だよな」
# どの部門で、そのキーを押されたら、ト書きを1つ実行できる
var key_pressed_stage_directions = {
"📗ビジュアルノベル部門" : {
KEY_ESCAPE :
"""\
!
department: 📗システムメニュー部門
""",
},
"📗システムメニュー部門" : {
KEY_ESCAPE :
"""\
!
department: 📗ビジュアルノベル部門
""",
},
}
「 その ト書き に、どのメッセージ・ウィンドウを閉じて、
どのメッセージ・ウィンドウを開くか 書けばいいのよ」
# どの部門で、そのキーを押されたら、ト書きを1つ実行できる
var key_pressed_stage_directions = {
"📗ビジュアルノベル部門" : {
KEY_ESCAPE :
"""\
!
m-wnd: ■下, hide
department: 📗システムメニュー部門
m-wnd: ■中央
""",
},
"📗システムメニュー部門" : {
KEY_ESCAPE :
"""\
!
m-wnd: ■中央, hide
department: 📗ビジュアルノベル部門
m-wnd: ■下
""",
},
}
「 👆 こう書けるようにしたけど、 ■下
メッセージ・ウィンドウは出てないかもしれないし、
勝手に隠したり、勝手に出したりしたら 出てなかったメッセージ・ウィンドウが出ることになるかも」
「 そこを %current_it_then_push_to_stack%
とか、 %pop_from_stack_then_current_it%
とか、書けないかだぜ?」
# どの部門で、そのキーを押されたら、ト書きを1つ実行できる
var key_pressed_stage_directions = {
"📗ビジュアルノベル部門" : {
KEY_ESCAPE :
# `%hide_current_it_then_push_it_to_stack%` - 現在のウィンドウを隠し、そして、それをスタックへプッシュする
"""\
!
m-wnd: %hide_current_it_then_push_it_to_stack%
department: 📗システムメニュー部門
m-wnd: ■中央
""",
},
"📗システムメニュー部門" : {
KEY_ESCAPE :
# `%pop_it_from_stack_then_show_current_it%` - スタックからウィンドウをポップし、そして、それを見せる
"""\
!
m-wnd: ■中央, hide
department: 📗ビジュアルノベル部門
m-wnd: %pop_it_from_stack_then_show_current_it%
""",
},
}
「 今回の改造の応用で、ビジュアルノベル部門と、バトル部門を分けなさいよ」
# ...
[
# 部門変更
"""\
!
m-wnd: ■下, hide
department: 📗バトル部門
goto: §初戦闘シーン
m-wnd: ■下
""",
],
# ...
[
# 部門変更
"""\
!
m-wnd: ■下, hide
department: 📗ビジュアルノベル部門
goto: §崎川市最強振興会館
m-wnd: ■下
""",
],
「 👆 こんな感じで バトルシーンから戻ってこれるようにしたぜ」
「 これが関数とするのなら、引数を渡せないと 実用的じゃないな」
「 %argument1%
とか書ければいいんじゃないか?」
「 命令の至る所を %argument1%
という書き方に対応させなくちゃいけないし、
パーサーから見て どういう書き方がいいのか 調べないといけないぜ」
「 そこは 数字にする必要があるかだぜ? 名前じゃダメかだぜ?」
# ...
[
# 部門変更
"""\
!
m-wnd: ■下, hide
department: 📗バトル部門
arg: %clear%
arg: monster, ヘム将棋
arg: return, §2回目戦闘シーン
goto: §初戦闘シーン
m-wnd: ■下
""",
],
# 初戦闘シーン
"§初戦闘シーン":[
# コダック
"""\
!
telop: 崎川駅周辺地図, hide
bg: 崎川駅周辺地図, hide
bg: 戦闘シーン
bg: 川掘町線ロード
bgm: 🎵バトル1, 8.6
#monster: きふわらべ
monster: %arg_monster%
""",
# 2345678901234567890
"""\
お父ん
「おっと 戦闘シーンはまだ
できてないらしいぜ
""",
"""\
!
monster: %arg_monster%, hide
""",
# 部門変更
"""\
!
m-wnd: ■下, hide
department: 📗ビジュアルノベル部門
goto: %arg_return%
m-wnd: ■下
""",
],
「 👆 こんな感じで仮引数を受け取れるようにしたぜ。
今日はここまでだな」
「 モデルがあるから フリー素材で補えないのが 不利よねえ」
「 こういうの先に出すと アイデアマン気取りの変人が
わたしはこういう風にした方がいいとか 言ってきて 後から 真似されたとか
言い出すんじゃない?」
「 そういう輩は 自分を大きく見せれるように ファンがいっぱいいるとこに 噛みつきにいくんだぜ。
わたしに嚙みついても 自分を大きく見せられないぜ」
📺 動画
「 👆 キャラクター画像をもう少し小さくして データ表示の面積を増やすかな?」
「 戦闘中の数字表示は テロップ でやるという建付けなの?」
「 シンメトリーに気を使って バランスを安定させて、
主な瑕 は 画面から省くことにしたぜ」
「 すっきりさせたわねえ。
ごちゃごちゃ している画面を 長時間観るのは つらいですからねえ」
「 スリープ機能があれば、シナリオ・スクリプトで疑似的に実装できるのでは?」
📖 [Godot] 一時スリープ(ウェイト)を実装する!1行で書けます
yield(get_tree().create_timer(1.0), "timeout")
📖 In gdscript, is there codes looks like "python's time.sleep()"
# wait 2 seconds
await get_tree().create_timer(2).timeout
📺 動画
「 玉の遠さ を 10 にして、 1ターン毎に 3 減って 4ターンで戦闘終了するのを
試しに作ってみればいいんじゃない?」
「 玉の遠さ が 1以上か、1未満か 分ける処理が必要だなあ。
ト書き で どう書こう?」
「 GDScript 自体がゲームスクリプトなのだから、
シナリオの途中で GDScript で書けないの?」
「 Godot に 匿名関数 が有るかないか 調べてみるか」
📖 GDScript Anonymous Functions
「 👆 こういう風に シナリオ・スクリプト に書くことができたぜ」
「 これを どう シナリオ・スクリプト に組み込んだら 良さそうだぜ?」
「 引数で渡すものって 無くない? 全部 グローバル変数でいいんじゃない?」
「 変数の書式は コマンド・プロンプトの環境変数みたいな %xxxx%
で行くのか?」
「 開きと 閉じが 分かんないのよね。
${xxx}
か、 {xxx}
が いいんじゃない?」
「 👆 その見た目だと 式が書けるように見えてしまう。
あくまで 変数なんだぜ」
「 視覚的に見にくいぜ。それだったら <xxx>
とかの方が良くないかだぜ?」
「 HTMLタグを将来的に実装する予定がないなら いいんじゃない?」
「 シナリオ・スクリプトじゃなくて GDScript 剥き出しだけど、いいんじゃないの?」
「 玉の遠さ
みたいな 戦闘シーンだけで使うデータって どこに書けばいいの?」
「 👆 スコアラーが 戦闘用紙を持っているという建付けにしようぜ」
「 これは キャラ・データじゃなくて、戦闘シーンのデータだというのを はっきりさせた方が
あとで間違わなくて済むんじゃない?」
「 デパートメントという言葉が なんか合ってないな。 シーンに名称変更していいかな?」
「 しかし Idって ソースにハードコーディングするもんじゃないな、分かりづらいな」
📖 RegEx
"""\
{{arg_sente_name}}
「銀が上がる
""",
「 👆 ハンドルバーズなんかを真似て こういう書き方の方がいいのかなあ?」
「 %xxxx%
を廃止して {{xxxx}}
に統一してくれだぜ」
📺 動画
「 👆 ここに たたかう とか コマンドを付ければいいのかだぜ?」
「 とりあえず 攻める、 守る、 逃げる の3つあればいいんじゃない?」
「 👆 今日は 左下に メニューを作るところまで がんばるかあ」
「 👆 この初期プロパティの設定が よく頭から忘れられて 思ったように動かない原因になるんで
廃止したいぜ」
「 システムメニュー部門から ビジュアルノベル部門に戻ってくるとき、
新しく表示したウィンドウは閉じて、閉じたウィンドウは開くという
復帰処理が難しいな」
「 差分で行くか、スナップショットで行くか 方法は分かれるけど」
「 表示されていてほしいウィンドウ、表示されていてほしくないウィンドウ、
網羅的に全部書く チェックポイントを通るようにしないと
一度壊れた 状態 は復元不可能な気がするぜ」
「 デバッグのしやすさを取るなら スナップショット を選ぶべきでは?」
「 部門を切り替えるときは 任意の状態から 任意の状態へ 突然ワープするから 全結合、
全結合なんか 網羅したくないしな」
「 表示しておかなければならないウィンドウ、 表示が残っていても消えていてもいずれでも構わないウィンドウ、
表示されていてはいけないウィンドウ を宣言的に記述すればいいんじゃない?」
「 Main
っていうノード作ってたけど、 SwitchDepartment
みたいな名前の方がいいかな?」
「 goto
は シナリオを飛ぶが、 department
は 部門を切り替えるんだぜ。
コマンドの意味は似ているが 動きは全然 異なるな」
「 department
では、 (1)最後に表示していたウィンドウの状態の記憶 と、
(2)以前に記憶していたウィンドウの状態の復元 の2つの機能がほしいわよ」
「 わたしの仕様では メッセージ・ウィンドウと、ビューイング・ウィンドウという2種類あるんだが、
m_wnd
、 v_wnd
というコマンド名と、
wnd_m
、 wnd_v
というコマンド名だったら、
どっちが 取っつきやすいかだぜ?」
「 gui_m
、 gui_v
という第3の案もあるのでは?」
「 テロップとか 背景とか はっきりしてるけど、
それ以外は GUI という くくり よね」
「 gui_msg_wnd
、 gui_view_wnd
とキータイピングさせるかだぜ?」
「 メッセージ・ウィンドウの切替えは そんなに多く起こらないけど、
ビューイング・ウィンドウの方が 将来的にトータルで見ると 多く起こる可能性があるんじゃない?」
「 というより、管理がめんどくさいんで 枠の表示と メッセージの表示を わざわざ くっつけたんだぜ」
「 スナップショットは currently な状態ではなく、 last の状態を記憶しなくちゃいけないのか」
「 department
命令に ウィンドウの状態の保存と復元が 盛り込まれたので、
m_wnd
命令の %hide_current_it_then_push_it_to_stack%
と、 %pop_it_from_stack_then_show_current_it%
の機能は廃止だぜ」
「 分かった 分かった。
メッセージ・ウィンドウを表示するコマンドだが、表示した順序を覚えておいてくれだぜ。
全順序」
「 デターミニスティック にするのが 不具合も少なくて済むわよね」
「 お父んが ゲームを作らなければ、
数学も 情報処理も身に付いてないやつが わたしは頑張っていますと宣伝しながら
安い賃金、高い販売価格で ぐちゃぐちゃのプログラムを売りつけるぜ」
(カタ カタ カタ カタ)
「 メッセージ・ウィンドウの表示順は 覚えておくようにしたぜ」
「 👆 コマンド欄が メッセージ・ウィンドウになってしまっている。
選択肢に直したいぜ」
「 キータイピング表示と違って、すぐに全部表示する現象に 名前は有るかだぜ?」
「 キャラクターズ・パー・セコンド(Characters Per Second;1秒当たりの文字数)とか
付けてみるかな? 略称は cps
?」
「 cps
とか 分かりづらくないか? msg_speed:20
とかでいいのでは?」
.
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント