2014-02-05

RGSS-SPダメージ表示

シェアリンク
«RGSS一覧

デフォルトではSPの回復量やダメージ量が表示されませんが
SPダメージを表示した方がわかりやすいだろ!
と思う人も少なくないハズ…

相変わらず説明が下手ですが
頑張ってSPダメージ表示スクリプトを作る方法を説明させていただきます!



【今回の変更点】
・RPG::Sprite(追加)
・Sprite_Battler
・Game_Battler 1
・Game_Battler 3
・Scene_Battle 4



■RPG::Sprite

組み込みクラスなのでヘルプから持ってくる。
「RGSS-ダメージ文字・動作変更」にも書いてあるのでわからない人はソッチを参照に。

以下、☆マーク部分(青文字)を追加します。

def initialize の中に追加
☆@sp_damage_duration = 0
def dispose の中に追加
☆dispose_sp_damage

☆def sp_damage(value)
 dispose_sp_damage
 if value.is_a?(Numeric)
  damage_string = value.abs.to_s
 else
  damage_string = value.to_s
 end
 bitmap = Bitmap.new(160, 48)
 bitmap.font.name = "Arial Black"
 bitmap.font.size = 32
 bitmap.font.color.set(0, 0, 0)
 bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
 if value.is_a?(Numeric) and value < 0
  bitmap.font.color.set(200, 100, 255)
 else
  bitmap.font.color.set(255, 255, 255)
 end
 bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
 @_sp_damage_sprite = ::Sprite.new(nil)
 @_sp_damage_sprite.bitmap = bitmap
 @_sp_damage_sprite.ox = 80
 @_sp_damage_sprite.oy = 20
 @_sp_damage_sprite.x = self.x
 # y位置はHPダメージとかぶらないようにする
 @_sp_damage_sprite.y = self.y - self.oy / 2 + 24
 @_sp_damage_sprite.z = 3000
 @_sp_damage_duration = 40
end

☆ここまで

def dispose_damage の下あたりに
☆def dispose_sp_damage
 if @_sp_damage_sprite != nil
  @_sp_damage_sprite.bitmap.dispose
  @_sp_damage_sprite.dispose
  @_sp_damage_sprite = nil
  @_sp_damage_duration = 0
 end
end


if @_damage_duration > 0 の下に
☆if @_sp_damage_duration > 0
 @_sp_damage_duration -= 1
 case @_sp_damage_duration
 when 38..39
  @_sp_damage_sprite.y -= 4
 when 36..37
  @_sp_damage_sprite.y -= 2
 when 34..35
  @_sp_damage_sprite.y += 2
 when 28..33
  @_sp_damage_sprite.y += 4
 end
 @_sp_damage_sprite.opacity = 256 - (12 - @_sp_damage_duration) * 32
 if @_sp_damage_duration == 0
  dispose_sp_damage
 end
end

☆ここまで

■Game_Battler 1

公開インスタンス変数に
attr_accessor :sp_damage_pop
attr_accessor :sp_damage


オブジェクト初期化に
@sp_damage_pop = false
@sp_damage = nil
追加

■Game_Battler 3

アイテムの効果適用
「HP および SP を回復」の前に
self.sp_damage = -recover_sp
追加
# HP 回復率と回復量が 0 の場合の前に
if item.recover_sp_rate == 0 and item.recover_sp == 0
 self.sp_damage = ""
end

追加

# 戦闘中でない場合
unless $game_temp.in_battle
 # ダメージに nil を設定
 self.damage = nil
 ☆self.sp_damage = nil
end

■Sprite_Battler

フレーム更新に追加
☆if @battler.sp_damage_pop
 sp_damage(@battler.sp_damage)
 @battler.sp_damage = nil
 @battler.sp_damage_pop = false
end


■Scene_Battle 4

フレーム更新(メインフェーズステップ5:ダメージ表示)
for target in @target_battlers
 if target.damage != nil
  target.damage_pop = true
 end
 ☆if target.sp_damage != nil
   target.sp_damage_pop = true
  end☆

 end



★このスクリプトを使った関連作品

カテゴリ:
2013-12-22

RGSS-たらたら文字

シェアリンク
«RGSS一覧

ゲーム中のメッセージを一文字ずつ表示させるようにします。
今回のスクリプトはちょーっとばかり頑張って Window_Message全体 を改造してみたので、下のリンク先(テキストファイル)にまとめました。


【スクリプト】

