2012-06-23

RGSS-毎ターンHP・SP回復

Comment ShareLink
«RGSS一覧

戦闘開始時にSPを0にして、徐々にSPが溜まっていく…
そんなシステムを作りたかったので
今回は毎ターンSPが回復するシステムを紹介。



【今回の変更点】
・Scene_Battle 1
・Scene_Battle 4




■Scene_Battle 1

戦闘のはじめに、アクターとエネミーのSPをリセットします。

「トループを準備」
$game_troop.setup(@troop_id)の下に
以下のように入れます。
for actor in $game_party.actors
 actor.sp = 数値
end


SPをリセットする必要はないよ~
という方は次へ。


■Scene_Battle 4

「フレーム更新 メインフェーズステップ1」
# 未行動バトラーが存在しない場合 (全員行動した)
if @action_battlers.size == 0
 for actor in $game_party.actors
  actor.sp += 1
  @status_window.refresh
 end

 # パーティコマンドフェーズ開始
 start_phase2
 return
end

上記青文字部分を追加します。

ここでリフレッシュさせておかないと、
数値が反映されないので…
(SPを最初に0にリセットさせたとして)
「SPが1あるのにバトルが進行しないと表示が0のまま」
になります。
SP1あって使えるスキルが、SP0のままで使えるのか?!
みたいなヘンな事になるので忘れずに。

同じくエネミーも毎ターンSPを回復させたいよ
っていう方は同じように
for enemy in $game_troop.enemies
 enemy.sp += 数値
end

と書き込めばOK。

エネミーの場合はステータスが表示されていないので
特にリフレッシュする必要はないです。
戦闘開始時にSPをリセットする場合
エネミーの分もアクターと同じくリセットしておきましょう。



はじめは0から、だんだんspが回復していって
ターンが経てば経つほど強いスキルが使える!!!
でも、デフォルト状態だと戦闘終了後もSPは戦闘終了時のままです。
なので、戦闘が終了・中断されたら全回復させるとか
そういった処理をすると良いかもしれません。

よろしければこっちの記事を参考に(*・ω・)っ「レベルアップ・戦闘終了後に全回復


また、spの部分をhpに変えれば
毎ターンHPが回復するようにもできます。
逆に、どんどんターン毎に減っていくというシステムも。

ここには書いてませんが、とあるアイテムを装備していると毎ターン回復するというようにも改造できますので色々やってみてくださいね。
気が向いたら特定アイテム装備で毎ターン回復orダメージの方法も書きます。
…要望があればすぐ書くかもですが。

category:
2012-06-17

RGSS-アイテム改造

Comment ShareLink
«RGSS一覧

武器や防具を改造できるシステム
条件を満たすと説明が変化するアイテム…

どれも、違うアイテムとして作れば
デフォルトのままでも十分に表現できますが、
同じ名前のアイテムばかりだと管理が大変だとか
もっと幅を広げたい、自由に分岐によって変化する数値を変えたいなど
思うこともあったりなかったり(´・ω・`)

そんなわけで、
今回はアイテム改造のための記述を紹介します。



【今回の変更点】
・Game_System
・Scene_Load




アイテムの名前、説明、値段を変えたい場合は
以下のようにイベントコマンドのスクリプトに記入します。
$data_items[ID].name = "名前"
$data_items[ID].description = "説明"
$data_items[ID].price = 値段

[ID]はアイテムのIDなので、
データベースを見ればわかるかと思います。

また、武器や防具の場合は
下記のように攻撃力の数値を変更する事もできます。
$data_weapons[ID].atk = 数値
$data_armors[ID].pdef = 数値
上の場合では、武器IDの攻撃力を
防具IDの物理防御を変更しますが、
攻撃力や物理防御だけでなく
他の数値や、アイコンなども変更できるので
atkの部分をdex_plusやicon_nameに変えて設定します。
変更できるものの詳細はヘルプにある
RPG::Weapon、RPG::Armor、RPG::Itemを参照してください。


  …これだけだと
セーブ時に変更が保存されないため
次回ゲームを続きからはじめると
変更されていない状態に戻ってしまいます。
(一時的なものであればここまででダイジョウブです)
なので、セーブデータに含まれるように次の段階を踏みます。
今度はスクリプトエディタを編集します。


■Game_System

「公開インスタンス変数」
attr_accessor :custom_item(←ここはわかりやすい変数名でOK)

「オブジェクト初期化」
@custom_item = $data_items[ID](変更するアイテムのID)
を追加。

変更したいアイテムが複数の場合は
custom_item1、2..と増やして
上記と同じように、オブジェクト初期化で
アイテムIDを入れておきます。

これでセーブ時に、変更が保存されるようになります。

■Scene_Load

file.closeよりも下のあたりに
$data_items[ID] = $game_system.custom_item
を入れます。
これで読み込みが完了します。



見ればわかるかと思いますが、ここで紹介したのは
$game_system内の custom_item の変数に $data_items[ID] を入れておき、それをロード時に$data_items[ID]に渡す、というやり方です。
セーブデータに含まれるようにしなければ、変更は適用されません。

これを利用して
鍛える事のできる武器や防具、
条件を満たすと能力が変化するアイテムも作れます。

category: