SFC版ドラクエ5のエンカウント確率
DQ5
SFC版ドラクエ5エンカウント判定はすでに解析済みのDQ1&2の判定とよく似た1歩(半マス)移動ごとに判定が行われる方式です。主にマップ切り替わりまたは直前エンカウントからの歩数、移動先の地形、エンカウントエリアによって確率(閾値)が変化します。
地形ID→基礎エンカ指数
4.a’地形ごとの基礎エンカ指数補足
フィールドで匂い袋効果中は8倍(1エンカウントのみ)
同じ歩数歩いても歩数カウントが溜まってからの方がエンカウントしやすく、直前までに歩いた地形はそれ以降の判定時には影響しない。
乱数[0,255]<=エンカ指数 のときエンカウント
計算結果とグラフ:SFCDQ5エンカウント確率.ods
SFC版DQ1&2エンカウント判定(Kriさん)
地形ID→基礎エンカ指数
- 建物の上などの条件でエンカウント判定をしない(詳細未解析)。
- 聖水・トヘロスの有効性判定(エリアレベル)
- 魔物のエサ、匂い袋により基礎エンカ指数を8倍する
- 歩数と地形に応じたエンカ指数の乗除
- エンカウントエリア別の遭遇係数にエンカ指数の乗除
- エンカ指数と線形合同法の乱数取得とによるエンカウント判定
1.建物の上などの条件でエンカウント判定をしない(詳細未解析)。
2.聖水・トヘロスの有効性判定(エリアレベル)
「主人公レベル>=エリアレベル」のとき聖水・トヘロスが有効です。ただし、街に入ると聖水・トヘロスは解除されます。また、魔物のエサ、匂い袋との併用はあとに使用したものの効果だけ発動されます。3.魔物のエサ、匂い袋は基礎エンカ指数が8倍されます
フィールドで有効。1エンカウントで効果はなくなります。4.歩数と地形に応じたエンカ指数の乗除
地形ID$1AA0 | 基礎エンカ指数$01,s | 歩数閾値$00(==256/基礎エンカ指数) |
---|---|---|
0海 | 02 | 128 |
1砂漠 | 07 | 36 |
2山 | 12 | 21 |
3岩山 | 00 | ? |
4毒沼 | 09 | 28 |
5茂み | 07 | 36 |
6平地・橋 | 05 | 51 |
7森 | 09 | 28 |
8浅瀬 | 02 | 128 |
9海辺 | 02 | 128 |
10進入不可? | 02 | 128 |
11樹林・塔 | 09 | 28 |
12建物の右端・右上 | 02 | 128 |
4.a’地形ごとの基礎エンカ指数補足
基礎エンカ指数$01,s | 条件(SR $0084CF内) |
---|---|
0x00 | エンカウントテーブル番号がFF(ノーエンカウントエリア) |
0x07 | 施設内・ダンジョンで地形IDが [0,127] |
0x20 | ダンジョン暗転時 |
0x00 | トヘロス、聖水で 主人公レベル$7E2052 >= エリアレベル $1A99 の時(ノーエンカ) |
フィールドで匂い袋効果中は8倍(1エンカウントのみ)
条件1(@23/E7F6) | 条件2 | 条件3 | エンカ指数$01,s @23/E85C |
---|---|---|---|
$02 < $00 | $02 <3 | $01,s = 0(@23/E85) | |
$02 < $00 | 3 <= $02 | $02<5 | $01,s = $01,s/64 |
$02 < $00 | 5 <= $02 | $02<7 | $01,s = $01,s/16 |
$02 < $00 | 7 <= $02 | $02<9 | $01,s = $01,s/4 |
$02 < $00 | 9 <= $02 | $02<11 | $01,s = $01,s/2 |
$02 < $00 | 11 <= $02 | A = (stack)/2: $01,s = $01,s/4 + $01,s/2 | |
$02 >= $00 | $02>=2*$00 | $00=2*$00: $01,s = mod($01,s*4; 256) | |
$02 >= $00 | $02<2*$00 | $00=2*$00: $01,s = mod($01,s/2 + $01,s; 256) |
5.エンカウントエリア別の遭遇係数(の分子X)とエンカ指数$01,s との乗除(×X/64)
X | 係数(端数切捨て) | テーブル番号 |
---|---|---|
16 | 0.25 | ---- |
22 | 0.34375 | ---- |
43 | 0.671875 | 8,34,37,51,64,75,80 |
64 | 1 | その他 |
80 | 1.25 | 14 |
96 | 1.5 | 7,10,32,70 |
112 | 1.75 | 69 |
128 | 2 | ---- |
6.エンカ指数と線形合同法の乱数取得とによるエンカウント判定
DQ5の乱数はXOR などのビット演算で求める乱数とここで用いる線形合同法の乱数(sr: 23/EAFD)があるようです。5.のエンカ指数が256以上のときと、乱数[0,255]<=エンカ指数の時にエンカウントします。1歩ごとに エンカ指数/256 の確率でエンカウント!?まとめ?
どういう風になっているのかわかりにくいのでとりあえず同一地形を歩いた時の歩数とエンカウントの関係をプロットしてみました。(DQ5確率密度(その歩数ちょうどでエンカする確率))(DQ5確率分布(歩数≦横軸の値でエンカする確率))同じ歩数歩いても歩数カウントが溜まってからの方がエンカウントしやすく、直前までに歩いた地形はそれ以降の判定時には影響しない。
乱数[0,255]<=エンカ指数 のときエンカウント
計算結果とグラフ:SFCDQ5エンカウント確率.ods
参考サイト
SFC版DQ1&2エンカウント判定(Kriさん)
SFC版DQ5エンカウント制御 5.8. タイルエンカウント表 (プレハブ小屋showa_yojyoさん)
PS2版DQ5エンカウント判定や確率用語など(Maruさん)
2019年6月5日 dropbox のリンク修正
PR
DQ5フィールドエンカマップの公開
DQ5
【調査と修正】
エミュレータ snes9x 上でlua bot を動かし先頭キャラのいる場所の地形ID $1AA0 を取得してマップをました。岩山などは壁抜けチートを使ってすり抜けていますが、建物に出入りしてしまいフィールドに戻る位置が半マス下にずれたりワープしたりしているのを確認し、確認できたものを修正しています。
【説明】
セルを選択するとそこのエンカウントテーブルを表示するようにしました(データ→入力規則→入力時メッセージ)。エンカウントエリアは16x16マス単位です。ドラクエ5の世界地図は他作品より少し広く272マスx272マスとなっています。海エンカについて遠藤さんのサイトを見ても陸のモンスター遭遇マップデータしか見当たらず、青年期前半は未調査で青年期後半では1テーブルしか確認できませんでした。
DL: DQ5フィールドマップ(.ods LibreOffice or OpenOffice)
DL2: フィールドマップ(.ods)と地形IDのテキストファイルとかのZIP
LlibreOfficeCalc, AppatchOpenOfficeで作成しています。ods形式ですがexcelでも開けるようです。逆に xlsx形式(エクセルと同じ拡張子)にして open officeやlibre officeで開いたところ、一部しか背景色を変更できておらず、ただ重いだけのファイルになっているようです・・・?
2019年6月5日 dropbox のリンク修正
エミュレータ snes9x 上でlua bot を動かし先頭キャラのいる場所の地形ID $1AA0 を取得してマップをました。岩山などは壁抜けチートを使ってすり抜けていますが、建物に出入りしてしまいフィールドに戻る位置が半マス下にずれたりワープしたりしているのを確認し、確認できたものを修正しています。
【説明】
セルを選択するとそこのエンカウントテーブルを表示するようにしました(データ→入力規則→入力時メッセージ)。エンカウントエリアは16x16マス単位です。ドラクエ5の世界地図は他作品より少し広く272マスx272マスとなっています。海エンカについて遠藤さんのサイトを見ても陸のモンスター遭遇マップデータしか見当たらず、青年期前半は未調査で青年期後半では1テーブルしか確認できませんでした。
DL: DQ5フィールドマップ(.ods LibreOffice or OpenOffice)
DL2: フィールドマップ(.ods)と地形IDのテキストファイルとかのZIP
LlibreOfficeCalc, AppatchOpenOfficeで作成しています。ods形式ですがexcelでも開けるようです。逆に xlsx形式(エクセルと同じ拡張子)にして open officeやlibre officeで開いたところ、一部しか背景色を変更できておらず、ただ重いだけのファイルになっているようです・・・?
2019年6月5日 dropbox のリンク修正
SFC版ドラクエ5ダメージ計算式
DQ5非会心・痛恨の打撃ダメージ計算式(敵味方共通)
調査対象:キラーマシンの攻撃(モンスター側→プレイヤー側)敵味方共通のサブルーチン
※除算の端数(余り)は加算・減算前に切り捨て(無視)する!
A = atk/16
AD = atk - def/2
D = AD/2 = (atk - def/2)/2
rnd = [0,255]の乱数
※(A + 1)*rnd/256 は [0,A] の範囲の乱数 AD = atk - def/2
D = AD/2 = (atk - def/2)/2
rnd = [0,255]の乱数
SR $103030 ($20B030)
AD < 0 | |||||
Yes | No | ||||
D = 0 | |||||
Yes | No | ||||
プレイヤーが被弾 | |||||
Yes(敵側の行動) | No | ||||
D ≦ A | |||||
Yes(Noは右へ) | No | ||||
D < 8 | |||||
Yes | No | ||||
D + 3*rnd/256 - 1 < 0 | |||||
Yes | No | ||||
ダメージ計算式 | |||||
2*rnd/256 | (A + 1)*rnd/256 | 0 | D + 3*rnd/256 - 1 | D*7/8 + (D/4 + 1)*rnd/256 | |
最小 | |||||
0 | 0 | 0 or D - 1 | D*7/8 | ||
最大 | |||||
1 | A | D + 1 | D*7/8 + D/4 |
会心・痛恨の打撃ダメージ計算式1
|
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
最新記事
(12/18)
(04/18)
(09/15)
(09/11)
(06/21)
プロフィール
HN:
bamboo
性別:
非公開
自己紹介:
2010年の3月ごろニコニコ生放送のゲーム放送でRTAを知ってよく見るようになった。
どちらかというとゲームはプレイするものじゃなくてプレイを"みる"ものだと思っている。
逆アセンブル解析というのをかじったものの放置していたが、某放送の影響で解析を再開。
2を初クリアしたのは2011.3.10。ブログの内容はSFC版ドラクエ1・2の解析がメイン。最近はjavascriptとかluaをある程度扱えるようになったので、botでルート検証とかできたらと思いつつも進んでいない。
要点をまとめたり文章書くのが苦手なので記事が長ったらしかったり、日本語のようで日本語でなかったりする。プログラム用語が使えるようになりたいかも。
ツイッター: https://twitter.com/bamb00h
ブログに公開せずツイートのみの情報もあり(twilog)
どちらかというとゲームはプレイするものじゃなくてプレイを"みる"ものだと思っている。
逆アセンブル解析というのをかじったものの放置していたが、某放送の影響で解析を再開。
2を初クリアしたのは2011.3.10。ブログの内容はSFC版ドラクエ1・2の解析がメイン。最近はjavascriptとかluaをある程度扱えるようになったので、botでルート検証とかできたらと思いつつも進んでいない。
要点をまとめたり文章書くのが苦手なので記事が長ったらしかったり、日本語のようで日本語でなかったりする。プログラム用語が使えるようになりたいかも。
ツイッター: https://twitter.com/bamb00h
ブログに公開せずツイートのみの情報もあり(twilog)
ブログ内検索
最古記事
(09/17)
(09/17)
(09/18)
(02/04)
(02/07)
カウンター
忍者アナライズ