まめ知識 > コーディング手法

「まめ知識/コーディング手法」の編集履歴(バックアップ)一覧はこちら

まめ知識/コーディング手法」(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)

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。