FC2ブログ
2017/06/13

経験値の最大保持数を変更してみた

2chより下記のヒントをもらいました。

Levelupを読み込んでいる処理で、
1byteで処理している箇所を2byteや4byteにすれば良い。

LV256以上にした時にログインできなくなる現象は、
エラーメッセージを出している処理で
LV255を超える場合エラーにしている箇所を変えればいける。

うん。理屈は分かります。おそらく8bitレジスタを使ってる箇所を32bitレジスタに するとかcmpの箇所だとか見ていけばいいんでしょうが

00 00 add %al,(%eax)

例えば上記の命令の引数の%al、これはaxレジスタの下位4bitの値を扱ってるそうなので これをaxレジスタに加算するように書き換えたいのですが機械語だと00 00になってるんですよね。 これどのようにバイナリを変えれば良いのか?という問題が出てきました。

このままだと読み込み関連の読み込み数が変えることが出来ません。進展しないとモチベが 下がるので何か現時点でに変えることが出来ないか考えてみました。

最大EXPを変更してみました。最大EXPは2,000,000,000で、16進数に直すと77359400です。 これをjtalesで検索してみると何箇所かあります。使ってるレジスタは全て32bitっぽいので FFFFFFFFに変えてみました。自分は面倒くさいので置き換え機能で置き換えてみましたら下記の通りになりました。

TWCI_2017_6_13_8_7_56.jpg

32bitで扱える数値は4,294,967,295までですので2,000,000,000からそんな保持できてる気が しません。しかも4,294,967,295より多くの経験値を保持しようとすると

TWCI_2017_6_13_8_8_0.jpg

なんとオーバーフローを起こします。欲を言えばもっと扱える数値を増やした いしオーバーフローを起こさないようにするにはどうすればいいのか・・・。

ところで255に関係する条件分岐って下記の通りですよね?

255と等しい。
255と等しくない。
255より大きい。 256以上
255以上(等しいまたは大きい)
255より小さい = 254以下
255以下(等しいまたは小さい)

アセンブリコードで表すと例えば 255と等しいなら
cmpl $0xff,%eax
je $0xほにゃらら

みたいな感じで見ていくと他にも変えられそうな箇所があるかと思います。アセンブリコード は結構難しいですが頑張っていきましょう。う~ん・・・ファイル読み込みの処理をもう少し調べてみるか。



もしよろしければ私のモチベーションアップの為にチャンネル登録お願いします!

コメント

非公開コメント