このブログ内を検索可能

2021年12月28日火曜日

ドラクエ8 敵変更コード


 2005年ころ、2013年ころ、2015年ころと3回もDQ8をPS2と3DS版でやりこんだ我は、現在DQ8を骨の髄まで楽しむべく、改造コードによる遊びを行っている。わざわざ再び(4回目)DQ8を遊ぶためにソフトがどこかに行っていたので480円で購入してきた。

中でも敵変更コードは自分の好きなグループを編成できるなかなか面白いコードであるが、残念ながらネットを探してみてもあまり敵のコードに関する情報はないし、2グループ以降の編成についてもそこまで詳しく載っていない。そこで我はバイナリエディタから敵グループ編成時の特徴を読み取り、それを改造コードにより変更できるようにした。

なおこの改造コードはPAR(プロアクションリプレイ。我も10年くらい前にこれが大好きでマリオカート等の改造を非常に楽しんでいた)ではなくPSCX2用であることに注意。マリオカートなどでB217AD98という数値の列にぴんと来た人はかなり改造コード好きとみえる)

敵変更コードを複数グループに適用するには、どうもグループの個数を指定する変数も必要らしい。それは00453B00に格納されている。なのでここをいじる必要があるのだが、どこのサイトにもそのようなことは載っていなかった。なのでここで同志のために共有しておこうと思う。つまりは以下のように改造コードを作ればいい。

//出現グループ数指定

patch=1,EE,00453B00,extended,0000000m

//1グループ目IDと出現数

patch=1,EE,10453B04,extended,00000xxx

patch=1,EE,00453B08,extended,0000000n

//2グループ目IDと出現数

patch=1,EE,10453B0C,extended,00000xxx

patch=1,EE,00453B10,extended,0000000n

//3グループ目IDと出現数

patch=1,EE,10453B14,extended,00000xxx

patch=1,EE,00453B18,extended,0000000n

//4グループ目IDと出現数

patch=1,EE,10453B1C,extended,00000xxx

patch=1,EE,00453B20,extended,0000000n

ここでmは出現するグループの数(敵総数ではない)で4が最大。5以上はだめらしい。xxxは敵固有のIDで後述。nは出現匹数。多くの場合、処理は重くなるが合計で12体まで出すことができる。ただしバベルボブルやオセアーノンなどは2体までしか出せなかった。

しかし多くのボスモンスターは処理落ちこそするものの、8体くらいは普通に出せるようである。すると巨竜オールスターズをやってみたくなるが、最大4グループなので残念ながらできない。

さて、xxxは敵固有のIDを表しており、暗号化状態ではそのリストがネット上にちらほら掲載されているが復号化状態ではIDリストがなかったので我が独自で500個近く調べ上げたものを提供する。疲れた

あと00453~でなく10453~なのは確かめてみると下3桁目が00453~では反映されなかった。10453~だと16進数上での3桁以上を規定できるらしいが2日前からこのゲームの改造コードに手を出した我にそのような理由がわかるはずもない

60 (空白)

61 (空白)

62 (空白)

63 (空白)

64 アークデーモン

65 スライム

66 スライムナイト

67 キングスライム

68 キメラ

69 キラーマシン

6A ばくだん岩

6B ゴーレム

6C はぐれメタル

6D おばけきのこ

6E ボストロール

6F ドルイド

70 ダンビラムーチョ

71 ホイミスライム

72 死霊の騎士

73 ドラキー

74 おどるほうせき

75 マドハンド

76 おおきづち

77 オーク

78 おおめだま

79 パペットマン

7A ひとくいばこ

7B ベビーサタン

7C くさった死体

7D ホークマン

7E さまようよろい

7F バーサーカー

80 くびかりぞく

81 じんめんじゅ

82 アルミラージ

83 ギガンテス

84 どろにんぎょう

85 タホドラキー

86 ドラキーマ

87 あばれうしどり

88 ジャイアントバット

89 大王イカ

8A ミイラ男

8B レッサーデーモン

8C マーマン

8D エリミネーター

8E いたずらもぐら

8F ごろつき

90 デスストーカー

91 リップス

92 ヘルコンドル

93 ヘルホーネット

94 デスファレーナ

95 マルク(討伐後フリーズ)

96 ポルク(討伐後フリーズ)

97 メタルスライム

98 かくとうパンサー

99 ハエ男

9A うごくせきぞう

9B ボーンファイター

9C (空白)

9D しにがみきぞく

9E おおさそり

9F エビルスピリッツ

A0 エビラ

A1 サイレス

A2 ザバン

A3 バトルレックス

A4 ダースウルフェン

A5 スカルライダー

A6 フレイム

A7 キラーパンサー

A8 スライム

A9 メラゴースト

AA ホロゴースト

AB ヘルダイバー

AC シャドー

AD あやしいかげ

AE オセアーノン(2体まで)

AF リリパット

B0 ヘルパイレーツ

B1 オクトセントリー

B2 おおうつぼ

B3 なげきの亡霊

B4 ドンモグーラ

B5 メタルキング

B6 スライムベス

B7 ギャオース

B8 バブルスライム

B9 メタルライダー

BA ベリアル

BB メタルハンター

BC スライムベホマズン

BD メイジキメラ

BE メガザルロック

BF ゴールドマン

C0 ストーンマン

C1 キングムーチョ

C2 ベホマスライム

C3 しびれくらげ

C4 トロルキング

C5 トロル

C6 きめんどうし

C7 げんじゅつし

C8 マタンゴ

C9 マージマタンゴ

CA わらいぶくろ

CB 影の騎士

CC がいこつ

CD ブラッドハンド

CE ブラウニー

CF オークキング

D0 スペクテット

D1 ミニデーモン

D2 パンドラボックス

D3 ミミック

D4 どくどくゾンビ

D5 グール

D6 ガーゴイル

D7 じごくのよろい

D8 キラーアーマー

D9 トラップボックス

DA (空白)

DB ウドラー

DC いっかくウサギ

DD サイクロプス

DE ブルホーク

DF アークバッファロー

E0 (空白)

E1 キングマーマン

E2 マミー

E3 夜の帝王

E4 サンダーサタン

E5 ホラーウォーカー

E6 (空白)

E7 クラーゴン

E8 キラースコップ

E9 ブチュチュンバ

EA マジックリップス

EB ガルーダ

EC ごくらくちょう

ED ポイズンキラー

EE マッドロブスター

EF ボーンナイト

F0 キラーモス

F1 デビルパピヨン

F2 マッスルアニマル

F3 マヒャドフライ

F4 ベルザブル

F5 だいまじん

F6 鉄のさそり

F7 しのサソリ

F8 ヘルクラッシャー

F9 エビルホーク

FA ドラゴンソルジャー

FB エビルドライブ

FC ブリザード

FD マリンギャング

FE どくやずきん

FF アローインプ

100 さまようたましい

101 フェイスボール

102 アルゴリザード

103 リザードファッツ

104 プークプック

105 リンリン

106 ポグフィッシュ

107 コングヘッド

108 レッドオーガ

109 ブルファング

10A 海竜

10B ドルマゲス(中央)

10C びっくりサタン

10D バードファイター

10E (空白)

10F しましまキャット

110 くしざしツインズ

111 メタッピー

112 スキッパー

113 かぶとこぞう

114 サーベルきつね

115 プリズニャン

116 じんめんガエル

117 ワンダーフール

118 デンデン竜

119 ナイトウォーカー

11A コサックシープ

11B ガチャコッコ

11C サイコロン

11D パペットこぞう

11E ナイトフォックス

11F パプリカン

120 シャイニング

121 ウィッチレディ

122 ノックヒップ

123 バベルボブル(2体まで)

124 イーブルアイズ

125 ベロニャーゴ

126 マッスルウータン

127 いばらドラゴン

128 ぼうれい剣士

129 マッドドッグ

12A タップデビル

12B フラワーゾンビ

12C マペットマン

12D アーマービートル

12E レッドテイル

12F バロンジャッカル

130 ランドゲーロ

131 マージリンリン

132 なぞの神官

133 笛吹き羊男

134 モビルフォース(2体まで)

135 アイアンクック

136 ドールマスター

137 ソードファントム

138 ジャンバラヤン

139 樹氷の竜

13A 吹雪の魔女

13B スノーエイプ

13C アイアンダッシュ

13D アイスビックル

13E ドラゴンバゲージ

13F デスターキー

140 スケアフレイル

141 闇の司祭

142 アイスチャイム

143 ワニバーン

144 ゲロンガー

145 ダイス・ド・デビル

