見出し画像

あなたの里々ゴーストはリバーシができる

前書き

こんにちは、真鴨子規です。
フタツギノヒトカタ、幼白鬼、エーデルシュタイン・バンケットではお世話になっております。
最近は伺かデベロッパーより物書き系Vtuberとしての活動が多くなっています。マジかよ。まあメインは変わらず小説ですとも。

伺か・伺的 [第2会場] Advent Calendar 2024に投稿する記事となります。
よもや私自身が投稿する側になるとは。この『空の真鴨』の目をもってしても見通せなかったぜ。
なお、前日投稿は瑞樹ユラさんの記事『里々でアイテムの収集率を出してみよう』、改変して使えるコレクター系イベントで有用なスクリプトサンプルでした。シンプルでありながら独自性を出しやすいアイテム収集要素、これを機に実装してみるのも一興でしょう。

さて、本稿にて今回お話ししたかった内容はタイトル通りです。
私がかつて作成しそのままになっていたリバーシ機能、仮称『がへし』なるものを紹介、というか自ら実装してみようという試みです。
幼白鬼で試験的に実装していたのがなんと2017年。未完のうえ、私にとってもブラックボックスとなってしまったコイツですが、まあソロゴーストに載せるくらいならなんとかなるんじゃないかと思い、実践した次第です。

やったこと/デモンストレーション

1.ゴースト素体の作成 -ベース-

まず簡単に里々ゴーストを作成しました。
ゴースト作成入門-里々編-を参考に、ただ立たせただけのゴーストです。

2.ゴースト素体の作成 -シェル-

今回シェルは自前の創作物、幼白鬼の追加シェル『見上鬼』を使いました。これをmasterシェルとして配置します。関連トークや表情もそのまま流用できますし超お得。

見上鬼

3.必要素材の投入 -ゴースト側-

まず、\ghost\masterの下に、幼白鬼の同フォルダから輸入してきた『reversi』ってヤツを置きます。

『reversi』を配置
『reversi』の中身

『reversi』フォルダ内には2種類のファイルが入っております。

  1. ゴーストにトークさせる辞書(dic_talk.txt)

  2. リバーシを稼働させるプログラム(dic_talk.txt以外)

いったん「へー」と思っておいてください。
ただ、基本的に『リバーシを稼働させるプログラム』は触らない方がよろしいかと。

4.必要素材の投入 -シェル編-

\shell\masterの下に、幼白鬼の同フォルダから輸入してきた『reversi』ってヤツを置きます。同じ名前なので混乱しそうですが、ghostとshellで中身は別物なのでご注意ください。

『reversi』を配置(shell)
『reversi』の中身(shell)

さらに、同じフォルダから次のファイルを輸入してください。

  • surfaces_rev.txt

『surfaces_rev.txt』を配置

5.必要素材の投入 -微調整-

今回の試行にあたり、以下の調整を行いました。なにぶんまっさらな状態から作っているので、こんな対応も必要なわけです。

  • 幼白鬼用のreplace_after.txtを輸入

  • つつかれイベントの前準備

つつかれ(ダブルクリック)の呪文
  • 辞書フォルダの追加($辞書フォルダ .,reversi)

  • リバーシ要求コマンド(>リバーシ要求)

ランダムトークからリバーシが始まるように(便宜的措置)
  • アルファチャンネルを透過として利用(seriko.use_self_alpha,1)

use_self_alphaを有効化

6.リバーシで遊ぶ

リバーシ開始メニュー


リバーシ開始
リバーシ中

いえ、手順は飛んでいません。
ここまでの作業だけで、いま生まれたばかりのこの女の子は、立派にユーザさんとリバーシで遊べるようになったのです。やったね。

やっていただくこと

『あなたの里々ゴースト』にリバーシをさせるにあたって必要な作業をご紹介します。前述した各素材の投入に加え、まあこれはどうしたって必要だよねってレベルの作業になります。

1.呼び出し準備

メニューなどから、『リバーシ要求』イベントを呼び出せるようにしてください。
前述のデモンストレーションのとおり、最低限『>リバーシ要求』とするだけで大丈夫です。

2.トークの準備

\ghost\master\reversi\dic_talk.txtに、リバーシ中の随所でゴーストに喋らせるトークを書き込んでいきます。『ゴーストにトークさせる辞書』として、先ほどご紹介したファイルですね。
里々ゴーストを作る皆様におかれましては、まさに『いつもの作業』かと存じます。
また、以下は引用元から比較的分かりやすく抜粋した記載例です。

*リバーシをしよう
:(5)リバーシ、する?

*リバーシルール
:(0)えっと……。

(6)自分の、駒。と、自分の駒、で、(ユーザ名)の駒を、はさむ。
自分の駒を、いっぱい、増やす。
駒の多い方が、いい。

……(3)合ってる? (ユーザ名)。

*リバーシキャンセル
:(0)そう?
(5)じゃあ、また今度ね。

##################
######さくら側台詞######
##############

*さくらとリバーシを始めよう
:始めるよ。

(6)えっと……。

*さくらはここへ置きます
:(0)じゃあ……ここ。

*さくらはここへ置きます
:(0)ここにするね。

*さくらから開始
:(0)私からだよ。

*さくらから開始
:(5)私が、クロ。
(ユーザ名)は、シロ。

*ユーザから開始
:(0)(ユーザ名)からだよ。

*ユーザから開始
:(5)(ユーザ名)が黒だね。

*ユーザに交代
:(5)次、どうぞ、(ユーザ名)。

*ユーザに交代
:(0)(ユーザ名)の番だよ。

*さくらに交代
:(0)私の番だよ。

#XXXが駒を置いた
#A0:配置した位置(1188)
#A1:反転した駒の数
#:置いたのは(A0)だね。
#めくれたのは数は(A1)個。
*さくらが駒を置いた
#台詞なしパターン

*さくらが駒を置いた
>さくらが角に置いた	(A0)==11 || (A0)==18 || (A0)==81 || (A0)==88
>さくらが角に置いた

*さくらが角に置いた
:(5)ここはもう、ひっくり返せないよ。

*さくらが駒を置いた
>さくらが駒を置いた	(ターン)<16
>さくらが少し駒をめくった		(A1) < 3
>さくらが駒をめくった		(A1) < 6
>さくらがたくさん駒をめくった	(A1) < 12
>さくらがすごくたくさん駒をめくった

*さくらが少し駒をめくった
:(3)あれ、(A1)個しかめくれなかった。

*さくらが駒をめくった
:(15)ふふ。(A1)個、私の色になった。

*さくらがたくさん駒をめくった
:(15)(A1)個もめくれた。

うれしい……。

*さくらがすごくたくさん駒をめくった
:(9)えっと、えっと……。

(15)すごくいっぱい、ひっくり返ったね。
(16)なんだか、気持ちいい……。

#XXXが駒を置いた
#A0:配置した位置(1188)
#A1:反転した駒の数
#:置いたのは(A0)だね。
#めくれたのは数は(A1)個。
*ユーザが駒を置いた
>ユーザが駒を置いた	(ターン) < 21
>ユーザが少し駒をめくった		(A1) < 3
>ユーザが駒をめくった		(A1) < 6
>ユーザがたくさん駒をめくった	(A1) < 12
>ユーザがすごくたくさん駒をめくった

*ユーザが駒を置いた
>ユーザがすごくたくさん駒をめくった	(A1) >= 12
>ユーザがたくさん駒をめくった		(A1) >= 6

*ユーザが少し駒をめくった
:(0)それだけでいいの?

(5)ふふ……。

*ユーザが駒をめくった
:(5)(A1)個めくれたね。

*ユーザがたくさん駒をめくった
:(5)(A1)個も取られちゃったね。

*ユーザがすごくたくさん駒をめくった
:(9)わ、すごいたくさん、ひっくり返ったね。
(15)(ユーザ名)、すごい……。

(16)私もたくさん、くるんって、したいな。

*ユーザが駒を置いた
>角に置かれた	(A0)==11 || (A0)==18 || (A0)==81 || (A0)==88
>ユーザが駒を置いた

*角に置かれた
:(3)あ、角っこ、取られちゃった……。

*ユーザの勝ち
:(6)負けちゃった……。

*ユーザの勝ち
:(5)(ユーザ名)の勝ち。

