1つ前のエントリを投下したのがちょうど1ヶ月前。正直自分でもかなり忘却のかなたに行ってしまってるのと、「需要あんのかこれ」という気もするので投下モチベーションはかなり低いのですが、残りの変更点はあと2箇所なのでグダグダながらやりきりたいと思います。ここ最近はDQ3SFC K.Mixの追加改造というか一応自分の中では最終稿扱いのバージョン1.0.0リリースに向けてつらつらと作業をしているわけですが、作業速度は低下気味。手のつけやすいところからちょこちょこと作業をしているのですが、モンスターネタが枯渇気味です。今のところ自分の中では没扱いのこんなモンスターも。

犬っぽいグラのモンスターもそろってるので(こっちは腐ってるけどw)、PS版DQ4のエグチキみたいにセットで出てくるって言うのもありかなーとも思ったんですが、おふざけが過ぎると思い直したので没にしました。現在はゾーマの城に無限回廊のフロアを追加しようと思ってるんですが、これまたいろいろ面倒っぽい(っていうかお手本になるいいフロアがない)のでこちらもモチベーション低下中です。
さて本題に入ります。前回までで、「ガライが仲間になる条件を満たしているフロアに侵入時に5人目を透明のキャラクターとして初期化する」ところまで終わっています。残りは「ガライとの会話終了後にガライが5人目の座標に移動し向きを変えた瞬間にガライを消し、代わりに5人目を可視化してPCを再描画する」処理を実装すればいいことになります。
例によってまずイベントの設計を行います。
| カウンタ |
処理内容 |
| 1000 |
ガライとの会話終了 |
| 2000 |
ガライが5人目の座標に移動完了し「ガライが仲間になった」フラグON、5人目を実体化させてPC再描画 |
| 3000 |
ガライのNPC消滅 |
| 4000 |
「ガライが 仲間に加わった!」メッセージ表示 |
| 略 |
|
|
|
| 0CE6B9 |
JSL $CDEFAC |
SR: $0DEFAC |
|
| 略 |
|
|
|
- SR: $0DEFAC メルキド宿屋追加イベント処理(新SR)
| 0DEFAC |
LDA $35B4 |
A=$35B4 |
|
| 0DEFAF |
AND #$0004 |
A&=#$0004 |
ガライを仲間にしたか |
| 0DEFB2 |
BEQ #$06 |
if(z==on) goto $0DEFBA |
|
| 0DEFB4 |
JSL $CCD298 |
SR: $0CD298 |
イベント終了時処理? |
| 0DEFB8 |
BRA #$0A |
goto $0DEFC4 |
|
| 0DEFBA |
JSL $CCF2E1 |
SR: $0CF2E1 |
メルキド襲撃イベントが終わっているか(該当c=on) |
| 0DEFBE |
BCC #$06 |
if(c==off) goto $0DEFC6 |
|
| 0DEFC0 |
JSL $CDE9EE |
SR: $0DE9EE |
メルキド宿屋追加イベント処理(ガライ仲間追加) |
| 0DEFC4 |
BRA #$04 |
goto $0DEFCA |
|
| 0DEFC6 |
JSL $CCFC10 |
SR: $0CFC10 |
メルキド宿屋追加イベント処理(魔物襲撃) |
| 0DEFCA |
RTL |
return |
|
- SR: $0DE9EE メルキド宿屋追加イベント処理(ガライ仲間追加)(新SR)
| 0DE9EE |
LDA $35B4 |
A=$35B4 |
|
| 0DE9F1 |
AND #$0002 |
A&=#$0002 |
バラモス城の骸骨に光の鎧の隠し場所の情報を聞いた |
| 0DE9F4 |
BEQ #$05 |
if(z==on) goto $0DE9FB |
|
| 0DE9F6 |
JSL $CCFF31 |
SR: $0CFF31 |
メルキド宿屋追加イベント処理(ガライ仲間追加) |
| 0DE9FA |
RTL |
return |
|
| 0DE9FB |
JSL $CCD298 |
SR: $0CD298 |
イベント終了時処理? |
| 0DE9FF |
RTL |
return |
|
- SR: $0BF1BE メルキド宿屋ガライ会話追加処理(以前新規追加したSRに追記)
| 0BF1BE |
LDA $35B4 |
A=$35B4 |
|
| 0BF1C1 |
AND #$0008 |
A&=#$0008 |
ガライと別れた |
| 0BF1C4 |
BEQ #$05 |
if(z==on) goto $0BF1CB |
|
| 0BF1C6 |
BRK $1050 ($0B1050) |
goto $00FFE6(メッセージ表示) #$1050 |
|
| 0BF1C9 |
BRA #$0B |
goto $0BF1D6 |
|
| 0BF1CB |
LDA $35B4 |
A=$35B4 |
|
| 0BF1CE |
AND #$0002 |
A&=#$0002 |
|
| 0BF1D1 |
BEQ #$0B |
if(z==on) goto $0BF1DE |
|
| 0BF1D3 |
BRK $104E ($0B104E) |
goto $00FFE6(メッセージ表示) #$104E |
|
| 0BF1D6-B |
NOP |
|
|
| 0BF1DC |
BRA #$41 |
goto $0BF21F |
$0BF21Fでカウンタに1000をセットするSR実行 |
| 略 |
|
|
|
- SR: $0DEFDB メルキド宿屋ガライMove処理(新SR)
| 0DEFDB |
LDA $35B4 |
A=$35B4 |
|
| 0DEFDE |
AND #$0008 |
A&=#$0008 |
|
| 0DEFE1 |
BNE #$10 |
if(z==off) goto $0DEFF3 |
|
| 0DEFE3 |
JSL $CDF5C1 |
SR: $0DF5C1 |
バラモス城の骸骨から光のよろいのヒントをもらっていていてマップIDがメルキド宿屋orバラモスの間か(該当c=on) |
| 0DEFE7 |
BCS #$06 |
if(c==on) goto $0DEFEF |
|
| 0DEFE9 |
JSL $CDE518 |
SR: $0DE518 |
メルキド襲撃イベント時のガライMove処理 |
| 0DEFED |
BRA #$04 |
goto $0DEFF3 |
|
| 0DEFEF |
JSL $CDEFF6 |
SR: $0DEFF6 |
ガライが仲間に加わる処理 |
| 0DEFF3 |
RTL |
return |
|
- SR: $0DEFF6 ガライが仲間に加わる処理(新SR)
| 0DEFF6 |
COP |
goto $00FFE4 |
|
| 0DEFF7 |
JSL $CDAEB1 |
SR: $0DAEB1 |
カウンタが1000になるまで待機 |
| 0DEFFB |
JSL $CCD392 |
SR: $0CD392 |
キャラクターイベント中移動フラグON? |
| 0DEFFF |
JSL $C4297C |
SR: $04297C 引数:1#$01 引数:2#$FF |
パーティ人数取得 |
| 0DF005 |
ASL |
A<<1 |
|
| 0DF006 |
TAY |
Y=A |
|
| 0DF007 |
LDA $CFA5,Y |
A=$CFA5+Y |
5人目の向き状態取得 |
| 0DF00A |
PHA |
Push A |
|
| 0DF00B |
LDX $C5E5,Y |
X=$C5E5+Y |
5人目のX座標取得? |
| 0DF00E |
LDA $C625,Y |
A=$C625+Y |
5人目のY座標取得? |
| 0DF011 |
PHA |
Push A |
|
| 0DF012 |
LDY $7F2A |
Y=$7F2A |
|
| 0DF015 |
STA $D625,Y |
$D625+Y=A |
ガライの移動先X座標を実座標で指定 |
| 0DF018 |
TXA |
A=X |
|
| 0DF019 |
STA $D5E5,Y |
$D5E5+Y=A |
ガライの移動先Y座標を実座標で指定 |
| 0DF01C |
PLA |
Pull A |
|
| 0DF01D |
CMP #$08F7 |
A>=#$08F7? |
|
| 0DF020 |
BCS #$06 |
if(c==on) goto $0DF028 |
|
| 0DF022 |
JSL $CCD59D |
SR: $0CD59D |
指定座標にY軸→X軸の順でキャラクター移動 |
| 0DF026 |
BRA #$04 |
goto $0DF02C |
|
| 0DF028 |
JSL $CCD58C |
SR: $0CD58C |
指定座標にX軸→Y軸の順でキャラクター移動 |
| 0DF02C |
PLA |
Pull A |
|
| 0DF02D |
LSR |
A>>1 |
|
| 0DF02E |
CMP #$0000 |
A==#$0000? |
5人目の向きが上 |
| 0DF031 |
BNE #$06 |
if(z==off) goto $0DF039 |
|
| 0DF033 |
JSL $CCD837 |
SR: $0CD837 |
キャラクターを上に向かせる |
| 0DF037 |
BRA #$1A |
goto $0DF053 |
|
| 0DF039 |
CMP #$0001 |
A==#$0001? |
5人目の向きが右 |
| 0DF03C |
BNE #$06 |
if(z==off) goto $0DF044 |
|
| 0DF03E |
JSL $CCD83F |
SR: $0CD83F |
キャラクターを右に向かせる |
| 0DF042 |
BRA #$0F |
goto $0DF053 |
|
| 0DF044 |
CMP #$0002 |
A==#$0002? |
5人目の向きが下 |
| 0DF047 |
BNE #$06 |
if(z==off) goto $0DF04F |
|
| 0DF049 |
JSL $CCD847 |
SR: $0CD847 |
キャラクターを下に向かせる |
| 0DF04D |
BRA #$04 |
goto $0DF053 |
|
| 0DF04F |
JSL $CCD84F |
SR: $0CD84F |
キャラクターを左に向かせる |
| 0DF053 |
JSL $CDADE6 |
SR: $0DADE6 |
カウンタに2000をセット |
| 0DF057 |
LDA #$0004 |
A=#$0004 |
|
| 0DF05A |
TSB $35B4 |
A or $35B4 |
|
| 0DF05D |
JSL $CDAEE1 |
SR: $0DAEE1 |
カウンタが3000になるまで待機 |
| 0DF061 |
JSL $C75930 |
SR: $075930 |
キャラクター消滅 |
| 0DF065 |
JSL $CDADF4 |
SR: $0DADF4 |
カウンタに4000をセット |
| 0DF069 |
RTL |
return |
|
- SR: $0CFF31 メルキド宿屋追加イベント処理(ガライ仲間追加)(新SR)
| 0CFF31 |
COP |
goto $00FFE4 |
|
| 0CFF32 |
JSL $CCE1D1 |
SR: $0CE1D1 |
イベント開始待ち? |
| 0CFF36 |
JSL $CDAED1 |
SR: $0DAED1 |
カウンタが2000になるまで待機 |
| 0CFF3A |
JSL $C3BD64 |
SR: $03BD64 |
仲間増減時再描画処理? |
| 0CFF3E |
JSL $CDADED |
SR: $0DADED |
カウンタに3000をセット |
| 0CFF42 |
JSL $CDAEF1 |
SR: $0DAEF1 |
カウンタが4000になるまで待機 |
| 0CFF46 |
JSL $C737BE |
SR: $0737BE 引数:1#$104F |
メッセージ表示 |
| 0CFF4C |
JSL $CDACD2 |
SR: $0DACD2 |
キー入力でメッセージウィンドウを閉じる |
| 0CFF50 |
JSL $CCD298 |
SR: $0CD298 |
イベント終了時処理? |
| 0CFF54 |
RTL |
return |
|
2点ほど注意点があります。1つ目は、5人目の座標に応じてガライの移動方法をX座標を先に合わせるか、Y座標を先に合わせるか変えることです。どうでもいいといえばいいのですが、これを無視するとガライが壁を突き破って移動することになるので。2つ目は、「ガライが仲間になった」フラグONのタイミングです。意味的にはガライとの会話が終わり移動を開始する寸前にONするほうが正しいようにも思えるのですが、それだと再描画のタイミングによってはガライが移動を開始する前に5人目が実体化されてしまうため、ガライの移動が完了した直後にONにする必要があります。実際便利ボタンでガライに話し掛けるとこの現象は起きず、メニューを表示させ「はなす」を選んでガライに話し掛けるとこの問題が起きるようです。おそらくガライに話し掛けた後にPC再描画処理が行われているためだと思われます(この問題は巨年末のファーストリリース直前に見つけました)。ちなみに、PCを再描画するだけでなぜ5人目が実体化されるかというと、「ガライが仲間になったフラグ」がONになっている状態でPC再描画処理を呼び出しているため、いままで透明で描画されていた5人目が実体化されて再描画される、という仕組みになっています。一度この仕組みを使いこなせるようになれば他の場所でも5人目の切り離し+つけ戻しはフラグのON/OFFをしてからPC再描画をすればいいだけになります。
というわけで懸案だった「5人目をNPCからPCに変える」処理は終わりです。次回は5人目がいることで影響のある部分の対応を行います。
コメント