146 ドラゴンブッシュ

147 バッファロン

148 モヒカント

149 スピンサタン

14A ボボンガー

14B デュラハーン

14C グリゴンダンス

14D キングミミック

14E チキンドラゴ

14F デスプリースト

150 クロコダイモス

151 ケムンクルス

152 ダークデーブル

153 グレートジンガー(2体まで)

154 ワイトキング

155 ダークナイト

156 (空白)

157 ヘルプラネット

158 ブラックルーン

159 ヘルガーディアン

15A ビッグファング

15B プチアーノン

15C シーメーダ

15D さつじんイカリ

15E わかめ王子

15F マリンフェアリー

160 だいおうキッズ

161 ピッグマリオン

162 デッドアンカー

163 デスセイレス

164 クローハンズ

165 へドロイド

166 オーシャンクロー

167 バル

168 ベル

169 ボル

16A ブル

16B モビルヘッド

16C モビルボディ

16D モビルライト

16E モビルレフト

16F オーラー

170 フーラー

171 ソーラー

172 ドーラー

173 プチアーノン

174 しびれくらげ

175 シーメーダ

176 わかめ王子

177 スライム

178 ブラッドマミー

179 スライムダーク

17A あんこくちょう

17B まかいじゅ

17C スライムダーク

17D シャドー

17E 影の騎士

17F あんこくちょう

180 まかいじゅ

181 デスターキー

182 闇の司祭

183 スケアフレイル

184 ブラックモス

185 スピンサタン

186 ダークジャミラ

187 クロコダイモス

188 シャドウパンサー

189 暗黒の使い

18A くしざしツインズ

18B ニガニガー

18C じんめんガエル(裏)

18D ランドゲーロ(裏)

18E ゲロンガー(裏)

18F おおめだま(本気)

190 おおめだま(本気)

191 コサックシープ(本気)

192 マージリンリンLv5

193 アイスチャイムLv5

194 ダイス・ド・デビル(本気)

195 死霊の騎士

196 グール

197 さつじんイカリ(本気)

198 モビルヘッド

199 ドルマゲス(第2形態)

19A ドルマゲス(第2形態)

19B 魔犬レオパルド

19C おおきづち(滝の洞窟)

19D マルチェロ

19E 海竜

19F アルゴングレート

1A0 ドルマゲス(周囲)

1A1 (空白)

1A2 モグラの子分

1A3 呪われしゼシカ

1A4 呪われしゼシカ

1A5 ダースウルフェン

1A6 キャプテン・クロウ

1A7 レティス

1A8 妖魔ゲモン

1A9 魔犬レオパルド

1AA マルチェロ

1AB ドルマゲス(周囲)

1AC 大王イカ

1AD ボストロール

1AE 暗黒神ラプソーン(第1形態)

1AF 暗黒神ラプソーン(第1形態)

1B0 暗黒神ラプソーン(第1形態)

1B1 暗黒の使い

1B2 フレイム

1B3 主人公像

1B4 ヤンガス像

1B5 ゼシカ像

1B6 ククール像

1B7 シャークマジュ

1B8 暗黒の魔人(1体まで)

1B9 暗黒神ラプソーン(第2形態無敵)

1BA 暗黒神ラプソーン(第2形態)

1BB 暗黒神ラプソーン(第2形態通常)

1BC 暗黒神ラプソーン(第2形態)

1BD 暗黒神ラプソーン(第2形態)

1BE 暗黒神ラプソーン(第2形態)

1BF 竜神王(竜)

1C0 竜神王(竜)

1C1 竜神王(人)

1C2 竜神王(人)

1C3 竜神王(人)

1C4 深紅の巨竜

1C5 深紅の巨竜

1C6 ドルマゲス(第1形態)

1C7 ドルマゲス(第2形態)

1C8 スライム

1C9 深緑の巨竜

1CA 深緑の巨竜

1CB 深緑の巨竜

1CC 白銀の巨竜

1CD 白銀の巨竜

1CE 白銀の巨竜

1CF 黄金の巨竜

1D0 黄金の巨竜

1D1 黄金の巨竜

1D2 黒鉄の巨竜

1D3 黒鉄の巨竜

1D4 黒鉄の巨竜

1D5 聖なる巨竜

1D6 聖なる巨竜

1D7 聖なる巨竜

1D8 聖なる巨竜

1D9 深緑の巨竜

1DA 深緑の巨竜

1DB 白銀の巨竜

1DC 白銀の巨竜

1DD 白銀の巨竜

1DE 黄金の巨竜

1DF 黄金の巨竜

1E0 黄金の巨竜

1E1 黒鉄の巨竜

1E2 黒鉄の巨竜

1E3 黒鉄の巨竜

1E4 聖なる巨竜

1E5 聖なる巨竜

1E6 聖なる巨竜

1E7 永遠の巨竜

1E8 永遠の巨竜

1E9 永遠の巨竜

1EA シャドー

1EB 深紅の巨竜

1EC 深紅の巨竜

1ED レッドオーガ

1EE ブルファング

1EF (空白)

1F0 (空白)

1F1 (空白)

1F2 (空白)

1F3 (空白)

1F4 エース・スライム(スライム)

1F5 ギャング・スライム(スライム)

1F6 ブルーシティボーイ(スライム)

1F7 ダッシュ・メタぞう(メタルスライム)

1F8 みんなのアイドル(ホイミスライム)

1F9 回復エンジェル(ベホマスライム)

1FA マッハ・はぐりん(はぐれメタル)

1FB 愛の戦士ピエール(スライムナイト)

1FC キング・ゆうぼん(キングスライム)

1FD ほほえみメタル(メタルキング)

1FE 魔獣ドランゴ(バトルレックス)

1FF 竜商人でんすけ(デンデン竜)

200 野生のヤリ名人(オークキング)

201 秘境の怪力ザル(コングヘッド)

202 破壊神だんきち(ダンビラムーチョ)

203 愛をかなでし牧神(笛吹き羊男)

204 夜の帝王リッチー(夜の帝王)

205 最強バッファロー(バッファロン)

206 マッスルモヒカン(モヒカント)

207 ミャケでございます(プリズニャン)

208 舌きりマシーン(メタッピー)

209 パワフル・ドラキー(ドラキー)

20A 幸せの黒い鳥(ドラキー)

20B 闇のコンダクター(ドラキー)

20C 魔の森の支配者(じんめんじゅ)

20D 極悪デーモン(アークデーモン)

20E アローチャンピオン(アローインプ)

20F どくどくエンジェル(どくやずきん)

210 不屈のスナイパー(リリパット)

211 愛の国から来た女(ウィッチレディ)

212 地獄の番人ギーガ(ギガンテス)

213 あらくれギガンテス(ギガンテス)

214 青鬼サイップ(サイクロプス)

215 ふとっちょ天使(ボストロール)

216 夜の世界の案内人(ぼうれい剣士)

217 地獄のベテラン選手(くさった死体)

218 死霊のホースマン(しにがみきぞく)

219 レーシングヒーロー(スカルライダー)

21A よみがえる最古の敵(がいこつ)

21B ウェポン・マスター(ヘルクラッシャー)

21C キラキラスパーク(おどる宝石)

21D 怒れる神の像(うごくせきぞう)

21E 機械兵ロビン(キラーマシン)

21F 殺人差シーン(キラーマシン)

220 キラーテクニシャン(キラーマシン)

221 ミスター・ゴールド(ゴールドマン)

222 怪力ゴレムス(ゴーレム)

223 魔人像ユーガ(ストーンマン)

224 氷の化身ブリザド(ブリザード)

225 凍える魂まっつん(ブリザード)

226 炎の化身フレイン(フレイム)

227 燃える魂いっつん(フレイム)

228 あやつりヨシキィ(パペットマン)

229 エデンの人形使い(ドールマスター)

22A 水陸両用マッチョ(オーシャンクロー)

22B 夜のパンツマスク(エリミネーター)

22C ロンリージョー(さまようよろい)

22D ジャングルスター(バーサーカー)

22E エビぞりドランカー(エビラ)

22F とれとれチビチビ(プチアーノン)

230 天国の千両役者(ヘルパイレーツ)

231 ミスター海の幸(わかめ王子)

232 あばれんボーイ(あばれうしどり)

233 山のテンション王(ブラウニー)

234 見返りデビル(レッドテイル)

235 魔鳥ウコッケ(チキンドラゴ)

236 大自然の格闘王(かくとうパンサー)

237 パワーボンバー(デュラハーン)

238 マジックマスター(デスプリースト)

239 ジャンボ飛びトカゲ(リザードファッツ)

23A 魔空の王者ホークル(エビルホーク)

23B じごくの殺し屋(キラーパンサー)

23C 食いしんボックス(ひとくいばこ)

23D 砂丘の殺し屋(おおさそり)

23E けらけらマオール(わらいぶくろ)

23F もぐら小隊長(キラースコップ)

240 いやし姫マリン(マリンフェアリー)

241 (空白)

242 (空白)

243 (空白)

244 (空白)

これでもういろいろなモンスターを出し放題である。ただし、フィールドで召喚した場合、改造コードの寄与していない部分にはnaturalなグループが乱入してくることに注意。すると12体設定をしていると2グループ目に別モンスターが乱入(1グループ設定にしていると2グループ目は戦闘開始時に書き換えられないので12+n編成になりフリーズ)してしまう。







2021年12月17日金曜日

今後の予定2

 とうとう英語と発生学と終えることができたので、いよいよ今日はTOEFLだが冬休みが発生することになる。ということでデュエルドリームのビンゴ最適解配置を考えてみようかと考えている。

最適解配置といっても、アニマと違う部分としては残り3球時点での最適解を求めるということではないということである。最初にSPがどれくらい入ったかで、後半戦でSPの入る個数が変わり、それにより残り級数も変わる。ということは、3球の場合もあれば4球の場合もあり、極端な場合は公判が6球になる場合もある。そしてそれらの入賞確率は均等ではない。

例えば3球になるパターンとしては

前半SP3個→後半0個、前半SP2個→後半SP1個、…と4パターンが考えられ、

1つ目だと28球の中で25球を選ぶので反復試行の28C25(25/28)^25(3/28)^3となる。後半はSP0個は確定なので確率1なので積をとり28C25(25/28)^25(3/28)^3

ただしこれだといろいろ面倒なので、配列{1,2,3,4…,25,0,0,0}を作ることにし、

これを並べることを考える。具体的にはまずは適当に並び替えたものから8球取り出す。

{1,2,3,0,8,9,0,12,…}だと仮定すると、この配列には0が2つ含まれる。つまりSP2個INなのでさらに後半4つを結合。{1,2,3,0,8,9,0,12,13,14,15,0}ここでも0の判定を行い、例として0があるので2つ延長。{1,2,3,0,8,9,0,12,13,14,15,0,16,17}となり、結局数字としては11球抽選されたことになる。SP含めて14球。

そしてこれを{1,2,3,…,25,0,0,0}を並び替えて得られるすべての順列に適用し、上記のパターンに沿って得られた8,9,10,11個の要素を持つ順列に並び替える。

しかしあっているかどうかが分からないのでその指標として先ほど考えた配列が8個になるパターンはSPを引かないときなので25C8(=25*24*23*…18)パターンという風にして考えていく。これと、配列要素8個の数が一致すればおそらくプログラムはうまくいっているというそこそこ強い必要条件になるであろう。

今思いついたプログラムのため、非効率な部分があると思われるが、この操作は1階だけなのでそこまで時間はかからないと思われる。次の記事ではそれを実際にやっていく。

しかしTOEFLがあるのでまた今度。


2021年12月8日水曜日

今後の予定

 デュエルドリームのビンゴの最適解探索であるが、現在テスト期間中で余裕がない。具体的には英語の試験が2つと発生学の試験があるため、これは厳しい。

しかしそれが終わればものすごく久しぶりのテストから解放された自由期間となる。そこでこのデュエルドリームビンゴ最適解作戦を実行する。あ、もちろん実機でやるわけではない。もう二度とこれらのゲームはやらないように9年くらいやり続けたすべてのデータをとっくに捨てたので。

あくまでビンゴというゲームは最適に配置した場合、勝てるカードがあるのかどうかということや最適解を探索することである。あとスーパーデュエルビンゴなどもこれに伴って勝利率を求められるのでそれもやっていく。

早くPCを長時間稼働させてまだ見ぬ未踏の地へ足を踏み入れたくなっている。もはやアプリ制作をしている時間すらない…。

2021年12月5日日曜日

デュエルドリームのビンゴ最適配置について

まだ忙しい、というか今後何年も忙しいのが続きそうだが、デュエルドリーム(こちらももうeパスを廃棄して以来数か月まったくやっていないし、今後もやるつもりはない)のビンゴ最適配置やPO率の情報がまだないので、順次作っていこうかと考えている。

例えば赤をHITマス、オレンジをFREEへのHITマス、黄色をFREE、ピンクを未HITのつながりマスなどと考える。5球終了時点でこのようになっていた場合、どのように最適解を配置すべきか。この段階で配置可能なパターンは、記憶によると既にHITしたマスにはFREEは配置できなかったような気がする(定かではない)ので、それによると残り18マスで、ピンクはつながりなので16マス。この16マスの中からFREE2個(オレンジが2個なので)を配置するとなり、16C2=120パターンの配置をそれぞれ実施し、残り3球~6球について全パターンを調べていく必要がある。その全パターンは、SPを1つ含む場合は9つの数字の並び、2つでは10個、3つでは11個とすればよい。そこでシンキングタイムにおいてはSPの個数を考慮した配置順列で区切り、それらをビンゴへのHIT判定とするなどのかなりの工夫が必要と見て取れる。

よってこれは1日などでは絶対にできないことが予想されるので、冬休みなどに余裕のある時に進めていきたいと考えている。

2021年11月11日木曜日

ファンシーフラワーPO率計算プログラム

まずはそれぞれ水が出た場合、芽が出た場合において適切に処理 
あとは各マスに入った場合、どのように水と芽を入れるかを定義し、
最後はいつも通りのグループ分けである。
mathematica上でのグループ分け操作は初めてであったが、
以前我はすでにチェーンボンバー、アニマドロップを演出付きで再現しているのでもう慣れていた。

たぶんこれでプログラムはあっているはずだが…?
とりあえず動画で実際に起きたパターンでうまくいっているかをチェックするか…?


 

ファンシーフラワーPO率速報

11月11日現在

一応PO率がすでに我のプログラミングにより出したのでとりあえずの結果が知りたい場合は参照してほしい。それぞれ短時間ではあるが100000回試行している。なので全獲り率についてはぶれがあるとみられるので回数表記している。収束値の動向を見ると%の一の位値くらいまではほとんど誤差がないと期待できる。

例えば芽1個は59.6%だが2回目の100000回の試行を行うと58.8%となったので1%くらいの誤差はある。

芽1個 59.6% 全消し122回

芽2個 78.6% 全消し102回

芽3個 103.6% 全消し119回

芽4個 134.2% 全消し92回

青(芽1個)、黄色(芽2個)、緑(芽3個)、赤(芽4個)の確率分布であり、

横軸はリンク数を表している(倍率ではない)ここで注意したいのが、7個以上で配当があるということ。つまりそこそこの数が5以下に固まっている芽1個はかなり具合が悪いということになる。

つまり初期の芽の数がハッピーフラワーより影響を与える、すなわち内部依存性の強いゲームとなるわけである。

結論

芽3個以上で増える

芽2個以下では増えないどころか1個では大幅減。

具体的にはビンゴガーデンの最低配置と変わらない程度で、ハニー系のPO率を下回る。

全消し率があまり変わらないのは全消しのためにはラッキーナンバーへのHITが必要で、初期芽はそのマスに発生しないことが体験的にわかっているからである。

ちなみにハッピーフラワーのPO率はこれも我が過去プログラミングしたもので

芽1個 62.8%
芽2個 76.7%
芽3個 93.1%
芽4個 113.2%

なのでハッピーフラワーより大まかに言うとちょっと増えやすいのだが、
芽1個が出てばかりだとハッピーフラワーより悪い性能となる。

2021年11月10日水曜日

ファンシーフラワー解析

 さていよいよプログラムを組んでいく。

まずとりあえず番号付けをする。わかりやすく、ラッキーマスを1、横の列を2,3,4,5、縦の列を6,7,8,9としてマスを10~25に割り振る。

抽選される8球は、全部対等なので同じ動作をするだけで良い。よってうまく種まくor水やりに応じて場合分けができればゴールはもう見える。

まずは2,3,4,5,6,7,8,9に入った場合、つまり水やりの場合である。

例えば2ならば上部分4マスに水やり処理を適用するのだが…。

花がすでに咲いていればその花の数をプラス1する。

花が咲いていない場合、芽があればその数を花とする。

芽がない場合は水でマスを「濡らす」ことになる。

なお濡らす効果の重複はない。つまり縦と横の水やりで交わったところは一気に芽が1個から花が2個、ということはない。となると濡れたかどうかのフラグは0または1で事足りそうである。

ラッキーの1の場合についても同じことを繰り返すだけである。

なお番号は25個割り振られているため、外れのマスは存在しない。よってラッキーで追加の芽も発生しない。


次は芽まきである。

もし芽をまいた個所に水がまかれていればそれは直ちに花となる。

水がまかれていなければ現時点での芽の数にプラス1する。


おそらくこれで基本的な動作…ができていることになるはず。

となると残りはフラワーの最大個数判定となるが、とりあえずここまでやりたい。

ファンシーフラワーの理論最大個数はいくつか

 先ほどのルールに則ると、とりあえず最初4球はラッキーナンバーのHITでよいだろう。そして残り4球でラッキーマスと横、縦列の水やりがなされると考える。

初期の芽の最大数は動画を見るに4個である。

ということはあるマスに芽がある場合、ラッキーからの芽と自身の芽で芽は3個になり、ラッキーと水やりの考査で花の個数が5個になるような気がするのだがそういうことは起こるのだろうか…。まあシミュレーションでは花は5個をとりうることにする。

そうすると初期4球で芽は20個。5球目で20個の花。6球目で24個の花。7球目で28個の花。8球目で32個目の花。…あれこれ33個以上行かない…?

配当は動画を確認すると以下。わからない部分もあるがおそらくこうである。

7個 0.2倍

8個 0.4倍

9個 0.6倍

10個 0.8倍

11個 1倍

12個 1.5倍

13個 2倍

14個 2.5倍

15個 3倍

16個 3.5倍

17個 4倍

18個 5倍

19個 6倍

20個 7.5倍

21個 9倍

22個 11倍

23個 13倍

24個 15倍

25個 18倍

26個 21倍

27個 24倍

28個 28倍

29個 32倍

30個 36倍

31個 40倍

32個 45倍

33個 50倍

34個 55倍

35個 60倍

36個 65倍

全獲り 30倍


アニマロッタ6 ファンシーフラワーについて

 アニマと完全に決別してからはや2か月。当然データを自ら廃棄したので戻ることもないし、もう一からやりたいなど思うはずもない。ということで今後も一生アニマはやらないのであるが、せっかくアニマロッタの新ゲームが出現したのでそれが本当に儲かるのかシミュレーションしてみようということになった。

すでにムーンライトやサンシャインは別の人物の手によってシミュレーションがなされている。なおその人と我は一切かかわりがないことは一応述べておく。

我も別個にこれらのゲームのシミュレートをしてもよいが結構簡単にできそうなのでもういいか…そもそももうアニマをやらないわけやし…ということでやめた。


しかしこのファンシーフラワーは今日告知されたので、まだ情報は出回っていない。

ならば我がちょっとシミュレーションで遊んでみよう、ということになった。ハッピーフラワーならすでに高校生の段階で再現しているからである。


そのためにはまずはゲームの性質を探る必要がある。

番号のあるマスにHITすればそこのマスに芽が発生し、

ラッキーマス⇒一列に発生するのはハッピーフラワーと同じ。

ただしすべてのゲームにおいて芽発生+水やりの効果が付与する。

しかしながら獲得個数はトゥインクルリンクのようにリンクしたグループの最大値であるという点。つまりその面の花の数の総合ではないということである。

せっかくなので図で説明する。

1~4行目に番号が奥から順に1,2,3,4

1~4列目に番号が左から順に5,6,7,8

ラッキー水やりマスが9

他のマスが左上から10,11,…25となっているとする。つまり以下

例えば1球目で3がHITすれば12,16,20,24のマスに水がまかれ、これは永続する。
ただし当たり前だが芽がなければ意味がない。
2球目で15に入ると、14,15,16,17のマスに芽が発生する。そして先ほど16のマスには水がまかれたのでその時点で直ちに花となる。
そして花となったところにさらに芽がまかれたり、水がまかれると花の数が増える。
こういった感じで花が咲いていき、あとは花の数え方はトゥインクルリンクと同じ。

という感じのゲームである。


2021年10月12日火曜日

全パターン解析

 下記のようにエクセルに各FREEのデータを打ち込むことに成功。

これでこれを再入力し、すぐにmathematica上でデータを削る。

具体的には最適解データと結合し、ラベル付けされた最初の数字(順序)を消去などする。

学校の友達(クラス代表なので信頼できる)より提案されたswiftというものを使ってみようかと考えている。

ただ当方、スマホアプリの制作は経験がないのであまりできる気がしないが…。

そもそも実は我、ゲーム関係のスマホアプリを実際に使用したことがない。パズドラやドラクエ関係のスマホゲーム、その他いろいろスマホゲームはあふれかえっているが、どれもこれもガチャ誘導しようとするのはわかっているのでプレイしないことが最善の策だと考えている。

なぜ我がこのような考えに至ったかは、このブログの最初の方を見れば明らかにわかると思うが、ブラウザゲームのモンパレのガチャに熱中していたからである。これはすでにサービス終了し、何も手元に残っていない。しかしこの経験であれ以降一切ガチャに手を出していないし、今後もフリーにお金が数百万とか数千万とか有り余るほどなければするつもりはない。いやそれでもやはり最後に何も残らないのはよく考えてみればつらい。

別にガチャをすることを否定しているわけではないが。


2021年9月29日水曜日

FREE3個時PO率解析修正

FREE3個の場合で最適解を変更しなければならないかもしれないパターンは一体どれなのか考える。{2,4,3,6,8,11,13,15,18,20,23}{5,17,3,6,8,11,13,15,18,20,23}{9,21,3,6,8,11,13,15,18,20,23}{22,24,3,6,8,11,13,15,18,20,23}のいずれかの集合に、8球分のパターン「+」3回分のFREEが一致していればよい。

なお上にあげた4パターンは、田の字型の3個ライン6つに、あとは可能な残り1ラインが4パターンあるので、4つの集合となっている。

最初の{2,4,3,6,8,11,13,15,18,20,23}で考えてみる。FREE3個を任意に配置できる、という条件より、この11個の要素の中から5個の要素が2nd終了までに入れば、一応可能性としては、残り6個の要素にシンキングでFREEを3つかぶせて、その後確率1/1140で残り3つを当てることができる。このわずか少しの変化でも最適解が変わる可能性がある。

さて、11C5=462通りであり、これが4パターンあるのでおよそ1800通りとなるが、その中にはかぶりがある。2つ目の集合の場合{3,6,8,11,13}などはすでに1つ目の集合で計算されている。よって、2~4つ目の集合において、各集合の部分集合であるという条件に加え、{3,6,8,11,13,15,18,20,23}の部分集合であってはならないという制約が課される。

ここで議論していても実感がわかないと思うので、実際にプログラムを組んでみたほうが良いだろう。

If内は先ほどの通り、修正される可能性のあるiを特定している。プログラムの簡略化上、上記制約条件と少々異なるものにしておいた。

for(j部分)は、普通に全フリーパターンを探索している。
一応工夫として、例えばFREE3個の時、もし8球分とFREEの配置したマスの和集合をとって10個の要素になれば、かぶりはないものとしてオッズアップはない。しかし9個になれば、どこかで1マスかぶっておりこれが虹バルーンとなっている。よって最終オッズに2を掛ける必要がある。またこの和集合の長さはFREE配置個数に依存するため、上記プログラムでもkosuuという変数によってその乗算具合がちがうのがみてとれる。
例えばFREE4個で和集合が8ならば、本来は12個分あるはず、ということで3個のかぶり、すなわち5倍のオッズアップ。プログラムを見てみると、Lengthが9の場合、kosuu+1となっており、ちゃんと5倍と扱われているのがわかる。
なおすでに各8,9,10,11,12マス配置の場合の基本配当データはすでに先に計算させてある、記憶によるとこれだけでも1000万個のデータを持つ。

余談だが、実際に修正すべきパターンがいくつあるかを計算すると…。
上のプログラムで、if内にcount+=1を投入して直ちに1470通りとわかった。
なお実はこれ、中学や高校でよくある問題としても帰着できる。
各4つの集合において、11C5=462パターン存在するが、その中で固定9個から5個を選ぶというパターンは全部において共通である。これは9C5=126。
つまり、各要素においてこの9個から5個を選ぶもの以外という独自の要素が、462-126=336通りあることになる。よって全体としては、和集合をとるわけなので、
4つの集合に共通の1個(=126)と、残り336通りが4つで、126+336*4=1470となり、
プログラムの計算に一致する。

とりあえずこれで53130通りが1470通りに抑えられるので楽。
なお回転移動などで一致する奴は、今回はややこしくなるのでなしにしている。


2021年9月28日火曜日

3個ライン7個成立に関する修正点

 以前我はアニマロッタの掲示板にて、3個ラインが成立したときの倍率について、1個→0倍、2個→1倍、3個→2.5倍、4個→7倍、5個→15倍、6個→30倍までは確定しており、いまだ誰も出したことが投じなかった7個については、50倍と仮定してビンゴバルーン解析を進めた。

しかし1年くらい前になって、3個ライン7個成立が45倍であることが判明した。

だがいまだに4個ライン4個成立については謎である。

なぜなら…。

まずFREEを4個置ける場合にしか成立しない。そして、計算があっているかはわからないが、おそらく4C2×4C2=36通りしかない。その中でシンキング後、12マスのうち(16マスではない。交差する形にしないと個数が足りない)5マスに入っていなければならない。これは12C5/25C5なので1.5%。ここでFREE4個を4個ライン4つのためだけに配置し、ここから1/1140を引き当てる。つまり0.0013%である。

これが意味すること。

FREE4個配置可能というほぼありえない場合に、他の7個ラインなどの高配当を捨てて、4個ライン4つ成立のためだけにバルーンを配置したという条件の下で、この配当を達成できる確率は0.0013%ということになる。およそ1/70000である。

FREE4個配置をするためには、きわめてまれな初期+FREE3個がなければならないし、そこから最初の5球でそれらすべてにHITし、かつそのHITした番号が4個ライン4個の成立に関わる16マスの中(かつ、さらに可能パターンは限られる)に入っていなければならず、そこで7個ラインなどを捨てるという鉄の意志をもってして初めて1/70000を当てるスタート地点にたてるというわけである。

そういうわけであるから、これの達成者がでないことなどもはやわかりきっていることである。

しかし我の解析においては、このパターン計算をしている場面がFREE4個におけるオッズの計算53130*12650*1140=766187730000通り(約7700億回)の中でいくつかあるということである。

なので4個ライン4個が数倍程度オッズに誤りがあったところで、期待値的には(1~10くらい)×(1/1140)で0.1%から1%程度しか変動がない。なお4個ライン4個は、無理やり狙っているためその場合の期待値は低くなる。それより明らかに4個ライン2個オッズアップ2つや7個ラインなどの期待値の方が圧倒的に高い。その圧倒的に高い「最適解」に1%程度「4個ライン4個狙い配置」の期待値が上昇したところで、もはや雀の涙である。


以上の考察により(あっているかは知らないが)、4個ライン4個はもはや問題ない、という結論に至る。


3個ライン7個については、もう一度念のためにそれが可能になりうるパターンを検証しようかと思っている。これに関しては、FREE4個の場合、田の字型の3個ライン6個を最適解と出来得るので最適解のPO率が変化する可能性が高い。

なお3個ライン7個は、田の字型が必要条件であるので、これだけでパターンはある程度決まる。このあたりもまた考えていく。

ビンゴバルーン最適解を計算

 だいぶん昔にやったので、{1,2,3,4,5}⇔1,{21,22,23,24,25}⇔53130などの対応をする関数を以前作ったのだが←方向の変換が消えていたので別プログラムで急遽作った。

ビンゴファームを作った時の流用なので緑カードという意味のgreenlistとなっているが気にしない。これはとりあえず1~25を重複アリでもよいのでこの中からとってきた要素を5つ持つ集合のリストを生成。これは25^5個の集合である。なおこれはおよそ1000万個の集合である。
ここから、各要素が等しい場合を除き(例えば{1,2,3,3,4}は3番目と4番目が等しいので除去、{1,2,3,3,3}は3,4,5番目が等しいが、||は「または」を意味するので3番目と4番目が等しいという条件にすでにひっかかり除去。)加えて昇順である条件を付けると、簡単に{1,2,3,4,5}をはじめとして{21,22,23,24,25}を最後とする25C5=53130通りのデータが出来上がる。
これをシンキングタイムにまでに入ったマスの位置とする。
スマホアプリにおいては外部からの画像判定を使う予定である。
できるかわからんが…。

そしてすでに手元にある、CPUをフルで稼働させて1か月くらいかかった超貴重なデータをmathematicaに入力し、残り3球の1140通りに対し厳密な確率を計算する。
おそらく有用なデータとしては、配当獲得率、等倍以上、3倍以上、5倍以上、10倍以上、30倍以上、50倍以上、7個ライン成立率、☆獲得効率、平均PO率(各FREE配置可能個数別)と、配置すべきバルーンの位置を示した直感的な画像だろう。

アプリで逐一これを計算させると時間がかかってシンキング中に答えを出せないようではごみアプリなのでここはあらかじめ計算させたデータで一瞬で表示できるようにしたい。
次の記事では実際に上記事項をプログラミングし、それらがデータとして得られることを示す。

アニマロッタのアプリを作るかもしれない

1年以上前に解析したビンゴバルーンのデータを使って、スマホのアプリを作成しようかとふと思いついた。

ちなみに当方、まったくアプリ作成をやったことがない。

しかしなんかいろいろやっているうちにできるかもしれない。

もしくは難しくて結局諦めるかもしれないが、

そろそろアニマも永遠に決別して無駄な浪費をおさえたことであるし、

このあたりで実りのあることでもやろうではないかということになった。

最近このブログに広告が出現しだしたのも、それが原因である。

この広告に関する収入などについても、おそらく知りたい人がいると思うのでどういう感じかいずれは述べていきたい。

ビンゴバルーンアプリの詳細はまたのちほど。

以下なんとなく、「あ~ん」までで最初に出た予測候補を並べる。特に意味はない

ある

以下

ウェア

永遠

思うので

kabe

キター

来る

決別

候補

最初に

詳細は

する

セガ

それが

たい

ちなみに

ついても、

提出

特に

並べる

抜ける

ので

発送連絡が

人が

ふと

へ。

までで

実りの

無駄

も、

やろうではないかということになった

許さん

予測

ラッシュ

理工

ルイージ

連絡

浪費

を作成

んじゃない


2021年9月24日金曜日

各店舗のアニマロッタ

 タイトルの通り、アニマロッタをやめたのだが(eパスを廃棄し、konamiIDを完全に削除して手元にあるeパスの番号を想起させるメモもことごとく粉々にした。今や手元に記憶も含めて一つとして復活できるきっかけとなるものを持っていない状態にした。称号は240個、アニマレベルは15、アクセサリーは軽く100個を超えていて最高WINは100万越えであるが、それらをすべて手放して別れを告げた)、せっかくなのでもう関係ない話だが、今後アニマロッタを追い求める者に各種店舗の説明をしておく。

意外にメダル料金や運営方法などは行ってプレイしてみないと分からないものである。まあそれも今や完全に過去の産物となったが…。

以下は各店舗のメリット・デメリットとメダル料金を自身の記憶に基づいて記述する。

記事は現在2021年9月24日時点のものなのでいろいろ変わる可能性がある。

①ヤングプラザドットコム

概要:アニマ、カラコ、デュエルドリームが最新作でおいている。連動ボーナスはたった20%と、これ目当ての攻略法は望めない。なおこの3ゲームは常に2クレである。

イベントの日には3クレになったり、メダルが戻ってくるイベント(会員必須)があったりする。

料金:公式サイトに載っている。30000円で40000枚+サービスチケットなど。

例えば30000円では金リンゴレベル5を15個、1日10個までの制限で利用可能。また次回メダル貸し出し時に10%くらい枚数がアップする券もつく。

有利なイベントに参加するときは会員である必要があり、会員となる要件は3挙げ対内に20万円を支払うことである。これにより、ゴールド会員となることができ、20万円でのメダル購入180万枚の権利を得られる。結局のところ計40万払わなければいけないのである。また数年前は設定が良かったりしたが、特に今年の春に入ってからはかなり設定が悪く、まず勝てることはなかった。

1,2ステーションは常時エキスパートモード設定である。

②ベネクス平塚・大和・川崎

概要:平塚は平塚駅からバスで少々、大和は鶴間駅から結構徒歩で遠い。川崎はアクセスが悪い。平塚では常時3クレであり、10000円で6000~12000枚くらいだった記憶がある。

10000円で金リンゴMAX3個サービスをしており、期限は発行から1か月。JPCに発展すれば外れてもスターダストだと15000枚程度の返りが期待できる。なお20000円などになるとMAXりんごは7個にしてもらえる。当日使用も確か可能。上記ヤンプラもそうである。

ベネクス大和では10万円貸し出しでヤンプラと同じようなメダルが元通りイベントを行っているが、いかんせん値段が高すぎる。限定フリープレイ券と呼ばれているが、これは自身のメダルバンクの枚数を超えて使うことはできないという意味であり、10万円20万枚であるから、サービスクレジット制度(1万円で1ポイント、10ポイントたまればメダル10万枚なので実質30万枚)があるので30万枚であるとはいえ、これで1日MAXBETで遊ぶのはこころもとない。ちょっとイメージしづらいのでスケールを避けると、300枚のメダルで30BETをし続けて1日中遊べるか、という話である。

大和でツナガロッタ1メダル6クレの時期があった(あるいは、ある)が、あれは転送する機器のスピードが遅いので、ぴぴぴぴ、といいながら徐々にメダルが転送される形式。ある程度の低額で遊ぶならBETが転送スピードを上回らないので良いが、MAX30000BETとかをすると時間が足りず、全然プレイできないというデメリットがあるが、そうそうMAXBETなどはないのでお得といえばお得。

またこれとは別におかしやスナックのサービスも行っている。ただなんか…健康に悪いよなおかしばっかりな気がするのは気のせいだろうか

ベネクス川崎は特におかしサービスやイベントは弱めの印象である。

なおベネクス大和に行くほぼ道中にイミグランデ大和があるのでそれも記述。

③イミグランデ大和

カラコは初代、アニマは最新作のものがある。メダルは1万円で5万枚、2万円で20万枚、3万円で40万枚、5万円で80万枚、10万円で200万枚と全国一の破格の値段。ただし当たりやすいかと言われれば、そうでもないときの方が多い。小田急電鉄大和駅から比較的近いので、行きやすい。なお現在では拡張ステーションはなく、6ステまでしかないので注意。席が空いていないということも休みの日ならたまに起こりうる。

ただここではイベントはやっておらず、またマルチクレジットでもなく、エキスパート設定などはない。

④サードプラネット多摩

1回訪れたことはあるが、常連などの囲い込みがなんとなく強そうな雰囲気であり、プレイしなかった。メダルのレートはそこまで安くはないが、いろいろなイベントが充実していると聞く。ただしその多くは抽選や会員制など、一般のプレイヤーにはもはや縁のない感じなので、金を持っていないとかなり敷居の高い場所となる。ただ現時点ではここがおそらくもっともアニマ界において強力な店舗であることは間違いない。掲示板などの話によるとJPCの手入れなどもポイント制によって公認で行われていると聞く。ただしものすごいBET量が必要なのでおすすめしない。

⑤YAZ寝屋川

ここも有名な店である。一時期は1万円で金リンゴMAXの個数をさいころで決める、とか2つあるアニマのうちいずれかが設定MAX、などの個性的なイベントをおこなっており、やはりここでもシルバー会員、ブラック会員などメダルの購入料金に応じて会員制が導入されている。しかしこれまた数万とかのれべるではなく、平気で数十万使うのが前提となっているため、これもまた敷居が高い。そしてここが子連れが多く、また常連同士のつながりも強いので新参が入る場合はかなり厳しいかもしれない。メダルは10000円で6000枚くらいだったような気がする。ここはエキスパートモードは普通にあったと思うが詳細は覚えていない。

⑥アピナ姫路

ここもなぜかランキングに上がることがある。5,6ステがエキスパートモードとなっている。

アクセスは比較的良好。ただしメダルがかなり高い。一応ランキングイベントは行っているが、メダル料金のことを考えるとプレイは厳しいだろう。10000円で6000枚、10万円で10万枚である。ツナガロッタ2がおかれている。



とここまでいろいろ店舗の情報について述べてきたが、結局はメダルを0枚にされるのが落ちであるから、正直自分にあったところでプレイするのがよいと思われる。

この虚無感に気づいた我はいち早くアニマを離脱したが…。

自分が楽しいと思うならばそれで大いに趣味として成立するだろう。なので我のアニマ離脱の意見などは気にする必要はない。

ちなみに解析などでアニマロッタを攻略しようとしても、機械の真の仕様が分からない限り攻略するのはほぼ不可能である。なぜなら我の解析結果によると、通常ゲームのPO率は標準的に70%となるので、もはや意図的にボールをねじ込むアニマお得意の技能がない限りこれを下回る、あるいは上回ることは厳しい。


最後にメテオボンバーで全国ランキングを狙う者たちへ忠告…ではないがアドバイス。

このゲーム、色や番号の配置とは別に、メテオが大量に並んでいる場合はそもそもブロックが消えにくいので、例えば端っこの列にメテオが3つくらい積まれた状態で上から降ってきた場合、一般的にその番号3つが全部入らないとそこは消えないので全消しはほぼ不可能である。よってメテオが縦に並んでいるのが多いとき、全消しをさせる気がないということである。あと高額の全消しリーチはことごとく外すので注意。我は確か記憶だけでも3000BETの全消しリーチ(複数ナンバー待ちばかり)を10回くらい外された気がする。その中には全国1位になれる500000WIN越えも3回くらいあったが、リーチが5個あって全部隣に入れられた記憶がある。もうそういうアニマを見るに堪えなくなりやめたわけであるが…。


2021年9月15日水曜日

ビンゴファームの確率

 ここではアニマロッタのビンゴファームの確率について述べる。

我はアニマロッタの確率を計算している人々を以前から見たことがある。

中でもチェーンボンバー大辞典を作成したみそodenさんや、

最近のアニマロッタの解析を行っているteaさんは我も知っている。

チェーンボンバー大辞典は我が中学生のころ、これは天才すぎる!!と思ったものである。

自作ゲームとかを作ったりしているうちに、なぜかプログラミングができるようになっていた。現在では日常の疑問点や大学の課題、アニマの確率など様々な部位に応用している。

さて話を戻して

調べたところによると、緑色のカードではFREEが1個のカードが3パターン、2個のカードが9パターン、3個のカードが3パターン、4個のカードが1パターン、5個のカードが1パターンあり、FREEの合計個数でいうと5個~15個のパターンが考えられる。

今回はFREEの総個数別に、その平均払い戻し率(PO率)を計算する。

各シミュレーションは1000000回実行している。数値のブレの推移を見ると、小数点第1位くらいまではある程度信用できそうである。

だいたいの予想としては、FREE個数が増えれば増えるほどPO率は増加する予想ができるが果たして。

なお各種パターンは17*16*15*14パターンもあり、これはおよそ57120通りあるので、

これらのパターン全てを個別に網羅しようとすると試行回数が100万×57120ということで5億回もゲームを「プレイ」する必要があるので時間がかかりすぎるうえ、さして重要な情報でもないので却下。

やはり盤面をぱっと見て判断できるFREE個数のほうがよい指標になるだろう。

以下解析結果。

緑カード------------------------------------------------------------------------------

FREE5個 PO率60.1% 平均0.623ライン スーパー0.24% ハイパー0.03%

FREE6個 PO率65.5% 平均0.678ライン スーパー0.30% ハイパー0.03%

FREE7個 PO率71.2% 平均0.735ライン スーパー0.40% ハイパー0.03%

FREE8個 PO率77.2% 平均0.791ライン スーパー0.48% ハイパー0.04%

FREE9個 PO率83.5% 平均0.853ライン スーパー0.53% ハイパー0.05%

FREE10個 PO率90.8% 平均0.929ライン スーパー0.58% ハイパー0.07%

FREE11個 PO率97.6% 平均0.998ライン スーパー0.66% ハイパー0.07%

FREE12個 PO率104.5% 平均1.065ライン スーパー0.76% ハイパー0.08%

FREE13個 PO率111.2% 平均1.135ライン スーパー0.82% ハイパー0.08% 

FREE14個 PO率118.9% 平均1.195ライン スーパー0.89% ハイパー0.12%

FREE15個 PO率125.4% 平均1.253ライン スーパー0.96% ハイパー0.15%

青カード-------------------------------------------------------------------------------

FREE8個 PO率84.7% 平均0.879ライン スーパー0.57% ハイパー0.03%

FREE9個 PO率88.8% 平均0.910ライン スーパー0.67% ハイパー0.04%

FREE10個 PO率100.1% 平均1.018ライン スーパー0.80% ハイパー0.06%

FREE11個 PO率114.3% 平均1.151ライン スーパー0.97% ハイパー0.09%

FREE12個 PO率122.5% 平均1.222ライン スーパー1.04% ハイパー0.12%

FREE13個 PO率135.8% 平均1.344ライン スーパー1.24% ハイパー0.15%

FREE14個 PO率142.3% 平均1.402ライン スーパー1.36% ハイパー0.15%

FREE15個 PO率153.8% 平均1.509ライン スーパー1.66% ハイパー0.12%

FREE16個 PO率167.7% 平均1.626ライン スーパー2.07% ハイパー0.09%

FREE17個 PO率179.1% 平均1.722ライン スーパー2.35% ハイパー0.08%

FREE18個 PO率191.2% 平均1.812ライン スーパー2.63% ハイパー0.09%

FREE19個 PO率207.2% 平均1.923ライン スーパー3.06% ハイパー0.11%

FREE20個 PO率215.0% 平均1.976ライン スーパー3.28% ハイパー0.12%

FREE21個 PO率245.4% 平均2.176ライン スーパー4.01% ハイパー0.19%

赤カード---------------------------------------------------------------------------------

FREE24個 PO率496.0% 平均3.480ライン スーパー11.69% ハイパー0.42%

FREE28個 PO率897.9% 平均5.034ライン スーパー22.68% ハイパー0.68%

FREE32個 PO率1098.0%平均5.662ライン スーパー32.27% ハイパー0.57%


緑のカードではFREEの個数が12個以上あれば内部は非常に良好で、9個以上くらいで許容範囲といったところ。青カードはチャンスカードでありながら、FREE8個と9個のパターンではペイアウト率が100%を下回る。つまり赤字。赤カードにおいては、FREEが32個ある場合は払い戻し率が平均10倍以上。ただしハイパーラインの成立確率も最高、というわけではない。その理由はFREE32個の場合ハイパーの成立に関係する斜めラインにいっさいFREEがない井戸の形のマス(=FREE8個分)が出現するからである。なおこの井戸の形のマスは、青カードでも出現するが青カードでこれが出るとうれしい。

この結果をどう使うかは視聴者にゆだねられている。

今後の方針

 今後は、「自作アニマロッタ」というブログの代わりに、ここでアニマロッタの確率を取り扱おうと思う。もちろん、取り扱うからにはどこかの情報からとってきたありきたりの情報や、ただのふわっとしたいわゆる「攻略法」ではない。

あと我は薄々、というかほぼ感づいているが、その設定上アニマロッタでメダルを増やすことは基本的に望めない。

しかしメダルを減らしにくいゲームがあるのではないか、ということでここで机上の空論だけを行う。

すでにみそodenやtea(敬称略)により、いろいろなゲームの払い戻し率が掲示板や2chwikiにて示されている。それによると、ビンゴガーデン、チェーンボンバー、アニマツリー、トゥインクルリンク、ワンダーチャンス、JPCあたりのゲームの期待値が記されている。

それ以外のゲームが触れられていない理由は、シミュレートする際の仮定が多すぎて仮にシミュレートできたとしても本来の設定と大きくかけ離れるか、はたまた煩雑なので再現できないかのいずれかの場合が多い。

よってこのブログでは、ビンゴファーム、ハニーエイト、ビンゴバルーン、サンダースマッシュ、ヘブンツリー、サンダーブレイクあたりを取り上げることにする。

メテオボンバーは我の能力では再現できないこともないが、不確定要素が多すぎてシミュレーション不能。チェーンボンバーの方は爆弾が多くて1,2個だが、メテオのほうは5個以上でることもあり、メテオにも向きがついているため。

アニマドロップも段セリ下がりのときのパターンが多すぎてもはや仮定をみいだせないので却下。ただこのゲームは一応演出付きで再現した。

これを作成するのに10日ほどかかった。まず画像データを動画などから地道に削り取り(当時はコナステがなかった)、さらに配当表を色々な高配当動画から知り、そして自身で大量の動画や画像でパターンを解析して手動でそれを打ち込んだ。

そのうえでの結構ややこしめなプログラミングを演出つきでこなし、この状態に至ったわけである。

その気になればアニマドロップも解析できるが、あまり有用性がないので保留。

早速ビンゴファームを作ったプログラムで解析を考えている。

なお上記ゲームは我が中1のころにみつけたwolf rpg エディターで作っている。RPG制作ソフトであるが、工夫をすればだいたいなんでも作れる。たぶん。

余談だが、今後解析していく中でPO率70%がどれくらいかというと

もし10000円を5000枚くらいで購入して、一律シングルで100BETずつ、1ゲームで計300BETしたとすると、1ゲーム当たり90枚失うことになるので、55ゲーム程度、すなわち2時間少しくらいでメダルが尽きるくらいの設定ということになる。

余談だが、アニマロッタの最低設定はPO率80%らしい。




2021年9月14日火曜日

最近の様子

 ものすごく久しぶりになったが、最近の様子を報告すると…。

当時持っていた不安が全然なく、底なしの元気かと言われていた時代はとっくに終わりをつげ、最近はあまり調子は悪くもなく、良くもなくといった感じである。


なおこのブログは自分の歴史を振り返るときに、大いに参考にさせたいただいた。

最近やるべきことはそこまで去年などの入試時代と違い多くないので、楽ではあるが…。

レゴを作成したり、プログラミングで遊んだりしている。

例えばアニマロッタのチェーンボンバーの払い戻し率を計算できるプログラムを作ったりした。