*ユーザの勝ち
>ユーザの完全勝利	(勝負差)==64
>ユーザの完勝	(勝負差)>=54
>ユーザの圧勝	(勝負差)>=40
>ユーザの大勝	(勝負差)>=26
>ユーザの激戦勝	(勝負差)>=12
>ユーザの接戦勝

*ユーザの完勝
:(2)わ、……ほとんど、(ユーザ名)の色になっちゃったね。
(5)数えなくても、どっちが勝ったか、分かるよ。

*ユーザの圧勝
>ユーザの完勝

*ユーザの大勝
:(5)うん、(勝負差)個の差で、(ユーザ名)の勝ちだね。
(16)すごい……。やっぱり、(ユーザ名)は強いね。

(15)私も、もっとがんばって、うまくなるね。

*ユーザの激戦勝
:(1)(勝負差)個……思ったより、差があったね。
同じくらいだと、思ったのに……。

(15)うん、……次は、もっとがんばる。

*ユーザの接戦勝
:(1)んぅ……。
もうちょっと、だったのに……。

……(5)ふふ。次は、私が勝つよ。

*ユーザの完全勝利
:(1)わあ……。ぜんぶ、(ユーザ名)の色。
(15)(ユーザ名)は、本当に、上手だね。

*さくらの勝ち
:(2)私の、勝ち?

*さくらの勝ち
>さくらの完全勝利	(勝負差)==64
>さくらの完勝	(勝負差)>=54
>さくらの圧勝	(勝負差)>=40
>さくらの大勝	(勝負差)>=26
>さくらの激戦勝	(勝負差)>=12
>さくらの接戦勝

*さくらの完勝
:(3)あ、えっと、その……。

(ユーザ名)、……ごめん、ね?

*さくらの圧勝
>さくらの大勝

*さくらの大勝
:(1)(勝負差)個、差……?
けっこう、差がついた、ね……。

(15)ふふ。ちょっと、気持ちよかった。

*さくらの激戦勝
:(5)えっと、(勝負差)個の差で、私の勝ち、だね。

(1)あ、運が、良かったの。きっと。
ちょっとの差、だから……。

*さくらの接戦勝
:(9)は、ふー……。
なんとか、勝てた……。

*さくらの完全勝利
:(0)(ユーザ名)の、なくなっちゃったね。

*さくら置く場所がない
:(3)置ける場所、ない……。

*ユーザ置く場所がない
:(2)(ユーザ名)、置く場所がないね。

*誰も置けない
:(2)あれ? どっちも、もう置けないんだね。

*続けますか
:(5)もう一回、やる?

*もう一局
:(15)うん。もう一回、しよ。

*リバーシ途中終了
:(0)止めるの?
(6)じゃあ、片付けるね。

*リバーシ終了
:(5)じゃあ、終わりだね。

*引き分け
:(5)引き分けだね。

3.変数『思考レベル』の設定

『思考レベル』という変数に、予め1か2か3の数字を代入してください。
宣言場所はどこでもよいです。宣言前にリバーシを実行しようとすると、自動的に1が代入されます。

この『思考レベル』が、キャラクターの持つ『リバーシの強さ』になります。1が最弱、3が最強ですね。リバーシ初心者のキャラであれば1、リバーシ強者のキャラであれば3を設定しておくとよいでしょう。

ただ、最強といっても中級者かそれ未満の強さだと思います。私の知識と技術力で組み込める強さの限界です。熟練者からしたら大した強さではないため、あまり期待しすぎないようお願いします。

後書き

さあこれで皆様もリバーシ実装済みデベです。その誇りを胸に、明日から頑張っていきましょう。

あなたのゴーストにこのリバーシを実装させたとき、あなたは思うことでしょう。『なぜこんなものを里々で?』と。
ああいう込み入った処理を効率的に実装する方法は、まあ他に色々とあるでしょう。

当時の私は単純に、自分にできる範囲で、実現できる結果を求めていただけでした。それはリバーシのみならず、私の活動すべての根幹にあるものです。いや、それしかないとも言えます。

けれど人の成長とは、自分の限界を少しずつ超えていくという意味に他なりません。ですので人は、現在の自分が『できないこと』にこそ手を伸ばすべきなのです。

どうか私の存在が、誰かの反面教師になれますように。


いいなと思ったら応援しよう!