投稿記事

Hermes TrisClistos 2021/07/25 02:53

コース時間とオプション選択システム。とりあえず完成 / デリヘル純愛ゲーム(仮)制作日誌

複数選択システム。決定ボタンが必要です。
当然のことながら、選択している項目が「ゼロ」のときには「決定ボタン」は押せません。そのあたりの制御システムを実装しました。

▼まずは動画をご覧ください

ソースがぐちゃぐちゃなので説明が難しいのですが、

  • コース時間
  • オプション

この2つを選択するシステムにおいて……

変数Aの初期値は「0」
[eval exp="f.buttonCourseOptionSelect = 0"]

【選択完了ボタン」が表示状態になる条件】
→「変数A」が2に等しい or 2よりも大きいときだけ表示する

[if exp="f.buttonCourseOptionSelect >= 2"]
;選択完了ボタン(コース時間&オプション)
[layopt layer=1 visible=true]
[image layer="1" x=&selectCancelButtunOptionDonePositionX y=&selectCancelButtunOptionDonePositionY storage="selectDone.jpg" name="opitonSelectDoneButtun"]
[locate x=&selectCancelButtunOptionDonePositionX y=&selectCancelButtunOptionDonePositionY]
[clickable width=&selectCancelButtunOptionDoneWidth height=&selectCancelButtunOptionDoneHeight border="solid:1px:red" mouseopacity="50" target=*選択完了(コース時間&オプション)]
[else]
;選択完了ボタンを消す
[free name="opitonSelectDoneButtun" layer=1 ]
[endif]

コース時間を決定したら 変数Aに1を加算する(プラス)
[eval exp="f.buttonCourseOptionSelect += 1"]

たとえば、コース時間を決定したあとの変数Aの値は「1」。そのあとに……

オプション項目を選択したら変数に1を加算(プラス)
[eval exp="f.buttonCourseOptionSelect += 1"]

すると、変数Aの値は「2」になるので、「選択完了ボタン」が出現します(表示)。

【選択完了ボタン」が表示状態になる条件】
→「変数A」が2に等しい or 2よりも大きいときだけ表示する

オプション項目を解除したら変数に1を減算(マイナス)
[eval exp="f.buttonCourseOptionSelect -= 1"]

このとき、変数Aの値は「1」になる……つまり2より小さくなるので、「選択完了ボタン」が表示されなくなる(消える)わけです。

きょうはここまで。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Hermes TrisClistos 2021/07/23 03:10

オプションの複数選択/解除システムをつくる(途中) / デリヘル純愛ゲーム(仮)制作日誌

デリヘル。「女の子を攻める/責める」楽しみがあります。それから長時間コースの場合、手マンやクンニなどのペッティングだけでは間(ま)がもたない、という男性側の都合もあります。

ということで、バイブや顔射などの「オプション」を選べるようにしました。
ティラノスクリプトのptextclickableifを組み合わせて……

  • 複数選択できる
  • クリックするだけで選択/解除できる

上記2点の新機能が今回の見どころ。 これは開発側&プレーヤーどちらにとっても便利機能です。

▼まずは動画をご覧ください


ループ処理をしていない「ベタ書き」なので、動作が「もっさり」しています。効率化すれば、もうすこし速く動くはず。基本的なロジックは以下のとおり。

[eval exp="f.onOptionSelect1 = 0"]
[eval exp="f.onOptionSelect2 = 0"]

*オプション選択テキストリストを表示
;テキスト1のテキスト
[layopt layer=1 visible=true]
[backlay]
[ptext page=back text=顔射 layer=1 size=30 x=400 y=155 color=0xffffff zindex=2]
[trans time=0 layer=1]
[wt]
;テキスト1のクリック範囲
[locate x=400 y=162]
[clickable width=300 height=30 border="solid:1px:red" mouseopacity="50" target=*オプション選択テキスト1を押下]

;テキスト2のテキスト
[layopt layer=1 visible=true]
[backlay]
[ptext page=back text=口内発射 layer=1 size=30 x=400 y=190 color=0xffffff zindex=2]
[trans time=0 layer=1]
[wt]
;テキスト2のクリック範囲
[locate x=400 y=197]
[clickable width=300 height=30 border="solid:1px:red" mouseopacity="50" target=*オプション選択テキスト2を押下]
[s]

*オプション選択テキスト1を押下
[if exp="f.onOptionSelect1 < 1"]
[jump target=*押下処理オプション選択テキスト1]
[else]
;選択状態イメージを消す
[free name="coruseSelectClickDone1" layer=1 ]
[eval exp="f.onOptionSelect1 = 0"]
[jump target=*オプション選択テキストリストを表示]
[endif]

*オプション選択テキスト2を押下
[if exp="f.onOptionSelect2 < 1"]
[jump target=*押下処理オプション選択テキスト2]
[else]
;選択状態イメージを消す
[free name="coruseSelectClickDone2" layer=1 ]
[eval exp="f.onOptionSelect2 = 0"]
[jump target=*オプション選択テキストリストを表示]
[endif]

*押下処理オプション選択テキスト1
[eval exp="f.onOptionSelect1 = 1"]
;選択状態イメージを表示する
[backlay]
[image layer="1" x=400 y=162 storage="click.png" time="0" zindex=1 name="coruseSelectClickDone1"]
[wt]
[jump target=*オプション選択テキストリストを表示"]
[s]

*押下処理オプション選択テキスト2
[eval exp="f.onOptionSelect2 = 1"]
;選択状態イメージを表示する
[backlay]
[image layer="1" x=400 y=197 storage="click.png" time="0" zindex=1 name="coruseSelectClickDone2"]
[wt]
[jump target=*オプション選択テキストリストを表示"]
[s]

click.pngのサイズは 幅300x高さ30 です。
きょうは以上です。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Hermes TrisClistos 2021/07/19 22:49

ティラノスクリプトで「クリックできる画像ボタン」をつくる / デリヘル純愛ゲーム(仮)制作日誌

きょうは小ネタです。

リンク付き画像のつくりかたです。クリックすることによって「任意の場所」へジャンプする機能。

▼まずは動画をご覧ください

キャンセルボタン画像(縦40px・横40xp) をimage命令で表示して、クリックできる範囲を clickable命令で指定しています。image画像はimageフォルダに配置しています。

;キャンセルボタン2の座標
selectCancelButtun1PositionX =140;
selectCancelButtun1PositionY = 150;
selectCancelButtun1Width = 30;
selectCancelButtun1Height = 30;

;途中キャンセルボタン(項目2) 
[layopt layer=1 visible=true]
[image layer="1" x=&selectCancelButtun2PositionX y=&selectCancelButtun2PositionY storage="cancelbuttun.png" name="CancelButtun2"]
[locate x=&selectCancelButtun2PositionX y=&selectCancelButtun2PositionY]
[clickable width=&selectCancelButtun2Width height=&selectCancelButtun2Height border="solid:1px:red" mouseopacity="50" target=*途中キャンセルを実行]

途中キャンセルボタン(項目2)だけを消したいときは、つぎのように命令します。

;2列目のキャンセルボタンを消す
[free name="CancelButtun2" layer=1 ]

ところで、ティラノスクリプトで「クリックできるボタン」らしきものを画像無しで作りたければglink命令があります。この命令は手軽です。
しかしながら上記キャンセルボタンのような「小さい画像」を生成することができません。

手間はかかるけれどimageclickableの組み合わせのほうが表現力は高いです。

【参考リンク】
[clickable] クリック可能な領域を設定
[image] 画像を表示

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Hermes TrisClistos 2021/07/18 20:05

風俗嬢の出勤&休暇パターンをティラノスクリプトで再現する / デリヘル純愛ゲーム(仮)制作日誌

デリヘル嬢の皆さん。兼業であることが多いです。いわゆる「昼職」があって、余裕があるときにデリヘルで働く……という。

だから「本業」にあわせて、デリヘル嬢には各々の「出勤パターン」が存在します。
たとえば「週末のみ」「火曜日のみ」「月末のみ」……など。月1~2回しか出勤しない場合は「レア出勤」などと呼ばれたりします。人気がある嬢ならば予約争奪戦です。

そんなわけで、上記のような「デリヘルの実態」をゲームシステムで再現してみました。

▼まずは動画をご覧ください

嬢の出勤パターンは以下のとおり

//[0]名前 [1]グレード [2]指名料 [3]年齢 [4]新人 [5]生理休暇 1が有効
let arrayShop = [
				[//[0] デリヘル店名
  [defaultShopName1, 'SS', 3000, 19, 'flesh', 0], //放課後メゾンテール
  [defaultShopName2, 'A', 2000, 22, 'used', 0], //ハイッチュ
  [defaultShopName3, 'B', 1000, 42, 'used', 0],
  [defaultShopName4, 'B', 1000, 42, 'used', 0],
  [defaultShopName5, 'B', 1000, 42, 'used', 0],
  [defaultShopName6, 'B', 1000, 42, 'used', 0],
  [defaultShopName7, 'B', 1000, 42, 'used', 0],
  [defaultShopName8, 'B', 1000, 42, 'used', 0]
				], 
                
// [5]生理休暇 1 が有効             
// たとえ当日が出勤日でも、生理休暇(非番)が優先される
    
// [6]出勤パターン
0: 非番
1: 奇数
2: 2の倍数(偶数)
3: 3の倍数(週末のみ
4: 4の倍数(月3回)
5&6: 5&6の倍数(月2回レア)
7: 7の倍数(月1回超レア)
8: 8&10の倍数(月2回レア)
9: 12:月末のみ(月1回超レア)

				[//[1]の所属嬢 放課後メゾンテール
  [defaultLadyName9, 'SS', 3000, 19, 'flesh', 0, 4],
  [defaultLadyName10, 'A', 2000, 22, 'used', 0, 2],
  [defaultLadyName11, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName12, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName13, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName14, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName15, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName16, 'B', 1000, 42, 'used', 0, 1]
				],
				[//2の所属嬢 ハイッチュ
  [defaultLadyName17, 'SS', 3000, 19, 'flesh', 0, 3],
  [defaultLadyName18, 'A', 2000, 22, 'used', 0, 2],
  [defaultLadyName19, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName20, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName21, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName22, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName23, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName24, 'B', 1000, 42, 'used', 0, 1]
				]
];

1列目の「彩」は 4の倍数の日だけ出勤する
2列目の「風花」は 2の倍数の日だけ出勤します
3列目の「咲喜」は 奇数の日だけ出勤します
4列目の「ひかる」は 偶数の日だけ出勤します

行動ターン = フェーズ 
これはデリヘル利用日のことです。
フェーズ値と各デリヘル嬢の出勤パターンをifで比較して、出勤か非番かを判定しています。

下記のティラノスクリプトは、出勤/非番を判定するためのコードの一部です。
習熟したプログラマからみれば「めちゃくちゃ」「重複」があるでしょうが、とりあえず動くのでヨシ!としています。

*hanteiStart

;偶数OR奇数を判定する
[if exp="(f.gamePhaseNumber % 2) != 0"]
;フェイズは奇数[emb exp="f.gamePhaseNumber"]です[r]
;嬢の出勤パターンは[emb exp="f.hibanHantei"][p]
	[jump target=*oddMultipleJudge]
[else]
;フェイズは偶数[emb exp="f.gamePhaseNumber"]です[r]
;嬢の出勤パターンは[emb exp="f.hibanHantei"][p]
	[jump target=*evenMultipleJudge]
[endif]	

*oddMultipleJudge
;奇数もしくは奇数の倍数フェーズが出勤日
[if exp="(f.hibanHantei == 7) && ((f.gamePhaseNumber % 7) == 0)"]
;奇数の倍数フェーズ(7)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 5) && ((f.gamePhaseNumber % 5) == 0)"]
;奇数の倍数フェーズ(5)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 3) && ((f.gamePhaseNumber % 3) == 0)"]
;奇数の倍数フェーズ(3)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="f.hibanHantei == 1"]
;奇数フェーズ(1)のみが出勤日[p]
	[jump target=*todayWorker]
[else]
[endif]

;非番です[p]
[jump target=*hibanStart]

*evenMultipleJudge
;偶数もしくは偶数の倍数フェーズが出勤日
[if exp="(f.hibanHantei == 12) && ((f.gamePhaseNumber % 12) == 0)"]
;偶数の倍数フェーズ(12)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 10) && ((f.gamePhaseNumber % 10) == 0)"]
;偶数倍数フェーズ(10)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 8) && ((f.gamePhaseNumber % 8) == 0)"]
;偶数倍数フェーズ(8)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 7) && ((f.gamePhaseNumber % 7) == 0)"]
;偶数倍数フェーズ 5の倍数 が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 6) && ((f.gamePhaseNumber % 6) == 0)"]
;偶数倍数フェーズ(6)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 5) && ((f.gamePhaseNumber % 5) == 0)"]
;偶数倍数フェーズ 5の倍数 が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 4) && ((f.gamePhaseNumber % 4) == 0)"]
;偶数倍数フェーズ(4)が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 3) && ((f.gamePhaseNumber % 3) == 0)"]
;偶数倍数フェーズ 3の倍数 が出勤日[p]
	[jump target=*todayWorker]
[elsif exp="(f.hibanHantei == 0) || (f.hibanHantei == 2)"]
;偶数フェーズ(x2)のみが出勤日[p]
	[jump target=*todayWorker]
[else]
[endif]	
;非番[p]
[jump target=*hibanStart]

「偶数の倍数」を判定しなければならない←これに気づくまでにいろいろ試行錯誤しました。

たとえば、「フェーズ30」は偶数日ですが、同時に「2の倍数」「3の倍数」「5の倍数」「6の倍数」「10の倍数」……でもあるわけです。このあたりの調整に、かなり手こずりました。

偶数と奇数で判定するだけでは不足です。なぜなら奇数倍である「3の倍数」には偶数である「30の倍数」があるからです。

「フェーズ11」は、「奇数」であり「11の倍数」なので単純と思いきや、一方の「フェーズ110」は、「偶数」であり「5の倍数」であり「10の倍数」であり……。

「フェーズ12」は、「偶数」であり「2の倍数」であり「3の倍数」であり「6の倍数」であり「12の倍数」であり……。

「フェーズ13」は、奇数倍ですが、「フェーズ26」になると偶数倍です。

「フェーズ14」は、「偶数」であり「2の倍数」であり「7の倍数」でもあるわけです。単純に「偶数or奇数」で判定するだけでは条件設定が不足です。

ifでうまく振り分けができず、頭がウワーーーーッ!ってなりました。

ちなみに、たとえ出勤パターンを満たしていても「生理休暇」の場合は「非番」扱いになります。


				[//[1]の所属嬢
  [defaultLadyName9, 'SS', 3000, 19, 'flesh', 0, 4],
  [defaultLadyName10, 'A', 2000, 22, 'used', 0, 2],
  [defaultLadyName11, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName12, 'B', 1000, 42, 'used', 1, 0], ← ココ
  [defaultLadyName13, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName14, 'B', 1000, 42, 'used', 0, 0],
  [defaultLadyName15, 'B', 1000, 42, 'used', 0, 1],
  [defaultLadyName16, 'B', 1000, 42, 'used', 0, 1]

実際のデリヘルでは「おんなのこ休暇」とも呼ばれていますね。デリヘルあるあるネタなので、この機能を欠くわけにはいきません。実装できて良かったです。

たいへん勉強になりました。このあと他の機能にも活かせそうです。

「出勤パターン」「レア出勤」「おんなのこ休暇」という要素は、ゲームに「複雑性」を付与します。ゲーム性の向上につなげることが出来ました。めでたし、めでたし。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Hermes TrisClistos 2021/07/16 02:49

「風俗の予約システム」がどうにか形になりました / デリヘル純愛ゲーム(仮)制作日誌

前回の記事……
forループを活用して「風俗の予約システム」をつくる(途中) / デリヘル純愛ゲーム(仮)制作日誌
これの続きです。それなりに形になったのでご報告。

▼まずは動画をご覧ください

構造

データベース部分のJavaScriptファイルを読み込む

;キャスト嬢の情報配列
[loadjs storage="arrayLadyList.js" ]
;デリヘル店の情報配列
[loadjs storage="arrayShopList.js" ]
;ホテルの情報配列
[loadjs storage="arrayHotelList.js" ]

たとえば、JSファイルarrayLadyList.jsは「デリヘル嬢のデータベース」に該当します。

//Sグレードのデリヘル嬢 10名まで
defaultLadyName1 = '沙友理';
defaultLadyName2 = '茜';
defaultLadyName3 = 'まみ';
//Aグレードのデリヘル嬢 20名まで
defaultLadyName4 = 'カレン';
defaultLadyName5 = 'まさみ';
defaultLadyName6 = '結衣';
//Bグレードのデリヘル嬢 40名まで
defaultLadyName7 = 'こなた';
defaultLadyName8 = 'かがみ';

//簡易データベースとしての多次元配列
//[0]名前 [1]グレード [2]指名料 [3]年齢 [4]新人 [5]末尾
let arrayLady = [
  [defaultLadyName1, 'SS', 3000, 19, 'flesh', 0],
  [defaultLadyName2, 'A', 2000, 22, 'used', 0],
  [defaultLadyName3, 'B', 1000, 42, 'used', 0],
  [defaultLadyName4, 'B', 1000, 42, 'used', 0],
  [defaultLadyName5, 'B', 1000, 42, 'used', 0],
  [defaultLadyName6, 'B', 1000, 42, 'used', 0],
  [defaultLadyName7, 'B', 1000, 42, 'used', 0],
  [defaultLadyName8, 'B', 1000, 42, 'used', 0]
];

はじめ、単純な配列ではforループによるデータ取り出しがうまくいかなかった。多次元配列(配列のなかに配列を含む)は一見複雑そうにみえますが、データ処理には都合が良い構造です。処理しやすかったです。

そして、デリヘル嬢の多次元配列から、ループ処理にて「デリヘル嬢の名前」を取り出します。

;ループ開始[p]
[eval exp="f.cnt=0"]

*loopladystart

;arrayLadyList.js で設定している多次元配列「デリヘル嬢」リストから名前を取り出すための準備
[eval exp="f.ladyNameyoyaku = arrayLady[f.cnt][0]"]

;クリック部分の指定 1個目の選択ボタン
[locate x=&selectLadyClickPositionX y=&selectLadyClickPositionY]
[clickable width=&selectLadyClickWidth height=&selectLadyClickHeight border="solid:1px:red" mouseopacity="50" target=&f.arrayLadySelectDone[f.cnt]]

;ループカウント+1する
[eval exp="f.cnt=f.cnt+1"]

;arrayLadyList.js で設定している多次元配列「デリヘル嬢リスト」から名前を取り出しを実行  f.ladyNameyoyaku
[backlay]
[ptext page=back text=&f.ladyNameyoyaku layer=0 size=&selectLadyFontSize x=&selectLadyNamePositionX y=&selectLadyNamePositionY color=0xffffff zindex=2]
[trans time=0 layer=0]
[wt]

;ループ最初に戻る
[jump target=*loopladystart]

*loopladyend
;クリック用のストップタグ。これがないと一覧出力できない。
[s]

データベースから取り出してリスト化するループ処理。さまざまなことに応用できそうです。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2 3 4 5 6 7

月別アーカイブ

限定特典から探す

記事を検索