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

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

一例です

アイテムの効果を考える

  • 発動タイミング
  • 条件、参照パラメータなど 例:
    今回は例題として、
    物理攻撃を受けたときに、
    減少している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 // 終了
    

メモリエディタへコピペ用に改行位置を修正

  • 先頭にアドレス値のヘッダをつけたテンプレを用意
  • 仮想コードからコピーしてテンプレに貼り付けていく。
    この段階でよく目にする 一列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

  • 自分がやってた方法を書いてみました。
    ちなみにコードの中身はぜんぜんテストしてないので、打ち込んでみたけど動きませんw
    とかはナシの方向で。 -- (Y’s) 2008-01-09 16:38:45
名前:
コメント:

すべてのコメントを見る
ツールボックス

下から選んでください:

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