dataset = 1; oddslist = Table[Table[0, 10000], dataset]; counter = 

 Table[Table[0, 1001], dataset]; For[game = 1, game <= dataset, game++,

  totalodds = 0; maxodds = 0; 

 For[times = 1, times <= 100000, times++, oddsupinitial = 0; 

  rowodds = {1.5, 0.6, 0.5, 0.5, 0.6, 1.5}; 

  basicrowodds = {1.5, 0.6, 0.5, 0.5, 0.6, 1.5}; maxchain = 1; 

  chain = 1; oddsup1 = RandomInteger[{2, 5}];

  oddsup2 = RandomInteger[{1, 2}]; 

  Which[oddsup2 == 1, oddsup2 = 1, oddsup2 == 2, oddsup2 = 6]; 

  pattern = allpattern[[game]];

  in = {1, 2, 3, 4, 5, 6, 7, 8};

  pattern[[RandomInteger[{31, 54}]]] = 6;

  random = RandomInteger[{1, 10}];

  If[random == 1, pattern[[RandomInteger[{31, 54}]]] = 6];

  syokipattern = pattern; 

  numlist = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 

    17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  For[i = 1, i <= 100, i++, randomA = RandomInteger[{1, 54}];

   randomB = RandomInteger[{1, 54}];

   taihi = numlist[[randomA]];

   numlist[[randomA]] = numlist[[randomB]];

   numlist[[randomB]] = taihi];

  syokinumlist = numlist;

  For[a = 1, a <= 5, a++, chain = 1; bomblist = Table[0, 54]; 

   erase = Table[0, 54]; k1 = k2 = k3 = k4 = k5 = k6 = 0;

   bombwait1 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait2 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   bombwait3 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait4 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   bombwait5 = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 

   bombwait6 = {0, 0, 0, 0, 0, 0, 0, 0, 0};

   

   precount = 0; postcount = 1; bombflag = 0; 

   Which[a == 1, 

    For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[1]] || numlist[[b]] == in[[2]] || 

       numlist[[b]] == in[[3]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 2, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[4]] || numlist[[b]] == in[[5]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 3, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[6]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 4, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[7]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]], 

    a == 5, For[b = 1, b <= 54, b++, 

     If[numlist[[b]] == in[[8]], 

      Which[pattern[[b]] == 6, bombflag = 1; mass = b, 

       pattern[[b]] < 6, numlist[[b]] = 0; pattern[[b]] = 0]]]];

   If[bombflag == 1, b = mass; 

    For[e = 1, e <= 1, e++, bomblist[[b]] = 1; 

     While[precount < postcount, 

      For[c = 1, c <= 54, c++, precount = postcount; 

       For[d = 1, d <= Length[nextlist[b]], d++, 

        If[pattern[[nextlist[b][[d]]]] == 6, 

         bomblist[[nextlist[b][[d]]]] = 1]];

       If[bomblist[[c]] == 1, 

        For[d = 1, d <= Length[nextlist[c]], d++, 

          If[pattern[[nextlist[c][[d]]]] == 6, 

           bomblist[[nextlist[c][[d]]]] = 1]];]]; 

      postcount = Count[bomblist, 1]]; kibaku = Table[0, 54]; 

     For[f = 1, f <= 54, f++, 

      If[bomblist[[f]] == 1, kibaku[[f]] = 1; pattern[[f]] = 0; 

       numlist[[f]] = 0; 

       For[g = 1, g <= Length[nextlist[f]], g++, 

        tonari = nextlist[f][[g]]; pattern[[tonari]] = 0; 

        kibaku[[tonari]] = 1]]];

     For[f = 1, f <= 54, f++, 

      If[kibaku[[f]] == 1 && bomblist[[f]] != 1 && numlist[[f]] > 0, 

       retu = QuotientRemainder[f, 6][[2]]; If[retu == 0, retu = 6];

       Which[retu == 1, k1 += 1; bombwait1[[k1]] = numlist[[f]], 

        retu == 2, k2 += 1; bombwait2[[k2]] = numlist[[f]], retu == 3,

         k3 += 1; bombwait3[[k3]] = numlist[[f]], retu == 4, k4 += 1; 

        bombwait4[[k4]] = numlist[[f]], retu == 5, k5 += 1; 

        bombwait5[[k5]] = numlist[[f]], retu == 6, k6 += 1; 

        bombwait6[[k6]] = numlist[[f]]];]];

     For[h = 1, h <= 54, h++, 

      If[kibaku[[h]] == 1 || bomblist[[h]] == 1, pattern[[h]] = 0; 

       numlist[[h]] = 0]]];];

   chainflag = 0; While[chainflag == 0, chainflag = 1;

    For[i = 48, i >= 1, i--, nullcount = 0; 

     If[pattern[[i]] != 0 , 

      For[j = i + 6, j <= 54, j = j + 6, 

       If[pattern[[j]] == 0, nullcount += 1]]]; 

     If[nullcount > 0, pattern[[i + 6*nullcount]] = pattern[[i]]; 

      numlist[[i + 6*nullcount]] = numlist[[i]]; pattern[[i]] = 0; 

      numlist[[i]] = 0]]; erase = Table[0, 54]; chaincount = 0; 

    For[i = 1, i <= 54, i++, 

     If[pattern[[i]] != 0 && pattern[[i]] < 6, 

      For[j = 1, j <= Length[nextlist[i]], j++, 

       If[pattern[[nextlist[i][[j]]]] == pattern[[i]], 

        erase[[nextlist[i][[j]]]] = 1; chainflag = 0; 

        If[chaincount == 0, chain += 1; chaincount = 1]; 

        If[numlist[[nextlist[i][[j]]]] != 0 && 

          bombcheck[[nextlist[i][[j]]]] == 0, 

         Which[QuotientRemainder[nextlist[i][[j]], 6][[2]] == 1, 

          k1 += 1; bombwait1[[k1]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 2, k2 += 1; 

          bombwait2[[k2]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 3, k3 += 1; 

          bombwait3[[k3]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 4, k4 += 1; 

          bombwait4[[k4]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 5, k5 += 1; 

          bombwait5[[k5]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1, 

          QuotientRemainder[nextlist[i][[j]], 6][[2]] == 0, k6 += 1; 

          bombwait6[[k6]] = numlist[[nextlist[i][[j]]]]; 

          bombcheck[[nextlist[i][[j]]]] = 1]]]]]];

    bombcheck = Table[0, 54];

    

    For[i = 1, i <= 54, i++, 

     If[erase[[i]] == 1, pattern[[i]] = 0; numlist[[i]] = 0]]]; 

   If[chain > maxchain, maxchain = chain];

   doubletimes = 0;

   If[chain >= 5, doubletimes = chain - 4];

   For[n = 1, n <= doubletimes, n++, 

    Which[oddsupinitial == 0, 

     rowodds[[oddsup1]] += basicrowodds[[oddsup1]]; oddsupinitial = 1,

      oddsupinitial == 1, 

     rowodds[[oddsup2]] += basicrowodds[[oddsup2]]]]; 

   bottom = {0, 0, 0, 0, 0, 0};

   k = {k1, k2, k3, k4, k5, k6};

   l = {0, 0, 0, 0, 0, 0};

   bombwait = {bombwait1, bombwait2, bombwait3, bombwait4, bombwait5, 

     bombwait6};

   For[i = 1, i <= 6, i++, l[[i]] = 9; 

    For[j = 48 + i, j >= 1, j = j - 6, 

     Which[pattern[[j]] == 0, bottom[[i]] = l[[i]], pattern[[j]] != 0,

       l[[i]] = l[[i]] - 1]]];

   

   For[i = 1, i <= 6, i++, m = 0; 

    For[j = l[[i]] - k[[i]] + 1, j <= l[[i]], j++, m += 1; 

     pattern[[6*j + i - 6]] = 6; 

     numlist[[6*j + i - 6]] = bombwait[[i, m]]]]]; 

  eraseline = {0, 0, 0, 0, 0, 0};

  For[a = 1, a <= 6, a++, 

   Which[pattern[[48 + a]] == 0, eraseline[[a]] = 1, 

    pattern[[48 + a]] != 0, eraseline[[a]] = 0]];

  odds = eraseline[[1]]*rowodds[[1]] + eraseline[[2]]*rowodds[[2]] + 

    eraseline[[3]]*rowodds[[3]] + eraseline[[4]]*rowodds[[4]] + 

    eraseline[[5]]*rowodds[[5]] + eraseline[[6]]*rowodds[[6]];

  If[eraseline == {1, 1, 1, 1, 1, 1}, odds += 50]; totalodds += odds; 

  odds10 = odds*10; counter[[game, 1 + odds10]] += 1

  ; PO = totalodds/times; oddslist[[game, times]] = odds; 

  If[odds > maxodds, maxodds = odds];

  If[QuotientRemainder[times, 1000][[2]] == 0, 

   Print[{game, times, maxchain, odds, PO, maxodds}]]

  ;]; counter[[game, 1001]] = PO]; export = 

 Table[Table[0, 1065], dataset]; For[i = 1, i <= dataset, i++, 

 export[[i, 1]] = i;

 

 export[[i, 2]] = data[[1, i + 2, 5]]/10; 

 export[[i, 3]] = counter[[i, 1001]];

 For[j = 4, j <= 57, j++, export[[i, j]] = allpattern[[i, j - 3]]]; 

 over0 = over1 = over3 = over5 = over10 = over30 = over50 = 0;

 For[k = 1, k <= 10000, k++, hantei = oddslist[[i, k]]; 

  If[hantei > 0, over0 += 1]; If[hantei >= 1, over1 += 1]; 

  If[hantei >= 3, over3 += 1];

  If[hantei >= 5, over5 += 1];

  If[hantei >= 10, over10 += 1];

  If[hantei >= 30, over30 += 1];

  If[hantei >= 50, over50 += 1];];

 export[[i, 58]] = over50;

 export[[i, 59]] = over30;

 export[[i, 60]] = over10;

 export[[i, 61]] = over5;

 export[[i, 62]] = over3;

 export[[i, 63]] = over1;

 export[[i, 64]] = over0;

 For[j = 1, j <= 1000, j++, export[[i, j + 64]] = counter[[i, j]]];

 export[[i, 1065]] = 

  data[[1, i, 5]]]; Export["data.csv", export]; SystemOpen["data.csv"]

だいたい自身のやりたいアニマロッタ5の再現は以前の記事で紹介したので、

今度は数値的な解析などをして遊んでいる。

ちなみにチェーンボンバーは払い戻しが平均70%程度で、話にならない。

ビンゴファームも解析中で各パターン100000回検証をしているが、ペイアウト率は55%程度以上は確保されているが80%以上の組み合わせがなかなかない模様。

なにしろ緑カードパターンは17種類なので、組み合わせは17*16*15*14通りもあるので調べ上げるのに数十日レベルでかかるとみられている。

(カード配置パターンはその位置によって変わるので、17C4でもないし、重複はないので17^4でもない)

このあたりの話も話すとあまりに長くなるのでいずれ述べる…かもしれない


また、試験的に広告を貼るとかいう行為をやりだすことに。

ただ今度は、以前のように何度も日記のようなことを書くわけではない。

気が向いたときに面白そうなことを書くだけであろういんぷ


ちなみにプログラミングでいろいろ遊ぶのが大好きではあるが、工学系の学部にいるわけではない。わかる人にはわかると思うが、6年制の大学であり、試験や覚えることが山ほどあり、国家試験すら必要な学科である。

我はここでこういった理学系の知識を活かしつつ、社会と研究の橋渡しをいずれはしたいと考えている。入試の面接でもそう言ってきた。


また最近の動向もおいおい伝えていくが、例にもれず突然の失踪もありうるので注意。

一応このブログと広告がどんな感じにリンクして、どういう感じの統計になるかも見てみようと思っている。