口上作成について
必要なモノ
・Succubus Rhapsodia
・サクラエディタ(.rbファイルを編集できるものならなんでも可)
↑Ruby用の構文ハイライトを適用したい場合はこちら
構文ハイライトってなんぞ?って人への説明
・愛と根気と適度な休眠
作成に際して
最初に、Modフォルダ内にある”羊のメモ”を良く読んでおくこと。
特に口上記述用タグのとこ。
●基本情報
口上として表示できるのは、一行あたり23文字程度、段落は3段程度までです。
ただし、全段落を23文字全て埋めるととても読みづらいので、シンプルな口上のほうが好まれる場合が多いです。
\n 改行を行います。
\\H ハートマークを表示します。
\\| ウェイト(次を表示するまでの遅延)をかけます。
#=====================================================
●会話文に使えるタグ
#{target} 『会話対象になっている味方キャラクターへの二人称』を表示します。
例:あなた、キミ、(主人公名)くん、etc
#{myname} 『会話している夢魔の一人称』を表示します。
例:あたし、私、ぼく、我、etc
#{partner} 『会話対象以外に味方キャラクターが居る場合、そちらへの二人称』を表示します。
主人公1人旅の時には設定されませんのでご注意ください。 また、二人称は#{target}で指定されているものが自動で入るようになっているため、 口上の書き方によっては微妙な文体になる可能性がありますので留意推奨です。
#{cp_leader} 絶頂時等、一部の条件を満たすと複数の夢魔が掛け合いを行うことがあります。
このタグでは『掛け合いの基点となっている夢魔への二人称』を表示します。 例:連携基点がレッサーサキュバスの「ディア」、連携相手がインプの「プティ」の場合 プティ「あーっ、今は#{myname}が遊んでるのに!\n #{cp_leader}は後からにしてよぉ」 ⇒プティ「あーっ、今はプティが遊んでるのに!\n ディアは後からにしてよぉ」 上記のように表示されます。
#=====================================================
●テキストに主に使うタグ
#{master} 『主人公のキャラクター名』を表示します。
主人公名がデフォルトの『ロウラット』であれば、文中にも『ロウラット』と表示されます。
#{speaker} 『会話している夢魔名』を表示します。
会話しているのがインプであれば、『インプ』と表示されます。
#{servant} 『会話対象以外に味方キャラクターが居る場合、そのキャラクターの名前』を表示します。
主人公1人旅の時には設定されませんのでご注意ください。 パートナーを対象に会話が進んでいるときは主人公名、主人公を対象に会話が進んでいる場合はパートナー名が それぞれ入ります。
口上製作仕様書
平原と丘と檻MODに関する口上製作仕様書はこちら。(※2018/11/07更新)
各種ファイル説明
口上ファイルは\Succubus Rhapsodia\System\talkの中にあるので、そこから改変したいものをコピーして、\Succubus Rhapsodia\Mod\Mod_Talkフォルダに貼り付けて書き換えると良いです。あとでエラー起こした時に泣きます。
改変したいキャラクターのフォルダを開くと山のようにファイルがあると思います。
テキストファイル名にキャラクター名と性格、色(OFEか否か)が書いてあります。
C_BattleEvent.rb(ベッドイン時や空腹戦闘中、契約時など)
C_MapChat.rb(マップでZキーなどを使った時)
C_MapEvent.rb(精の献上、空腹戦闘開始など)
C_Talk.rb(戦闘中にスキル”トーク”を使った時の反応)
F_Attack.rb(戦闘中に追撃が発動した時)
F_Attack_bedin.rb(ホームのベッドでの戦闘中に追撃が発動した時)
F_Crisis.rb(クライシスに状態変化した時)
F_Ecstasy.rb(相手が絶頂した時)
F_Ecstasy_Hold.rb(ホールドスキル中に絶頂した時)
F_Ecstasy_Self.rb(絶頂させられた時)
F_Resist_hold.rb(ホールドスキルが発動した時)
F_Resist_undress.rb(服を脱がすスキルが発動した時)
M_Attack.rb
M_Attack_bedin.rb
M_Crisis.rb
M_Ecstasy.rb
M_Ecstasy_Hold.rb
M_Ecstasy_Self.rb
M_Resist_hold.rb
M_Resist_undress.rb
F_は女(夢魔)に対しての反応、M_は男(ロウラット)に対しての反応になります。
羊のメモに載っていなかった情報
#highlight(ruby){{
#キス(短め)
ks.push("……ちゅっ\\H")
ks.push("……んっ……\\H")
ks.push("ちゅっ……\\H")
ks.push("んっ……\\H")
#キス(長め)
kl.push("……んっ……ちゅっ……\\H")
kl.push("……ちゅっ……れろ……\\H")
kl.push("んっ……ちゅっ……\\H")
kl.push("ちゅっ……れろ……\\H")
kl.push("……ちゅっ……ぷぁ……んっ\\H")
kl.push("ちゅっ……ちゅくっ……んふ……っ\\H")
kl.push("ちゅっ……んっ……ぷぁっ\\H")
kl.push("……ちゅくっ……ちゅっ……\\H")
kl.push("……ぁむ……れろ……ちゅっ……\\H")
kl.push("……ちゅっ……くちゅ……んっ……\\H")
kl.push("んちゅ……ん……ふうっ……\\H")
kl.push("んっ……れろ……ちゅ……\\H")
#喘ぎ(短め)
ps.push("んっ……\\H")
ps.push("あんっ……\\H")
ps.push("んんっ……\\H")
ps.push("んぁ……っ\\H")
ps.push("んあっ……\\H")
ps.push("あぁっ……\\H")
#喘ぎ(長め)
pl.push("んっ……んあっ……\\H")
pl.push("あんっ……はぁっ……\\H")
pl.push("んんっ……あっ……\\H")
pl.push("んぁ……っ……くぅっ……\\H")
pl.push("んあっ……はぁ……っ\\H")
#喘ぎ(クライシス)
pc.push("あっ、はあっ……!\\H")
pc.push("んんっ……あぁ……っ!\\H")
pc.push("あっ、あっ……あぁっ……!\\H")
pc.push("はぁっ……はぁっ……ああんっ!\\H")
pc.push("あんっ、あんっ……ああぁんっ!\\H")
pc.push("んんっ、あっ……!\\H")
pc.push("あんっ……あっ、ああっ!\\H")
pc.push("ひぃんっ……あぁっ……やっ……!\\H")
pc.push("はぁっ……んっ……あんっ!\\H")
pc.push("はぁっ、あぁんっ……んくぅっ!\\H")
#喘ぎ(年齢別)
case $msg.t_enemy.age
when 1,2
ps.push("やぁ……っ\\H")
ps.push("ひぃん……っ\\H")
pl.push("あっ……やぁ……っ\\H")
pl.push("ああっ……やぁっ……\\H")
pc.push("やっ……あぁ……っ!\\H")
pc.push("いやっ……やだぁっ……!\\H")
pc.push("あぅっ、あっ……あんっ!\\H")
pc.push("やっ……やぁっ……はぁぁっ!\\H")
when 3,4
ps.push("んふぅ……っ\\H")
ps.push("あぁん……っ\\H")
ps.push("はぁん……っ\\H")
pl.push("んっ……んふぅ……っ\\H")
pl.push("あぁん……んぁ……っ\\H")
pc.push("はぁ……んっ……あぁんっ……!\\H")
pc.push("んくぅ……っ……ぁあ……っ!\\H")
pc.push("あふぅ……んっ……あはぁ……っ!\\H")
pc.push("あんっ……はぁん……っ……あっ!\\H")
end
#笑い(短め)
case $msg.t_enemy.age
when 1
gs.push("えへっ♪")
gs.push("えへへっ♪")
gs.push("えへっ\\H")
gs.push("えへへっ\\H")
gs.push("あはっ♪")
gs.push("あははっ♪")
gs.push("あはっ\\H")
gs.push("あははっ\\H")
gs.push("んふっ♪")
gs.push("んふふっ♪")
gs.push("んふっ\\H")
gs.push("んふふっ\\H")
when 2
if $msg.t_enemy.negative?
gs.push("うふっ……♪")
gs.push("うふっ……\\H")
gs.push("あはっ……♪")
gs.push("あはっ……\\H")
gs.push("くすくす……♪")
gs.push("くすくす……\\H")
else
gs.push("あはっ♪")
gs.push("あははっ♪")
gs.push("あはっ\\H")
gs.push("あははっ\\H")
gs.push("んふっ♪")
gs.push("んふふっ♪")
gs.push("んふっ\\H")
gs.push("んふふっ\\H")
gs.push("うふっ♪")
gs.push("うふふっ♪")
gs.push("うふっ\\H")
gs.push("うふふっ\\H")
end
when 3
if $msg.t_enemy.negative?
gs.push("うふっ……♪")
gs.push("うふっ……\\H")
gs.push("ふふっ……♪")
gs.push("ふふっ……\\H")
gs.push("くすくす……♪")
gs.push("くすくす……\\H")
else
gs.push("ふふっ♪")
gs.push("ふふっ\\H")
gs.push("うふっ♪")
gs.push("うふふっ♪")
gs.push("うふっ\\H")
gs.push("うふふっ\\H")
gs.push("くすくす……♪")
gs.push("くすくす……\\H")
end
when 4
gs.push("ふふ……♪")
gs.push("ふふ……\\H")
gs.push("くすくす……♪")
gs.push("くすくす……\\H")
end
#笑い(形容記号無し)
case $msg.t_enemy.age
when 1
gt.push("えへっ")
gt.push("えへへっ")
gt.push("あはっ")
gt.push("あははっ")
gt.push("んふっ")
gt.push("んふふっ")
when 2
if $msg.t_enemy.negative?
gt.push("うふっ")
gt.push("あはっ")
gt.push("くすくす")
else
gt.push("あはっ")
gt.push("あははっ")
gt.push("んふっ")
gt.push("んふふっ")
gt.push("うふっ")
gt.push("うふふっ")
end
when 3
if $msg.t_enemy.negative?
gt.push("うふっ")
gt.push("ふふっ")
gt.push("くすくす")
else
gt.push("あは")
gt.push("あはっ")
gt.push("ふふっ")
gt.push("うふっ")
gt.push("うふふっ")
gt.push("くすくす")
end
when 4
gt.push("あは")
gt.push("あはっ")
gt.push("ふふ")
gt.push("ふふっ")
gt.push("うふふっ")
gt.push("くすくす")
}}
・基本的に♡は一行につき一つ
例:ふふっ……気に入ってもらえてるようね\\H\n もっと自分に素直になっていいのよ……\\H
・三点リーダは”・・・”ではなく”…”。これを2度繰り返すパターンが多い。
例:んむ…ちゅっ……れろ……\\H\n
・?(クエスチョンマーク)は半角ではなく全角
例:あはぁ……\\H\n 気に入ってくれた?
・改行の後には必ず全角スペース
・一つの行に文を2つ置く場合は、間に全角スペースを挟む。(ただ、めったに2つ置いている文はない)
例:どっかで見たけど忘れた
サキュバスを例にあげて説明
1.サキュバス(好色)の口上を作る。←この時、Mod_Talkフォルダに「10_Succubus_00」というフォルダができている。
2.サキュバス(陽気)とOFEサキュバス(好色)にも同じ口上を当てたいから、Mod_Talkフォルダ内に「10_Succubus_07」と「11_Succubus_OFE00」を作成、中身をコピペ。
3.おしまい。
ではダメです!
この場合、サキュバス(好色)の口上が、3種類のフォルダに入っているだけで口上が変わるのはサキュバス(好色)だけです。しかも読み込みにめっちゃ時間かかります。
なので、
3.「10_Succubus_07」内のファイルを開いて、
#highlight(ruby){{
●『サキュバス(橙)』戦闘開始、終了口上
●性格:好色
version 1.0.0
#######################################################################################################################
◆更新履歴
20xx,xx/xx 何かしら追加を行ったらここに書いてね
#######################################################################################################################
=end
class MsgSuccubus_A < MsgBase
def msg_op_and_ep_00
}}
の、 def msg_op_and_ep_00 を def msg_op_and_ep_07 に書き換えてください。(ここの数字は性格ごとに割り振られています。フォルダの最後の数字にしておけば問題無いです)
3.5.OFEの場合、書き換える場所がもう一つ増えます。class MsgSuccubus_A < MsgBase を class MsgSuccubus_B < MsgBase に書き換えてください。(ここがAだとノーマルモブ、BだとOFEという扱いです。modで追加されたモブの場合は、製作者様の作った口上ファイルがどっちになっているか確認しておきましょう。)
4.書き換える場所は1箇所とは限りません。2箇所、3箇所の場合もあるので上のツールバーから検索や置換などを使って、変え忘れがないようにしましょう。
5.おしまい
制作するときのポイント
・サキュバス等の既に完成されているデータと比較しつつ作業をすると、色々と楽
・手間がかかるけど、一つのファイルを完成させる度に起動テストをしてみる
↑一気にまとめて作成した場合、SyntaxErrorが出た時に大変
・SyntaxError時はセリフをきちんと””で囲んでいるか、when 1等の条件式を間違えて消していないかなどを確認してみる。この時元のデータがあると楽。
・”大切な人”とか”寵愛”のところは完成度をより求めないかぎりはまるまるコピーで良いかも。
・attackとattack_bedinとかところどころコピーが効く。いちいち全部書いてるとすごい手間かかっちゃう。
・改行とか♡とかをいちいち一つずつ\nとか書くのは面倒だから、ユーザー辞書に登録するなり、一旦そのまま♡、とか○、とかに置き換えて最後に置換するって手もある。
文章が長すぎる場合などは、
#highlight(ruby){{
tx["tx1"] = "一文目"
tx["tx2"] = "二文目"
}}
のように記述すれば、会話ウィンドウを二回に分けて表示することができます。
同様の条件でもランダムで台詞を変化させたい場合は
#highlight(ruby){{
tx["tx1"] = "パターンA"
tx["tx1"] = "パターンB" if $game_variables[17] > 60
}}
のように記述することで可能です。
(上記の場合は60%でパターンA、40%でパターンBの台詞が表示されます)
一例
サキュバスのM_Attack.rbの最初の方の文章を例にいくつか説明を致します。
#highlight(ruby){{
#●基礎口上を設定(未設定項目or空白の口上が呼ばれた時に設定され、それ以外では表示されない)
#==================================================================================================================
tx["tx1"] = "「くすくす……抵抗しないのね。\n それとも……期待してたのかしら?\\H」"
tx["tx1"] = "「くすくす……♪\n #{myname}のカラダ、しっかり味わってね……\\H」" if $game_variables[17] > 50 #パターンB
# tx["tx1"] = "" if $msg.t_enemy.crisis? #自分がクライシス
tx["tx1"] = "「ふふっ……気に入ってもらえてるようね\\H\n もっと自分に素直になっていいのよ……\\H」" if $msg.t_target.crisis? #対象がクライシス
tx["tx1"] = "「うふふっ……気持ちいい?\n もっと#{myname}に溺れて……\\H」" if $msg.t_target.crisis? and $game_variables[17] > 35 #対象がクライシス・パターンB
tx["tx1"] = "「ふふっ……気に入ってもらえてるようね\\H\n もっと自分に素直になっていいのよ……\\H」" if $msg.t_target.crisis? and $game_variables[17] > 70 #対象がクライシス・パターンC
tx["tx1"] = "「もう何も考えられないかしら……?\n もっと#{myname}に溺れて……\\H」" if $msg.t_target.weaken? #対象が絶頂中
#格納
ms.push(tx)
#==================================================================================================================
# ☆事前設定☆
#空ハッシュ挿入
tx={}
case $msg.at_type
}}
基礎口上とは、後に出てくる tx["tx1"]="" などの、口上が設定されていない場合に使われるものです。出来る限り、どこの部位を攻めている等ではなく、応用が効くようなセリフにすることをおすすめします。
#highlight(ruby){{
tx["tx1"] = "「くすくす……抵抗しないのね。\n それとも……期待してたのかしら?\\H」"
tx["tx1"] = "「くすくす……♪\n #{myname}のカラダ、しっかり味わってね……\\H」" if $game_variables[17] > 50 #パターンB
}}
最初の2行は、「お互いのステータスが通常時」で「未設定口上を参照」の追撃時に用いられます。
if $game_variables[17] > 50 #パターンB という記述に関しては上のほうをご確認ください。
#highlight(ruby){{
# tx["tx1"] = "" if $msg.t_enemy.crisis? #自分がクライシス
}}
3行目のこの文章は「サキュバスがクライシス状態」で、「未設定口上を参照」されたときに使われるセリフです。しかし、この場合は行の最初に#マークが使われているため、読み込まれません。よってサキュバスがクライシスの時に未設定口上が参照された場合は、上の通常時と同じものが使用されます。多分。
#highlight(ruby){{
tx["tx1"] = "「ふふっ……気に入ってもらえてるようね\\H\n もっと自分に素直になっていいのよ……\\H」" if $msg.t_target.crisis? #対象がクライシス
tx["tx1"] = "「うふふっ……気持ちいい?\n もっと#{myname}に溺れて……\\H」" if $msg.t_target.crisis? and $game_variables[17] > 35 #対象がクライシス・パターンB
tx["tx1"] = "「ふふっ……気に入ってもらえてるようね\\H\n もっと自分に素直になっていいのよ……\\H」" if $msg.t_target.crisis? and $game_variables[17] > 70 #対象がクライシス・パターンC
}}
こちらも最初の2行と同じように、$game_variables[17]を使って文章が複数設定されていますが、今回は2つではなく3つに分けられています。おそらく、このように>○の数字を調整することで、最大99通りまで分けることが出来ます。(未検証+出来たとしても読み込みが重くなりそう)
また、「対象がクライシス」という条件と、「乱数が○以下」という2つの条件を一度に設定する場合、 if $msg.t_target.crisis? と if $game_variables[17] > ○ を重ねるのではなく、 if $msg.t_target.crisis? and $game_variables[17] > ○というように記述しましょう。
#highlight(ruby){{
#格納
ms.push(tx)
#==================================================================================================================
# ☆事前設定☆
#空ハッシュ挿入
tx={}
case $msg.at_type
}}
ここの文章については、理解できていない人は一切手を付けないようにしましょう。読み込み時の設定等を行っています。たぶん。
#highlight(ruby){{
#▼キス▼****************************************************************************************
when "キス"
tx["tx1"] = "「んっ……ちゅっ…ちゅぷっ……\\H\n #{myname}の唇で、溺れさせてあげる……\\H」"
tx["tx1"] = "「…れろぉ……れろ……ちゅっ……\\H\n ふふ、もっと舌を絡めて……そう……\\H」" if $game_variables[17] > 35 #パターンB
tx["tx1"] = "「…れろぉ……れろ……ちゅっ……\\H\n そうよ、舌…上手じゃない…くすくす……\\H」" if $game_variables[17] > 70 #パターンC
tx["tx1"] = "「ちゅっ…んっ……れろぉ……\\H\n うふっ……すっかり蕩けちゃって…可愛い\\H」" if $msg.t_enemy.crisis?
tx["tx1"] = "「…ちゅっ…ちゅぱっ…んっ……\\H\n ふふ、もっと蕩けさせてあげる……\\H」" if $msg.t_enemy.crisis? and $game_variables[17] > 50 #パターンB
#-----------------------------------------------------
#格納
ms.push(tx)
}}
基本的には基礎口上のところと一緒ですが、#○○等の説明がついてません。多分つけ忘れだと思います。
こういう場合は、文章最後の条件式を見比べながら、どの状態を指しているのか確認しましょう。
例えば「キス」で「サキュバスがクライシス」の場合は
#highlight(ruby){{
tx["tx1"] = "「ちゅっ…んっ……れろぉ……\\H\n うふっ……すっかり蕩けちゃって…可愛い\\H」" if $msg.t_enemy.crisis?
tx["tx1"] = "「…ちゅっ…ちゅぱっ…んっ……\\H\n ふふ、もっと蕩けさせてあげる……\\H」" if $msg.t_enemy.crisis? and $game_variables[17] > 50 #パターンB
}}
のどちらかになります。
#highlight(ruby){{
#▼手攻め▼****************************************************************************************
when "手"
tx["tx1"] = ""
tx["tx1"] = "" unless $msg.t_target.nude? # 対象が着衣状態の時
# tx["tx1"] = "" if $msg.t_enemy.crisis? #自分がクライシス
# tx["tx1"] = "" if $msg.t_target.crisis? #対象がクライシス
# tx["tx1"] = "" if $msg.t_target.weaken? #対象が絶頂中
# tx["tx1"] = "" if $msg.tag == "対象:睾丸" #袋攻め
#-----------------------------------------------------
#格納
ms.push(tx)
}}
この場合、下4行は行頭に#がつけられているため、読み込まれません。そのため、手攻めの際は最初の2行のみが読み込まれます。自分で下4行を記述した場合は行頭の#を消しましょう。
#highlight(ruby){{
tx["tx1"] = ""
tx["tx1"] = "" unless $msg.t_target.nude? # 対象が着衣状態の時
}}
そして、最初の2行ですがセリフが一切記述されていません。
この場合、セリフは一番最初に設定した基礎口上から状況に応じて使用されます。
例えば「手攻め」で「対象が絶頂中」の場合は
#highlight(ruby){{
tx["tx1"] = "「もう何も考えられないかしら……?\n もっと#{myname}に溺れて……\\H」" if $msg.t_target.weaken? #対象が絶頂中
}}
が使用されます。
case $msg.at_partsでホールド状態に応じたものを指定。
味方からの追撃に関してはスキル名で指定する。
・♀挿入攻撃:ペニス側
"♀挿入:ペニス側"
・口挿入攻撃:ペニス側
"口挿入:ペニス側"
・尻挿入攻撃:ペニス側
"尻挿入:ペニス側"
・口挿入攻撃:口側
"口挿入:口側"
・顔面騎乗攻撃:口側
"騎乗:口側"
・クンニ攻撃:口側
"クンニ"
・♀挿入攻撃:♀側
"♀挿入:アソコ側"
・顔面騎乗攻撃:♀側
"騎乗:アソコ側"
・貝合わせ攻撃
"貝合わせ"
・パイズリ攻撃
"パイズリ"
"逆パイズリ"
・背面拘束中攻撃
"背面拘束"
・開脚拘束中攻撃
"開脚拘束"
・尻尾♀挿入攻撃
"尻尾♀挿入"
・尻尾口挿入攻撃
"尻尾口挿入"
・尻尾尻挿入攻撃
"尻尾尻挿入"
・尻尾拘束中攻撃
"尻尾拘束"
・フラッタナイズ
"キッス"
・ぱふぱふ攻撃
"ぱふぱふ"
・シックスナイン攻撃
"シックスナイン"
・触手♀挿入攻撃
"触手♀挿入"
・触手口挿入攻撃
"触手口挿入"
・触手尻挿入攻撃
"触手尻挿入"
・触手拘束中攻撃
"触手拘束"
・触手拘束中攻撃
"触手開脚拘束"
・ディルド♀挿入攻撃
"ディルド♀挿入"
・ディルド口挿入攻撃
"ディルド口挿入"
・ディルド尻挿入攻撃
"ディルド尻挿入"
・触手♂吸引攻撃
"触手♂吸引"
・触手♀クンニ攻撃
"触手♀吸引"
Ecstasy口上の"怒"について
Ecstasy口上にはif $msg.t_enemy.ecstasy_emotion == "怒"という表現が文末についていることがあります。
これらは夢魔が絶頂する、させる時にどのような感情を持つか?という分岐で、スクリプトTalk_Sys Baseによって決められており、性格、種族によって傾向が変わります。
● 絶頂時反応
#highlight(ruby){{
#--------------------------------------------------------------------------
# ● 絶頂時反応
# ▽喜:歓迎する反応・良い反応(普通の反応も含む)
# ▽怒:嫌がる反応・悪い反応
#--------------------------------------------------------------------------
def ecstasy_emotion
emotion = []
#性格でベース感情を設定
case @t_enemy.personality
when "陽気"
emotion.push("喜","喜","喜","怒")
when "意地悪"
emotion.push("喜","怒","怒","怒")
when "好色"
emotion.push("喜","喜","喜","怒")
when "天然"
emotion.push("喜","喜","喜","怒")
when "内気"
emotion.push("喜","喜","怒","怒")
when "不思議"
emotion.push("喜","喜","喜","怒")
when "勝ち気"
emotion.push("喜","喜","怒","怒")
when "高慢"
emotion.push("喜","怒","怒","怒")
when "上品"
emotion.push("喜","怒","怒","怒")
when "甘え性"
emotion.push("喜","喜","喜","怒")
when "従順"
emotion.push("喜","喜","喜","怒")
when "淡泊"
emotion.push("喜","喜","喜","怒")
when "柔和"
emotion.push("喜","喜","喜","怒")
when "虚勢"
emotion.push("喜","怒","怒","怒")
when "倒錯"
emotion.push("喜","喜","怒","怒")
else
emotion.push("喜","喜","怒","怒")
end
#種族で追加感情を設定
case $data_SDB[@t_enemy.class_id].name
#喜のみ
when "スライム","ゴールドスライム","スレイヴ","ファミリア"
emotion.push("喜","喜","喜","喜","喜","喜")
#喜が多い
when "サキュバスロード","タマモ","ミミック","ナイトメア"
emotion.push("喜","喜","喜","喜","喜","怒")
#喜の傾向
when "サキュバス","デーモン","ウィッチ","アルラウネ"
emotion.push("喜","喜","喜","喜","怒","怒")
#怒の傾向
when "プチウィッチ","ゴブリン","ガーゴイル"
emotion.push("喜","喜","怒","怒","怒","怒")
#怒が多い
when "ワーウルフ","カースメイガス"
emotion.push("喜","怒","怒","怒","怒","怒")
#怒のみ
when "プリーステス"
emotion.push("怒","怒","怒","怒","怒","怒")
#それ以外(同じくらいの感覚)
else
emotion.push("喜","喜","喜","怒","怒","怒")
}}
例:"虚勢"の"ワーウルフ"の場合、"虚勢"なので"怒"が3つ、"喜"が1つ配置され、"ワーウルフ"なので"喜"が1つ、"怒"が5つ配置されます。
この中からランダムで絶頂時の感情が選ばれるので、"虚勢"の"ワーウルフ"は10回中2回は"喜"、8回は"怒"となります。
先述のif $game_variables[17] >XX でも確率での分岐は可能ですが、これを使う利点は
1.夢魔毎にすでに設定されているので、XXの割合を考える必要がない。
2.ホールドしているアクターが他の夢魔に絶頂させられる際、感情によって地の分が変わるので、それに連動した口上を作れる。
の二つです。
2について例を出すと、その夢魔がアクセプト状態の主人公が別の夢魔に絶頂させられる際、"喜"なら地の文は「#{coop_leader}に微笑み」"怒"なら「#{coop_leader}に負けじと」のような文が表示されますので、"喜"ならその夢魔と協調するような、"怒"ならその夢魔に対抗するような口上にすると、よりよいものになるかと思います。
相手の胸のサイズや年齢によってのセリフ変更
ミミックのF_Attackを開くと
#highlight(ruby){{
tx["tx1"] = "「んふふ、揉み応え充分って感じですねぇ♪\n なんだかずっと\n 揉んでいたくなっちゃいますよぉ\\H」" if $data_SDB[$msg.t_target.class_id].bust_size >= 4
tx["tx1"] = "「おっぱいをおっきくするには\n マッサージするのがいいらしいですよ?\n んふふ、#{myname}がお手伝いしてあげますねぇ\\H」" if $data_SDB[$msg.t_target.class_id].bust_size <= 2
}}
といった記述があるのがわかります。
これは、相手の胸のサイズによって応じたセリフを用いる、というものです。
各キャラクターごとに固有の胸のサイズと、年齢の数値を持っています。
胸のサイズを利用する場合は $data_SDB[$msg.t_target.class_id].bust_size <= ○(<=が付いているのでこのサイズ以下、ということになります)
年齢を利用する場合は $data_SDB[$msg.t_target.class_id].years_type <= ○
となります。
・人間 @years_type, @bust_size = 3, 0
・レッサーサキュバス @years_type, @bust_size = 3, 3
・サキュバス @years_type, @bust_size = 3, 4
・サキュバスロード @years_type, @bust_size = 4, 5
・インプ @years_type, @bust_size = 1, 1
・デビル @years_type, @bust_size = 3, 4
・デーモン @years_type, @bust_size = 4, 5
・プチウィッチ @years_type, @bust_size = 2, 2
・ウィッチ @years_type, @bust_size = 3, 3
・キャスト @years_type, @bust_size = 2, 1
・スレイヴ @years_type, @bust_size = 2, 1
・ナイトメア @years_type, @bust_size = 3, 3
・スライム @years_type, @bust_size = 3, 4
・ゴールドスライム @years_type, @bust_size = 3, 4
・ファミリア @years_type, @bust_size = 2, 1
・ワーウルフ @years_type, @bust_size = 3, 2
・ワーキャット @years_type, @bust_size = 3, 1
・ゴブリン @years_type, @bust_size = 1, 1
・ギャングコマンダー @years_type, @bust_size = 1, 1
・プリーステス @years_type, @bust_size = 3, 2
・カースメイガス @years_type, @bust_size = 4, 4
・アルラウネ @years_type, @bust_size = 3, 3
・マタンゴ @years_type, @bust_size = 4, 3
・ダークエンジェル @years_type, @bust_size = 3, 3
・ガーゴイル @years_type, @bust_size = 3, 4
・ミミック @years_type, @bust_size = 3, 3
・タマモ @years_type, @bust_size = 3, 3
・リリム @years_type, @bust_size = 2, 3
・ネイジュレンジ @years_type, @bust_size = 3, 4
・リジェオ @years_type, @bust_size = 2, 1
・フルビュア @years_type, @bust_size = 3, 4
・ギルゴーン @years_type, @bust_size = 1, 1
・ユーガノット @years_type, @bust_size = 2, 2
・シルフェ @years_type, @bust_size = 3, 4
・ラーミル @years_type, @bust_size = 4, 4
・ヴェルミィーナ @years_type, @bust_size = 3, 5
ちなみに、
・years_type:目安 1:12以下, 2:15以下, 3:20以下, 4:29以下, 5:30以上
・bust_size :目安 1:A以下, 2:B, 3:C, 4:D, 5:E以上
だそうです。
各キャラクターの一人称、二人称変更
・サキュバスの例
キャラクターの一人称、二人称は全てSuccubus_Rhapsodia\System\talk\00_System内のBase_○○.rbで決められています。
今回はサキュバスなので、Base_10を開きます。
#highlight(ruby){{
=begin
#######################################################################################################################
●『サキュバス(橙)』ベース
version 1.0.0
※使用前には必ず■クラス名■を入力して下さい
#######################################################################################################################
◆更新履歴
20xx,xx/xx 何かしら追加を行ったらここに書いてね
#######################################################################################################################
=end
class MsgSuccubus_A < MsgBase
#--------------------------------------------------------------------------
# ● 性格別の一人称・二人称設定
#--------------------------------------------------------------------------
def callname
# @partner = "" if @pid == xx #特定性格の場合の特殊二人称
#=====================================================================
#★対味方戦闘時でない場合、対主人公の二人称を決めなおし、パートナーの呼称を決める
unless $game_party.in_partybattle? or $msg.t_enemy.love > 0
#▼会話対象が主人公の場合
if $msg.t_target == $game_actors[101]
@target = "キミ" #主人公への二人称
#パートナーが存在する場合別途設定
if $msg.t_partner != nil
@partner = "アナタ" #仲間への二人称
@partner = "お嬢ちゃん" if $msg.age2 > 0 #年下仲間への二人称
@partner = "アナタ" if $msg.age2 < 0 #年上仲間への二人称
@partner = "アナタ" if @doppel_pt #同属仲間への二人称
end
#▼会話対象が主人公でない場合
elsif $msg.t_target != $game_actors[101]
@target = "アナタ" #仲間への二人称
@target = "お嬢ちゃん" if $msg.age > 0 #年下仲間への二人称
@target = "アナタ" if $msg.age < 0 #年上仲間への二人称
@target = "アナタ" if @doppel #同属仲間への二人称
#会話対象がパートナーなので、相方は自動的に主人公となる
@partner = "キミ" #主人公への二人称
end
#▼連携が発生している場合、別途呼称を設定する
if $game_switches[97] == true
#会話の仕掛け手が自分で無い場合、呼称を設定する
if $msg.coop_leader != $msg.t_enemy
@cp_leader = "アナタ" #相方への二人称
@cp_leader = "お嬢ちゃん" if $msg.age3 > 0 #年下相方への二人称
@cp_leader = "アナタ" if $msg.age3 < 0 #年上相方への二人称
@cp_leader = "アナタ" if @doppel_cp #同属相方への二人称
end
end
#=====================================================================
#★対味方戦の場合、パートナー夢魔の呼称のみを決める
else
#▼会話対象が主人公の場合
if $msg.t_target == $game_actors[101]
#パートナーが存在する場合別途設定
if $msg.t_partner != nil
if @companion_pt == true#相手の事を知っている場合の二人称
@partner = "#{$msg.short_name($msg.t_partner)}" #仲間への二人称
@partner = "#{$msg.short_name($msg.t_partner)}ちゃん" if $msg.age2 > 0 #年下仲間への二人称
@partner = "#{$msg.short_name($msg.t_partner)}" if $msg.age2 < 0 #年上仲間への二人称
@partner = "#{$msg.short_name($msg.t_partner)}" if @doppel_pt #同属仲間への二人称
else
@partner = "アナタ" #仲間への二人称
@partner = "お嬢ちゃん" if $msg.age2 > 0 #年下仲間への二人称
@partner = "アナタ" if $msg.age2 < 0 #年上仲間への二人称
@partner = "アナタ" if @doppel_pt #同属仲間への二人称
end
end
#▼会話対象が主人公でない場合
elsif $msg.t_target != $game_actors[101]
if @companion == true#相手の事を知っている場合の二人称
@target = "#{$msg.short_name($msg.t_target)}" #仲間への二人称
@target = "#{$msg.short_name($msg.t_target)}ちゃん" if $msg.age > 0 #年下仲間への二人称
@target = "#{$msg.short_name($msg.t_target)}" if $msg.age < 0 #年上仲間への二人称
@target = "#{$msg.short_name($msg.t_target)}" if @doppel #同属仲間への二人称
else
@target = "アナタ" #仲間への二人称
@target = "お嬢ちゃん" if $msg.age > 0 #年下仲間への二人称
@target = "アナタ" if $msg.age < 0 #年上仲間への二人称
@target = "アナタ" if @doppel #同属仲間への二人称
end
end
#▼連携が発生している場合、別途呼称を設定する
if $game_switches[97] == true
#会話の仕掛け手が自分で無い場合、呼称を設定する
if $msg.coop_leader != $msg.t_enemy
if @companion_cp == true
@cp_leader = "#{$msg.short_name($msg.coop_leader)}" #相方への二人称
@cp_leader = "#{$msg.short_name($msg.coop_leader)}ちゃん" if $msg.age3 > 0 #年下相方への二人称
@cp_leader = "#{$msg.short_name($msg.coop_leader)}" if $msg.age3 < 0 #年上相方への二人称
@cp_leader = "#{$msg.short_name($msg.coop_leader)}" if @doppel_cp #同属相方への二人称
else
@cp_leader = "アナタ" #相方への二人称
@cp_leader = "お嬢ちゃん" if $msg.age3 > 0 #年下仲間への二人称
@cp_leader = "アナタ" if $msg.age3 < 0 #年上仲間への二人称
@cp_leader = "アナタ" if @doppel_cp #同属仲間への二人称
end
end
end
end
#=====================================================================
#●設定した呼称を変数に格納する
$game_variables[48] = @myname
$game_variables[49] = @target
$game_variables[50] = @partner
end
end
}}
対味方戦闘時でないとき、というのがエネミーとして出てきた時。対味方戦の場合、というのがベッドの時になります。
改めて見てみると対味方戦闘時出ない場合のところに
@target = "キミ" #主人公への二人称
という記述があるのがわかると思います。これはそのまま、戦闘時の主人公の呼び方になります。
主人公の呼び方を「君」にしたい場合は @target = "キミ" #主人公への二人称 から @target = "君" #主人公への二人称 に書き換えます。
そして一人称ですが、ここには一切の記載がありません。そこで、自分で付け足しましょう。今回は一人称を「アタシ」にさせようと思います。
先ほど書き換えたところの上の行にでも
@myname = "アタシ"
と書き足して下さい。これで、#{myname}を読み上げる時に「アタシ」と言うようになります。
特殊な記法として、"夢魔名""主人公名"はそれぞれその夢魔の名前、主人公の名前に置換されます。
例えば主人公の名前がロウラットの時、@target = "主人公名様"とすると、その夢魔は主人公のことを"ロウラット様"と呼ぶようになります。
これで、敵対戦闘時の一人称及び二人称の書き換えが終了しました。
次にベッドでの呼称を書き換えようと思います。
こちらには、一切記載がないので同じく書き足すことになります。
#highlight(ruby){{
#★対味方戦の場合、パートナー夢魔の呼称のみを決める
else
#▼会話対象が主人公の場合
if $msg.t_target == $game_actors[101]
#パートナーが存在する場合別途設定
}}
から
#highlight(ruby){{
#★対味方戦の場合、パートナー夢魔の呼称のみを決める
else
#▼会話対象が主人公の場合
if $msg.t_target == $game_actors[101]
@target = "君"
@myname = "アタシ"
#パートナーが存在する場合別途設定
}}
にします。これでベッドの時も同じように「君」「アタシ」と言うようになります。お疲れ様でした。
また、RPGツクールXPをお持ちの方はゲーム内スクリプトRPG::SDB(種族値・設定用)からでも
夢魔の一人称および仲間になった後の主人公への二人称を設定することが可能です。
口上チェッカー
- 有志の作成した口上チェック用のツール
口上チェッカー
- 以下、スレのコメントから引用
- 使い方 口上ファイル(C_BattleEvent.rb、等)をこのファイルの上にドラッグアンドドロップ。
- 簡単なチェックを行い、問題がない場合は「OK」を、ある場合はその内容を表示。
- どちらの場合でもログが出力されるので、問題の詳細を確認したい場合はそちらで。
- 複数ファイルの一括確認に対応。ただしファイル数が多いと処理に相応の時間がかかる。
- チェック内容は「各種定数」の「口上エラーメッセージ」から察してください。
現在不具合報告がある箇所
・各キャラクターの睾丸愛撫セリフが出ない
- 「if $msg.tag == "対象:睾丸" #袋攻め」から「if $msg.at_parts == "対象:睾丸" #袋攻め」に書き換えたら動作確認
・主人公追撃時(パートナー追撃は未確認)のキス、ヒップ等の専用口上が使われない
- Ver1.10にて修正済み
・絶頂時のセリフが専用以外が出る場合がある
- 汎用の中身をif文で分岐させることで可 when 1 #初撃 if $msg.at_type == "キッス" tx["tx1"] = "口上" else tx["tx1"] = "口上" end
・undress(脱衣)で「if $game_variables[17] > 50 #パターンB」での追加口上が使われない
- Ver1.10にて修正済み?(ただ未確認だっただけかもしれないです・・・)
・MapEvent(精の献上)で「if $game_variables[17] > 50 #パターンB」での追加口上が使われない
- 戦闘以外では$game_variables[17]は使用できないようです。MapChatの汎用口上と同様に間にms.push(tx)を挟んで格納していくことでパターンを増やすことが可能です。
公式更新履歴(口上のみ)
Ver1.12
・アルラウネ、ナイトメアの一部口上の記述ミスを修正。
・ギャングコマンダーの口上の記述ミスなどを修正、一部口上を追加。
・多数の夢魔の口上ファイルの脱字を修正。
・羊のメモを更新。
#highlight(end)