忍者ブログ

データ置き場

ニコ生RTA放送を見ていて湧いた疑問を調査してアップするかも。ほぼドラクエのみを扱うブログ風のマニアックなサイト

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

DQのまとめ(SFC版DQⅠ・Ⅱ)

html形式などのまとめを作成し、ここをリンク集とする予定
【戦闘関係】
味方・モンスターデータベース兼シュミレータ(dq2database_ver3.ods)
マップとモンスター出現エリア(DQ12fieldmap_monsterver2_4.ods)[2013.10/28マップ修正]
DQ1, DQ2, DQ3, DQ5, DQ6のエンカウントマップまとめ
敵の行動別まとめ(DQ2MonsterAct.html)
エリア別PT構成・出現率計算機(DQ2MonsterPTlist.html JavaScript)
マップクリックで選択可能にしたもの(enc_map.html)

DQ12の「敵の」呪文や炎のダメージ分布(グラフ付)(javascript/DQ12randave_jsplot2.html)
敵への聖水攻撃
マヌーサ聖水バグのダメージ(seisuibug7E0C91.ods)

【グレムリンバグ】
グレバグ判定ツール (モンスター画像のクリック操作でバグの可能性と対処がわかる)
過去の記事(長文)→, , ③(ツールを使わない場合のバグ判別方法)
大灯台2~3Fエンカウントとグループ番号(網羅)
わかりやすいまとめは未定(グループ番号のメモリ判断の訓練用シュミレーターの作成とか解説動画?)

【マドハンドバグ】
書きかけのまま放置したもの。記述に重複あり、冗長
https://dl.dropboxusercontent.com/u/24283494/DQ2/mudhandbug_summary.txt


【状況再現操作】
竪琴メタル用の小技(連続メタルの初ターン合わせ、偶奇歩数ズレのリカバリーや考慮時間の作成など)

・DQ1のエンカウント調整・メタルスライムへの攻撃の会心調整用のシート(open office calcで作成)扱いにくく非常に重い(1038KB)さらに、メモリを見れる環境が必要(Snes9x-rr1.52など) http://bit.ly/2d9MQOL  emuでのluaの使い方がほとんどわからなかった頃に乱数のシミュレーションにゴリ押しで挑戦したもの。たまにずれるらしい…

【その他】
取得フラグ初期化によるアイテム増殖と命の紋章リセット福引券取得条件
PR

SFC版ドラクエ5のエンカウント確率

SFC版ドラクエ5エンカウント判定はすでに解析済みのDQ1&2の判定とよく似た1歩(半マス)移動ごとに判定が行われる方式です。主にマップ切り替わりまたは直前エンカウントからの歩数、移動先の地形、エンカウントエリアによって確率(閾値)が変化します。
地形ID→基礎エンカ指数


  1. 建物の上などの条件でエンカウント判定をしない(詳細未解析)。
  2. 聖水・トヘロスの有効性判定(エリアレベル)
  3. 魔物のエサ、匂い袋により基礎エンカ指数を8倍する
  4. 歩数と地形に応じたエンカ指数の乗除
  5. エンカウントエリア別の遭遇係数にエンカ指数の乗除
  6. エンカ指数と線形合同法の乱数取得とによるエンカウント判定

1.建物の上などの条件でエンカウント判定をしない(詳細未解析)。

2.聖水・トヘロスの有効性判定(エリアレベル)

「主人公レベル>=エリアレベル」のとき聖水・トヘロスが有効です。ただし、街に入ると聖水・トヘロスは解除されます。また、魔物のエサ、匂い袋との併用はあとに使用したものの効果だけ発動されます。

3.魔物のエサ、匂い袋は基礎エンカ指数が8倍されます

フィールドで有効。1エンカウントで効果はなくなります。

4.歩数と地形に応じたエンカ指数の乗除

4.aフィールドの地形ごとの基礎エンカ指数$23F1E0
地形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エンカウントのみ)


4.b単純歩数$02、歩数閾値$00 に応じたエンカ指数$01,s の乗算・除算処理@23/E85C
条件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確率分布(歩数≦横軸の値でエンカする確率))
DQ5確率密度(その歩数ちょうどでエンカする確率) DQ5確率分布(歩数≦横軸の値でエンカする確率)
 同じ歩数歩いても歩数カウントが溜まってからの方がエンカウントしやすく、直前までに歩いた地形はそれ以降の判定時には影響しない。
乱数[0,255]<=エンカ指数 のときエンカウント
計算結果とグラフ:SFCDQ5エンカウント確率.ods

参考サイト

SFC版DQ1&2エンカウント判定(Kriさん)
SFC版DQ5エンカウント制御 5.8. タイルエンカウント表 (プレハブ小屋showa_yojyoさん)
PS2版DQ5エンカウント判定や確率用語など(Maruさん)

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で開いたところ、一部しか背景色を変更できておらず、ただ重いだけのファイルになっているようです・・・?

SFC版ドラクエ5ダメージ計算式

非会心・痛恨の打撃ダメージ計算式(敵味方共通)

調査対象:キラーマシンの攻撃(モンスター側→プレイヤー側)
敵味方共通のサブルーチン
※除算の端数(余り)は加算・減算前に切り捨て(無視)する!
A = atk/16
AD = atk - def/2
D = AD/2 = (atk - def/2)/2
rnd = [0,255]の乱数
※(A + 1)*rnd/256 は [0,A] の範囲の乱数

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


カレンダー
07 2017/08 09
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 31
プロフィール
HN:
bamboo
性別:
非公開
自己紹介:
2010年の3月ごろニコニコ生放送のゲーム放送でRTAを知ってよく見るようになった。
どちらかというとゲームはプレイするものじゃなくてプレイを"みる"ものだと思っている。
逆アセンブル解析というのをかじったものの放置していたが、某放送の影響で解析を再開。
2を初クリアしたのは2011.3.10。ブログの内容はSFC版ドラクエ1・2の解析がメイン。最近はjavascriptとかluaをある程度扱えるようになったので、botでルート検証とかできたらと思いつつも進んでいない。
要点をまとめたり文章書くのが苦手なので記事が長ったらしかったり、日本語のようで日本語でなかったりする。プログラム用語が使えるようになりたいかも。
ツイッター: https://twitter.com/bamb00h
ブログに公開せずツイートのみの情報もあり(twilog
バーコード
ブログ内検索
カウンター
忍者アナライズ
  Copyright 2017 データ置き場 All rights reserved.
Template Design by LockHeart|powered by NINJA TOOLS 忍者ブログ [PR]