忍者ブログ

データ置き場

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

[PR]

×

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

仲間を呼ぶ

1/2で失敗。残りの1/2は成功か行動再選択。
行動再選択されるのは生存敵数が7体の場合と必要な空きスペース「2*横サイズ+1」がない場合
現在7体以上生存していれば等確率で失敗か行動再選択になる。
敵ごとに決められた出現最大数は考慮しない。
(ブラッドハンドの出現最大数は5体だが仲間呼びで7体まで出現可能)

呼ばれた仲間のグラフィックは真ん中の方に出やすい。
現れた敵の数はメモリの$7E107Cに格納されており、
奇数であれば右側、偶数であれば左側(と中央*)の空きスペースが優先される。
例:同一グループで敵A~Dが出現し、敵A,B,Dが死んだ__C_の状態で仲間が現れる場合、
  1体目なら左側中央寄り、2体目なら右側の_の位置に現れる(_EC_, __CF)。
名前につくアルファベットは使い回しされない。
敵番号は逃亡や死亡した敵で一番小さいものが使われる。
グループ攻撃や全体攻撃は敵番号の順に行われる為グラフィックとの対応が分かりづらくなることがある。
先程の例で言うと並びが_EC_のときはE→Cの順、__CFのときではF→Cの順となる。

*出現する敵が画面左半分に少しでも入る場合も左側に含まれる
内部的にはメモリの$0B80-0BBFの64バイトに敵の位置を再現している。
画面端の余白と敵の位置は1、空きスペースは0としている。
必要な空きは「2*横サイズ+1」で、$0B80-$0B9F(左半分)から連続して「2*横サイズ+1」バイト分0があれば左側として処理される。
PR

敵の行動再選択について

【全般】
行動の選択は最大で8回行われ、8回目は必ず通常攻撃になる(0584FD~)
(行動選択はターン開始時,再選択は敵の行動直前)
再選択を考慮するとある行動を取る確率は等比数列の和で表現できる。

単純に乱数により対象の行動が選ばれる確率をAとする。(256分のnn(整数))
同様に乱数により再選択される行動が選ばれる確率をXとする。
再選択の回数が0回から7回まではAが選ばれる確率は、それぞれ次のようになる。
A, AX, AX^2, ... , AX^7(等比数列)
Aが通常攻撃以外の(再選択されない)行動であれば、この合計が再選択を考慮した確率になる。
Aが通常攻撃であればこれらの合計に8回再選択の確率を加算する。
なので、それぞれ次のような式になる。

通常攻撃以外の行動では、
A(1-X^8)/(1-X)
通常攻撃は、
A(1-X^8)/(1-X)+X^8
となる。


呪文全般$0584CB-
・MP不足
判断力$06=1-3のとき行動再選択
判断力$06=0のとき$1031=6→呪文を唱えようとして失敗する
・マホトーンがかかっている
判断力2以上だと行動再選択。
判断力2未満は$1031=7→呪文を唱えようとして失敗する

モンスター基本データの構造体はDQ1はPCアドレス $05DA0E-$05DCDD,DQ2は $05E2A1-$05E2A1 に格納されている。モンスター1体につき18バイト割り当てられている。
判断力(知能)は14バイト目の下から5,6ビット目に割り当てられている。

【各種行動】
攻撃呪文・火の息系は上述したもの以外に再選択条件はない。
呪文・息系の状態異常行動では生存者全員が状態異常であれば行動再選択される。

ホイミ系呪文(自)について(回復候補の選択方法)
・最大HP255以下の敵の場合($0F91=0)
判断力0なら常に自分自身を回復し再選択されない。
判断力1以上では、「(自分の現在HP) ≧ (最大HP/2)」の時に同グループ内の敵から候補を探す。
それでもいなければ行動再選択。
・最大HP256以上の敵の場合($0F91≠0,$0F8D現在HP, $0F8F最大HP)
判断力0(存在しない)なら常に自分自身を回復
判断力1以上(ベリアル・ハーゴン)であれば「(自分の現在HP) ≧ (最大HP/2)」の時行動再選択。

ホイミ系呪文(他)について(回復候補の選択方法)
回復の優先度:別グループの敵>同グループの敵(自身を回復することはない)
・別グループ$058D13
判断力1以上なら「(現在HP) < (最大HP/2)」の敵を回復候補にする。
判断力0であればHPは考慮しない。
候補がいなければ同グループ内から探す$058C81。
・同グループ内$058C81
判断力に関わらず「(現在HP) < (最大HP/2)」を回復候補にする。
候補なしなら行動再選択。(地獄の使いに再選択が多い)

ザオリクは回復候補がいなければ行動再選択。

仲間を呼ぶ(同種のみ)
1/2で失敗。残りの1/2は成功か行動再選択。
行動再選択されるのは生存敵数が7体の場合と必要な空きスペース「2*横サイズ+1」がない場合
現在7体以上生存していれば等確率で失敗か行動再選択になる。


打撃系は行動再選択されない。
痛恨の一撃:痛恨か通常攻撃になる。痛恨率1/32。痛恨ダメージ: 攻撃力*(55~65)/64
毒攻撃:毒確率1/4 攻撃を回避できるのはダメージが0かマヌーサがかかっている場合
眠り攻撃:眠り率3/8 回避できるのはダメージが0かマヌーサがかかっている場合
(通常回避や身かわしによる回避率は無視されるので、マヌーサ状態では回避率1/2)

集中攻撃
再選択されないが一度集中攻撃が選ばれると通常攻撃で同じ相手しか狙わなくなる。
行動はターン開始時に選択されるが、行動直前に書き換えられる。
しかし防御が攻撃に変更されてもフラグが解除されないのでリビングデッドは防御攻撃することがある。
”他の敵の行動には影響を与えない”
(フラグ設定など:集中攻撃058A24,防御058E68,行動変更0584B3)

逃げる
味方が逃げ確レベルの時やメタル系の敵の行動であれば必ず逃げ出す。
味方が逃げ確ではない場合通常攻撃に変更される。
逃げ確条件は「エンカウントテーブルレベル+5≦勇者orローレレベル」

ルカナン
「敵の行動時に」味方全員の防御が0であれば行動再選択

スクルト
・行動再選択の条件05883D
判断力0だとスクルト実行(MP/魔封じも考慮しない)
判断力1以上の場合
閾値は敵の初期防御の2倍で、最大255。
すべての敵の現在の防御力が閾値以上の場合には行動再選択される。
・実行処理05887E
スクルト後の防御力は
「初期DEF*2(MAX255)」と「現在の敵のDEF + 初期DEF/2(最大254)」で小さいほうを採用

ザラキ058984,メガンテ0589BD
(MP不足・呪文封じ以外では)必ず実行

メガンテ0589BD
行動中の敵のHP < (左端の敵の最大HPの1/8)のとき実行
行動中の敵のHP ≧ (左端の敵の最大HPの1/8)であれば行動再選択
左端アークデーモン→max230なのでデビルロードは28未満の時メガンテを使用
左端デビルロード→max138なのでデビルロードは17未満の時メガンテを使用
左端ブリザード→max92なのでデビルロードは11未満の時メガンテを使用
左端フレイム→max65なのでデビルロードは8未満の時メガンテを使用

ふしぎなおどり058A2D
必ず実行

防御
集中攻撃の所に書いたように防御攻撃に変更されることがある。(それ以外の再選択はない?)

未確認→防御・Dummy32


更新:2011.02.28ルカナンとスクルトを追加
更新:2011.03.04ザラキ・メガンテを追加。痛恨のダメージの偏りは誤解だったので削除。
更新:2011.03.05不思議な踊り追加
更新:2011.03.29メガンテの内容修正

敵の行動:行動タイプ7(特殊ローテーション)

9月頃に書いた記事での行動タイプ7の説明が不十分だったので以下に説明を記載する。
行動タイプ7の敵はきとうしとスカルナイトのみである。
このタイプは1体で登場した場合の行動は番号0から順に使う単純なローテーションとなる。
同一グループに複数の敵が生存している場合は生存数に応じて行動を選択する特殊なローテーションを取る。
ここでは主に後者の場合について説明するが、祈祷師が複数体出る場所はかなり限られている。
スカルナイトについても攻撃とルカナンしか設定されていないし攻撃対象を自由に選べるわけでもない。
通常はまず役に立たない内容だと思われる。(需要があるとすれば改造目的だろうか)

・スカルナイトA,B,C,Dが登場した場合
初ターンはAから順に番号0,1,2,3が選択される。
2ターン目以降の行動では、生存敵数Xと前ターンの自分の行動Yを足した番号X+Yが選択される。

例1.生存数Xが4のままの場合を考える。
2ターン目にであればAはX+Y=4+0となり、行動番号4を選択する。同様にB,C,Dは5,6,7を選択する。
行動番号は0~7までなのでX+Yが8以上になれば8で引けば良い。
3ターン目のAの行動は4+4-8=0で、B~Dは1,2,3となる。

例2.敵が死亡(逃亡)する場合
1ターン目でBが,3ターン目でDが死んだ場合
1ターン目:A→0,B→1,C→2,D→3(X=4)
2ターン目:A→3,C→5,D→6(X=3)
3ターン目:A→6,C→0,D→1(X=3)
4ターン目:A→0,C→2(X=2)
5ターン目:A→2,C→4(X=2)

例3.行動再選択される場合
スカルナイトは行動2,4,7でルカナンを使うがMP不足であると行動が直前で再選択される。
この際も次の行動はX+Yとなる。
1ターン目:A→0,B→1(X=2)
(2ターン目開始時:A→2,B→3(X=2))
Aの行動時に再選択されて4が選ばれるがこれもルカナンなので6が選択される
2ターン目行動時:A→6,B→5(X=2)
(3ターン目開始時:A→0,B→7(X=2))
3ターン目行動時:A→0,B→1(X=2)

敵の耐性とマヌザラ

<耐性判定実行部>$05A532-$05A547
乱数<耐性閾値のとき有効    (ただし耐性0の場合は100%有効とされ乱数を取得しない)
  __0__ __1__ __2__ __3__ __4__ __5__ __6__ __7__
耐性閾値 FF D9 99 7A 5C 3D 1E 0
耐性閾値 255 217 153 122 92 61 30 0
確率(%) 100 84.77 59.77 47.66 35.94 23.83 11.72 0
ラリホー・マホトーン・ザラキ使用時に状態異常にかかっている敵では判定処理が飛ばされる。
ザラキはマヌーサにかかっているかどうかが確認される。

【マヌザラ(*)】
既状態異常判定($05A50D-05A531)では敵に呪文が効いているかどうかの判定がラリホー・マホトーン・ザラキでのみ行われる。
ザラキ使用時に参照されるメモリはマヌーサのものである。
呪文属性がラリホー(1)・マホトーン(2)・ザラキ(3)・マヌーサ(4)の順に並んでおり、ザラキ(3)とマヌーサ(4)を間違えたものと考えられる。
同じ敵にマヌーサをかけてもエフェクトを何度でも見ることができ、マヌーサ状態の敵に確実にザラキが効くのはこれが原因だと思われる。
既状態異常状態では耐性の取得、耐性判定実行部での呪文が有効かどうかの判定が飛ばされ呪文有効時と共通の処理が行われる。
(Aレジスタの値は異なる)
プログラムはメッセージ表示処理を挟むなどして把握するのが難しいため、この部分を書き換えて確認してみた。
$05A516を03から04に書き換えると、マヌーサのかかった敵にはエフェクトとメッセージが表示されなくなった。
またマヌザラを行っても耐性判定実行部の処理が行われることも確認できた。
ついでに耐性値を書き換えてHP255以上の敵には254ダメージと表示されることも確認した。
よってマヌザラの原因は敵がマヌーサ状態か確認するプログラムでマヌーサとザラキの呪文属性を間違えたためであると結論付けられる。

グレムリンバグ回避に役立つ情報

2014.01.19追記: 手っ取り早くバグの対策をしたい場合は最近公開した判定ツールを使う事を勧めます。

【大灯台のエンカウントテーブル、最大出現数(*)、敵の横サイズ】
file.baa.game-ss.com/table_gurebagu.txt
 "ランダム0""ランダム1""ランダム2""ランダム単数""単一グループ""単体出現""サブパーティ"
大灯台2-4F サーベルウルフ ミイラおとこ ゴーゴンヘッド アンデッドマン ドラゴンフライ (なし) なし
最大出現数(*) 4 4 4 (4) 5 0  
横サイズ 7 6 5 6 5    
大灯台4-7F アンデッドマン ゴーゴンヘッド ラリホーアント グレムリン ドラゴンフライ ゴールドオーク なし
最大出現数(*) 4 4 4 (4) 5 1  
横サイズ 6 5 4 5 5 8  
アレフガルド南東 ポイズンキッス スモーク タホドラキー サーベルウルフ サーベルウルフ オーク  
最大出現数(*) 4 5 5 4 4 2  
横サイズ 5 5 4 7 7 7  
(*; 敵のサイズを考慮していない。例え10であっても出現する敵の合計数(1-7?)を超える敵も出現しない)


確実に回避可能な直前エンカウントの内容を羅列】
LapsePointerさんの出現モンスター決定に関する解析結果から次のことが言える。
・4体のエンカウント。
・"ランダム0-2"がグループ0に3体。(4体目のメモリが1に書き換わる)
・"ランダム0-2"がグループ0に2体で、グループ1に"ランダム単数"が出た場合。(4体目のメモリが2に書き換わる。0012)
・"ランダム0-2"がグループ0に1体で、グループ1に"ランダム単数"が出た場合。(3体目までしか書き換わらなくても012なので問題ない)
・グループ2に"ランダム単数"が出た場合(3体3グループ)(0123)
直前エンカウントが、「4体」、「"ランダム0-2"がグループ0に3体」、「グループ0以外に"ランダム単数"」のいずれかであればグレバグは確実に避けられる。

【敵の横サイズと出現数】
判定方法:
全ての敵にグラフィックのサイズが割り当てられており、横サイズの2倍と個体間の幅を合計を計算してスペースに余裕があるかどうか判定している。
個体間の幅は同種同グループでは1それ以外は2であり、出現可能なのは左の敵から順に足した合計サイズが53以下となる敵だけ(横サイズの合計が24以下というのは間違いでした)

出現する例;ゴーゴンヘッド1、ミイラ男2、アンデッドマン1
サイズの合計(5+6+6+7)*2+2+1+2=53
出現しない例;ゴーゴンヘッド1、ミイラ男1、アンデッドマン1、サーべウルフ
サイズの合計(5+6+6+7)*2+2*3=54>53

【大灯台2F3Fで出現時の敵構成から4体目のメモリが書き換わっていないことがわかる事例】
→直前エンカウントがこの場合だとグレバグの発生率が高まる。
→もう一つ前のエンカウントで4体目のメモリが書き換わっていれば問題ない。
これは画面サイズの余裕がもう一体分あるのに出現しない場合である。

2体以下なら常に余裕があるので(2,)3,4体目のメモリは書き換わらない。
以下、3体出現時について述べる。
"単一グループ"
・ドラゴンフライ3体(空き53-32=21)
"ランダム"系(必ず複数のグループで敵の決定が行われる)
3体2グループ
・ゴーゴンヘッド2、ミイラ男1[順不同](空き53-35=18 >=16)
・アンデッドマン1、ゴーゴンヘッド2(空き18 >=16)
・ゴーゴンヘッド2、サーベルウルフ1[順不同](空き53-37=16 >=15or13)
・ゴーゴンヘッド1、ミイラ男2[順不同](空き16 >=16)

3体3グループ(最終エンカウントであればグレムリンバグは回避される)
・ゴーゴンヘッド1、サーベルウルフ1、ミイラ男1(空き13 >=13)
・サーベルウルフ1、ゴーゴンヘッド1、ミイラ男1(空き13 >=13)
カレンダー
09 2017/10 11
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]