上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
前回、ドラクエ風ダメージ計算式にレベル補正(1Lvにつき5%)を加味すると書いたんですが、、、

あれは強すぎた。
(そもそも、バグってた。敵が通常攻撃を仕掛けるとオチる)

ダメージは1次比例で上がってくので急激なインフレはないんですが、通常攻撃で800とか与えると折角ドラクエ風にした味付けも失われ、萎えてしまいます。

という訳で、仕様を書きの通り変更しました。


(自分のレベル-相手のレベル)の差×5%のダメージボーナス
※ただし、上記ボーナスは自分のレベルが相手のレベルより高いときにのみ反映され、そのボーナス値のMAXは200%(要調整)までである。

こうすれば、ダメージが跳ね上がることもなくどんなに行っても攻撃力の2倍までだからそこまでインフレはしないよね、って感じで。

これを実現するために満たすべき作業は以下の2つ。
・計算式の変更
・エネミーのレベルの概念(デフォルトでエネミーはレベルの概念がないため)

やってみました。
1.計算式の変更

こんな感じに変更。

def make_attack_damage_value(attacker)

 # 基礎ダメージ:攻撃力-防御力/2
 damage = attacker.atk - self.def / 2

 # レベル差1につき5%のダメージボーナス(最大200%まで)
 lev = 100 + (attacker.level - self.level) * 5
 lev = 100 if lev < 100
 lev = 200 if lev > 200
 damage *= lev / 100

  # -1~+1の乱数を加算
 damage += rand(3)-1

  (以下,同じなので略)


当初はずっとアクター/エネミーの切り分け処理を考えていた(アクターのみのボーナスとしていた)んですが、同様にエネミーにもボーナスがあったほうが面白いかと思ってこうしてみました。
この辺は普通。


2.エネミーのレベルの概念

これは超苦労した。
データベース上に無いものはガンガン、各メモ欄に詰め込んでいけばいいってのは色々調べて分かったんですが、一体どうやってそれを取得するのよ。

(1)まず、こんな感じでメモ欄にレベルを設定する。色んなサイトでよく見かける光景。
memo.jpg

(2)エネミークラスにレベルを追加し、メモ欄からレベルを取得する。

Game_Enemy

#--------------------------------------------------------------------------
# ● レベル取得
#--------------------------------------------------------------------------
def level
 sig = "level="
 return 1 unless enemy.note[/#{Regexp.quote sig}\[?(\d*)\]?/].to_a[0]
 prob = $1.to_i
 return(prob)
end


正規表現を使うわけですね。
ちなみに、レベルが未設定の敵の場合は1を返すようにしています。(設定忘れ対策)

とまぁ、たったこれだけで出来るわけですが正直・・・


なんでこれで上手く動いたのか理解不能。
この辺は色々考えた挙句、結局サンプルゲーム「レクトール~」から拝借しただけなので殆ど分かってない。ていうか正規表現なに?おいしいの?

その程度のレヴェルでした。
ただ、extrierの根底に
「何度もデバッグして、動きゃそれでいんじゃね?」
と言うのがありまして、どうも無事機能してるっぽいんで理解は後回しにしてもいいかなーなんて思ったり(汗


信じられないですよね、これでプロのプログラマ(見習い)らしいですよ。

一通り、バトル周りは弄って満足したので次はシステム周りかな。
RGSSはホントに楽しいね。テストプレイ立ち上げが2000と比べて異常に時間掛かるのだけが難なのですが・・・。
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメントの投稿

URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
powered by
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。