【主な機能】
 ・疑似ポーズサイン
 ・フェードイン&フェードアウト
 ・一文字ずつメッセージ表示(速度設定可)
 ・顔グラフィック表示
 ・名前表示
 ・ページ送り、たらたら効果音付き
 ・たらたら、一気表示の手動切り替え機能
 ・メッセージウェイト
 ・ボタン入力待ち
 ・押しっぱなしスキップ
 ・メッセージ自動送り
 ・メッセージ続行機能
 ・ルビ(読み仮名)機能
 ・文字サイズ変更機能
 ・インデント機能
 ・メッセージ速度変更機能


リンク先の文章(スクリプト)をスクリプトエディタにコピー&ペーストしてお使いください。
※このスクリプトを使用した作品を公開する場合はクレジット等に「SilverHearts」の表記、可能であればこちらの制作ブログへのリンクをお願いします。

各機能の使い方をよく読んでからご使用下さい。

導入の仕方:Windows_Messageの代わりにたらたら文字RGSSを挿入


■戦闘中メッセージ表示で動作がカクカクする時は■
[Scene_Battle 1>フレーム更新]のアフターバトルフェーズでなければリフレッシュする条件に青文字を追加(メッセージウィンドウ表示中でなければステータスウィンドウをリフレッシュするように変更)

# アフターバトルフェーズでなければ
if @phase != 5 and $game_temp.message_window_showing != true
 # ステータスウィンドウをリフレッシュ
 @status_window.refresh
end


変更点
2022/11/26
 ・たらたら表示の速度変更が可能になりました
 ・文字描画の横幅指定を文字幅依存に修正
2020/07/04
 ・\K(入力待ち)でエラーが発生する問題を修正
 ・表示を文字の大きさ依存に変更
 ・ルビ、ポーズサイン表示位置を改良
2019/12/03
 ・メッセージ続行を使用した時にフェードしてしまう問題を修正
 ・顔グラフィックのフェードインが正常に行われていなかった問題を修正
2019/11/11
 ・ウェイトスキップの動作を修正(自動送り→強制ウェイト依存に変更)
 ・自動送り時にフェードアウトが反映されていなかった問題を修正
 ・表示開始時のフェードイン機能追加(たらたら対応)
 ・インデント機能追加
 ・メッセージ速度変更機能追加
 ・フェイス画像(Bitmap)の横幅に顔表示時の字下げ対応
 ・たらたら、一気表示の切り替えに対応
2016/05/08
 ・たらたら音を半角/全角スペースの場合無音になるよう改良
 ・前回更新時、たらたら音のつけ忘れ修正
2016/04/12
 ・一文字ずつ表示と一気表示の描画処理を統合しスクリプトを軽量化
2015/05/23
 ・擬似ポーズサインがウィンドウ位置変更に対応しなかった問題を解決
2015/03/04
 ・擬似ポーズサイン実装
 ・基本フォントサイズをデフォルト依存に変更
2015/03/03
 ・名前表示の幅改善
2014/12/17
 ・選択肢のカーソル幅を固定ではなく文字数依存に変更
 ・ルビに伴うカーソル位置とウィンドウ位置を微調整
2014/11/29
 ・ルビ機能追加
 ・文字サイズ変更機能追加

カテゴリ:
2013-11-05

カラスのくちばし~RGSS小技集

シェアリンク
«RGSS一覧

RGSSの基本から役に立つかわからないものまで、
色々いじって活用できそうなものを集めてみました(・ω・)
多くはRPGツクールXPのヘルプに書かれているものを烏守が勝手に解釈して書いたものなので、ヘルプを見る事を強くオススメします。
間違ってることが書いてあるかもしれないので強く!おすすめします。
一部はヘルプに載っていないRubyスクリプト参考。


~ 基本 ~~ 小技メモ ~
クラス
メソッド
グローバル変数
インスタンス変数
ローカル変数
整数に変換
浮動小数点に変換
文字列に変数
配列
ハッシュ
条件分岐
ループ
returnでメソッド終了?
同じマップのイベント実行
セルフスイッチ遠隔操作
同マップ場所移動でイベント位置初期化
指定位置に移動
表示ピクチャの一部変更
テキストに出力
フォルダ作成
EC「スクリプト」の不具合修正

カテゴリ:
2013-11-01

RGSS-ステート自然解除タイミング修正(アクティブ)

シェアリンク
«RGSS一覧

