RGSS小ネタ集
・沈黙の修正
スクリプトとして公開してみました
・戦闘不能表示の修正
毒とかいろいろなステートを喰らいつつ戦闘不能になると[戦闘不能/毒]などと表示されるが、これを純粋に
[戦闘不能]だけに変える方法・・・
Window_Baseの194行目の
self.contents.draw_text(x, y, width, 32, text)
|
を
if actor.hp == 0
self.contents.draw_text(x, y, width, 32, "[" + $data_states[1].name +"]")
else
self.contents.draw_text(x, y, width, 32, text)
end
|
にするだけ。
オマケでツクールVXでの修正
Window_Baseの194行目の278〜282
for state in actor.states
draw_icon(state.icon_index, x + 24 * count, y)
count += 1
break if (24 * count > width - 24)
end
|
を
if actor.hp == 0
draw_icon($data_states[1].icon_index, x, y)
else
for state in actor.states
draw_icon(state.icon_index, x + 24 * count, y)
count += 1
break if (24 * count > width - 24)
end
end
|
にするだけ。
※他にステートの表示系を変更するスクリプトを使っている場合で、『ステートの描画』部分を変更している
場合そちらのスクリプトも変更する必要があります。
改編履歴
'08:09:10
戦闘不能時に『戦闘不能』を表示させるのではなく、『戦闘不能ステートの名前』を表示させるように変更
'09:11:21
ツクールVXの場合の対処を追加
・スクリプトでコモンイベント
RGSSでコモンイベントを操作する場合
common_event = $data_common_events[n]
$game_system.map_interpreter.setup(common_event.list, 0)
|
と入力する。薄緑色の部分でコモンイベントの番号を入力。
↓オマケ↓
イベントのスクリプトで行う場合。(ってか普通にコマンド使えよ!)
common_event = $data_common_events[n]
setup(common_event.list, 0)
|
・ピクチャー拡張
ピクチャーの表示機能を使ってゲームオーバー画面、タイトル画面を表示する方法。
(これでゲームオーバー画面やタイトル画面を態々ピクチャーにインポートしなくてすむ。)
Sprite_Pictureのフレーム更新を以下のように変更する
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# ピクチャのファイル名が現在のものと異なる場合
if @picture_name != @picture.name
# ファイル名をインスタンス変数に記憶
@picture_name = @picture.name
# ファイル名が空でない場合
if @picture_name != ""
# ピクチャグラフィックを取得
if $game_variables[50] == 1
self.bitmap = RPG::Cache.gameover($data_system.gameover_name)
$game_variables[50] = 0
elsif $game_variables[50] == 2
self.bitmap = RPG::Cache.title($data_system.title_name)
$game_variables[50] = 0
else
self.bitmap = RPG::Cache.picture(@picture_name)
end
end
end
〜以下略〜
|
これで変数50番に1を入力してピクチャーの表示(画像は何でもいい)を使用することでゲームオーバー画面、
2を入力して同じように使用するとタイトル画面を表示することが可能です。また、移動、回転などの処理も
使え、態々変数を0に戻す必要もありません。
※バトラーとかも表示させたい場合も・・・いろいろ変更すれば一応実現可能のハズ。
※また、変数50はお好みで変更してください。
・スクリプト行数削減
1部分だけが違い後は同じような記述が続くような場合の行数削減方法
例
# 防具でこの属性が防御されている場合の計算
for i in [@armor1_id]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate1 += $1.to_i
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
rate1 *= -1
end
end
end
end
for i in [@armor2_id]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate2 += $1.to_i
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
rate2 *= -1
end
end
end
end
for i in [@armor3_id]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate3 += $1.to_i
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
rate3 *= -1
end
end
end
end
for i in [@armor4_id]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate4 += $1.to_i
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
rate4 *= -1
end
end
end
end
|
↑のプログラムと↓のプログラムは同じ結果を示します。
list = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
# 防具でこの属性が防御されている場合の計算
for h in 0..3
for i in [list[h]]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate[h] += $1.to_i
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
rate[h] *= -1
end
end
end
end
end
|
う〜〜ん、スッキリ。
要は『違っている』部分だけを配列に格納してそれをfor文やwhile文などに使えばいいんです。
・文字色追加の注意点
RGSSではWindow_Baseの文字色に変更を加えただけでは文字色が追加されません。(Window_Messageの部分で
規制があるため)
そこで、忘れないうちに以下のように変更を加えましょう。
〜Window_Message〜
〜略〜
# \C[n] の場合
if c == "\001"
# 文字色を変更
text.sub!(/\[([0-9]+)\]/, "")
color = $1.to_i
#if color >= 0 and color <= 7
self.contents.font.color = text_color(color)
#end
〜略〜
|
〜Window_Base〜
#--------------------------------------------------------------------------
# ● 文字色取得
# n : 文字色番号 (0〜14)
#--------------------------------------------------------------------------
def text_color(n)
case n
when 0
〜略〜
else #Normal_Color!!
return normal_color
end
end
|
これで後はWindow_Baseに自由に色を追加していけばOKです。
・ダメージの処理でSPを
ダメージの処理でSPにもダメージ(回復)を表示させたい場合の処理。
(※でもこれを入れるとSPダメージとかも欲しくなるんだよね・・・)
→SPダメージは他のサイトから探してください。(ちょっと待ちなさい・・・)
〜Interpreter (分割定義 7)〜
module DIAMOND
# ダメージの処理のSP版のためのスイッチ番号
SP_DAMAGE = 24
end
〜略〜
include DIAMOND
#--------------------------------------------------------------------------
# ● ダメージの処理
#--------------------------------------------------------------------------
def command_338
# 操作する値を取得
value = operate_value(0, @parameters[2], @parameters[3])
# イテレータで処理
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# バトラーが存在する場合
if battler.exist?
if $game_switches[DIAMOND::SP_DAMAGE] == true
# SP を変更
battler.sp -= value
else
# HP を変更
battler.hp -= value
end
# 戦闘中なら
if $game_temp.in_battle
# ダメージを設定
if $game_switches[DIAMOND::SP_DAMAGE] == true
battler.SPダメージとして使用している変数 = value
else
battler.damage = value
end
battler.damage_pop = true
end
end
end
$game_switches[DIAMOND::SP_DAMAGE] = false
# 継続
return true
end
〜略〜
|
SPダメージのスクリプトがない場合は薄緑色の部分はいりません。
バトルのイベントでカスタマイズポイントで設定したスイッチをOnにしてからダメージの処理を行うと
SPに対してダメージを表示させることができます。
※使用後、スイッチはoffにしなくても自動的にoffになります。
・データベースの限界突破
ツクールXP/VXは'0Xと違い武器、防具、スキルなどのデータベースの最大値が9999から999に減ってしまいました。
しかし、999に設定した後、
スクリプトにて
for i in 0..n
$w = load_data("Data/Weapons.rxdata")
$w.push RPG::Weapon.new
save_data($w,"Data/Weapons.rxdata")
end
|
をイベントに設定、セーブして、テストプレイし、このイベントを実行するとデータベースの最大値を突破する
ことができます。
nには増加したい数値を設定します。
防具なら
for i in 0..n
$w = load_data("Data/Armors.rxdata")
$w.push RPG::Armor.new
save_data($w,"Data/Armors.rxdata")
end
|
アイテムなら
for i in 0..n
$w = load_data("Data/Items.rxdata")
$w.push RPG::Item.new
save_data($w,"Data/Items.rxdata")
end
|
スキルなら
for i in 0..n
$w = load_data("Data/Skills.rxdata")
$w.push RPG::Skill.new
save_data($w,"Data/Skills.rxdata")
end
|
また、VXの場合、拡張子を『rvdata』に変更します。
※あまりに大きな数値を増加しようとするとハングアップして強制終了します。
(その場合、成功したループ回数までは一応限界を突破できますが、
運が悪ければデータがぶっ壊れます・・・多分)
戻る