;手持ちの6番目の種族をボールポケット1番目の個数に応じて変更 ;@mail ;ぜ/がゆぼ5せづざはぞまづのョキ ;ゥゃれぜをがるひゼづの 000 ld l,F3 002 ld h,D5 004 ld a,FB 006 cp (hl) 007 ldd (hl),a 008 dec hl 009 jp z,CF2F 012 ldd (hl),a 013 ret 014 xor a 015 add (hl) 016 ld (DAE0),a 019 ld l,DD 021 ld h,D9 023 rrc l 025 ldd (hl),a 026 ret
どうやらaレジスタを使う際には"xor a"で初期化したほうがいいらしい。最初の代入は"add"のがいいらしい。
ldした時にフラグが変更されないのはわかるんだけど、そのせいで何かバグが発生するってのはイマイチわからない。フラグ利用しないなら関係なくない?
これはバグ取ったついでにコード整理と1バイト削減した最新版です。
;手持ちの6番目の経験値を調整 ;経験値中位下位を0xd8c9に設定 ;*Lv99でなければ使うたびに経験値を65536増加 ;-経験値タイプによって使用回数が異なるが低レベルからだと12〜18回で99止めにできる ;-経験値をレベルに反映させるには育て屋に預けてすぐ引き取る ;*Lv99なら使うたびに経験値を1増加 ;-性格調整用 ;@mail ;ぜ9がれョににダせぜゥぐグぼのづ ;にダづどの 000 ld l,FF 002 ld h,DA 004 xor a 005 add a,C6 007 rrca 008 cp (hl) 009 ld l,EA 011 jr z,+07 013 ld a,C9 015 ldd (hl),a 016 add a,0F 018 ldd (hl),a 019 inc (hl) 020 ret
こちらもフラグ問題が解決したのでコード整理。
元々こういう風に書こうとしていたのをバグチェックのためにぐちゃぐちゃにしてしまっていた。
しかしjrの仕様が仕様書と微妙に違う。ジャンプ先が8バイト先なので+6指定が正しいはずなのだけどずれてしまった。
jr命令から数えて目的番地-2って書いてあるんだけどなぁ。19-11で8だよなぁ。-2で6だよなぁ。わからんけどずれてるのは間違いない。
そんでドヤ顔プログラマー気取りのはココ、マジックナンバー"0xd8c9"。
この数値が何かというと、経験値タイプに左右されず最上位バイトの操作だけでLv99に収まる下位2バイトの値なんです。
それぞれの経験値タイプのLv99~100になるのに必要な経験値の表が以下。
ExpType | Lv99 | Lv100 |
---|---|---|
80万 | 0x000BD865 | 0x000C3500 |
100万 | 0x000ECE3B | 0x000F4240 |
105万 | 0x000FAC1F | 0x00102C14 |
125万 | 0x001281C9 | 0x001312D0 |
意図的なのか偶然なのか、経験値3バイト中の上位バイトは全て増加していて、
中位下位のそれぞれの最大値をとってもレベル100には到達しないようになってるんですね。
経験値タイプによらないレベル99調整の方法を考えてこれに気付いたときはもうこいつ天才だろと思いましたね。(自画自賛3段)
ということで中位下位を固定し上位バイトだけ任意増加させることで柔軟なLv99調整を可能にすると共に、
ついでで性格調整まで出来てしまうお得な2way code!今ならなんとわずか21バイトでのご提供!いやバイト数変わったりしないけどさ。
つことで残すは色違い調整。これも経験値と同じ感じで♂♀選択も可能にできますね。