ガライが仲間になることで、「ガライが仲間にいる場合」を考慮しないといけない場所が出てきます。
具体的には、
- すごろく開始・終了時の整列(1-4のみ、5はストーリー進行上ありえないので除外)
- すごろく中
- すごろく場4ごほうびフロア中
- ロマリア王即位中
- ちきゅうのへそ挑戦中
- アッサラームぱふぱふ中
です(下4つはテストプレイしてくれた方が見つけてくれたものでしたorz)。これらのケースについて「PCが1-4人のとき」それぞれについてテストし、バグがあれば修正しないといけません(超面倒くせー)。また、ガライがいない場合にも問題がないかテストする必要があるので、テストの範囲は結構多くなります。
- SR: $06F5DA PC描画タイプ初期化?(新SR)
| 略 |
|
|
|
| 06F5E7 |
PHX |
Push X |
|
| 06F5E8 |
TAX |
X=A |
|
| 06F5E9 |
JSL $CDF9D0 |
SR: $0DF9D0 |
アッサラーム2F-2ぱふぱふ中か(該当c=on) |
| 06F5ED |
BCS #$2A |
if(c==on) goto $06F619 |
|
| 06F5EF |
JSL $CDF968 |
SR: $0DF968 |
すごろく場4のご褒美フロアか(該当c=on) |
| 06F5F3 |
BCS #$24 |
if(c==on) goto $06F619 |
|
| 06F5F5 |
JSL $CDF95C |
SR: $0DF95C |
ロマリア王に即位中か(該当c=on) |
| 06F5F9 |
BCS #$1E |
if(c==on) goto $06F619 |
|
| 06F5FB |
JSL $CDF948 |
SR: $0DF948 |
ランシールひとりチャレンジ中でランシール以外のマップか(該当c=on) |
| 06F5FF |
BCS #$18 |
if(c==on) goto $06F619 |
|
| 06F601 |
JSL $C3FF09 |
SR: $03FF09 |
すごろく中か(該当c=on) |
| 06F605 |
BCS #$12 |
if(c==on) goto $06F619 |
|
| 06F607 |
JSL $CCFF1C |
SR: $0CFF1C |
ガライが仲間になっているか(該当c=on) |
| 06F60B |
BCS #$06 |
if(c==on) goto $06F613 |
|
| 06F60D |
JSL $CDF97C |
SR: $0DF97C |
5人目を透明にするべき条件か(該当c=on) |
| 06F611 |
BCC #$06 |
if(c==off) goto $06F619 |
|
| 06F613 |
LDA #$0002 |
A=#$0002 |
5人目を追加するモード |
| 06F616 |
PLX |
Pull X |
|
| 06F617 |
SEC |
c=on |
|
| 06F618 |
RTS |
return |
|
| 06F619 |
TXA |
A=X |
|
| 06F61A |
PLX |
Pull X |
|
| 06F61B |
CLC |
c=off |
|
| 06F61C |
RTS |
return |
|
これでガライが仲間になっていても上記のケースで後ろにガライがついてくることがなくなります。他にはすごろく開始時などにもともと存在しなかった5人目の動きを実装する必要があります。
- SR: $0CD02F すごろく場1NPC情報設定
| 略 |
|
|
|
| 0CD04B-D |
NOP |
|
|
| 0CD04E |
JSL $CCFF55 |
SR: $0CFF55 |
すごろく場1NPC設定(サブ) |
| 略 |
|
|
|
- SR: $0CFF55 すごろく場1NPC設定(サブ)(新SR)
| 0CFF55 |
LDA #$0549 |
A=#$0549 |
|
| 0CFF58 |
JSL $C75828 |
SR: $075828 |
NPC1設定 |
| 0CFF5C |
JSL $CCFFCA |
SR: $0CFFCA |
パーティ人数が5人か(5人c=on) |
| 0CFF60 |
BCC #$07 |
if(c==off) goto $0CFF69 |
|
| 0CFF62 |
LDA #$059E |
A=#$059E |
|
| 0CFF65 |
JSL $C75828 |
SR: $075828 |
NPC1設定 |
| 0CFF69 |
RTL |
return |
|
- SR: $0CFFCA パーティ人数が5人か(5人c=on)
| 0CFFCA |
JSL $C4297C |
SR: $04297C 引数:1#$01 引数:2#$FF |
パーティ人数を取得 |
| 0CFFD0 |
CMP #$0004 |
A==#$0004? |
|
| 0CFFD3 |
BNE #$09 |
if(z==off) goto $0CFFDE |
|
| 0CFFD5 |
JSL $CCFF1C |
SR: $0CFF1C |
ガライが仲間になっているか(該当c=on) |
| 0CFFD9 |
BCC #$03 |
if(c==off) goto $0CFFDE |
|
| 0CFFDB |
SEC |
c=on |
|
| 0CFFDC |
BRA #$01 |
goto $0CFFDF |
|
| 0CFFDE |
CLC |
c=off |
|
| 0CFFDF |
RTL |
return |
|
| 略 |
|
|
|
| 0D9C8D |
JSL $CDF13B |
SR: $0DF13B |
パーティ人数が5人目も含めて1人か調べる(1人c=on) |
| 略 |
|
|
|
- SR: $0DF13B パーティ人数が5人目も含めて1人か調べる(1人c=on)
| 0DF13B |
JSL $CC7B5A |
SR: $0C7B5A |
パーティ人数が1人か調べる(1人c=on) |
| 0DF13F |
BCC #$09 |
if(c==off) goto $0DF14A |
|
| 0DF141 |
JSL $CCFF1C |
SR: $0CFF1C |
ガライが仲間になっているか(該当c=on) |
| 0DF145 |
BCS #$03 |
if(c==on) goto $0DF14A |
|
| 0DF147 |
SEC |
c=on |
|
| 0DF148 |
BRA #$01 |
goto $0DF14B |
|
| 0DF14A |
CLC |
c=off |
|
| 0DF14B |
RTL |
return |
|
- SR: $0DF06A NPC1_MoveSR_059E(5人目のNPC)(新SR)
| 0DF06A |
LDA $362A |
A=$362A |
|
| 0DF06D |
AND #$0002 |
A&=#$0002 |
すごろく終了時フラグON? |
| 0DF070 |
BNE #$02 |
if(z==off) goto $0DF074 |
|
| 0DF072 |
BRA #$06 |
goto $0DF07A |
|
| 0DF074 |
JSL $CDF07F |
SR: $0DF07F |
すごろく場1PC5人目座標設定処理 |
| 0DF078 |
BRA #$04 |
goto $0DF07E |
|
| 0DF07A |
JSL $CDF0A3 |
SR: $0DF0A3 |
すごろく場1PC5人目移動処理 |
| 0DF07E |
RTL |
return |
|
- SR: $0DF07F すごろく場1PC5人目座標設定処理
| 0DF07F |
LDA $353F |
A=$353F |
|
| 0DF082 |
AND #$0008 |
A&=#$0008 |
? |
| 0DF085 |
BNE #$02 |
if(z==off) goto $0DF089 |
|
| 0DF087 |
BRA #$19 |
goto $0DF0A2 |
|
| 0DF089 |
LDA $344E |
A=$344E |
|
| 0DF08C |
JSL $C74CD0 |
SR: $074CD0 |
キャラクター表示? |
| 0DF090 |
LDA #$0021 |
A=#$0021 |
|
| 0DF093 |
LDX #$007F |
X=#$007F |
|
| 0DF096 |
JSL $C75305 |
SR: $075305 |
キャラクター出現座標を指定 |
| 0DF09A |
LDA #$0000 |
A=#$0000 |
|
| 0DF09D |
JSL $C7518C |
SR: $07518C |
|
| 0DF0A1 |
COP |
goto $00FFE4 |
|
| 0DF0A2 |
RTL |
return |
|
- SR: $0DF0A3 すごろく場1PC5人目移動処理
| 0DF0A3 |
JSL $CCD7EA |
SR: $0CD7EA |
|
| 0DF0A7 |
COP |
goto $00FFE4 |
|
| 0DF0A8 |
JSL $CDAEB1 |
SR: $0DAEB1 |
カウンタが1000になるまで待機 |
| 0DF0AC |
JSL $CDF13B |
SR: $0DF13B |
パーティ人数が5人目も含めて1人か調べる(1人c=on) |
| 0DF0B0 |
BCS #$02 |
if(c==on) goto $0DF0B4 |
|
| 0DF0B2 |
BRA #$02 |
goto $0DF0B6 |
|
| 0DF0B4 |
BRA #$18 |
goto $0DF0CE |
|
| 0DF0B6 |
JSL $CDF0FB |
SR: $0DF0FB |
PC5人目を移動対象にする? |
| 0DF0BA |
LDA $353F |
A=$353F |
|
| 0DF0BD |
AND #$0008 |
A&=#$0008 |
|
| 0DF0C0 |
BNE #$02 |
if(z==off) goto $0DF0C4 |
|
| 0DF0C2 |
BRA #$0A |
goto $0DF0CE |
|
| 0DF0C4 |
JSL $C74D4E |
SR: $074D4E |
|
| 0DF0C8 |
LDA $C18D |
A=$C18D |
|
| 0DF0CB |
STA $344E |
$344E=A |
|
| 0DF0CE |
JSL $CDADBB |
SR: $0DADBB |
カウンタを100カウントアップ |
| 0DF0D2 |
JSL $CDAED1 |
SR: $0DAED1 |
カウンタが2000になるまで待機 |
| 0DF0D6 |
LDA $353F |
A=$353F |
|
| 0DF0D9 |
AND #$0008 |
A&=#$0008 |
|
| 0DF0DC |
BNE #$02 |
if(z==off) goto $0DF0E0 |
|
| 0DF0DE |
BRA #$16 |
goto $0DF0F6 |
|
| 0DF0E0 |
JSL $CCD392 |
SR: $0CD392 |
キャラクターイベント中移動フラグON? |
| 0DF0E4 |
LDX #$0021 |
X=#$0021 |
|
| 0DF0E7 |
LDA #$007F |
A=#$007F |
|
| 0DF0EA |
JSL $C75474 |
SR: $075474 |
キャラクター移動先座標指定 |
| 0DF0EE |
JSL $CCD59D |
SR: $0CD59D |
指定座標にY軸→X軸の順でキャラクター移動 |
| 0DF0F2 |
JSL $CCD857 |
SR: $0CD857 |
キャラクターを上に向かせる |
| 0DF0F6 |
JSL $CDADBB |
SR: $0DADBB |
カウンタを100カウントアップ |
| 0DF0FA |
RTL |
return |
|
- SR: $0DF0FB PC5人目を移動対象にする?
| 0DF0FB |
LDA #$0008 |
A=#$0008 |
|
| 0DF0FE |
TRB $353F |
A ^ $353F |
|
| 0DF101 |
LDA #$0024 |
A=#$0024 |
|
| 0DF104 |
JSL $C74B8C |
SR: $074B8C |
行動対象キャラクター指定? |
| 0DF108 |
JSL $CCD70B |
SR: $0CD70B |
|
| 0DF10C |
JSL $C74C86 |
SR: $074C86 |
|
| 0DF110 |
BCS #$03 |
if(c==on) goto $0DF115 |
|
| 0DF112 |
NOP |
|
|
| 0DF113 |
BRA #$21 |
goto $0DF136 |
|
| 0DF115 |
LDA #$0008 |
A=#$0008 |
|
| 0DF118 |
TSB $353F |
A or $353F |
|
| 0DF11B |
JSL $CCD784 |
SR: $0CD784 |
|
| 0DF11F |
JSL $C74BC2 |
SR: $074BC2 |
|
| 0DF123 |
LDA #$0024 |
A=#$0024 |
|
| 0DF126 |
JSL $C74CF7 |
SR: $074CF7 |
|
| 0DF12A |
JSL $CCD644 |
SR: $0CD644 |
|
| 0DF12E |
JSL $C75662 |
SR: $075662 |
|
| 0DF132 |
JSL $CCD767 |
SR: $0CD767 |
|
| 0DF136 |
JSL $C74BC2 |
SR: $074BC2 |
|
| 0DF13A |
RTL |
return |
|
たかが5人目をすごろく開始時と終了時に期待した座標に配置するだけなんですが結構長いです。とはいえ2人目~4人目の実装をパクるだけで十分なんですが。「みようみまねでやっている」だけなので完全には理解してはいません。ちなみに、すごろく場1と2,3,4のすごろく開始時のPCのMove処理は若干異なっているため、またちょっと違った実装をする必要があるのですが、あまり本筋ではないので説明は省略します。同様にかなり考慮をしないといけないのがランシール、アッサラームです。アッサラームに至っては未だに完全に修正はできていない始末。まあいやならやらなきゃいいんですがw、この「5人目を追加する」ギミックはやりたいこと以外に考慮しないといけない部分が多くて骨が折れました。さて、次回はイベントの残りの部分を実装します。
コメント