瞬駈天魔のツクール素材製作所

月額支援サイトファンティアを追加しました!
是非、無料ファンでも励みになりますので宜しくお願い致します!m(__)m

別館:ツクール制作 Shilk Loungeを改良予定!

2018年05月29日 02時00分00秒 | ツクール日記

ほぼ放置状態となってた別館のツクール制作 Shilk Loungeにて
クイズゲーム 東洋医学編の攻略サイト(問題解答・解説サイト)として
改良することに決まりました!!

問題の量も多いために難易度と1層(第1問)ずつ分けた形で
問題内容を調べることができるように改良をする予定です!

ゲーム遊戯中にあるサイトは
この別館につながっているようになっているために
主に不具合報告用ではありましたが、
攻略サイト(問題解答・解説の閲覧)としても利用して頂ければ・・・
という思いで徐々に・・・ですが、
追加を行って参ります!!(`・ω・´)ゞ

勿論、ゲームの遊戯と関係なく
勉強のために閲覧される方も大歓迎です!!

2択の練習級から徐々に問題の内容・解説を追加していき、
問題の解答・解説以外にも難易度達成時に解放される
歌BGMなどの情報も挙げていく予定です。

難しい医療の勉強内容も
遊んで気楽に勉強しちゃいましょう!!(`・ω・´)∩


まさかのパソコンがブルースクリーンに!!( ゚Д゚;)

2018年05月27日 23時00分00秒 | ツクール日記

はい・・・更新がなかったのはパソコン修理中だったためです・・・。

なんと・・・パソコンを普段通りに終了して電源を切った後、
自動更新が勝手に始まっていたようで
強制的にWindows10に!!Σ(・ω・ノ)ノ!

勿論、Windows8.1ですが、
購入したのは本当の初期の頃・・・
なので・・・スクリプトが対応してる訳ないでしょ!!(# ゚Д゚)

はい、案の定・・・ブルースクリーン・・・
パソコン修理でデータの取り出しとデータの初期化依頼をしました。

しかも、この不具合・・・
パソコン修理に来てた人がほとんどで
Windows10に変わったら
ブルースクリーンから抜け出せなくなった方が続出!!
という修理ラッシュ!!な状態だったようです。

で、この不具合は悪いのはWindows側にも関わらず補償外。

これはひどい・・・!

原因が原因だったために初期化すれば簡単に直るようだったので
別のパソコン側から初期化コマンドを送って
初期化を送ってもらい、
何とか正常に戻りました。

修理費はパソコン修理店で行ってもらって
意外とお手頃な金額で2万1,600円(税込)。

が・・・今まで購入してた
ダウンロード型グラフィックソフトや動画編集ソフトなどは
すべて買い直し・・・
データ自体は生きていたために
声優依頼関係や背景依頼関係については何とかなりましたが、
初期化してるのですべて色々と入れ直し・・・
遊んでる暇もありませんね・・・(´・ω・`)

当制作ゲームでは
非常に多くの声優やデザイン関係などを扱っているために
パソコンが壊れたら堪ったもんじゃないですね・・・( 一一)

グラフィックソフトなどのダウンロードソフトの買い直しでは
合計:18万6000円・・・お・・・お高い・・・(´・ω・`;)

セキュリティソフトも買い直しですからね・・・(´・ω・`;)

RPGツクールもソフトでなく、ダウンロード型で購入してたら・・・
ヒヤッ・・・(;'∀')

販売も間近でやっとの事でローン申請通ったばかりだというのに!!(# ゚Д゚)∩

いっその事、Macにしようかと思ってしまいましたが、
これでも性能面でいえばWindowsのが高いんですよね・・・(´・ω・`)

何度もWindows10に更新しろ!!と来るものですが、
あれにはご注意を・・・。

 


新難易度:エンジェルズモード 5月30日実装!!

2018年05月19日 06時00分00秒 | ツクール日記

クイズゲーム東洋医学編にて
新難易度:エンジェルズモード(クロノス・ザ・インフィニティループ)を
5月30日にて実装致します。

今回のモードは柔道整復師がこれで学べてしまう!!という
東洋医学系問題内容となります。
(ふふふ・・・制作が一人だからと問題量を甘く見たら・・・( `ー´) )

またも遊んで学べて自然に身について・・・
のバカげた勉強用クイズゲームで楽しむことを重視し過ぎた
おバカな難易度(モード)ですね。(*'▽')
(問題内容は厚生労働省委託の国家試験問題を参考に・・・ですからね・・・?)

このモード名はエンジェルズモード・・・天使のモードということで
入場時の制限時間:20分 がありますが、
タイムアップしてもミッション失敗はありません!!(`・ω・´)
(タイムアップは不正解と同じ扱いです!!)

クロノス・ザ・インフィニティループ・・・
直訳するとクロノス無限ループ・・・
時の神クロノスによる無限のループとなり、
上記の通り、タイムアップしても撤退・クリアする以外は抜け出せません!!

そして、階層は12階層と2階層増えてます!!

でも、下手したら上級より簡単に思える場合があるために
上級のあん摩マッサージ師の問題がクリアできるようであれば余裕です!!

ちなみに今回は特にマップ・構成・エンディングもこだわっており、
このモードのためだけに莫大な費用を費やしたほどです。

エンジェルズモード(クロノス・ザ・インフィニティループ)では
スタート時の歌BGMが1曲ではあるのですが、
編曲を含めた13パターンのランダムで
スタート時から歌BGMの発生の変化があります。

エンジェルズモードは名の通り、
マップの感じは空でマップタイルは透明で空中散歩を味わえる感じです。

エンジェルズモード(クロノス・ザ・インフィニティループ)では
通常難易度のようにスタート時に制限時間の発生がありますが、
中級と同じようにタイムアップがありませんが
その代わりにタイムアップになると1階層(第1問目)からやり直しとなります。

クリアに制限時間で歌BGMの発生の有無があり、
歌BGMの発生は最速タイムでクリアする必要があります。

今回のモードでは復活アイテムを所持している場合、
通常のワンモアチャンス!とは異なり、
超級以降のような形で
『不正解時にその場で再挑戦可能』となっております。
(※タイムアップ時は1階層からやり直しになります。)

復活時の歌BGMは要望にお応えし、
通常難易度のワンモアチャンス!の歌BGM1曲に加え、
ミニゲームルームでのミニゲーム:さめがめ で15万点以上・20万点以上という
高点数を取らないと視聴できない歌BGMが1曲(※3曲導入してますが2曲は編曲版です。)と
計4曲からのランダムで復活時の歌BGMが発生します。

12階層後では次の難易度上昇(難易度ランクアップ)の示唆があり、
「はい」を選択するとヘルモード(神破壊級)へ移動し、
「いいえ」を選択するとエンジェルズモードクリアとなり、
エンディングへ移動します。

次の難易度上昇(難易度ランクアップ)した場合は
エンジェルズモードクリアにはならないので注意が必要です。

新キャラによる特殊能力も新しい特殊能力が追加されており、
今回の新キャラを用いると「運命のサイコロ」という特殊能力で
次の難易度上昇(難易度ランクアップ)で「はい」を選択した際に
サイコロが出現し、
1~2が出るとデスモード(超級)へ移動、
3~5が出るとヘルモード(神破壊級)へ移動、
6が出るとゼウスモード(十二神王級)といった最高難易度へ一発で移動します。

元々はデスモード(超級)→ヘルモード(神破壊級)→ゼウスモード(十二神王級)
という感じに繋がっているため、
デスモード(超級)が当たってしまってすべてランクアップすると
エンジェルズモード12階層+デスモード15階層+ヘルモード5階層+ゼウスモード12階層
という今までの地獄よりも地獄の域となってしまいます。
(エンジェルズモードは不正解でも失敗はありませんが、
 デスモード以降は一度の不正解・タイムアップでミッション失敗となってしまいます。)

ヘルモードが当たった場合はデスモードから移動してた15階層分がなくなり、
デスモードから開始してヘルモードへ行くよりランクアップしやすく、
3階層分、楽になります。

ゼウスモードが当たった場合はいきなり最難関となり、
かなりの難関ではありますが、
ヘルモードも浮く分、最難関への移動がかなり楽になるという点があります。

今までの特殊能力とは違って、
アニメーション要素が追加されているのでゲーム性が増えた感じになります。

このエンジェルズモードで特殊能力での注意は
『通常モードと同じ扱い』となりますが、
「甘味系特殊能力」はありません。

また、「妖精-女1」を選択されると
クリア時の最速クリアエンディングでは歌BGMが専用BGMに変化しますので
エンジェルズモードではエンディング歌BGMを視聴してない場合は
このキャラを用いる際は後から用いることをお勧めします。

まだまだクイズゲーム東洋医学編は様々なものが追加されていきます!!
(医療辞典についてはもう少しお待ちを・・・m(__)m )

東洋医学系を勉強する気がない方でも楽しめる難易度もありますので
是非、ご遊戯してみて下さい!!
(販売はファンティア販売 ShilkAmazezCreateにて!)


[データ丸投げ!]スロットプラグイン編集版 (※文字数制限に伴い、後半部)

2018年05月18日 02時50分00秒 | ツクール日記

Scene_SlotMachine.prototype.spinCommand = function () { this._coin -= this._bet * scale; this._slotCommandWindow.deactivate(); this._slotCommandWindow.close(); this._helpWindow.close(); this._winSpot = this.drawLot(); var t = ""; var i; for (i = 0; i < 5; i++) { t += reel[i][this._winSpot[i]]; } this._rollCount++; //Interval Spin //this._currentStartingReel = 0; //this._startingTimer = setInterval(function(){ // this._reels[this._currentStartingReel].spin(); // this._currentStartingReel++; // console.log("this._currentStartingReel", this._currentStartingReel) // if (this._currentStartingReel > 4) { // clearInterval(this._startingTimer); // this._startingTimer = null; // } //}.bind(this), 200); this._spinStart = true; this._reels[0].setWinSpot(this._winSpot[0]); this._reels[1].setWinSpot(this._winSpot[1]); this._reels[2].setWinSpot(this._winSpot[2]); this._reels[3].setWinSpot(this._winSpot[3]); this._reels[4].setWinSpot(this._winSpot[4]); for (i = 0; i < 5; i++) { this._reels[i].spin(); } }; Scene_SlotMachine.prototype.result = function () { this._rollCount = 0; var win, tmp; win = this.judge(this._winSpot); tmp = win; if (this._coin + win > Scene_SlotMachine.COIN_MAX_VALUE) { win = Scene_SlotMachine.COIN_MAX_VALUE - this._coin; } this._winCoin = this._correctCoin = win; var time = 60 * 10; if (this._winCoin < time) { this._winStep = 1; } else { this._winStep = this._winCoin / time >> 0; } if (this._winCoin > 0) { this._winMessage = winMessage; var reg = /Win Coin/gi; this._winMessage = this._winMessage.replace(reg, String(tmp)); this._helpWindow.setText(this._winMessage); this._helpWindow.open(); AudioManager.playMe({"name": "Victory1", "volume": 90, "pitch": 100, "pan": 0}); } else { this._helpWindow.setText(lostMessage + '\n' + replayMessage); this._helpWindow.open(); this._replayCommandWindow.open(); this._replayCommandWindow.activate(); } }; Scene_SlotMachine.prototype.judge = function (spot) { var result1 = []; result1.push(reel[0][(spot[0] + 1) % reel[0].length]); result1.push(reel[1][(spot[1] + 1) % reel[1].length]); result1.push(reel[2][(spot[2] + 1) % reel[2].length]); result1.push(reel[3][(spot[3] + 1) % reel[3].length]); result1.push(reel[4][(spot[4] + 1) % reel[4].length]); var result2 = []; result2.push(reel[0][spot[0]]); result2.push(reel[1][spot[1]]); result2.push(reel[2][spot[2]]); result2.push(reel[3][spot[3]]); result2.push(reel[4][spot[4]]); var result3 = []; result3.push(reel[0][(this._winSpot[0] - 1 + reel[0].length) % reel[0].length]); result3.push(reel[1][(this._winSpot[1] - 1 + reel[1].length) % reel[1].length]); result3.push(reel[2][(this._winSpot[2] - 1 + reel[2].length) % reel[2].length]); result3.push(reel[3][(this._winSpot[3] - 1 + reel[3].length) % reel[3].length]); result3.push(reel[4][(this._winSpot[4] - 1 + reel[4].length) % reel[4].length]); var returnValue = 0; var cursorArray = this._makeCursorArray(); //line1 var i, base; var win = 0; base = result1[0]; if (this._bet > 1) { for (i = 1; i < 5; i++) { if (base !== result1[i]) { break; } } i--; if (i > 1) { win = scale * odds[i - 2][base]; cursorArray[i - 2][base] = true; returnValue += win; } } //line2 win = 0; base = result2[0]; if (this._bet > 0) { for (i = 1; i < 5; i++) { if (base !== result2[i]) { break; } } i--; if (i > 1) { win = scale * odds[i - 2][base]; cursorArray[i - 2][base] = true; returnValue += win; } } //line3 win = 0; base = result3[0]; if (this._bet > 2) { for (i = 1; i < 5; i++) { if (base !== result3[i]) { break; } } i--; if (i > 1) { win = scale * odds[i - 2][base]; cursorArray[i - 2][base] = true; returnValue += win; } } this._instructionWindow.blinkCursor(cursorArray); return returnValue; }; Scene_SlotMachine.prototype.drawLot = function () { var i, j, l; var s; var spot = []; spot.push(Math.random() * reel[0].length >> 0); spot.push(Math.random() * reel[1].length >> 0); spot.push(Math.random() * reel[2].length >> 0); spot.push(Math.random() * reel[3].length >> 0); spot.push(Math.random() * reel[4].length >> 0); //2〜5reel var l1, l2, l3; var r; var target1 = true; var target2 = true; var target3 = true; for (i = 1; i < 5; i++) { for (j = 0; j < reel[i].length; j++) { if (this.isWin(spot, i)) { spot[i] = (spot[i] + 1) % reel[i].length; } else { break; } } l = reel[i - 1].length; l1 = reel[i - 1][(spot[i - 1] + 1 + l) % l]; l2 = reel[i - 1][(spot[i - 1] + 0 + l) % l]; l3 = reel[i - 1][(spot[i - 1] - 1 + l) % l]; l = reel[i].length; r = Math.random(); if (r < this._probability[i - 1][l2] && target2) { s = reel[i].indexOf(l2); if (s >= 0) { spot[i] = (s + 0 + l) % l; target1 = false; target3 = false; } else { console.error("Illegal lottery. r:", i,"l2:", l2); } } r = Math.random(); if (r < this._probability[i - 1][l1] && target1) { s = reel[i].indexOf(l1); if (s >= 0) { spot[i] = (s - 1 + l) % l; target2 = false; target3 = false; } else { console.error("Illegal lottery. r:", i,"l1:", l1); } } r = Math.random(); if (r < this._probability[i - 1][l3] && target3) { s = reel[i].indexOf(l3); if (s >= 0) { spot[i] = (s + 1 + l) % l; target1 = false; target2 = false; } else { console.error("Illegal lottery. r:", i,"l3:", l3); } } } return spot; }; /** * * @param spot * @param r * @return {boolean} */ Scene_SlotMachine.prototype.isWin = function (spot, r) { return !!( reel[r - 1][(spot[r - 1] + 1) % reel[r - 1].length] === reel[r][(spot[r] + 1) % reel[r].length] || reel[r - 1][(spot[r - 1] + 0) % reel[r - 1].length] === reel[r][(spot[r] + 0) % reel[r].length] || reel[r - 1][(spot[r - 1] - 1) % reel[r - 1].length] === reel[r][(spot[r] - 1) % reel[r].length] ); }; Scene_SlotMachine.prototype.correct = function () { this._coin += this._correctCoin; this._correctCoin = 0; if (this._coin >= Scene_SlotMachine.COIN_MAX_VALUE) { this._helpWindow.setText(coinFullMessage + '\n' + replayMessage); } else { this._helpWindow.setText(this._winMessage + '\n' + replayMessage); } this._winMessage = ""; this._replayCommandWindow.open(); this._replayCommandWindow.activate(); }; Scene_SlotMachine.prototype.replayCommand = function () { this._slotCommandWindow.enableBet(); this._slotCommandWindow.disableSpin(); if (this._coin < scale) { this._slotCommandWindow.disableBet(); } this._slotCommandWindow.select(0); this._replayCommandWindow.close(); this._slotCommandWindow.open(); this._slotCommandWindow.activate(); this._helpWindow.setText(helpMessage); this._bet = 0; this.refreshStatus(); }; Scene_SlotMachine.prototype.refreshStatus = function () { this._slotMachineWindow.bet = this._bet * scale; this._slotMachineWindow.coin = this._coin - this._bet * scale; if (this._bet === 0) { this._betLine.clear(); } else { this._betLine.enableLine(this._bet - 1); } }; Scene_SlotMachine.prototype.update = function () { Scene_MenuBase.prototype.update.call(this); var result = 0; if (this._spinStart && !this.isSpinning()) { this._spinStart = false; this.result(); } else if (this.isWinCounting()) { if (this._winCoin <= this._winStep) { this._winCoin = 0; result = this._coin + this._correctCoin; this._slotMachineWindow.coin = result; this.correct(); } else { this._winCoin -= this._winStep; result = this._coin + this._correctCoin - this._winCoin; this._slotMachineWindow.coin = result; } } if (Input.isRepeated('up') && this._slotCommandWindow.active) { if (this._slotCommandWindow.isAllowBet) { SoundManager.playOk(); this.betCommand(); } else { SoundManager.playBuzzer(); } } if (Input.isRepeated('down') && this._slotCommandWindow.active) { if (this._slotCommandWindow.isAllowSpin && !this._spinStart) { SoundManager.playOk(); this.spinCommand(); } } }; Scene_SlotMachine.prototype._makeCursorArray = function () { var returnValue = []; for (var i = 0; i < 3; i++) { returnValue.push([]); for (var j = 0; j < 6; j++) { returnValue[i].push(false); } } return returnValue; }; //----------------------------------------------------------------------------- // Window_SlotInstruction // // This window is instruction card for the slot machines. function Window_SlotInstruction() { this.initialize.apply(this, arguments); } Window_SlotInstruction.prototype = Object.create(Window_Base.prototype); Window_SlotInstruction.prototype.constructor = Window_SlotInstruction; Window_SlotInstruction.prototype.initialize = function (x, y, width, height) { Window_Base.prototype.initialize.call(this, x, y, width, height); this._cursol = [[],[],[]]; var b = ImageManager.loadBitmap("img/slotmachine/", "win_cursor"); var cx = 47; var cy = 32; var cw = 224; for (var i = 2; i >= 0; i--) { for (var j = 5; j >= 0; j--) { var sprite = new InstructionCursorSprite(b); this.addChild(sprite); sprite.x = cx + i * (cw + 20); sprite.y = cy + j * 24; this._cursol[2 - i].push(sprite); } } this.clearCursor(); }; Window_SlotInstruction.prototype.lineHeight = function () { return 24; }; Window_SlotInstruction.prototype.refresh = function () { this.setBackgroundType(2); this.contents.clear(); if (this._odds) { this.contents.fontSize = 22; var x = 51 - 18; var y = 14; var w = 224; this.drawText(this._odds[2][5], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[2][4], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[2][3], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[2][2], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[2][1], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[2][0], x, y, w, "right"); x += w + 20; y = 14; this.drawText(this._odds[1][5], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[1][4], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[1][3], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[1][2], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[1][1], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[1][0], x, y, w, "right"); x += w + 20; y = 14; this.drawText(this._odds[0][5], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[0][4], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[0][3], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[0][2], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[0][1], x, y, w, "right"); y += this.lineHeight(); this.drawText(this._odds[0][0], x, y, w, "right"); } this.contents.fontSize = this.standardFontSize(); }; Window_SlotInstruction.prototype.setOdds = function (odds) { this._odds = odds; }; Window_SlotInstruction.prototype.clearCursor = function () { for (var i = 0; i
 

ここまでになります。
長いですが、まぁ・・・仕方なし・・・(-_-;)
そのままコピペしたら、お食事万歳!!になりますからね!!(`・ω・´)
 

[データ丸投げ!]スロットプラグイン編集版 (※文字数制限に伴い、前半部まで)

2018年05月18日 02時45分00秒 | ツクール日記

はい、こちらはスロットプラグインのデータ丸投げ!!

と言っても、そのまま丸投げすると・・・ネタになります!!(`・ω・´)

ちゃんとコピペする前に一部は修正しないと・・・お食事ネタになりますよ!!(`・ω・´)

何故、JSファイルで出さないのかって・・・?

そのままお食事ネタで使いそうじゃないですか!!(`・ω・´;)

文字数制限の関係上、こっちは前半部で次に記載するのは後半部となります。

まず前半部のこれをコピーしたらメモ帳へペースト(貼り付け)をしたら、
そのメモ帳内の一番下に後半部のプラグインデータをコピーして貼り付けをし、
保存時のファイル名を「SlotMachine.js」で
右側の選択は「すべてのファイル」を選択して保存すると「JSファイル」が出来上がります。

・・・という訳でこちら!! ↓

 

//=============================================================================
// SlotMachine.js
//
// (c)2016 KADOKAWA CORPORATION./YOJI OJIMA
//=============================================================================

/*:
 * @plugindesc Slot Machine scene
 * @author Takeya Kimura
 *
 * @param Variable ID
 * @desc Variable ID for store the coin.
 * @default 11
 *
 * @param Help Text
 * @desc This text is a help message.
 * @default カーソルキーの上でベッド、カーソルキーの下でお食事開始
 *
 * @param Won Text
 * @desc This text is a won message. "Win Coin" will be replaced with the number of coins won.
 * @default おめでとうございます!Win Coin肉獲得です!
 *
 * @param Lost Text
 * @desc This text is a lost message.
 * @default ご馳走様でした。
 *
 * @param Replay Text
 * @desc This text is a replay message.
 * @default もう一度ご馳走になりますか?
 *
 * @param CoinFull Text
 * @desc This text is a coin full message.
 * @default お腹が満腹になりました。
 *
 * @param Bet Text
 * @desc This text is a bet command.
 * @default ベッド
 *
 * @param Spin Text
 * @desc This text is a coin spin command.
 * @default フライスピン
 *
 * @param Yes Text
 * @desc This text is a coin "yes" command.
 * @default お食事開始
 *
 * @param No Text
 * @desc This text is a "no" command.
 * @default もう食べれません
 *
 * @requiredAssets img/slotmachine/bet_line_1
 * @requiredAssets img/slotmachine/bet_line_2
 * @requiredAssets img/slotmachine/bet_line_3
 * @requiredAssets img/slotmachine/bg
 * @requiredAssets img/slotmachine/line_base
 * @requiredAssets img/slotmachine/reel
 * @requiredAssets img/slotmachine/scale_x1
 * @requiredAssets img/slotmachine/scale_x10
 * @requiredAssets img/slotmachine/scale_x100
 * @requiredAssets img/slotmachine/win_cursor
 * @requiredAssets audio/me/Victory1
 * @requiredAssets audio/se/Switch2
 *
 * @help
 * Plugin Command:
 *   SlotMachine open               # Open the slot machines
 *   SlotMachine expectation 0.5    # Set the expectation
 *   SlotMachine scale 0            # Set the scale [0 | 1 | 2](scale1 | scale10 | scale100)
 */

/*:ja
 * @plugindesc Slot Machine scene
 * @author Takeya Kimura
 *
 * @param Variable ID
 * @desc 所持お肉の数を保管する変数ID
 * @default 11
 *
 * @param Help Text
 * @desc ヘルプメッセージです。
 * @default カーソルキーの上でベッド、カーソルキーの下でお食事 *
 * @param Won Text
 * @desc 食事後のメッセージ。 "Win Coin"は獲得したお肉に置換されます。
 * @default おめでとうございます!Win Coin肉獲得です!
 *
 * @param Lost Text
 * @desc 食べれなかった時のメッセージ
 * @default 食べれませんでした。
 *
 * @param Replay Text
 * @desc 温め時の選択メッセージ
 * @default もう一度ご馳走になりますか?
 *
 * @param Coin Full Text
 * @desc お肉で満腹に達した時のメッセージ
 * @default お腹が満腹になりました。
 *
 * @param Bet Text
 * @desc ベットコマンドのテキスト
 * @default ベッド
 *
 * @param Spin Text
 * @desc スピンコマンドのテキスト
 * @default フライスピン
 *
 * @param Yes Text
 * @desc はいコマンドのテキスト
 * @default お食事開始
 *
 * @param No Text
 * @desc いいえコマンドのテキスト
 * @default もう食べれません
 *
 * @requiredAssets img/slotmachine/bet_line_1
 * @requiredAssets img/slotmachine/bet_line_2
 * @requiredAssets img/slotmachine/bet_line_3
 * @requiredAssets img/slotmachine/bg
 * @requiredAssets img/slotmachine/line_base
 * @requiredAssets img/slotmachine/reel
 * @requiredAssets img/slotmachine/scale_x1
 * @requiredAssets img/slotmachine/scale_x10
 * @requiredAssets img/slotmachine/scale_x100
 * @requiredAssets img/slotmachine/win_cursor
 * @requiredAssets audio/me/Victory1
 * @requiredAssets audio/se/Switch2
 *
 * @help
 * Plugin Command:
 *   SlotMachine open               # 精肉マシーンを開きます
 *   SlotMachine expectation 0.5    # 期待値を0~1の間で設定します。1に近づくほど当たりやすくなりますが、確実にお食事できるわけではありません。
 *   SlotMachine scale 0            # 倍率を設定します0は1倍、1は10倍、2は100倍です。
 */

(function () {

var parameters = PluginManager.parameters('SlotMachine');
var variableId = Number(parameters['Variable ID'] || 11);
var helpMessage = String(parameters['Help Text'] || "カーソルキーの上でベッド、カーソルキーの下でお食事");
var winMessage = String(parameters['Won Text'] || "おめでとうございます!Win Coin肉獲得です!");
var lostMessage = String(parameters['Lost Text'] || "食べれませんでした。");
var replayMessage = String(parameters['Replay Text'] || "もう一度ご馳走になりますか?");
var coinFullMessage = String(parameters['CoinFull Text'] || "お腹が満腹になりました。");
var betText = String(parameters['Bet Text'] || "ベッド");
var spinText = String(parameters['Spin Text'] || "フライスピン");
var yesText = String(parameters['Yes Text'] || "お食事開始");
var noText = String(parameters['No Text'] || "もう食べれません");
var scale = 1;
var expectation = 0.5;

//odds
//You can set the odds.
var odds = [];
odds.push([]);
odds[0].push(3); //000
odds[0].push(5); //111
odds[0].push(10); //222
odds[0].push(30); //333
odds[0].push(500); //444
odds[0].push(777); //555
odds.push([]);
odds[1].push(6); //0000
odds[1].push(30); //1111
odds[1].push(50); //2222
odds[1].push(300); //3333
odds[1].push(5000); //4444
odds[1].push(7777); //5555
odds.push([]);
odds[2].push(20); //00000
odds[2].push(300); //11111
odds[2].push(500); //22222
odds[2].push(3000); //33333
odds[2].push(5000); //44444
odds[2].push(77777); //55555

//make reel
//You can rearrange the order of the reel.
//The number can not be changed.
var reel = [];
reel.push([0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]);
reel.push([5, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0]);
reel.push([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 0, 1, 2, 3, 4, 5]);
reel.push([0, 2, 4, 1, 3, 5, 0, 2, 4, 1, 3, 5, 0, 2, 4, 1, 3, 5]);
reel.push([0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]);

function getCoin() {
    return $gameVariables.value(variableId);
}

function setCoin(value) {
    return $gameVariables.setValue(variableId, value);
}

var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "SlotMachine") {
        switch (args[0]) {
            case "open":
                SceneManager.push(Scene_SlotMachine);
                break;
            case "expectation":
                expectation = Number(args[1]);
                break;
            case "scale":
                switch (args[1]) {
                    case "0":
                        scale = 1;
                        break;
                    case "1":
                        scale = 10;
                        break;
                    case "2":
                        scale = 100;
                        break;
                    default :
                        scale = 1;
                        break;
                }
                break;
        }
    }
};

//-----------------------------------------------------------------------------
// SLTReelSprite
//
// Slot Machine Reel Sprite

function SLTReelSprite() {
    this.initialize.apply(this, arguments);
}

SLTReelSprite.prototype = Object.create(Sprite.prototype);
SLTReelSprite.prototype.constructor = SLTReelSprite;

SLTReelSprite.STOP = 0;
SLTReelSprite.SPINNING = 1;
SLTReelSprite.SPIN = 2;
SLTReelSprite.STOPPING = 3;
SLTReelSprite.FRAME_SPINNING = 40;
SLTReelSprite.FRAME_SPIN = 60;
SLTReelSprite.FRAME_STOPPING = 40;

SLTReelSprite.prototype.initialize = function (bitmap) {
    Sprite.prototype.initialize.call(this, bitmap);
    this._numSpot = 18;
    this._spotHeight = 54;
    this._winSpot = 0;
    this._scrollY = 0;
    this._speedHigh = 30;
    this._speedLow = 4;
    this._status = 0;
    this._spinFrame = 0;
    this._spinEndFrame = SLTReelSprite.FRAME_SPIN;
};

Object.defineProperty(SLTReelSprite.prototype, 'status', {
    get: function () {
        return this._status;
    },
    configurable: true
});

SLTReelSprite.prototype.update = function () {
    Sprite.prototype.update.call(this);

    switch (this._status) {

        case SLTReelSprite.STOP:
            break;

        case SLTReelSprite.SPINNING:
            if (this._spinFrame > SLTReelSprite.FRAME_SPINNING) {
                this._status = SLTReelSprite.SPIN;
                break;
            }
            this._scrollY = (this._scrollY + this._speedLow) % (this._numSpot * this._spotHeight);
            this.setFrame(
                0,
                this._spotHeight * this._numSpot * 2 - this._scrollY - this._spotHeight * 2,
                116,
                this._spotHeight * 3
            );
            this._spinFrame++;
            break;

        case SLTReelSprite.SPIN:
            if (this._spinFrame > this._spinEndFrame + SLTReelSprite.FRAME_SPINNING) {
                this._status = SLTReelSprite.STOPPING;
                this._scrollY = this._winSpot * this._spotHeight - this._spotHeight * 3;
                break;
            }
            this._scrollY = (this._scrollY + this._speedHigh) % (this._numSpot * this._spotHeight);
            this.setFrame(
                0,
                this._spotHeight * this._numSpot * 2 - this._scrollY - this._spotHeight * 2,
                116,
                this._spotHeight * 3
            );
            this._spinFrame++;
            break;

        case SLTReelSprite.STOPPING:
            this._scrollY = (this._scrollY + this._speedLow) % (this._numSpot * this._spotHeight);
            if (this._scrollY > this._winSpot * this._spotHeight) {
                this._scrollY = this._winSpot * this._spotHeight;
                this._status = SLTReelSprite.STOP;
                AudioManager.playSe({"name": "Switch2", "volume": 90, "pitch": 100, "pan": 0});
            }
            this.setFrame(
                0,
                this._spotHeight * this._numSpot * 2 - this._scrollY - this._spotHeight * 2,
                116,
                this._spotHeight * 3
            );
            break;
    }
};

SLTReelSprite.prototype.setSpot = function (spot) {
    if (0  0) {
        if (this._counter > InstructionCursorSprite.FRAME_BLINK_END + 1) {
            this._counter = 0;
        }
        else {
            var s = this._counter / InstructionCursorSprite.FRAME_BLINK >> 0;
            this.visible = s % 2 === 0;
            this._counter++;
        }
    }
};

/**
 * @method drawImage
 * @param bitmap    source bitmap
 * @param sx        source x
 * @param sy        source y
 * @param sw        source width
 * @param sh        source height
 * @param dx        destination x
 * @param dy        destination y
 */
Bitmap.prototype.drawImage = function(bitmap, sx, sy, sw, sh, dx, dy) {
    this._context.drawImage(bitmap.canvas, sx, sy, sw, sh, dx, dy, sw, sh);
    this._setDirty();
};

//-----------------------------------------------------------------------------
// Scene_SlotMachine
//
// Will play the slot machine.

function Scene_SlotMachine() {
    this.initialize.apply(this, arguments);
}

Scene_SlotMachine.prototype = Object.create(Scene_MenuBase.prototype);
Scene_SlotMachine.prototype.constructor = Scene_SlotMachine;

Scene_SlotMachine.COIN_MAX_VALUE = 99999999;
Scene_SlotMachine.ODDS_MAX_VALUE = 100000;

Scene_SlotMachine.prototype.initialize = function () {
    Scene_MenuBase.prototype.initialize.call(this);

    this._bet = 0;
    this._coin = getCoin();
    this._winSpot = null;
    this._spinStart = false;
    this._rollCount = 0;
    this._winCoin = 0;
    this._correctCoin = 0;
    this._winStep = 0;
    this._winMessage = "";

    //Winning percentage is calculated by the odds
    this._probability = [];
    this._probability.push([]);
    this._probability[0].push(0.92); //00
    this._probability[0].push(0.86); //11
    this._probability[0].push(0.69); //22
    this._probability[0].push(0.62); //33
    this._probability[0].push(0.54); //44
    this._probability[0].push(0.46); //55

    this._probability.push([]);
    this._probability[1].push((1 / this._probability[0][0]) *
        expectation * (1 / odds[0][0])); //000
    this._probability[1].push((1 / this._probability[0][1]) *
        expectation * (1 / odds[0][1])); //111
    this._probability[1].push((1 / this._probability[0][2]) *
        expectation * (1 / odds[0][2])); //222
    this._probability[1].push((1 / this._probability[0][3]) *
        expectation * (1 / odds[0][3])); //333
    this._probability[1].push((1 / this._probability[0][4]) *
        expectation * (1 / odds[0][4])); //444
    this._probability[1].push((1 / this._probability[0][5]) *
        expectation * (1 / odds[0][5])); //555

    this._probability.push([]);
    this._probability[2].push((1 / (this._probability[0][0] * this._probability[1][0])) *
        expectation * (1 / odds[1][0])); //0000
    this._probability[2].push((1 / (this._probability[0][1] * this._probability[1][1])) *
        expectation * (1 / odds[1][1])); //1111
    this._probability[2].push((1 / (this._probability[0][2] * this._probability[1][2])) *
        expectation * (1 / odds[1][2])); //2222
    this._probability[2].push((1 / (this._probability[0][3] * this._probability[1][3])) *
        expectation * (1 / odds[1][3])); //3333
    this._probability[2].push((1 / (this._probability[0][4] * this._probability[1][4])) *
        expectation * (1 / odds[1][4])); //4444
    this._probability[2].push((1 / (this._probability[0][5] * this._probability[1][5])) *
        expectation * (1 / odds[1][5])); //5555

    this._probability.push([]);
    this._probability[3].push((1 / (this._probability[0][0] * this._probability[1][0] * this._probability[2][0])) *
        expectation * (1 / odds[2][0])); //00000
    this._probability[3].push((1 / (this._probability[0][1] * this._probability[1][1] * this._probability[2][1])) *
        expectation * (1 / odds[2][1])); //11111
    this._probability[3].push((1 / (this._probability[0][2] * this._probability[1][2] * this._probability[2][2])) *
        expectation * (1 / odds[2][2])); //22222
    this._probability[3].push((1 / (this._probability[0][3] * this._probability[1][3] * this._probability[2][3])) *
        expectation * (1 / odds[2][3])); //33333
    this._probability[3].push((1 / (this._probability[0][4] * this._probability[1][4] * this._probability[2][4])) *
        expectation * (1 / odds[2][4])); //44444
    this._probability[3].push((1 / (this._probability[0][5] * this._probability[1][5] * this._probability[2][5])) *
        expectation * (1 / odds[2][5])); //55555

    //Interval Spin
    //this._startingTimer = null;
    //this._currentStartingReel = 0;

    if (this._coin > Scene_SlotMachine.COIN_MAX_VALUE) {
        this._coin = Scene_SlotMachine.COIN_MAX_VALUE;
    }
};

Scene_SlotMachine.prototype.create = function () {
    this.createBackground();
    this._backgroundSprite.bitmap = ImageManager.loadBitmap("img/slotmachine/", "bg");
    this.createReels();
    this.createBetLine();
    this.createScale();
    this.updateActor();
    this.createWindowLayer();
    this.createHelpWindow();
    this.createInstruction();
    this.createSlotMachine();
    this.createSlotCommand();
    this.createReplayCommand();

    this.refreshStatus();

    if (this._coin < scale) {
        this._slotCommandWindow.disableBet();
    }
};

Scene_SlotMachine.prototype.start = function() {
    this.makeReel();
    this._instructionWindow.refresh();
    this._slotMachineWindow.refresh();
    this._helpWindow.setText(helpMessage);
};

Scene_SlotMachine.prototype.makeReel = function() {
    for (var i = 0; i < 5; i++) {
        for (var j = 0; j < 18; j++) {
            for (var k = 0; k < 3; k++) {
                this._reels[i].bitmap.drawImage(
                    this._reelBitmap,
                    reel[i][j] * 116,
                    0,
                    116,
                    54,
                    0,
                    (54 * 18 * 3) - j * 54 - k * (18 * 54) - 54);
            }
        }

        this._reels[i].setSpot(Math.random() * 18 >> 0);
    }
};

Scene_SlotMachine.prototype.isSpinning = function() {
    var returnValue = false;
    for (var i = 0; i < 5; i++) {
        returnValue = returnValue || this._reels[i].status !== SLTReelSprite.STOP;
    }
    return returnValue;
};

Scene_SlotMachine.prototype.isWinCounting = function() {
    return this._winCoin > 0;
};

Scene_SlotMachine.prototype.createHelpWindow = function() {
    Scene_MenuBase.prototype.createHelpWindow.call(this);
    this._helpWindow.y = Graphics.boxHeight - this._helpWindow.height;
};

Scene_SlotMachine.prototype.createInstruction = function () {
    this._instructionWindow = new Window_SlotInstruction(0, 0, Graphics.boxWidth, 26 * 6 + 18 * 2);
    this._instructionWindow.setOdds(odds);
    this.addWindow(this._instructionWindow);
};

Scene_SlotMachine.prototype.createSlotMachine = function () {
    this._slotMachineWindow = new Window_SlotMachine(0, this._instructionWindow.height, Graphics.boxWidth, 200);
    this._slotMachineWindow.coin = this._coin;
    this._slotMachineWindow.bet = this._bet;
    this.addWindow(this._slotMachineWindow);
};

Scene_SlotMachine.prototype.createSlotCommand = function () {
    this._slotCommandWindow = new Window_SlotCommand(0, 0);
    this._slotCommandWindow.setHandler('bet', this.betCommand.bind(this));
    this._slotCommandWindow.setHandler('spin', this.spinCommand.bind(this));
    this._slotCommandWindow.setHandler('cancel', this.cancelCommand.bind(this));
    this.addWindow(this._slotCommandWindow);
    this._slotCommandWindow.y = this._helpWindow.y - this._slotCommandWindow.height;
};

Scene_SlotMachine.prototype.createReplayCommand = function () {
    this._replayCommandWindow = new Window_ReplayCommand(0, 0);
    this._replayCommandWindow.setHandler('yes', this.replayCommand.bind(this));
    this._replayCommandWindow.setHandler('no', this.cancelCommand.bind(this));
    this._replayCommandWindow.setHandler('cancel', this.cancelCommand.bind(this));
    this.addWindow(this._replayCommandWindow);
    this._replayCommandWindow.x = Graphics.boxWidth - this._replayCommandWindow.width;
    this._replayCommandWindow.y = this._helpWindow.y - this._replayCommandWindow.height;
};

Scene_SlotMachine.prototype.createReels = function () {
    this._reelBitmap = ImageManager.loadBitmap("img/slotmachine/", "reel");
    this._reels = [];
    for (var i = 0; i < 5; i++) {
        var sprite = new SLTReelSprite(new Bitmap(116, 54 * 18 * 3));
        this._reels.push(sprite);
        sprite.x = 110 + i * 120;
        sprite.y = 222;
        sprite.setSpinEndFrame(SLTReelSprite.FRAME_SPIN + i * 40);
        sprite.setFrame(0, 0, 116, 54 * 3);
        this.addChild(sprite);
    }
};

Scene_SlotMachine.prototype.createBetLine = function () {
    var bitmap = ImageManager.loadBitmap("img/slotmachine/", "line_base");
    this._betLine = new LotLineSprite(bitmap);
    this._betLine.x = 43;
    this._betLine.y = 227;
    this._betLine.clear();
    this.addChild(this._betLine);
};

Scene_SlotMachine.prototype.createScale = function () {
    var bitmap;
    if (scale === 10) {
        bitmap = ImageManager.loadBitmap("img/slotmachine/", "scale_x10");
    }
    else if (scale === 100) {
        bitmap = ImageManager.loadBitmap("img/slotmachine/", "scale_x100");
    }
    else {
        bitmap = ImageManager.loadBitmap("img/slotmachine/", "scale_x1");
    }
    this._scale = new Sprite(bitmap);
    this._scale.x = 719;
    this._scale.y = 212;
    this.addChild(this._scale);
};

Scene_SlotMachine.prototype.cancelCommand = function () {
    this._bet = 0;
    this.refreshStatus();
    setCoin(this._coin);
    this.popScene();
};

Scene_SlotMachine.prototype.betCommand = function () {
    if (this._bet < 3) {
        this._bet++;
        this._slotCommandWindow.enableSpin();
    }
    if (this._bet > 2) {
        this._slotCommandWindow.disableBet();
    }
    if (this._coin - this._bet * scale 

ツクールMV スロットプラグインを改良してみた。

2018年05月17日 02時25分00秒 | ツクール日記

はい、先に言うことが・・・
ツクマテには登録してないので
スロットプラグインの改良方法を知りたい場合は当サイトにて!!(`・ω・´)∩
(まぁ、設定方法は意外と単純で簡単ですけどね・・・(-_-;) )

何故か誰も教えてたりしてない・・・何故だ・・・!
あぁ・・・分かると何気に改良して面白いことができるから・・・ということなのかな?
と思いつつもこのプラグインの改良方法を出しちゃいます!!(`・ω・´)∩

スロットプラグイン・・・当選確率も悪いと思うところですが、
まずはそれ以前に当たっても獲得量少なくない!?と思ったので、この点を改良してみました。

まず、3BETしたら×1を考えたら
×1~×100に対して×リール当選図柄表の倍率
ということは、3BET賭けても×1の場合でクローバーマーク3つ(×5)が当選した場合、
1BET分×1×5=5ポイント分
1BET分×10×5=50ポイント分
1BET分×100×5=500ポイント分

・・・3BET賭けたら2・20・200ポイント分しか得しないじゃん!!(`・ω・´;)

ということは、×1が当選した場合は
3BET賭けて当選したら-200ポイント・・・当選率悪いのにこれは酷い!!(`・ω・´#)

1BETで中央LINE当選するのもレアな確率になってるため・・・
これでは1BETで頑張っても得することはありませんね・・・(;´・ω・)

はい、ということでまずは当選した場合のポイントを直しちゃいましょう!!

これでは折角当選しても赤字が膨れ上がってしまいます!!

これ、実は書き換えるのは簡単なんです!!

まず、メモ帳にスロットプラグインを表示させます。

この獲得表を改良したいので『オッズ』を探すことになります。

オッズ・・・『Odds』・・・『odds』・・・
という訳で『odds』を検索しましょう。

調べると・・・下記のが見つかるはずです。

//odds //You can set the odds. var odds = []; odds.push([]); odds[0].push(1); //000 odds[0].push(2); //111 odds[0].push(5); //222 odds[0].push(10); //333 odds[0].push(20); //444 odds[0].push(100); //555 odds.push([]); odds[1].push(2); //0000 odds[1].push(10); //1111 odds[1].push(20); //2222 odds[1].push(100); //3333 odds[1].push(200); //4444 odds[1].push(1000); //5555 odds.push([]); odds[2].push(20); //00000 odds[2].push(100); //11111 odds[2].push(200); //22222 odds[2].push(1000); //33333 odds[2].push(2000); //44444 odds[2].push(10000); //55555
 

 
 
はい、これがオッズ・・・獲得時の倍率表ですね。
 
・・・ん?画像の箇所で青くしたとこの上がネタ・・・?カーソルの上で「ベッド」、カーソルの下で「お食事」・・・「Win Coin肉」・・・ふっ・・・気にしたら・・・負けです。(*'▽')
これを見てみると『odds[0].push(1); //000』・・・ということは、オッズの変数が0で000の図柄が当選したとき ×1の倍率でポイントを獲得というように考えられますね。
ということは・・・ですよ・・・?ここを×3にすれば、3BETした際にこの場合は獲得してもプラスマイナス0になるということです。
 
そう・・・これで折角食べたお食事分のカロリーが減量し過ぎずにその得たカロリー分だけ消滅することになるのです!!(`・ω・´)
(ネタ引っ張るな!!)
//odds//You can set the odds.var odds = [];odds.push([]);odds[0].push(3); //000odds[0].push(5); //111odds[0].push(10); //222odds[0].push(20); //333odds[0].push(100); //444odds[0].push(777); //555odds.push([]);odds[1].push(6); //0000odds[1].push(20); //1111odds[1].push(40); //2222odds[1].push(300); //3333odds[1].push(1000); //4444odds[1].push(7777); //5555odds.push([]);odds[2].push(100); //00000odds[2].push(300); //11111odds[2].push(500); //22222odds[2].push(3000); //33333odds[2].push(5000); //44444odds[2].push(77777); //55555
 
と、このように豪快に変えてみました。
するとこうなります。

この場合、odds[0].push(10); //222 で当選しており、
獲得は×100のクローバー3(×10)なので1000枚獲得!!
(おぉ~!!これでお腹いっぱい・・・あ・・・あれ?直ってる!?)

以前はクローバー3(×5)だったので500枚の獲得から増加しており、
獲得倍率表示も正しく動作していることになります。

まぁ、odds[2].push(100); //00000 にしている箇所は
割と当選しやすいので、ここはodds[2].push(30); //00000 くらいでも良いかもしれませんね。

意外と条件分岐自体を解釈していれば簡単!!

ということで、今度は確率を変更します。

正直言うと、自身のクイズゲームの最高難易度エンド後の特典としてミニゲームを設定してるため、
あまり教えたくない内容ではありますが、
いつもこのサイトを閲覧して頂いている皆様に感謝の気持ちを込めて
スロット確率の変更方法まで教えちゃいます!!(`・ω・´)ノ
当ゲームの販売:ファンティアの方で無料ファンとしてでも是非、宜しくです!!(`・ω・´) )

まず、確率は英語で『Probability』
はい、もう答えが出ましたね!!(`・ω・´)

こいつを検索すると『// Scene_SlotMachine』の箇所で・・・
ぐはっ!!まるっきり当選確率っぽいじゃん!!(`・ω・´;)

はい、これです。

 //Winning percentage is calculated by the odds this._probability = []; this._probability.push([]); this._probability[0].push(0.70); //00 this._probability[0].push(0.63); //11 this._probability[0].push(0.54); //22 this._probability[0].push(0.44); //33 this._probability[0].push(0.38); //44 this._probability[0].push(0.31); //55

 

はい、0.70とか・・・70%の確率で当選と言ってるようなものですね。

だから、設定0.5では全然当たらないのかー!!と分かりました。

何せ、計算すると0.5(期待値)×0.7(図柄00の確率)=0.35(単純当選率)
おいおい・・・ですよね・・・(-_-;)

でも、これはこの数字2ケタまでが当たる確率という感じが窺えます。

それ以降のプラグインデータを観ると

 this._probability.push([]); this._probability[1].push((1 / this._probability[0][0]) * expectation * (1 / odds[0][0])); //000 this._probability[1].push((1 / this._probability[0][1]) * expectation * (1 / odds[0][1])); //111 this._probability[1].push((1 / this._probability[0][2]) * expectation * (1 / odds[0][2])); //222 this._probability[1].push((1 / this._probability[0][3]) * expectation * (1 / odds[0][3])); //333 this._probability[1].push((1 / this._probability[0][4]) * expectation * (1 / odds[0][4])); //444 this._probability[1].push((1 / this._probability[0][5]) * expectation * (1 / odds[0][5])); //555

・・・あーなるほど、さっきのオッズと絡んでたのね・・・と思わせられます。

1 / 確率 変数0 変数0 × 期待値(expectation) × 1 / オッズ変数
ということになるのかな?と。

しかし、確率 変数0 変数0 オッズ 変数0 変数0と考えると・・・
オッズの変数の数が上記設定と一致しないため・・・
ここはもしかするとリールの数か000~555の変数0~5が関係してそうですね。
(リール数:0・1・2・3・4・5 または000~555が絡んでいる・・・(´・ω・`?) )

残念ながらここはまだ解釈できてないので
55555(図柄77777の当選確定)の完全設定は難しいところですね・・・(´・ω・`)

期待値はあの0~1(初期値:0.5)で設定するあれなので
ここではほぼ設定する必要はありませんね。

ということは0.70などのあの確率だけ弄れば十分だな・・・と思えます。

自身が変更した確率はこんな感じです。

    //Winning percentage is calculated by the odds
    this._probability = [];
    this._probability.push([]);
    this._probability[0].push(0.92); //00
    this._probability[0].push(0.86); //11
    this._probability[0].push(0.69); //22
    this._probability[0].push(0.62); //33
    this._probability[0].push(0.54); //44
    this._probability[0].push(0.46); //55

 

はい、これで・・・
いや、これほとんど当選するでしょ!!という見た目ですがね(;・∀・)

これで設定(期待値)1だとすると、この倍率×1となると思うので
この確率のままという訳でめっさ当たる!!ってことになりますね。

もし、this._probability[0].push(1.00); //00 とした場合、
期待値1×確率1になるので単純には100%の確率・・・となりますが、
それはこの2ケタが当たる確率・・・と言えるかと思いますね。

0.5で設定したとしたら、0.92×0.5=0.46となるので
これでも半分に近い確率で当選する結果となりますね。
(※オッズ変数は計算してません。)

もしこの確率を逆にしたら・・・アヒャ・・・アヒャヒャヒャ・・・(´-`*)

スロットと言えば、『オッズ』、『確率』となるので
これを英語に置き換えれば検索が容易!!という検索自体も単純作業だった訳なのです!!(`・ω・´)∩

後は変数箇所の確率設定が判れば
100%の確率で55555(図柄77777)の当選確定ができそうですね。

いや・・・まぁ・・・これが確実に当たったら、当選した際の感動が薄いんですけどね・・・(´・ω・`;)

メモ帳で観る際に配置が分かりにくい場合、
ブラウザゲーム対応のブラウザへスロットプラグインの
JSファイルデータを持っていくと見やすくなります。

コピーして丸投げもできるスロットプラグインは
次のタイトル:[データ丸投げ!]スロットプラグイン編集版 にて!!
(そのままコピペすると・・・お肉!!お食事!!ご馳走様でした!!)

 


整体と柔道整復師の違い

2018年05月09日 03時00分00秒 | ツクール日記

まさかこんなことを聞かれるとは・・・でしたが、まぁ・・・
医業類似行為について詳しくは知らないですよね。

整体と柔道整復師では思いっきり違います。

整体は医師法で定める医師ではないのです。

ということは業務上、
『問診』、『診察』、『病名判断・告知』、『医業行為・医業類似行為』を行ってはなりません。

整体では『薬剤関係の交付や投薬、私用、調合、販売』は出来ない他、
資格を持っていない場合、
『外科的手術・注射・麻酔・レントゲン撮影・血圧測定・
 あん摩・マッサージ・指圧・鍼(はり)・灸(きゅう)・接骨・整骨』は禁止です。

また、医師ではないので『すべての問診』はできません。

医師免許または医業類似免許を持たない者(※国家資格を有しない者)が問診を行った場合、
『医師法違反』となります。
(※カイロプラクティックなどの資格は『民間資格』であるため、『医師』に当りません。)

勿論、医業類似系であっても
あはき法によって『施術方法や流派、治療効果があるとされる病名、実績などの広告』は禁止されており、
整体では昭和二十三年四月一日までに開業届を出した者以外は『医業類似行為』は認められてません。
(※広告については『医業の広告規制』で定められてます。)

何故、ここまで厳しいのかというと
『医療関係の勉強を行っていない者及び無資格者が下手にマッサージを行うと
 それにより骨が折れる、心臓発作・麻痺、疾患・病気の悪化などの悪化の危険が高いから』です。

最近ではマッサージ関係の店とかも増えているようですが、
確かにそれを考えると怖いところですよね。
(※最近では有資格者がマッサージを行っている店も増えてきてはいますが例外もあります。)

「骨がズレてる感じ・・・」で整体へ行くのは逆に危険です。

まずは医師と相談し、『柔道整復師』のところへ行くことが正解です。

医師と相談の必要があるのは医業類似行為の関係では『医師の許可』が必要だからです。
(※骨折・脱臼などの処置は緊急を要する以外は『医師の許可』が必要となります。)

また、その治療行為を行ってその行為により悪化させた場合は
『医師免許の剥奪』、『罰金』などがされる可能性は非常に高いかと思われます。

意外と柔道整復師でも縛りが多いんですよね・・・。

柔道整復師でもレントゲン撮影はまだ禁止となってますが、
今年、養成課程のカリキュラムに放射線衛生学などが検討されているようで
この法案が可決された場合は『レントゲン撮影』が可能となります。
(※レントゲン撮影のみであり、診断はできません。)

これができれば、
レントゲン撮影したものを医師に送って判断・・・で施術を行えるのが早くなりそうですね。

結果的に分かりやすくすると・・・
『整体師』は『国家資格無資格の場合、医師・類似医師ではない者の行為』、
『柔道整復師』は『国家資格を有する医業類似行為者』となります。

柔道整復師でも医師までの行為はできない点はありますが、
治療における施術行為ができるのが特徴ですね。

自分もパソコンでのゲーム制作であるためにほとんど座ってて動かないので
腰の歪みなどでよく柔道整復師にお世話になってます・・・(;´・ω・)

 


ツクールMVで大容量ゲームを製作する方法

2018年05月07日 19時30分00秒 | ツクール日記

正直・・・これは応えにくい質問が来てしまいました・・・。

確かに今までのRPGツクール系と違って、
大容量なゲームは作りにくいですよね・・・。

なのに、当ゲームは何故2GBを超えるゲームができているのか・・・?
なんて聞かれてしまいました。

これが実現できる理由は3つあります。

あまり応えたくないものですが・・・ここだけで応えちゃいます。

一つ目はブラウザ用のみでの製作・販売。

利点としては音源規格さえ合わせれば
パソコン・タブレット・スマートフォンすべてで遊戯できることです。

そのために外でも遊戯でき、
出張時はタブレット・スマートフォンで遊戯、
家ではパソコンで遊戯といったことも出来ます。

欠点としてはブラウザで行ってしまうため、
タブレットやスマートフォンによっては
画面が小さい事とタッチペンを推奨となる事、
タッチ操作時に画面の拡大・縮小が発生してしまう事がある事です。

体験版・アプリ用も作らずにブラウザ用の製作で絞ることで
制作側のパソコン内部のデータ負荷も軽減できます。

体験版も作るとなると
それだけデータファイルが5~8必要なところ、
その倍以上必要になってきてしまいます。

そうなるとパソコンのメモリ不足が発生したり、
パソコンの熱量が上がりやすくなってしまいます。

 

もう一つ目はデータ負荷・容量の削減。

一ヵ所ごとに負荷が大きくならないように
競合問題を避けるためにプラグインをあまり用いない方法として
イベント量が少しでも多い場合、
キャラボイス発生用コモンイベント、
アニメーションを発生させる専用のコモンイベントなど、
コモンイベントを利用するなどをしてデータ量を最小限にします。

大きく負荷が掛かる時はそのコモンイベントが読み込まれた時のみになるため、
比較的大きな負荷は最小限に抑えられます。

大容量になるのは確実であるためにBGMと背景などの画像は容量圧縮を行って
データ容量を軽減してます。
(※SEやMEは音声発生の長さが短いため、
  圧縮すると音割れが発生する事もあり、これらの圧縮は行ってません。)

 

もう一つ目・・・最後の内容は意外と重要です。

ある程度のベースができた段階から製作中のデータをコピーして
バックアップデータと個別にデータを作成します。

データの分け方は
『本製作用データ』、『バックアップ用データ』
『アニメーション用データ』、
『コモンイベント用データ(※データ破損対策に2つ用意)』、

『マップ・マップイベント編集用データ(※データ破損対策に2つ用意)』、
『敵設定用(敵キャラ・敵グループ)データ(※RPG製作の場合)』、
『アクター・クラス(職業)・スキル・アイテム・武器・防具設定用データ』、
『プラグイン用データ』と分けて編集を行っていきます。

『バックアップ用データ』は
データ保存中に予期しない形で
データ破損(一部またはすべてのファイルデータが0Byteの状態)が

起こる可能性がある場合を考えて用意しておきます。

あぁ・・・下記の画像は参考としてのサンプルで改変素材などではないので
無許可で勝手に下記画像を利用、公開する行為は禁止です。

アニメーション用データはアニメーションの編集が終わった後に
データを保存して保存後に
アニメーション編集用の『date』ファイルから『Animations.json』データをコピーして
本製作用データの『date』ファイル内に貼り付けをし、データの上書きをします。

同じようにコモンイベントの編集を行った場合は
データ保存後に『date』ファイル内の『CommonEvents.json』をコピーして
貼り付けをします。

プラグイン用データはちょっと厄介で
追加したプラグインを本データへも入れておくことと
プラグイン編集したデータは『plugins.js』へ記録されるため、
編集して保存した後、『js』ファイル内の『plugins.js』をコピーして
本製作用データの『js』ファイル内に貼り付けを行います。

『js』で反応しないで下さいね~?

『js』は『javascript』の略ですからね~?

ちなみに『www』は笑いとかのネット用語とかじゃないですからね~?

プラグインの知識がある方は
メモ帳を使ってプラグインデータを持っていくことですぐに解釈できてしまいますが・・・
プラグインの見方も分からない方も多いですよね・・・。

マップ名の『Map001.json』は
編集時のマップのID001 - マップの設定 と同じデータです。

スイッチ系などの編集データは『date』内の『System.json』で記録されており、
マップ名などの編集データは『date』内の『MapInfos.json』で記録されてます。

他にはアクター(主役・副役キャラ)編集は『Actors.json』、
クラス(職業)編集は『Classes.json』、
アイテムは『Items.json』、
武器編集は『Weapons.json』、
防具編集は『Armors.json』、
敵キャラ編集は『Enemies.json』、
敵グループ編集は『Troops.json』、
スキル編集は『Skills.json』、
ステート(状態異常など)編集は『States.json』、
タイルセット編集は『Tilesets.json』

これを覚えていると個々に編集したデータをコピーして
本データへ上書きしていくことで保存時の破損エラーもほとんどなく、
保存時にエラーが出てもデータが記録されやすくなります。

これを行った場合は本データでの編集はできなくなりますが、
ゲームテストは行うことが可能です。

確かに手間は掛かるけど、
編集時のデータ負荷が大きく掛かりにくく、
大きなプログラムを作れて保存待ち状態なんてのも避けれます。

 

これが3つの大容量ゲームを製作する方法です。

複数人で作業している方であれば、
これにスマホ用の体験版も用意しやすいかとは思います。

自身の場合は背景素材や音声素材など様々な素材提供を頂き、
すべての製作は一人で行っているために
パソコンの負荷を考えて、編集データ量は最大10で抑えております。
(※当ゲーム2GB+バックアップデータ2GB+1/10データ×10(計2GB)
  となるため、6BG以上のデータ+依頼で増やした分の素材容量になります。)

この方法は意外と簡単にできますが、
あまり詰め込み過ぎると自身のパソコンの動作が凄い遅くなります。

大容量ゲームを製作する場合は制作側の負荷が最も大きいために
自身のパソコンとの相談も必要があります。

データ容量を考えると1GBを超えた場合から
仕事用のパソコンとプライベート用のパソコンに分けたり、
パソコンは仕事用として、
プライベートはスマホで遊戯で分けたりするのが一番ですね・・・。

一つのパソコンで
自身のストレス解消に音楽視聴、動画視聴、オフラインゲーム、
ウェブオンラインゲームをするのは難しいところですね・・・。

 


[クイズゲーム東洋医学編] 不具合修正のお知らせ

2018年05月03日 03時45分00秒 | ツクール日記

平素から クイズゲーム 東洋医学編 をご愛顧頂き、
誠にありがとうございます。

この度、「ノーミスクリア回数が一度以降カウントされていない」
不具合につきまして修正が完了致しました。

この度のノーミスクリア回数がカウントされない不具合で
ご迷惑をお掛けした事、お詫び申し上げます。

現在は正常にノーミスクリア回数がカウントされる事を確認しております。

クイズゲーム 東洋医学編 を何卒、宜しくお願い致します。

ShilkAmazezProject


[注意!] 当業務用メールアドレスの悪用について

2018年05月01日 23時00分00秒 | ツクール日記

当メールアドレスは業務以外に用いることはありません!

そのため、メールにて行っている業務
不具合報告時ゲームの更新内容の案内ゲームでのキャンペーンの告知のみとなっており、
それ以外で何件も複数件数送ることは確実にありません!
(依頼しましたデザイナー、声優様には製作の告知を1件行っております。)

こちらでメールアドレスを挙げること自体も危険であるために挙げることはできませんが、
可能性としましては名刺を配った関係先で悪用されたか、
何らかの方法で取得し、そのメールアドレスを悪用した可能性が考えられます。

もし、名刺をお持ちの方で当メールアドレスのものを受信したという方がいらっしゃいましたら、
是非ご報告頂けますと幸いです。

受信したメールアドレスを添付して当メールアドレスへ送って頂きますと幸甚に存じます。

添付中のメールアドレスのIPアドレスを辿り、通報を行わせて頂きます。

この度は利用者の皆様にご迷惑をお掛けし、誠に申し訳ございませんでした。

早急に調査をし、警察への届出を行わせて頂きます。


おならの問題・・・色々と現代病が多いようですね・・・(´・ω・`)

2018年05月01日 05時00分00秒 | ツクール日記

今の若者に多いファーストフード過多や食の欧米化・・・
これにより、
「おならが臭う!!」、「おならが止まらない!!」、
「便秘気味!!」、「腹痛が多い!!」、「薬飲んでもおならが・・・!!」

なんて悲鳴が挙がってたりしているようです。

確かに・・・最近は野菜の高騰もあって、
肉のがお値打ちだと肉中心になりがちな部分もありますよね・・・(´・ω・`)

薬は確かに腸のガスを止める・・・なんて薬もありますが、効果は一時的ですね・・・(´・ω・`)

当ゲーム(クイズゲーム 東洋医学編)利用者からも多く寄せられる問題ですね・・・(´・ω・`)

一部の場所ではその悩みに応えたりもしてますが・・・
同じ悩みの方も多そうなので今回は「おなら過多・強臭」について挙げます。

そもそも、おならの過多・強臭は
心因性ストレス性腸過敏性症候群か腸の消化不良性腸過敏性症候群が考えられます。

ストレスでは
学校での環境や社会環境、不安になりがちな環境などでのストレスで起こることがあります。

睡眠不足や睡眠の黄金時間で十分な睡眠を得ないことで
身体に負荷が掛かるのもストレスの原因と考えられます。

腸の消化不良性腸過敏性症候群では
ファーストフードや菓子類、肉類、卵類、乳製品を過剰に摂取することで
お腹に腐敗性ガスを生成してしまいます。

「何が原因か?」といえば、『動物性タンパク質』が原因となります。

改善する方法としましては『食物繊維の摂取』です。

食物繊維は一般的に『根菜類』が多く含まれており、
食物繊維は胃腸を整え、消化を助けるとともに便秘を改善します。

食物繊維で野菜、根菜、豆類では
ゴボウ、サトイモ、サツマイモ、ヤマイモ、納豆、ニンジン、パセリ、ホウレンソウ、
コリアンダー(パクチー)、ゴマ、葛(クズ)、デーツ(ナツメ)、ローズマリー、
ブロッコリー、モロヘイヤ、シュンギク、キャベツ、シソ、コマツナ、カボチャ、レンコンなど。

魚ではサケやタイ、青魚類などで
ブリは脂肪が多いために胃腸虚弱の方にはお勧めできません。

果物ではミカン、モモ、リンゴ・・・
ただし、リンゴは消化不良や下痢にお勧めですが、
多食はガスが溜まりやすいので注意が必要です。

腹痛、慢性の下痢、食欲不振がある場合は
ウメの摂取がお勧めです。

これで浮かぶ料理は
『キムチ納豆』、『レンコンとゴボウのきんぴら』、『鶏のウメシソ揚げ』、
『根菜パスタ パセリ添え』、『イワシ・アジ・サバの魚肉ハンバーグ』、
『魚と野菜の鍋料理』、『フルーツポンチ』、『サンマの塩焼き』、
『サンマのカレー焼き(タンドリーサンマ)』、『参鶏湯』、
『グリーンサラダ』、『野菜炒め』、『青魚の香草焼き』、
『山芋とシソの梅干し和え』、『パンプキンスープ』、『カボチャの煮つけ』、
『ホウレンソウのゴマ和え』、『葛湯』、『葛餅』などなど・・・。

個人的には『参鶏湯(サムゲタン)』や『鍋料理』などがお勧めです。

『胃腸には夏でも温かい状態のものを摂取して身体を温めることも大事』ですからね。

ラーメンを食べるなら、根菜など野菜マシマシで!!

野菜ミックスだと手軽に購入できて多くの種類の野菜を摂取できます。

手軽な方法だと野菜ジュース!!

これでもあまり改善しない方は漢方薬では『葛根湯』!!

『葛根』とあるように『葛(クズ)』が含まれています。

冷え性・花粉症などのアレルギー症状・胃腸改善が期待できます。

まとめると・・・適切な睡眠と食生活が大事です!!(`・ω・´)

暑くなってきたからって、冷たいものの摂取もできるだけ控えようね!!(`・ω・´)

という訳で、東洋医学・薬膳・漢方による身体の考え方になります。
(ここまでお読み頂き、お疲れ様でした!m(__)m )