デリヘル嬢の皆さん。兼業であることが多いです。いわゆる「昼職」があって、余裕があるときにデリヘルで働く……という。
だから「本業」にあわせて、デリヘル嬢には各々の「出勤パターン」が存在します。
たとえば「週末のみ」「火曜日のみ」「月末のみ」……など。月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]
実際のデリヘルでは「おんなのこ休暇」とも呼ばれていますね。デリヘルあるあるネタなので、この機能を欠くわけにはいきません。実装できて良かったです。
たいへん勉強になりました。このあと他の機能にも活かせそうです。
「出勤パターン」「レア出勤」「おんなのこ休暇」という要素は、ゲームに「複雑性」を付与します。ゲーム性の向上につなげることが出来ました。めでたし、めでたし。