DQ3 登録中にスタートボタンを押すとプリセットの名前を自動入力する3

前回までで、登録中にスタートボタンを押した時にのみ反応するようにできたので、残りはコアの処理の実装です。方針として、プリセット名前用の固定文字列IDの配列を用意しておき、ランダムで選ばれたインデックスの名前をデコードして名前入力用のバッファ($7E3310-)にセットしてやる、とします。配列の要素数は128個(そんなにいらないとは思いますが)用意しておきます。

  • SR? $03FE3D 登録中にスタートボタンを押した時の処理(新SR)
03FE3DJSL $CF5049SR: $0F5049
03FE41CLCc=off
03FE42RTLreturn

  • SR: $0F5049 登録中にスタートボタンを押した時の処理(新SR)
0F5049JSR $507DSR: $0F507D登録所名前用バッファクリア
0F504CJSR $5096SR: $0F5096登録所用名前を選択
0F504FJSL $C1BA53SR: $01BA53固定文字列開始アドレス取得(オフセットをYにセット)
0F5053LDX #$0000X=#$0000
0F5056JSL $C1BAD3SR: $01BAD31Byte文字コード濁音半濁音→清音変換?
0F505ACMP #$00ACA==#$00AC?
0F505DBEQ #$0Cif(z==on) goto $0F506B
0F505FSTA $3310,X$3310+X=A
0F5062INXX++
0F5063INXX++
0F5064CPX #$0008X>=#$0008?
0F5067BCS #$02if(c==on) goto $0F506B
0F5069BRA #$EBgoto $0F5056
0F506BCPX #$0008X>=#$0008?
0F506EBCC #$03if(c==off) goto $0F5073
0F5070LDX #$0006X=#$0006
0F5073STX $3306$3306=X
0F5076LDA #$0034A=#$0034カーソルを「終わり」に飛ばす
0F5079JMP $0334A6goto $0334A6
  • SR: $0F507D 登録所名前用バッファクリア(新SR)(省略)
  • SR: $0F5096 登録所用名前を選択(新SR)
0F5096LDA #$003FA=#$003F0-63から選ぶ
0F5099JSL $C0133ESR: $00133E乱数発生 00-A A(1B)
0F509DASLA<<1
0F509ETAXX=A
0F509FLDA $CF5100,XA=$0F5100+Xプリセット名前用固定文字列リストからIDを取得
0F50A3RTSreturn

ここでのポイントはSR: $01BA53です。Aレジスタの値を固定文字列IDとして引数に取り、DP[$BA]に開始アドレス、Yレジスタに開始アドレスからのオフセットをセットして返してきます。固定文字列IDの開始アドレス情報は8つに1つなので、ターゲットの固定文字列IDの開始位置を探してオフセットとして返してくる、ということのようです。というわけで、正しくデコードするにはYレジスタの値も使用する必要があるということに注意しないといけません。あとは、濁音・半濁音の場合も考慮して専用のデコードSR: $01BAD3を呼べばOKです。すぐそばにSR: $01BACCがありますが、これを使うと濁音・半濁音の文字をセットするとバグります。

さて、肝心のプリセットの名前ですが、DQ4,7の移民の名前から38個、ルイーダの酒場に最初からいるキャラクターの名前12個、あとはFFT(TOと兼用)の汎用キャラの名前候補から14個もらってきて全部で64個セットしてあります。偏らないように男女ペアを1セットにしています。あくまで「候補」で決定しているわけではないので、気に入らなければその場で変えてもらえばいいかなということで割と適当です。というわけで名前リストはこちら。順番は自分が追加していった順番なので特に意味はありません。

00ロナルド※DQ4,7の移民の名前
01リニア
02シュンク
03ニキータ
04ケネス
05フィオナ
06ブラーノ
07モニカ
08レオン
09ゾフィー
0Aゲオルグ
0Bビビアン
0Cゾット
0Dビアナ
0Eロビン
0Fリンダ
10アッシュ
11リリー
12バーキン
13セーラ
14アキム
15ベラ
16マックス
17ステラ
18ハンス
19マロン
1Aゴン
1Bミルキー
1Cナハトム
1Dユリア
1Eアラン
1Fノエル
20デービス
21カレン
22ボイド
23ブレンダ
24ノイマン
25アンナ
26ライアス※ここからDQ3のルイーダにいる仲間の名前
27ネルソン
28エルロイ
29ミザリー
2Aサマンサ
2Bローザ
2Cベティ
2Dドロシー
2Eエルシト
2Fニコライ
30ピエール
31マゴット
32オニール※ここからFFT(TO)の汎用キャラの名前
33オリーブ
34ケイン
35ケイシー
36セルジュ
37シルキィ
38ディロン
39ドリス
3Aノックス
3Bナタリー
3Cヒューゴ
3Dベロニカ
3Eモリスン
3Fミスティ

というわけで完成するとこのようになります。以前に載せたものと同じ。

スポンサーリンク

コメント

  1. donguri より:

    これって$03DAEB 登録所メインの省略されてるところに
    けっこう改造ポイント隠れてますよね。
    新規に入れたと思われるSRの部分がほとんど省略されてる。
    今見ているところですが、追いきれない^^;

    管理者より返信:

    >登録所メインで行なっている変更は盗賊の登録所とアリアハンの登録所の台詞を切り替えるためだけの処理で、今回の変更とは無関係です。表示するメッセージが違うだけでやっていることは基本全部同じです。詳細は「登録所変更」タグのエントリを見て下さい。

  2. donguri より:

    ああ、なるほど。だから省略されてたんですね。
    てことはもし自動入力だけを導入したい場合は
    省略された部分は変えなくていいってことでしょうか?

    管理者より返信:

    そうです。

  3. donguri より:

    う~ん、そのままやってみたものの、「ぼうけんする」を
    選んだ段階でフリーズしますね。
    もう一度見直すか・・・

  4. donguri より:

    だめだ とりあえずスタートボタンを押して名前が出てくるところまでは来たけど、
    名前が表示されなかったり「J」とかあり得ないのが入力されたりします。
    ここまで出来てる以上、$0F5096のところ以外間違いはないと思うのですが、違うところが見当たらない・・・
    もちろん文字列のリスト(F5100)も見直しましたがおかしいところはなし。
    他に間違ってるポイントはあり得るのでしょうか?

    管理者より返信:

    ここの処理のポイントは「固定文字列IDから文字1文字1文字を正しくデコードできるか」です。濁音、半濁音を含んだ固定文字列をランダムでなく固定で指定して正しく1文字1文字読めているか$0F504F-6B当たりをデバッガで追うしかないでしょう。こちらから言えるのは以上です。

  5. donguri より:

    う~ん、テスト兼ねて名前も完全コピーさせてもらったのですが
    ロビンまではちゃんと表示できるので
    そのあたりは問題ないと思うんですがね・・・
    とにかくやってみます。

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。