Advertisement
Guest User

Untitled

a guest
Mar 1st, 2018
900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 33.63 KB | None | 0 0
  1.  
  2. 「小傘と」 『早苗の』 『「eratohoЯeverse口上作成講座~」』
  3. 『この講座は最近小傘さんの口上を作っている私、東風谷早苗が小傘さんに無理やり口上の書き方を教える番組です』
  4. 「いや、別に興味ないから……って私の口上って何? 早苗何してるの!?」
  5. 『いいから、教えさせてください。せっかく覚えたから誰かに教えたくてうずうずしてるんですよ』
  6. 「まあ、いいけどね……。じゃあ私も早苗に調教される口上を作ろうかな」
  7. 『やる気になりましたね。それでは早速教えていきますよ』
  8. 「でも、私eraのこと何もしらないよ?」
  9. 『大丈夫、初心者にも理解できるように教えていきます』
  10.  
  11. 1、ERBの構文を知ろう
  12. 「ERB?」
  13. 『ERBとは、eraの処理や口上を書くスクリプトの形式のことですよ』
  14. 『まず、eratohoまとめ V3 wikiにある「ERB構文講座」前後編を全て読んで下さい』
  15.  
  16. 「読んだよ~、意味わかんない!」
  17. 『小傘さんはプログラミング未経験者なんですね』
  18. 『他のプログラミング関係のサイトを見れば、文法は違いますが、もっと懇切丁寧に教えてくれるかもしれません』
  19. 『とにかく、プログラムは上から下に実行されること、関数を呼ぶとそこにジャンプして終わったら戻ってくること、
  20. IF文で分岐できること、この3つがわかっていればOKということにしましょう』
  21.  
  22. 2、構文講座を読もう
  23. 「ERBは理解できたよ。次は?」
  24. 『まずera全般の口上の書き方を学びましょう。wikiの「開発用情報について」のページにある、「男同士の口上講座 」を
  25. ダウンロードしてください。他の口座も同梱されていますが、まず「男同士の口上講座 」を読んでください』
  26. 『これはeramaker時代のものですので、Яとはだいぶ事情もシステムも違いますが、心得の部分は参考になりますし、
  27. 口上作成の雰囲気はわかると思います。ただし、スクリプト部分については古いものも多いのでそこは覚えないでくださいね』
  28.  
  29. 「読んだよー」
  30. 『サクラエディタのDLと設定もやりましたか? wikiの開発用ツールまとめのページにあります。これは超・重・要ですからね』
  31. 「面倒だったけど全部やったよ」
  32.  
  33.  
  34. 3,Яの口上テンプレを使おう
  35. 「口上テンプレ?」
  36. 『口上テンプレは、これを埋めるだけで口上ができちゃう凄いファイルです!』
  37. 「えっ? じゃあ今までの講座はいらなかったんじゃ……」
  38. 『いやそれが、そう簡単でもないんですよ。特にこのバリアントはね……』
  39. 「なんか、怖そう……」
  40. 『口上テンプレは、Я本体のフォルダにわかりやすく入っています』
  41. 『2種類ありますが、せっかくなのでmodernのほうを使いましょう』
  42. 『まず、modernフォルダに入っている、口上、readmeフォルダを本体の実行ファイルと同じフォルダにコピーしましょう』
  43. 『そうすれば、良い感じにファイルが配置されてくれます。ERB\口上\キャラ番号_キャラ名という風に配置されますね』
  44. 「配置したよー。とりあえずフォルダの名前を他と同じように変えたいね。早苗のキャラ番号は何番?」
  45. 『それは、本体のCSV\CHARA\フォルダを見てください。ちなみにCSVファイルを開けばキャラのデータが見れますよ』
  46. 「ふむふむ、早苗のキャラ番号は42……と。あ、ちゃんと百合経験10が付いてるんだね♥」
  47. 『こら、その話は秘密ですよ。これで私の口上フォルダができましたね。次はフォルダ内の全てのファイル名をKX2からK42に変更してください』
  48. 『次にファイルの中も改変します。インターネットから好きなGREP置換ツールを落として来てください』
  49. 『そして口上フォルダ内の全てファイルのKX2をK42に置換しましょう』
  50. 「Devasってのを落としてやってみたよ」
  51. 『これで全ての準備が完了しました! KOJO_K42.ERBを開いてあらすじを描いてみてください。コメントを外すのを忘れないように』
  52. 『具体的には以下の文を……』
  53.  
  54. @KOJO_DIGEST_K42
  55. ;PRINTFORMW
  56. ;RETURN 1
  57.  
  58. 「こうすれば、良いんだね!」
  59.  
  60. @KOJO_DIGEST_K42
  61. PRINTFORMW 早苗は人間を飼いたいという変態的な欲望を押さえつけながら退屈な学生生活を送っていた。。
  62. PRINTFORMW 幻想郷には法律はない。今こそその欲望を叶えるチャンスだ。立ち上がれ、早苗!
  63. RETURN 1
  64.  
  65. 『文才無いですね……』
  66. 「仕方ないでしょ! メタ的に考えて……」
  67. 『とにかく、これで準備は完了です。実際にゲームを起動すれば、私の口上が選べるようになっているはずです』
  68. 「やった、これで早苗に苛めてもらえるのね」
  69. 『まだ、中身は空っぽですけどね』
  70.  
  71. 4、テンプレを改変しよう
  72. 『あらすじは表示されましたか?』
  73. 「ばっちり!」
  74. 『では、フォルダ内の各ファイルをざっと見てみてください』
  75. 「……多すぎるよ、早苗……わちき許されないの?」
  76. 『大丈夫です。書きたいところだけ書けばいいんですよ。何か書きたいところとかありますか?』
  77. 「じゃあ、とりあえず、早苗に手でおちんちん苛めてもらいたいかな。序盤からしてくれるから確認しやすいし」
  78. 『それではまず、KOJO_ACTフォルダの愛撫のファイルを開いてみてください』
  79. 「早苗……これ1500行もあるよ……」
  80. 『口上ファイルには、コメントで注意書きをしてあるので読んでみましょう。
  81. 各フォルダにあるACT_K42のようなファイルは説明だけのファイルですので読むと参考になります』
  82. 「う~ん読んでもわけがわからないね!」
  83. 『では、口上の仕組みを簡単に説明しましょう。システム側が口上が欲しいと思った時、
  84. システムは口上ファイルの中の関数を呼び出します。例えば手コキをするときは、
  85. ACT番号が10なのでKOJO_ACT_K42_10を呼びます。今開いているファイルの最初の関数がそれです』
  86. 「確かにあるね」
  87. 『そしてその関数がRETURN 1を返せばシステムは口上が表示されたと思って満足します。それ以外の場合は口上は無いと判断します』
  88. 『KOJO_ACT_K42_10を上から見ていくと
  89.  
  90. IF 口上記入チェック(0) && TFLAG:ACT派生 == 1
  91.     ;=================================================
  92.     ;初回
  93.     ;=================================================
  94.     IF 口上記入チェック(0) && FIRSTACT(0)
  95.         PRINTFORMW
  96.         RETURN 1
  97.     ENDIF
  98.    
  99.     ;=================================================
  100.     ;調教内初回
  101.     ;=================================================
  102.     IF 口上記入チェック(0) && ONCEACT(0)
  103.         ;下半身服装がある場合
  104.         IF PANTSCHECK(1)
  105.             PRINTFORMW
  106.         ;その他
  107.         ELSE
  108.             PRINTFORMW
  109.         ENDIF
  110.         RETURN 1
  111.     ENDIF
  112.    
  113.     ;=================================================
  114.     ;調教対象がイキそう
  115.     ;=================================================
  116.     IF 口上記入チェック(0) && TCVAR:MASTER:イきそう
  117.         ;-------------------------------------------------
  118.         ;前から愛撫
  119.         ;-------------------------------------------------
  120.         IF 口上記入チェック(0) && TCVAR:MASTER:位置前後 == 1
  121.             ;焦らし度によって分岐
  122.             SELECTCASE TCVAR:MASTER:焦らし度
  123.                 ;焦らし中
  124.                 CASE IS > 1
  125.                     PRINTFORMW
  126.                 ;焦らし終了
  127.                 CASE 1
  128.                     PRINTFORMW
  129.                 ;焦らし無し
  130.                 CASEELSE
  131.                     PRINTFORMW
  132.             ENDSELECT
  133.             RETURN 1
  134.         ENDIF
  135.  
  136. とこのように続いていきます。例えば初回手コキの口上を埋めたければ、
  137.  
  138.     ;=================================================
  139.     ;初回
  140.     ;=================================================
  141.     IF 口上記入チェック(0) && FIRSTACT(0)
  142.         PRINTFORMW
  143.         RETURN 1
  144.     ENDIF
  145.    
  146. この部分を埋めればいいだけです。簡単でしょ?』
  147. 「じゃあこんな感じかな」
  148.  
  149.     ;=================================================
  150.     ;初回
  151.     ;=================================================
  152.     IF 口上記入チェック(0) && FIRSTACT(0)
  153.         PRINTFORMW 「うふふふ……あなたのおちんちんを手で苛めてあげますよ」
  154.         RETURN 1
  155.     ENDIF
  156.  
  157. 『……誰ですか、この人は。これじゃダメですよ』
  158. 「え? 早苗ってこんな感じでしょ」
  159. 『そうじゃなくて、「口上記入チェック(0)」の部分です。これは書いていない口上でRETURN 1が返るのを防ぐための関数です。
  160. (0)のままでは絶対にIF文の条件は満たされません。口上を描いた部分は「口上記入チェック(100)」に直しましょう』
  161. 「直したよー」
  162. 『これで最初に手コキを受けた時に口上が表示されます。この調子でどんどん埋めていきましょうね』
  163. 「よし、頑張るよ!』
  164. 『口上を描いていないのに記入テェックを(100)にしてしまうとRETURN 1により、
  165. 不都合が起こる場合があるので気をつけてくださいね。それから一番最初のIF文のチェックも忘れずに』
  166.  
  167. 『次は、手コキされたときのREACT口上を埋めましょうか。手コキされて例えば「快感を受け入れる」を選んだとします』
  168. 『手コキされたときのREACT口上はREACTフォルダの愛撫ファイルの@KOJO_REACT_K42_10にあります』
  169. 『ここで手コキは手で愛撫ACTのACT派生1番の行動であることに注意すると、該当の部分はこの部分になります』
  170.  
  171. ;━━━━━━━━━━━━━━━━━━━━━━━━
  172. ;ACT派生1, 手淫
  173. ;━━━━━━━━━━━━━━━━━━━━━━━━
  174. ;ACT派生1は派生0と同じ種類のものを違う形で提示してみます
  175. ;まぁこんなやりかたもあるという事で
  176. ;-------------------------------------------------
  177. IF 口上記入チェック(0) && TFLAG:ACT派生 == 1
  178.  
  179. ~~~~中略~~~~~~~~
  180.  
  181.     ;=================================================
  182.     ;REACT分類4, 受け入れる&COM, 快感を受け入れる/気持ち良い!
  183.     ;=================================================
  184.     IF 口上記入チェック(0) && IS_COMGRONAME("受け入れる") && IS_NOWCOMNAME("もっとハードにして/快感を受け入れる/気持ち良い!")
  185.         ;消費気力による派生
  186.         SELECTCASE GET_COM_RANK()
  187.             ;自然な行動
  188.             CASE "自然な行動"
  189.                 PRINTFORMW
  190.             ;無理のない行動
  191.             CASE "無理のない行動"
  192.                 PRINTFORMW
  193.             ;無理をした行動
  194.             CASE "無理をした行動"
  195.                 PRINTFORMW
  196.         ENDSELECT
  197.         RETURN 1
  198.     ENDIF
  199.  
  200. 「ふ~ん、3つも分けなきゃいけないんだね」
  201. 『それは面倒という場合は書き換えてしまいましょう』
  202.  
  203.     IF 口上記入チェック(100) && IS_COMGRONAME("受け入れる") && IS_NOWCOMNAME("もっとハードにして/快感を受け入れる/気持ち良い!")
  204.         PRINTFORMW 「あらあら、そんなに可愛い声で鳴いちゃって。そんなに私の手が良いんですか?」
  205.         PRINTFORMW 「お手々なんかで気持ちよくなっちゃうなんて、恥ずかしいおちんちんですね」
  206.         RETURN 1
  207.     ENDIF
  208.    
  209. 『このように、面倒な分岐は消していかないといつまでたっても終わりませんからね。ファイルもすっきりして見やすくなります』
  210. 「しつもーん、条件文にあるIS_COMGRONAMEってなに?IS_NOWCOMNAMEは選んだコマンドの名前の判定なんだろうけど」
  211. 『これはREACT分類をチェックする関数です。各コマンドは分類分けされていて、それを利用すれば条件を細かくし過ぎることを
  212. 防げます。各コマンドがどの分類になるかはERB\TRAIN\COMフォルダを見ればわかります。SET_COMGRO関数が分類を設定しています』
  213. 「じゃあ質問2、どうして声をあげてるって分かったの?エスパーなの?」
  214. 『それはERB\TRAIN\ACT\TRAIN_MESSAGE\ACT_MESSAGEフォルダを見たんですよ。中身を見ると……』
  215.  
  216. IF TFLAG:ACT派生 == 1                   ;ACT派生が手淫
  217.     ;REACT分類が受け入れるの場合か、オナホール装備中
  218.     IF IS_COMGRONAME("受け入れる") || (TEQUIP:オナホール && !IS_COMGRONAME("暴れる"))
  219.         SELECTCASE GET_COM_RANK()
  220.             CASE "自然な行動"
  221.                 PRINTFORML %CALLNAME:MASTER%%CALLNAME:TARGET%の手淫にだらしなく溺れ、
  222.                 PRINTFORML 一切抵抗せずに快感を受け入れ、切なく喘いでいる…
  223.             CASE "無理のない行動"
  224.                 PRINTFORML %CALLNAME:MASTER%は快感に喘ぎながら%CALLNAME:TARGET%の手淫に身を任せている…
  225.             CASE "無理をした行動"
  226.                 PRINTFORML %CALLNAME:MASTER%が辛さを紛らわすように手淫の快楽に身を任せると、
  227.                 PRINTFORML 目を背けていた屈服の快感が頭の中を白く染め上げていく…
  228.                
  229. 『このようにREACT分類が受け入れるのときの地の文がわかるわけです』
  230. 「これ、無理した行動の場合声出してないじゃん」
  231. 『世の中妥協も必要なんですよ……』
  232.  
  233. 『最後にCOMフォルダの説明ですね。REACTファイルの口上はACT毎に反応を書いていったわけですが、
  234. これを真面目にやっていると日が暮れてしまいます。をこでCOMファイルは逆にプレイヤーのコマンド毎に口上を出します』
  235. 『例えば手コキされて、恥ずかしがるを選んだとしましょう。まずREACTファイルの先程の関数が呼ばれるわけですが、
  236. まだ恥ずかしがったときの口上は書いていないので当然RETURN 0されます。
  237. すると今度はCOMファイルの関数が呼ばれるんですね。恥ずかしがるの最初の部分はこんな感じです』
  238.  
  239. ;-------------------------------------------------
  240. @KOJO_COM_K42_10
  241. ;-------------------------------------------------
  242. ;・TFLAG:REACT派生(0=状況に恥ずかしがる/1=快感に恥ずかしがる)
  243. ;-------------------------------------------------
  244. ;━━━━━━━━━━━━━━━━━━━━━━━━
  245. ;REACT派生1, 快感に対して恥ずかしがる
  246. ;━━━━━━━━━━━━━━━━━━━━━━━━
  247. IF 口上記入チェック(0) && TFLAG:REACT派生 == 1
  248.     ;=================================================
  249.     ;REACT負荷2, 無理をした行動
  250.     ;=================================================
  251.     IF 口上記入チェック(0) && GET_COM_RANK() == "無理をした行動"
  252.         ;実はまんざらでもない
  253.         IF COMCOR_POSI()
  254.             ;%CALLNAME:MASTER%はもっと気持ち良くなりたいと思っている自分を意識してしまい、
  255.             ;頬を染めて恥ずかしがった…
  256.             PRINTFORMW
  257.         ;実は嫌
  258.         ELSE
  259.             ;%CALLNAME:MASTER%は快感を与えられることに強い羞恥を感じ、
  260.             ;身を縮こまらせて恥ずかしがった…
  261.             PRINTFORMW
  262.         ENDIF
  263.         RETURN 1
  264.     ENDIF
  265.    
  266.     ;=================================================
  267.     ;REACT負荷1, 無理のない行動
  268.     ;=================================================
  269.     IF 口上記入チェック(0) && GET_COM_RANK() == "無理のない行動"
  270.         ;%CALLNAME:MASTER%はこみ上げる快感を隠せず、恥ずかしがって顔を背けた…
  271.         PRINTFORMW
  272.         RETURN 1
  273.     ENDIF
  274.  
  275. 『ここを全てを埋めておけば全てのACTに対して、REACT口上を書いていなくても恥ずかしがったときの口上を出すことができます』
  276. 『特に本番系はこれをやらないと禿げます。付喪神でも禿げます』
  277. 「禿げるのは嫌!」
  278.  
  279. 『これで基本は説明しました。要は口上テンプレのPRINTFORMWの部分を全て埋めて、
  280. 記入テェックを全部100にすれば良いんです。簡単でしょう?』
  281. 「うん、簡単だね。人間にも妖怪にも不可能だということを除けばね!」
  282. 『だから、うまくCOM等を使って手間を省いていくことが求められるわけです』
  283.  
  284. 『では実践です。小傘さん、セックスしているときに、「消極的やる」が選ばれたときの口上を作成してみてください』
  285. 「えーと、まずセックスは体位によって正常位とか騎乗位とかでACTが別れるから、ACT毎に記述するREACTじゃなくて、
  286. COMファイルを見ればいいんだよね……その中から消極的やるを検索して……」
  287.  
  288. ;━━━━━━━━━━━━━━━━━━━━━━━━
  289. ;COM41, 消極的やる
  290. ;━━━━━━━━━━━━━━━━━━━━━━━━
  291. IF 口上記入チェック(0)
  292.     ;=================================================
  293.     ;派生1, 消極的なのが気に入らない(お仕置きポイント加算)
  294.     ;=================================================
  295.     IF 口上記入チェック(0) && TFLAG:REACT派生 == 1
  296.         ;%CALLNAME:MASTER%の消極的な姿勢に、%CALLNAME%は不満そうだ…
  297.         PRINTFORMW
  298.         RETURN 1
  299.     ENDIF
  300.    
  301.     ;=================================================
  302.     ;REACT負荷2, 無理をした行動
  303.     ;=================================================
  304.     IF 口上記入チェック(0) && GET_COM_RANK() == "無理をした行動"
  305.         ;実はまんざらでもない
  306.         IF COMCOR_POSI()
  307.             ;%CALLNAME:MASTER%は自分から行動する勇気がないようだ…
  308.             PRINTFORMW
  309.         ;実は嫌
  310.         ELSE
  311.             ;%CALLNAME:MASTER%は悔しそうにしつつも逆らおうとはしない…
  312.             PRINTFORMW
  313.         ENDIF
  314.         RETURN 1
  315.     ENDIF
  316.    
  317.     ;=================================================
  318.     ;REACT負荷1, 無理のない行動
  319.     ;=================================================
  320.     IF 口上記入チェック(0) && GET_COM_RANK() == "無理のない行動"
  321.         ;%CALLNAME:MASTER%はどうにか%CALLNAME%の言う通りにしている…
  322.         PRINTFORMW
  323.         RETURN 1
  324.     ENDIF
  325.    
  326.     ;=================================================
  327.     ;REACT負荷0, 自然な行動
  328.     ;=================================================
  329.     IF 口上記入チェック(0) && GET_COM_RANK() == "自然な行動"
  330.         ;%CALLNAME:MASTER%%CALLNAME%に逆えない…
  331.         PRINTFORMW
  332.         RETURN 1
  333.     ENDIF
  334.    
  335.     ;上層の小分岐を全て書いた場合は不要な箇所です。その際は削除してしまうのを推奨
  336.     ;派生を書かない、もしくは一部を放置した場合はこの箇所が補完します
  337.     ;=================================================
  338.     ;その他・条件なし
  339.     ;=================================================
  340.     IF 口上記入チェック(0)
  341.         PRINTFORMW
  342.         RETURN 1
  343.     ENDIF
  344. ;条件にヒットしなければ統括汎用リアクションへ
  345. RETURN 0
  346. ENDIF
  347.  
  348. 「あれ、これで終わり? セックスに関する条件なんてないじゃない」
  349. 『無い時は自分で追加しなければなりません』
  350. 「う~んIF文の条件にセックスしてることを表す判定を入れればいいんだよね。う~ん、セックスは全部性奉の分類だから、
  351. ACT分類を判定すればいいんじゃないかなあ」
  352. 『MENUMATCHがそのための関数です。』
  353. 「じゃあMENUMATCHでGREPして……関数の定義だけじゃなくて、他の口上でどう使っているかも検索で出るんだね」
  354. 「それを参考にすると……こうだね」
  355.  
  356.     IF 口上記入チェック(100) && MENUMATCH(TFLAG:ACT, "性奉")
  357.         PRINTFORMW 「そんなナメタ腰使いしてると……殺しますよ」
  358.         RETURN 1
  359.  
  360. 『そうですね。セックスは体位が5種類もありますから、それをいちいちREACTに書いてると死んでしまいます。
  361. こうやってCOMを活用しましょう』
  362. 『注意点としては、まず、このIF文を置く場所ですね。派生1, 消極的なのが気に入らない(お仕置きポイント加算)の上に置くと、性奉ではお仕置き口上を言ってくれませんし、逆に下に置くと、セックス中でも場面にそぐわないお仕置きゼリフを言うかも
  363. しれません。場合によってはお仕置き分岐の中に性奉を判定する分岐を入れなければならないでしょう。
  364. それから、性奉仕系にはアナルセックスも含まれますから、仮に「おまんこもっと突けやコラ」のような
  365. 口上だと都合が悪くなってしまいます。これはアナルセックスのREACTファイルを整備すれば、
  366. そもそもCOMが呼ばれなくなるので回避できます。また、性交奉仕を判定する方法として、TEQUIP:性交奉仕中という変数があります。これは性交奉仕中であることを表すのですが、例えばセックスしながらキスしているときもこの変数は真になるんですね。
  367. そうすると、キスに対して消極的コマンドを選んだのに、腰使い云々の口上を流すのはおかしくなってしまいます。
  368. 逆に「イかせて」のコマンドならそのような状況でも腰使い云々のような口上を書かなければなりませんから、
  369. TEQUIP:性交奉仕中を使う必要がありますし、実際テンプレもそうなっているわけです。
  370. あ、TEQUIPは色々な情報を参照できるので、一度CSVファイルを見ておくと良いですよ』
  371. 「めっちゃ早口で言ってるね……」
  372. 「やっぱりこのバリアント、複雑すぎるんじゃないの……? やっぱり私TWの口上書いて早苗とイチャイチャしてくるね……』
  373. 『テ、テンプレをある程度埋めるだけでちゃんと良い口上ができますから。これはこだわる場合の話ですから』
  374. 『実際凝ったことをしない限りテンプレの分岐を消すことはあっても、増やすことはあまりないと思います』
  375. 『ただ、性奉周りは現状ちょっと不便な気はしますがね』
  376.  
  377. 『では、今までのまとめです。口上が表示される流れはこうなります』
  378. 1、AIがACTを決定する。
  379. 2、ACT毎に決められた地の文が表示される(ACT_MESSAGEファイルのリアクション前部分)。
  380. 3、ACTフォルダに書いた口上が表示される。
  381. 4、プレイヤーがコマンドを選ぶ
  382. 5、地の文が表示される(ACT_MESSAGEファイルのリアクション後部分とERB\TRAIN\COM\REACTION_MASSAGE)。
  383. 6、REACTフォルダの関数を呼び口上があれば表示し、存在せずRETURN 0ならCOMフォルダに書いた口上を表示する。
  384.  
  385. 「そこはだいたいわかったよ。なんか微妙にREACTION_MASSAGEってのが増えてるけど」
  386. 「そういえばACT、REACT、COM以外にもファイルは色々あったけど?」
  387. 『残りはほとんどイベント等の口上なので、難しいことはなく、テンプレのコメントを見ればわかると思います』
  388.  
  389. 5、お役立ち知識
  390. 『基本は終わりましたが、ここからは必須知識を紹介しますよー』
  391. 「まだあるんだ……」
  392. 『まずはPRINTFORMについて、使える派生を紹介します』
  393.  
  394. PRINTFORMW 改行してクリックを待つ
  395. PRINTFORMDW 上に加え、色を無視する
  396. PRINTFORML 改行はするがクリックは待たない
  397.  
  398. 「色って?」
  399. 『KOJO_K42に色を指定する関数があります。これを指定しておけば、口上の文章全ての色を変えられます。』
  400. 『これとPRINTFORMD系を組み合わせて、会話だけは設定した色を使い、地の文は白で表示するということができるわけです』
  401. 「なるほどね」
  402. 『次は♥の出し方について』
  403. 『CALL HEARTCBとやるのが基本ですね。こんな感じですか』
  404.  
  405. PRINTFORM 「早苗大好き
  406. CALL HEARTCB
  407. PRINTFORMW 」
  408.  
  409. 『これで『早苗大好き♥」と表示されます。HEART系は色々機能があるので一度調べてみてください』
  410. 「どうやって調べればいいの?」
  411. 『サクラエディタのGrep機能でERBフォルダを「HEART」で検索すれば見つかるはずです』
  412. 『これに限らず気になることがあったらどんどGREPしましょう』
  413. 『口上記入チェック関数について。口上記入チェック(x)でx%の確立で真になります。確立で表示する口上がほしい場合
  414. 別にRANDを使わなくてもこの数字を弄るだけでできたりします。またxにはデフォルトで100が指定されているため
  415. 口上記入チェック()と何も入れなくても、口上記入チェック(100)と同じ結果になったりします』
  416. 『次は AUTORANDについて。これもGrepすれば詳細がわかりますが、簡潔に言うと、一周するまで全ての値を一度ずつ返すRANDです』『これを使えば、ランダム分岐で同じ口上が連続で表示されるのを防ぐことが出来るわけですね』
  417. 『次はデバッグについてですね。まず、取扱説明書フォルダの中身を読んで、デバッグモードで起動してください。
  418. そうすれば、色々機能が使えるはずです。行動予約で特定の行動を取らせることもできますし、
  419. オートモードはエラー落ちを検出するのに役に立ちます。ただ、オートモード時に文章表示を簡略にすると、
  420. INPUT文でエラー落ちするらしいので、そこはINPUTの前にオートモード時は回避するように分岐を儲けてくださいね』
  421. 『それから変数の詳細については、CSVフォルダの中身を見ればわかります』
  422. 『演出を凝りたい時は、既存口上を参考にするといいでしょう』
  423. 『ERB\FUNCTIOフォルダには色々と便利な関数が入っています。一度見てみてください』
  424.  
  425. 6、テンプレのその先へ……
  426. 「ねえ早苗、大妖精口上をプレイしてたら、やってほしい行動を聞いてきてくれたんだけど」
  427. 『それは、口上がただ文章を表示するだけのものという常識に囚われない、素晴らしい口上ですね』
  428. 『口上といってもERBファイルである以上、バリアント側ができることは実は口上でも同じことができるんですよ』
  429. 「え?じゃあ早苗の技巧を999にすることもできちゃうの?」
  430. 『そんな痴漢ゲームの主人公みたいなことはともかく、色々とできるのは確かですね』
  431. 『ただ、口上という性質上、あまり派手に内部動作を弄るのは考えものかもしれません』
  432. 『そういうときは、注意事項に書いておくといいでしょう』
  433. 『また、バリアント側の変数をむやみに弄るのは、バリアントが更新されたときに互換性がなくなる可能性があります』
  434. 『とりあえず、KFLAGという変数は口上作者用に用意された変数なので、それを使うとよいでしょう』
  435. 『例えば、阿求口上のように、特定の条件のときだけ口上を変えるようなことがKFLAGを使えばできます』
  436. 『KFLAGはちゃんとセーブされるので安心して使ってくださいね』
  437. 『高度なことがやりたい場合はスレやIRCで相談すれば教えてもらえるので是非どうぞ』
  438.  
  439. 終わりに
  440. 『これで口座は終わりです。口上を書くための知識は全て頭に入ったはずです』
  441. 「これで、口上が書けるね。わちき、許された!」
  442. 『とりあえず、埋めたいところだけ埋めるだけなら簡単なので、これを読んでいるみなさんも是非一度書いてみてほしいですね』
  443. 「ところで早苗、新しいACTを加えることはできないの?」
  444. 『え?それは流石にバリアント改造レベルだと思いますが……』
  445. 「でも、「骨を折る」みたいなACTがないと楽しくないなー」
  446. 『は?』
  447. 「あー、早苗に一本ずつ笑顔で骨を折られて、全部折られた後は、紙を全部剥がされて早苗の尻拭き紙になりたいなー」
  448. (何この子恐い……)
  449. 「私がいくら泣きわめいて懇願しても、絶対に早苗はやめてくれないの。最後には、私の一番大事な軸を……」
  450. 『いや、私はそんなことは……』
  451. 「できないなら、仕方ない。現実でやるしかないよね♪」
  452. 『小傘さん? ちょっとまってくださ……いやああああ』
  453.  
  454. さあ、君も小傘のように自分の性癖をさらけ出そう!
  455.  
  456.  
  457. おまけ
  458. 『小傘さん、口上は順調ですか?』
  459. 「うん、良い感じ。ところで早苗、こないだはスルーしたけど、ACT派生って何?」
  460. 『ACT派生は、一つのACTにバリエーションを持たせるためのものだと考えてください』
  461. 『実際の動作はERB\TRAIN\ACT\ACTION_APPLY\ACT_VARIATIONを見てください』
  462. 「じゃあ見てみるよ、なるほどー、胸愛撫はこうなってるのかあ」
  463.  
  464. ;胸愛撫
  465. @TRAIN_VARIATION_ACT11
  466. ;調教対象がオトコ //条件次第で乳首吸い。その他の場合は乳首責め。揉み合いには派生しない
  467. IF TALENT:MASTER:オトコ
  468.     ;今日の方針が"かわいがり"の場合、服で妨害されなければ乳首吸い
  469.     IF IS_POLICY("今日", "かわいがり") && !BRACHECK(1, 1) && !GROUPMATCH(TEQUIP:性交奉仕中, 3, 4)
  470.         TFLAG:ACT派生 = 1
  471.     ;調教者の好意が一定以上若しくは調教者が舌使い持ちかつ服で妨害されない場合は2/3の確率で乳首吸い
  472.     ELSEIF !IS_POLICY("今日", "かわいがり") && (CFLAG:好意 >= 2000 || TALENT:舌使い) && !BRACHECK(1, 1) && !GROUPMATCH(TEQUIP:性交奉仕中, 3, 4) && !RAND:3
  473.         TFLAG:ACT派生 = 1
  474.     ;それ以外は乳首責め
  475.     ELSE
  476.         TFLAG:ACT派生 = 3
  477.     ENDIF
  478.     ;////////////////////////////////////////////////////////////////////////////////////////////////////////
  479.     ;オトコの場合乳首責めしか発生しないのもアレなので、それなりに進展した状況の場合は乳首吸いに派生するように
  480.     ;////////////////////////////////////////////////////////////////////////////////////////////////////////
  481.  
  482.     ;必ず乳首責めになる
  483.     ;備考:オトコにはこれしか発生しないので、妨害性の上半身服を着ていると胸愛撫自体行わない
  484.     ;(ただし普通の上着は裾をまくって愛撫できる。ワンピース・導師服・ブラジャーはオトコは装備しないので関係ないかも)
  485.     ;乳首責め自体は女の子にも発生するようにしておきます。
  486.  
  487. 「あれ、これ下のコメント矛盾してない?」
  488. 『多分、目立ってるほうが新しいんじゃないですか』
  489. 『実際乳首吸いをデバッグモードで確認できましたし、コードも発生するようになってます』
  490. 「でも、口上テンプレに『調教対象がオトコの場合は必ず『乳首責め』になり、他に派生する事はない』って書いてあるんだけど」
  491. 『……まあ、そういうこともありますよ』
  492.  
  493. 「あと焦らし度ってのがよく出てくるんだけど、これの動作はどこに記述されてるの?」
  494. 『作者さんに聞いたらERB\TRAIN\TRAINSYS\SOURCE_1に処理が有りました』
  495.  
  496. IF TCVAR:MASTER:イきそう && !TCVAR:MASTER:焦らし度 && !NOWEX:MASTER:射精 && !TFLAG:お仕置きフラグ
  497.     VARSET LOCAL
  498.     ;補正値を素質、ABLによって増減
  499.     LOCAL += 5 + TALENT:サド + TALENT:意地悪 - TALENT:心根優しい + (ABL:加虐 >= ABL:愛撫 ? 1 # -1)
  500.     ;補正値が十分高ければ
  501.     IF RAND:LOCAL >= RAND:5
  502.         ;技巧ABLによって焦らし度設定
  503.         TCVAR:MASTER:焦らし度 += MIN(ABL:技巧 / 5 + 2, 4)
  504.     ENDIF
  505.     ;焦らしが開始されれば地の文表示
  506.     SIF TCVAR:MASTER:焦らし度 > 1
  507.         {
  508.         PRINTFORMW %CALLNAME:TARGET%は\@ TALENT:意地悪 || TALENT:サド || !ALI(0, TARGET)
  509.                    ? 意地悪な # 悪戯っぽい \@笑みを浮かべると%CALLNAME:MASTER%を焦らし始めた…
  510.         }
  511. ENDIF
  512.  
  513. 「意味がわからないよ?」
  514. 『えーと、イキそうでお仕置きされていないときに毎ターン確立で焦らしモードに移行します』
  515. 『そこで焦らし度が最大4設定されて、毎ターン1ずつ減っていき、1で責められたら絶頂解禁ってことですね』
  516. 『焦らし中は色々補正もあります。詳しくはソースを「焦らし度」でGREP』
  517. 『それと焦らし度が1で責められても必ず絶頂するというわけではないようです』
  518. 「焦らし度1でつい「オラッ、射精せ」って感じの口上書いてたけど、絶頂確定じゃないんだね」
  519.  
  520. 「似たような押し倒しはどうなの?」
  521. 『良くわかりませんが、押し倒されると責められまくって、イクか時間が立つと解放されるようです』
  522. 『押し倒し中は出ないACTもあるようですね』
  523. 「解説が雑になってきたね」
  524. 『最後ですからね』
  525.  
  526.  
  527. *追加予定(小傘口上作者も理解してない)
  528. HTML_PRINT……『自分で調べてください』
  529. 参考 https://ja.osdn.net/projects/emuera/wiki/exhtml
  530. これを使った関数群がERB\FUNCTION\PROCESS\KOMEIJI_FUNCTIONS\に入ってるっぽい
  531. HTMLがわかる人は便利かも
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement