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

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

  • SR? $03FE3D 登録中にスタートボタンを押した時の処理(新SR)
03FE3D JSL $CF5049 SR: $0F5049
03FE41 CLC c=off
03FE42 RTL return
  • SR: $0F5049 登録中にスタートボタンを押した時の処理(新SR)
0F5049 JSR $507D SR: $0F507D 登録所名前用バッファクリア
0F504C JSR $5096 SR: $0F5096 登録所用名前を選択
0F504F JSL $C1BA53 SR: $01BA53 固定文字列開始アドレス取得(オフセットをYにセット)
0F5053 LDX #$0000 X=#$0000
0F5056 JSL $C1BAD3 SR: $01BAD3 1Byte文字コード濁音半濁音→清音変換?
0F505A CMP #$00AC A==#$00AC?
0F505D BEQ #$0C if(z==on) goto $0F506B
0F505F STA $3310,X $3310+X=A
0F5062 INX X++
0F5063 INX X++
0F5064 CPX #$0008 X>=#$0008?
0F5067 BCS #$02 if(c==on) goto $0F506B
0F5069 BRA #$EB goto $0F5056
0F506B CPX #$0008 X>=#$0008?
0F506E BCC #$03 if(c==off) goto $0F5073
0F5070 LDX #$0006 X=#$0006
0F5073 STX $3306 $3306=X
0F5076 LDA #$0034 A=#$0034 カーソルを「終わり」に飛ばす
0F5079 JMP $0334A6 goto $0334A6
  • SR: $0F507D 登録所名前用バッファクリア(新SR)(省略)
  • SR: $0F5096 登録所用名前を選択(新SR)
0F5096 LDA #$003F A=#$003F 0-63から選ぶ
0F5099 JSL $C0133E SR: $00133E 乱数発生 00-A A(1B)
0F509D ASL A<<1
0F509E TAX X=A
0F509F LDA $CF5100,X A=$0F5100+X プリセット名前用固定文字列リストからIDを取得
0F50A3 RTS return

ここでのポイントは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 より:

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