これはPS講座の方でも書いていますが PS2用として新しく加筆修正した物です 消費税を加算するには 数値を1.05倍すれば5%をかけたものと同じ数値になるので 減算する前にその減算値を1.05倍すれば消費税を加算出来ます その1.05倍する方法には大きく分けて2つあり 1つは一端減算数値を105倍して その後それを100で割り算する方法。 これで5%加算したのと同じ数値になります もう1つは浮動小数点を使用して 直接1.05倍するという方法。 これは整数を浮動小数点化する必要があったり 1〜2行ほど上の方法よりコード数も多くなるので あまり実用的ではないかも知れません。 なので実用的な方 (そもそも消費税加算自体実用的ではありませんが) 105倍して100で割る方法を紹介します ちなみに、105倍を110倍に変えると消費税10%にする事も出来ます。 (現実の将来の高税率にも対応可) 算出するだけならば非常に簡単で PS2専用消費税算出プログラム 000F0000 addiu t0,zero,$0069 000F0004 mult v0,v0,t0 000F0008 addiu t0,zero,$0064 000F000C div v0,t0 000F0010 mflo v0 を利用すればv0に入ってる値が1.05倍(5%)加算されます 000F0000 addiu t0,zero, $0069 でt0レジスタに69(105)を格納します 000F0004 mult v0, v0, t0 でv0レジスタ(仮に所持金からマイナスする数値とするt) の値を105倍し、再度v0レジスタに格納しなおす 000F0000 addiu t0,zero, $0064 でt0レジスタに64(100)を格納します 000F000C div v0, t0 で105倍されたv0の値とt0(100)とで割り算 ここで消費税を加算した数値と同じ数値がLOレジスタに入る 000F0010 mflo v0 で消費税を加算した数値をv0レジスタに格納する ------------------------------------------------------- PSのR3000ではmultやmultuでの乗算後に mfloで結果を読み取る必要がありましたが PS2のR5900ではいきなりv0に格納できます divとdivuには残念ながらこの機能はありません 算出するのは簡単ですが、その後に必ず問題になるのが 「ありえない計算結果」です 現在所持金が1000だったとすると そこで990の買い物をしてしまうと 990×1.05=1039となり 現在所持金をオーバーしてしまいます 本来ならば所持金がマイナスになってしまう場合には これ以上アイテムなどが買えなくなるようになっていますが 購入時には1000を超えていなくても 1.05倍して減算した結果マイナスになってしまう事もあるので そういう場合を考慮して対策をしておく必要があります もしこれを無視していると「ありえない計算結果」 という事でゲームが停止してしまいます。 これを防ぐには、実行ファイルにある 本来の所持金減算命令を潰して新たに自分でプログラムを組む という必要がありますが、プログラムに慣れてる人であれば それほど難しい物でも無いので誰でも応用する事が出来ます。 仮にv1に現在所持金が格納されるとして 先ほどの消費税算出も含めて続きを書くとこうなります 000F0000 addiu t0,zero,$0069 000F0004 mult v0,v0,t0 000F0008 addiu t0,zero,$0064 000F000C div v0,t0 000F0010 mflo v0 000F0014 subu v1,v1,v0 000F0018 bgez v1, $000F0024 000F001C nop 000F0020 addu v1,zero,zero 000F0024 nop 000F0014 subu v1,v1,v0 で現在値から5%加算した値を減算し 000F0018 bgez v1, $000F0024 でv1の値が0以上(プラス)であれば 000F0024へ処理を分岐させて v1の値が0以下(マイナス)であれば 分岐せずにプログラムは進みます もし、値がマイナスになっていた場合は 000F0020 addu v1,zero,zero のv1レジスタに0を格納という命令を実行します これで所持金がマイナスになってしまうような場合でも zeroを代入する事によって防ぐ事が出来ます あとは元のプログラムへjなどで処理を戻せばOKです。 この消費税加算は某旭川の元改造職人さん(笑) が昔公開していたコードを一部参考にしています と言ってもIRG@VANISH掲示板でアムロさんが展開してたので それを参考にして作り直したものです ちょっと間違いとかあったみたいなので・・・ 昔のPS時代を感じるプログラムだと思います。