デフォルトだと、戦闘中の
ステート解除タイミングが行動開始時になっている
んですよね…
このままだと行動選択時に、
「解除ターンなのに解除されてない」
「まだこのステートついてるから回復しないと」
とプレイヤーに思わせて混乱を招くかと思うので
ステート解除のタイミングを修正します。




【今回の変更点】
・Scene_Battle 4



■Scene_Battle 4

134行目~あたりの
# ステート自然解除
@active_battler.remove_states_auto
# ステータスウィンドウをリフレッシュ
@status_window.refresh

を消去し
以下の2箇所に追加。

「フレーム更新 (メインフェーズ ステップ 2 : アクション開始)」
def update_phase4_step2
# 制約が [行動できない] の場合
if @active_battler.restriction == 4
 @active_battler.remove_states_auto
 @status_window.refresh

def update_phase4_step6
# アクション強制対象のバトラーをクリア
$game_temp.forcing_battler = nil
@active_battler.remove_states_auto
@status_window.refresh



各アクターのターンが過ぎたら自動回復するようになっています。
例えば、1ターンだけのステートなら
ステートがついた→次のターンの行動後に解除
となります。

カテゴリ:
2013-08-22

RGSS-パラメーター上昇アイテム使用制限

シェアリンク

«RGSS一覧


う~ん…タイトルがいつも微妙でごめん。


今回は
アクターのパラメータが最大の時
パラメータ上昇アイテムを使用不可にする
ように改造します。


なんとこれで…


「能力値MAXなのに間違えて使っちまった!!!うおおおぉ~~~ん!!!」


という勿体無く嘆かわしい出来事も防げるんです!


アイテム使用時のターゲットステータスに腕力だとか、魔力だとかの詳細はデフォルトのままだと見えないし、その状態で能力アップを間違えて使っちゃうのはプレイヤーにとって不親切かな~とか思ってやってみました。


ステータスについては、まあ…
レイアウトや表示を変えれば解決するんですが。
プレイヤーさんが
「このパラメータは最大値だな」と思ってても
間違えてポチっと使っちゃう事も
あるかもしれないじゃないですか(・ω・)


…え?烏守じゃないから間違えないって?
あややややや(((゚Д゚;)))

まあとりあえず、やってみましょー!




【今回の変更点】
・Game_Battler 3



■Game_Battler 3

デフォルトではHP、SP回復アイテムの場合だと
対象アクターが全回復している状態なら
ブザーが鳴ってアイテムが使用できないようになっていますよね。

今回はそこを応用してみました。
とりあえず、HP回復アイテム処理のスクリプトについて解説!


last_hp = self.hp
last_sp = self.sp
self.hp += recover_hp
self.sp += recover_sp
effective |= self.hp != last_hp
effective |= self.sp != last_sp


recover_hp がアイテムに設定されている「HP回復量」で
self.hp が対象アクターの現在のHPを表しています。
アイテムの回復量で現在HP、SPが変化したかどうかで
effective が切り替わるようになってます。
この effective という変数は、
アイテムを使用したかどうかを判断させるための
スイッチのような存在になってます。
これが true であれば、消費アイテムは消費されます。


では、パラメータの方も
最大の場合にはアイテムを消費しないように変更してみましょう。

変更場所は以下のwhen…の下です。
(デフォルトのままなら271行目あたり)
# パラメータ上昇値が有効の場合
if item.parameter_type > 0 and item.parameter_points != 0
 # パラメータで分岐
 case item.parameter_type
  when 1 # MaxHP
     :
     :

パラメータごとに
「@maxhp_plus += item.parameter_points」
のようになっていますが、
最大値はGame_Battler 1 と Game_Actorで設定してある
MaxHP の取得等で制限される事になるので
中身を思いっ切り

maxhp = self.maxhp
self.maxhp += item.parameter_points
effective |= self.maxhp != maxhp

に変更!

self.maxhpが最大HP、self.maxspが最大SP
self.strが腕力…というように
selfで対象アクターのパラメータを示します。

パラメータ分岐の中身を変更し終えたら
最後尾についている
# 有効フラグをセット
effective = true

を消去しておきましょう。



これでプレイヤーさんが
アクターのパラメータが最大値の時に間違ってアイテムを使ってしまって
「あ~~勿体無い事した~~orz」
なんて目には合わなくなったハズ。


完成したら必ず面倒だと言わずにテストしておくように(・ω・)



★このスクリプトを使った関連作品

カテゴリ: