FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

白魔法を使わないのにフリオの精神が上がる現象の解析

パーティーが敵の全体攻撃を受けるとフリオの精神が上がる現象を解析した。


敵がパーティーに全体攻撃時、フリオの白魔法使用カウンタが++されるルーチン

 * フリオの白魔法使用カウンタが++されるルーチン


----------------------------------------------------------------------------
 
・問題の現象は、敵の特殊攻撃使用対象選択ルーチンに原因があった。



*問題の箇所

$A571:A0 2B   LDY #$2B
$A573:B1 44   LDA ($44),Y @ $7E65 = #$01   7E65 01 ;敵1 行動対象 敵全体 ;
                                      01=敵全体 02=敵単体 05=自分 06=味方全体
$A575:C9 01   CMP #$01                ;敵全体
$A577:D0 05   BNE $A57E               ;01でなければ $A57Eにジャンプ
$A579:A9 08    LDA #$08                ;08 ;攻撃全体化フラグ
$A57B:4C 0C A6 JMP $A60C             ; $A60Cにジャンプ

$A60C:AA     TAX                        X=08
$A60D:FE 3B 7D INC $7D3B,X @ $7D43 = #$00   7D43 ++ ;フリオ 白魔法使用カウンタ 
                                 ; $7D3Bは魔法攻撃被対象カウンタ
$A610:A0 2B   LDY #$2B
$A612:91 44   STA ($44),Y @ $7E65 = #$01      7E65 08;敵1 攻撃対象


上のルーチンを見ると
 特殊攻撃の行動対象フラグが01の場合、行動対象を全体化するフラグを立てた(Aに08をロード)あと、
 その値+7D3B、すなわちを7D43(フリオの白魔法使用カウンタ)を++している。


 結論

 フリオが白魔法を使用しないにもかかわらずフリオの精神がアップする場合があるのは、
 敵の全体特殊攻撃時にフリオの白魔法使用カウンタを増加させているのが原因。


--------------------------------------------------------------------------------

また、今回の解析をして、
敵が特殊攻撃を使う場合とパーティーが特殊攻撃を使う場合(アイテムを使用する)ではルーチンは
別であることが分かった。

あと、味方混乱時の行動決定ルーチンと敵混乱時の行動決定ルーチンも調べてみた。


-----------------------------------------------------------------------
味方 特殊攻撃時ルーチン  * 味方 特殊攻撃 行動対象決定ルーチン




$321ECを [A9 06]にし、$321F5を [09 80 D0 07] にすれば敵単体攻撃可能(ランダムで1体,動作確認済み)



------------------------------------------------------------------
* パーティーメンバー混乱時 行動対象選択ルーチン * 味方 混乱時行動決定ルーチン


 ・混乱したパーティーメンバーは必ずパーティーメンバーに攻撃する。


-------------------------------------------------------------------------------
* 敵 混乱時 対象選択ルーチン   * 敵 混乱時行動決定ルーチン



 ・混乱した敵は必ず同士打ちをする。



===============================================================================

*蛇足


 ・パーティーの被魔法対象カウンタを++するルーチンを組んでみた。


  敵全体特殊攻撃時パーティーの被魔法対象カウンタがインクリメントされるルーチン(動作確認済み)

  * 敵全体魔法時 パーティー被魔法対象カウント 新ルーチン


  ファイルの拡張子は .TXT になっていますが、バイナリファイルです。バイナリエディタで開いてください。


・使い方

まず $A60C で#54BYTS分確保できるアドレスへサブルーチンジャンプする。
自分がテストしたときは ROMの$3FEF0にルーチンを貼り付けました。
この場合なら $3261Cに 20 F0 FE EA と打ち、 $3FF00に新ルーチンを上書き貼り付けすればOKです。


新ルーチンの内容は以下のとおりです。#54BYTESも使ってしまったけど、「もっとコンパクトなルーチンが組めるんじゃないの?」
という方がいらっしゃればアドバイスください。


---------------------------------------------------------------------------------

00: 48 :PHA           ;行動対象をプッシュ
01: A9 00 :LDA #$00     ;A=00 ;パーティーIDカウンタ

02: 48 ;PHA          ;パーティーIDカウンタをプッシュ

03: A9 7A :LDA 7A
04: 85 80 :STA 0080      ;0080 7A
05: A9 7D :LDA 7D
06: 85 81 :STA 0081      ;0081 7D 7D7A

07: A0 08 ;Y=08         ;状態永久変化INDEX

08: B4 80 ;LDA 0080,Y    ;状態永久変化取得
09: 29 C0 ;AND $C0      ;石化死亡チェック   ;パーティーメンバーの状態チェック、
                                 石化、死亡ならインデックスを++し、次のキャラの状態取得

0A: F0 04 ;BEQ $        ;石化、死亡でなければ0Eにジャンプ

0B: 68 ;PLA           ;石化 死亡の場合 パーティーIDカウンタをプル
0C: AA :TAX           ;X=パーティーIDカウンタ
0D: 10 05 :BPL $        ;11にジャンプ

0E: 68 ;PLA              ;パーティーIDカウンタをプル
0F: AA :TAX             ;X=パーティーIDカウンタ
10: FE 3B 7D :INC $7D3B,X   ;7D3B,X を++ ; $7D3Bは魔法攻撃被対象カウンタ
11: E8 :INX              ;パーティーIDカウンタを++
12: 8A :TXA           ;A=X
13: 48 :PHA           ;パーティーIDカウンタをプッシュ
14: C9 04 :CMP $04,     ;04と比較
15: F0 0F :BEQ $       ;04なら1Eにジャンプ 終了

16: A5 80 ;LDA $80     ;04でない場合 ;パラメータアドレス加算
17: 18 ;CLC
18: 69 30 ;ADC $30     ; +$30 ;次のキャラクターのアドレス
19: 85 80 ;STA $80     ; 0080
1A: A5 81 ;LDA $81
1B; 69 00 ;ADC $00
1C; 85 81 ;STA $81          ;0081
1D: D0 DB ;BNE XX           ;08にジャンプ

1E: 68 :PLA              ;パーティーIDカウンタをプル
1F: 68 :PLA               ;行動対象をプル

20: 60 :RTS              ;サブルーチンからリターン

-------------------------------------------------------------------------------------------------



スポンサーサイト

コメントの投稿

非公開コメント

カウンタ

プロフィール

Anonymous

Author:Anonymous
ファミコンゲーム解析、同人ゲーム制作

免責 
本ブログの管理者は第三者がこの
ブログでDLしたツールを使用する
ことによって発生した如何なる
事件・損害に対して全く責任を
負いません

最新記事
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。