「まめ知識/コーディング手法」の編集履歴(バックアップ)一覧はこちら
「まめ知識/コーディング手法」(2008/01/10 (木) 22:22:33) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*一例です
#contents
**アイテムの効果を考える
-発動タイミング
-条件、参照パラメータなど
例:~
今回は例題として、
物理攻撃を受けたときに、
減少しているHP/MaxHP の確率で、相手の攻撃力半分で計算。
(減少しているHP/2)/MaxHP の確率で、こちらの防御力を2倍で計算するアイテム
を作成していきます。
まず、【物理攻撃を受けたとき】に発動なので
発動タイミング : 0C or 0D
防御力など計算前に確定しておかなくてはならない数値を弄るので、0C にしておきましょう。
発動タイミング : 0C
参照パラメータは、
敵の攻撃力 : 30 (06で参照)
自分の防御力 : 32 (05で参照)
現在HP : 4C (〃)
最大HP : 48 (〃)
0C で参照、および操作したときに取得できなかったり効果がなかったりしないか、ここで見極めましょう。
**仮想コーディング
-コードに落とす前に自然言語によって各命令単位でコメントを書いておく
-アドレスジャンプ用のとび先などは :(番号) などの形でラベルをつけておく
例:~
// #敵攻撃力操作部
// 最大HPをW[20]に取得
// W[20]から現在HPを引く
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
// 敵の攻撃力を2で割る
-DFpart-
// #装備者防御操作部
// W[20]の値を2で割る
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、終了
// 自分の防御力に2をかける
// 終了
なにか追加したいことがあれば、この段階で修正しましょう。~
このままだと効果が発生したのかどうか見た目に訴える物が乏しいので、攻撃力低下発生時は敵に青い煙(3D)。~
防御上昇効果発生時は自分の頭にResistの文字を表示してみましょう。
// #敵攻撃力操作部
// 最大HPをW[20]に取得
// W[20]から現在HPを引く
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
// 敵の攻撃力を2で割る
// 相手位置に煙発生
-DFpart-
// #装備者防御操作部
// W[20]の値を2で割る
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、終了
// 自分の防御力に2をかける
// 自分位置にResist表示
// 終了
**コード変換
-命令を一つ一つコードにしていく
-アドレスジャンプなどは、この時点では**などにしておけばOK
例:~
FF
// #敵攻撃力操作部
05 48 4C 20 // 最大HPをW[20]に取得
05 4C 4E 20 // W[20]から現在HPを引く
05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
0B 20 74 22 02 ** ** // W[20]とW[22]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
06 30 47 02 // 敵の攻撃力を2で割る
0A 3D 00 09 // 相手位置に煙発生
-DFpart-
// #装備者防御操作部
0B 20 47 02 // W[20]の値を2で割る
05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
0B 20 74 22 02 90 00 // W[22]とW[20]を比較。W[20]>W[22]の場合、終了
05 32 46 02 // 自分の防御力に2をかける
09 BD 00 09 // 自分位置にResist表示
FF // 終了
**各命令ごとの先頭アドレスを記入
-行頭に380~のアドレス値を書き加えていく
-ジャンプアドレスの確定
例:~
_390 FF
// #敵攻撃力操作部
_391 05 48 4C 20 // 最大HPをW[20]に取得
_395 05 4C 4E 20 // W[20]から現在HPを引く
_399 05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
_39D 0B 20 74 22 02 AC 00 // W[20]とW[22]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
_3A4 06 30 47 02 // 敵の攻撃力を2で割る
_3A8 0A 3D 00 09 // 相手位置に煙発生
:-DFpart-
// #装備者防御操作部
_3AC 0B 20 47 02 // W[20]の値を2で割る
_3B0 05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
_3B4 0B 20 74 22 02 90 00 // W[22]とW[20]を比較。W[20]>W[22]の場合、終了
_3BB 05 32 46 02 // 自分の防御力に2をかける
_3BF 09 BD 00 09 // 自分位置にResist表示
_3C3 FF // 終了
**メモリエディタへコピペ用に改行位置を修正
-先頭にアドレス値のヘッダをつけたテンプレを用意
-仮想コードからコピーしてテンプレに貼り付けていく。&br()この段階でよく目にする 一列16BYTE の形へ
-てんぷれ
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
800F0380
800F0390
800F03A0
800F03B0
800F03C0
800F03D0
800F03E0
800F03F0
800F0400
800F0410
800F0420
800F0430
ここにコピペしていきます。
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
800F0380 90 00 91 00 0C 00 -- -- -- -- 00 00 00 00 00 00
800F0390 FF 05 48 4C 20 05 4C 4E 20 05 48 57 22 0B 20 74
800F03A0 22 02 AC 00 06 30 47 02 0A 3D 00 09 0B 20 47 02
800F03B0 05 48 57 22 0B 20 74 22 02 90 00 05 32 46 02 09
800F03C0 BD 00 09 FF
800F03D0
800F03E0
800F03F0
800F0400
800F0410
800F0420
800F0430
あとは説明やら属性値やら、売値やらを適当に決めてやればOK。
----
*COMMENT
#comment_num2(size=64,vsize=3,num=5,log=コード/まめ知識/コーディング手法/comment)
*一例です
#contents
**アイテムの効果を考える
-発動タイミング
-条件、参照パラメータなど
例:~
今回は例題として、
物理攻撃を受けたときに、
減少しているHP/MaxHP の確率で、相手の攻撃力半分で計算。
(減少しているHP/2)/MaxHP の確率で、こちらの防御力を2倍で計算するアイテム
を作成していきます。
まず、【物理攻撃を受けたとき】に発動なので
発動タイミング : 0C or 0D
防御力など計算前に確定しておかなくてはならない数値を弄るので、0C にしておきましょう。
発動タイミング : 0C
参照パラメータは、
敵の攻撃力 : 30 (06で参照)
自分の防御力 : 32 (05で参照)
現在HP : 4C (〃)
最大HP : 48 (〃)
0C で参照、および操作したときに取得できなかったり効果がなかったりしないか、ここで見極めましょう。
**仮想コーディング
-コードに落とす前に自然言語によって各命令単位でコメントを書いておく
-アドレスジャンプ用のとび先などは :(番号) などの形でラベルをつけておく
例:~
// #敵攻撃力操作部
// 最大HPをW[20]に取得
// W[20]から現在HPを引く
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
// 敵の攻撃力を2で割る
-DFpart-
// #装備者防御操作部
// W[20]の値を2で割る
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、終了
// 自分の防御力に2をかける
// 終了
なにか追加したいことがあれば、この段階で修正しましょう。~
このままだと効果が発生したのかどうか見た目に訴える物が乏しいので、攻撃力低下発生時は敵に青い煙(3D)。~
防御上昇効果発生時は自分の頭にResistの文字を表示してみましょう。
// #敵攻撃力操作部
// 最大HPをW[20]に取得
// W[20]から現在HPを引く
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
// 敵の攻撃力を2で割る
// 相手位置に煙発生
-DFpart-
// #装備者防御操作部
// W[20]の値を2で割る
// W[22]に0~MaxHPまでの乱数を生成
// W[22]とW[20]を比較。W[20]>W[22]の場合、終了
// 自分の防御力に2をかける
// 自分位置にResist表示
// 終了
**コード変換
-命令を一つ一つコードにしていく
-アドレスジャンプなどは、この時点では**などにしておけばOK
例:~
FF
// #敵攻撃力操作部
05 48 4C 20 // 最大HPをW[20]に取得
05 4C 4E 20 // W[20]から現在HPを引く
05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
0B 20 74 22 02 ** ** // W[20]とW[22]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
06 30 47 02 // 敵の攻撃力を2で割る
0A 3D 00 09 // 相手位置に煙発生
-DFpart-
// #装備者防御操作部
0B 20 47 02 // W[20]の値を2で割る
05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
0B 20 74 22 02 90 00 // W[22]とW[20]を比較。W[20]>W[22]の場合、終了
05 32 46 02 // 自分の防御力に2をかける
09 BD 00 09 // 自分位置にResist表示
FF // 終了
**各命令ごとの先頭アドレスを記入
-行頭に380~のアドレス値を書き加えていく
-ジャンプアドレスの確定
例:~
_390 FF
// #敵攻撃力操作部
_391 05 48 4C 20 // 最大HPをW[20]に取得
_395 05 4C 4E 20 // W[20]から現在HPを引く
_399 05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
_39D 0B 20 74 22 02 AC 00 // W[20]とW[22]を比較。W[20]>W[22]の場合、_DFpart_ にJMP
_3A4 06 30 47 02 // 敵の攻撃力を2で割る
_3A8 0A 3D 00 09 // 相手位置に煙発生
:-DFpart-
// #装備者防御操作部
_3AC 0B 20 47 02 // W[20]の値を2で割る
_3B0 05 48 57 22 // W[22]に0~MaxHPまでの乱数を生成
_3B4 0B 20 74 22 02 90 00 // W[22]とW[20]を比較。W[20]>W[22]の場合、終了
_3BB 05 32 46 02 // 自分の防御力に2をかける
_3BF 09 BD 00 09 // 自分位置にResist表示
_3C3 FF // 終了
**メモリエディタへコピペ用に改行位置を修正
-先頭にアドレス値のヘッダをつけたテンプレを用意
-仮想コードからコピーしてテンプレに貼り付けていく。&br()この段階でよく目にする 一列16BYTE の形へ
-てんぷれ
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
800F0380
800F0390
800F03A0
800F03B0
800F03C0
800F03D0
800F03E0
800F03F0
800F0400
800F0410
800F0420
800F0430
ここにコピペしていきます。
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
800F0380 90 00 91 00 0C 00 -- -- -- -- 00 00 00 00 00 00
800F0390 FF 05 48 4C 20 05 4C 4E 20 05 48 57 22 0B 20 74
800F03A0 22 02 AC 00 06 30 47 02 0A 3D 00 09 0B 20 47 02
800F03B0 05 48 57 22 0B 20 74 22 02 90 00 05 32 46 02 09
800F03C0 BD 00 09 FF
800F03D0
800F03E0
800F03F0
800F0400
800F0410
800F0420
800F0430
あとは説明やら属性値やら、売値やらを適当に決めてやればOK。
----
*COMMENT
#comment_num2(size=64,vsize=3,num=5,log=まめ知識/コーディング手法/comment)