スーパーファミコン板「ライブ・ア・ライブ」のデータと解析です。内容の正確性は保証できません。
リメイク版のデータではありません。
ある程度プログラミングの知識がある人向けです。
ライブ・ア・ライブ
ROM容量は16メガビット(2048キロバイト)
メモリ割り当てはHiROM
SRAM 64キロビット(8キロバイト)+バッテリーバックアップ
メモリアドレスは基本的に、$00:0000のように、
「バンク1バイト:アドレス2バイト」
の形式で記載する。
スーパーファミコンの仕様は、
https://github.com/akatsuki105/snes-docs-ja
https://donkeyhacks.zouri.jp/html/Ja-jp/snes/index.html
など参照のこと。
参考ウェブサイト様
https://rodgersia.ninpou.jp/livealive/
http://zsnsk.sakura.ne.jp/livealive/battle_system.html
https://livealive.client.jp/sfc/analysis/index.html
http://www.codefrontier.com/kaizou_code/sfc_livealive/code.htm
https://wikiwiki.jp/snes007/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%BB%E3%82%A2%E3%83%BB%E3%83%A9%E3%82%A4%E3%83%96
https://donkeyhacks.zouri.jp/html/Ja-jp/index.html
https://github.com/akatsuki105/snes-docs-ja
https://wiki.superfamicom.org/
他
リメイク版関係の解説と解析は以下が詳しい。
https://livealive.client.jp/battle00.html
https://livealive.client.jp/etc/index.html
演算子記号
四則演算記号は基本的に+, -, *, /で表す。
その他演算子は以下。
| max() | 引数として与えられた数値のうち最大値を返す |
| min() | 引数として与えられた数値のうち最小値を返す |
| trunc() | 引数として与えた数値の小数点以下切り捨て |
| mod | 剰余演算子(割り算の余り) |
| & | ビット論理積演算子 AND |
| | | ビット論理和演算子 OR |
モトローラ系アセンブラ基準で16進数は頭に$、2進数は頭に%
1バイト(8ビット)のデータで、ビット毎に分けて説明する時は、上からBit0,1,2,3,4,5,6,7とする。
例:上4ビット分だったらBit0~3、下4ビット分ならBit4~7
アセンブリ言語のビット演算の都合で、計算に割り算を含む場合は割り算の都度、必ず小数点以下切り捨てで計算すること(論理シフトの右シフト相当)。
つまりtrunc()だが、計算式が見づらくなりそうな場合はtrunc()を省く。
計算一覧
詳細は各ページにて。
ダメージ量計算
単発ダメージ量(基礎値)
trunc((trunc(min(max((8+技LV+自LV-敵LV),1),24)*LV差係数/8)+trunc(自身依存ステータス*自身依存係数))*trunc((255-敵依存ステータス)/2)/256)*2+攻撃力
自LV:バフ・デバフ込の現在値
敵LV:バフ・デバフ込、向き補正込の現在値
技LV, LV差係数, 自身依存ステータス, 自身依存係数, 敵依存ステータスは技データ参照
敵の攻撃力は0
攻撃力の加算は、攻撃力依存の技のみ
単発ダメージ量(戦闘乱数込み)
単発ダメージ量(基礎値) + 単発ダメージ量(基礎値)/4 * 乱数(0~255) / 256
=単発ダメージ量(基礎値) + 単発ダメージ量(基礎値) * (0~63)/256
乱数により、単発ダメージ量(基礎値)に1~1.25倍のブレが生じることになる。
総合ダメージ量
単発ダメージ量*ヒット数-防御力*防御依存係数
敵の防御力は0
回避属性でのダメージ軽減
trunc(総合ダメージ量/2)+1
命中判定
技LV+自LV ≧ trunc(乱数(0~255)* 敵LV / 256)
なら命中
※自LV,敵LVはバフ・デバフ・向き補正込み
※回復技は必中
※技の「必中状態異常」と敵の状態異常が一致していたら必中
※敵が「眠り」または「マヒ」なら必中
敵の攻撃時、技の射程範囲内に複数の味方キャラがいる場合、戦闘乱数で初期判定位置マスを決めて、そこから右→下と味方キャラを検索し(右下まで移動したら左上に移動)、最初に当たった味方キャラをターゲットにする。命中判定>敵のターゲット選択参照
攻撃技のヒット数
基本は技に設定されたヒット数。
ヒット数パターンにより、設定されたヒット数より低い場合がある。
レベルで決まるパターンだと
- trunc(ヒット数 * min(LV現在値, 15) / 16) + 1
ランダムで決まるパターンだと
- trunc(ヒット数 * (0~255の乱数) / 256) + 1
技の効果範囲内に複数の攻撃対象がいて、範囲攻撃かつ、多段ヒットする場合、ターゲットは範囲内から等確率で決まる。
範囲内の敵に0番から順に番号をふって、
trunc(乱数(0~255) * 範囲内の敵の総数 / 256)
でターゲットを決める。
回復技
味方と敵で回復量計算式が異なる。
また、どの回復技にも命中時に眠り状態を回復させる効果がある。
(攻撃技を当てると当てた相手の眠り状態が回復するのと同じ)
向き補正などはなし、回避属性影響なし、必中
味方に回復技を使用した時の単発回復量
trunc(LV差係数*4*(256~319)/256)
敵に回復技を使用した時の単発回復量
trunc(LV差係数*(256~319)/256)
※(256~319)/256は1以上1.25未満の乱数
総合回復量
単発回復量*ヒット数
向き補正
戦闘中、敵味方すべてに、右上・右下・左上・左下の4方向の向きが設定されている(ほとんどは見た目でわかる)。
また、向いている方向3方向が正面、横が側面、後方3方向が背面になる。
側面や背面から攻撃された場合、敵味方すべてに設定された側面補正または背面補正の値をレベルから引いてダメージ量などを計算する。
引き算の結果、レベルが負の値になる場合は0に補正。
吹き飛ばし・後退・向き変え(回転)
使用者に対しての吹き飛ばし・後退・向き変え(回転)は確実に発動。
攻撃相手に対しては、確率3/4で成功。
敵タイプがOBJECT(しょく台など倒さなくてもよい障害物の敵)、オディオモール、ピュアオディオは向き変え・吹き飛ばし無効。
状態異常
技の追加効果か武器による追加効果で発生。
既に該当の状態異常が発生している場合でも、状態異常が起きるかどうか判定し、該当の状態異常発生時間を上書きする(加算はされない)。
眠り状態の相手を攻撃または回復すると、眠り状態から回復。
眠りと麻痺の敵には攻撃が必中。
LVに向き補正はかからない。
技による状態異常の発生条件
敵が該当の状態異常を無効化せず、かつ、該当の状態異常に既にかかっていない時に、以下のように判定。
多段ヒット技の場合でも、判定は各状態異常につき1回。
状態異常の判定値
= (自能力値 + 乱数(0~255)*自能力値/256)/2 - 敵能力値
状態異常の判定値が正の値の時、続けて状態異常継続時間を計算。
状態異常継続時間
= min(状態異常の判定値*状態異常時間係数/8 + 自能力値/敵LV, 255)
状態異常継続時間が17以上の時、該当の状態異常が発生。
武器による状態異常の発生条件
該当する武器は「ムラサメ」(眠り)、「ヨシユキ」(マヒ)のみ。
敵が該当の状態異常を無効化せず、使用技に状態異常の効果がない、かつ、武器の攻撃力依存の時に、
乱数(0~255) mod 256 - 敵LV(現在値)
= 乱数(0~15) - 敵LV(現在値)
が0以上なら、状態異常が発生
(敵LVはバフ・デバフ反映)
状態異常継続時間 = 自LV(現在値)*8 mod 256
※自LV(現在値)*8の計算結果の繰り上がりを考慮していないため、レベル32以上で状態異常発生時間のオーバーフローが起きてしまう。
毒状態のダメージ量
毒状態のダメージ量は
max(trunc(現在HP/16), 1)
行動ポイントが255以上から255未満に減って味方ターンが回ってきた直後、すべての敵味方の状態異常をチェックし、毒状態のキャラは毒のダメージをくらう。
ステータス変動(バフ・デバフ)
LV/力/速/体/知の変動
技によるステータス変動の成功判定
複数のステータスを変動させる場合はステータス毎に乱数判定。
敵と味方で判定式が異なる。
レベルはバフ・デバフ反映。
敵:
(0~63)の乱数 > 敵LV + 16
の時成功
味方:
(0~63)の乱数 > max(味方LV - 背面補正, 0) + 16
の時成功
味方キャラは背面補正分、バフやデバフにかかりにくいことになる。
ステータス変動値
度合いが4種類ある。
| 下降・大 | 元の値 * 0 |
| 下降・中 | 元の値 * 1/2 |
| 下降・小 | 元の値 * 3/4 |
| 上昇 | 元の値 * 5/4 + 1 |
復元処理
割合での回復ではなく固定値で回復していく。
| 行動 | レベル復元 | 力速体知復元 |
|---|---|---|
| 技発動時 | 1 | 16 |
| 1マス移動 | 0 | 4 |
| Yボタン足踏み | 0 | 4 |
| LR向き変え | 0 | 2 |
| 敵味方行動不能※ | 0 | 1 |
※味方全員がタメ技をタメていて敵も攻撃できる状況ではない時など。
1フレームにつき1復元。
(同時にタメ時間も1フレームにつき1減る)
画面表示されないが戦闘中にYボタンを押すと1マス移動分と同じだけ時間経過する。
戦闘乱数
直前の4個の乱数をAn-4, An-3, An-2, An-1として、新たな乱数Anを計算する漸化式は
An = trunc( (An-3 * 256 + An-4 ) / 13) mod 256
マップ乱数
直前の乱数をCn-1として、新たな乱数Cnを計算する漸化式は
マップ乱数
乱数(8bit) = (X * ( ($3D09 × (Cn-1 + 1)) & $FFFF) & $00FF0000) / $10000
Cn = ($3D09 × (Cn-1 + 1)) & $FFFF
※すべて16進数
※Cnは16bit
※Xは「生成したい乱数の最大値+1」(16進数)
ゲーム内では
- Xに$63を入れて0~98の乱数生成
- Xに$100を入れて0~255の乱数生成
の2パターンが使われている。
※マップ乱数のイベント
- テレポート
- アイテム改造
- たい焼き屋の手伝い時の客
- チビッコハウスの教室のオルガンの曲
- チビッコハウスの物干し竿下のアイテムの取得順序
- 西部編・デロスに罠アイテムを依頼した時の行動
取得経験値
敵パーティ自体にレベルが設定されており(敵PtLVとする)、戦闘終了時にフィールドに残っていた味方キャラ1人ずつ以下の計算で決まる。
ただし心山拳老師、キューブ、タロイモは経験値が得られない。
敵PtLV = 0の時
- 取得経験値 = 0
敵PtLV>味方キャラレベル、かつ経験値が増える行動を取った場合
- 取得経験値 = ( 敵PtLV - 味方キャラレベル ) * 16 + 8
敵PtLV≦味方キャラレベル、または経験値が増えない行動を取った場合
- 取得経験値 = trunc(敵PtLV / 2) + trunc(16 / 味方キャラレベル)
※ただし計算結果が0の時は、取得経験値 = 1にする
上計算式における、「経験値が増える行動」とは、以下を指す。
- 技を出す。反撃技や攻撃をミスした場合、敵のいないマスに出して空振りになった時も含む。
- タメ時間のある技は、待機中のまま戦闘が終わったり、敵に阻止されて中断されると無効。
- アイテムを使う。
以上で計算された経験値を、キャラの現在の経験値を足して、100を越えたらレベルが1上がる。レベルの最大値は99。
レベルアップ時に余剰の経験値が出ても繰り越されない。
戦闘の特殊処理
現代編のワタナベイベント
グレート・エイジャが左上向きの状態で、高原 日勝が「カミツキ(青)」をくらった時に10/256(約4%)の確率で発生。
命中しなかった場合、使用者がダメージ
「ズドゲラデイン」「Fシュタイナー」「トルネードプレス」で外した場合、使用者がくらうダメージは、その技を背面からくらった時で計算される。
ラブヒーリング
回復量は回復技計算(マザーテイル使用時と味方が「マジカルウッド」で発動時とで回復量計算式が変わる)。
「ラブヒーリング」使用者のダメージ量 = 範囲内のキャラの「回復後のHP-回復前のHP」を合計した値。
ただし回避属性でダメージ量を軽減可能。
オディオモール
攻撃・回復ともに1ヒットあたり1ダメージに固定(オディオモールのみの専用処理)。
「ほいこーろー」はダメージ量が
「ほいこーろー」のSTEP数 + 1
になる。
ハルマゲドン
最終編オルステッド主人公時の戦闘のみ、
操作キャラ最大HP/4 - 操作キャラ現在HP ≧ 0
の時、つまり現在HPが最大HPの1/4以下で「逃げる」コマンドが「ハルマゲドン」コマンドに変化。
ただし「ハルマゲドン」コマンド出現後にHPが最大HPの1/4以上に回復すると、表示だけ「逃げる」に戻り、選択すると「ハルマゲドン」発動。