RGSS2(VX製)デフォルトの装備画面を改良したい

Mirin
記事: 38
登録日時: 2018年10月20日(土) 15:52

RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by Mirin » 2020年11月11日(水) 19:31

色々ごちゃごちゃしていて、すみません…。
2枚目の画像のような装備画面にしたいのですが、KGC様の「ヘルプウィンドウ拡張機能」を使っていて、VXデフォルトから、改良を試みたものの1枚目の画像になりました。
そこから、選択で縦一列の状態から、横に移動?選択?が可能にすることができなく、力尽きました。
なるべく、デフォルト(VX)から起用したいです。

[attachment=0]5235325.png[/attachment]
KGC様のヘルプウィンドウ拡張機能 にある、装備画面を改良したものです。
[color=#FF80BF]140行[/color]
[code]
#==============================================================================
# ■ Scene_Equip
#==============================================================================

class Scene_Equip < Scene_Base
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias start_KGC_HelpExtension start
def start
start_KGC_HelpExtension

adjust_window_size
end
#--------------------------------------------------------------------------
# ● ウィンドウサイズ調整
#--------------------------------------------------------------------------
def adjust_window_size
@help_window.row_max = KGC::HelpExtension::ROW_MAX
@equip_window.y = 174 #@help_window.height
@status_window.y = @help_window.height
resize_item_windows
end
#--------------------------------------------------------------------------
# ● アイテムウィンドウのサイズ変更
#--------------------------------------------------------------------------
def resize_item_windows
@item_windows.each { |w|
dy = @help_window.height + @equip_window.height
w.y = dy
w.height = Graphics.height + dy
w.refresh
}
end
end
[/code]
[color=#FF80BF]175行[/color]

下記は、デフォルトのEquipです。(デフォルトのまま全て貼り付けてます)
[code]
#==============================================================================
# ■ Window_Equip
#------------------------------------------------------------------------------
#  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
#==============================================================================

class Window_Equip < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# actor : アクター
#--------------------------------------------------------------------------
def initialize(x, y, actor)
super(0, y, 544, 100)#(x, y, 336, WLH * 5 + 32)装備可能アイテム一覧ウィンドウ
@actor = actor
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● アイテムの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
for item in @actor.equips do @data.push(item) end
@item_max = @data.size
self.contents.font.color = system_color
if @actor.two_swords_style
self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon1)#4, WLH * 0, 92, WLH
self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
else
self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon)
self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::armor1)
end
self.contents.draw_text(4, WLH * 2, 92, WLH, Vocab::armor2)#4, WLH * 2, 92
self.contents.draw_text(4, WLH * 3, 92, WLH, Vocab::armor3)
self.contents.draw_text(180, 20, 92, WLH, Vocab::armor4)#4, WLH * 4, 92, WLH,
draw_item_name(@data[0], 92, WLH * 0)
draw_item_name(@data[1], 92, WLH * 0)#1
draw_item_name(@data[2], 92, WLH * 1)#2
draw_item_name(@data[3], 92, WLH * 1)#3
draw_item_name(@data[4], 92, WLH * 2)#4
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(item == nil ? "" : item.description)
end
end
[/code]

下記、デフォルトのEquipStatusです。(デフォルトのまま全て貼り付けてます)
[code]
#==============================================================================
# ■ Window_EquipStatus
#------------------------------------------------------------------------------
#  装備画面で、アクターの能力値変化を表示するウィンドウです。
#==============================================================================

class Window_EquipStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# actor : アクター
#--------------------------------------------------------------------------
def initialize(x, y, actor)
super(x, y, 544, 99)#(x, y, 208, WLH * 5 + 32)255 99
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_name(@actor, 4, 0)#4, 0
draw_parameter(0, WLH * 1, 0) # 攻撃 (0, WLH * 2, 0)
draw_parameter(255, 22, 1) # 防御 (0, WLH * 2, 1)
draw_parameter(0, 46, 2) # 魔攻 (0, WLH * 2, 2)
draw_parameter(255, 46, 3) # 速さ (0, WLH * 2, 3)
draw_basic_info(0, 0)
#draw_parameter(0, WLH * 5, 4)#追加
#draw_parameter(0, WLH * 6, 5)#追加
end
#--------------------------------------------------------------------------
# ● 装備変更後の能力値設定
# new_atk : 装備変更後の攻撃力
# new_def : 装備変更後の防御力
# new_spi : 装備変更後の精神力
# new_agi : 装備変更後の敏捷性
#--------------------------------------------------------------------------
def set_new_parameters(new_atk, new_def, new_spi, new_agi)
if @new_atk != new_atk or @new_def != new_def or
@new_spi != new_spi or @new_agi != new_agi
@new_atk = new_atk
@new_def = new_def
@new_spi = new_spi
@new_agi = new_agi
refresh
end
end
#--------------------------------------------------------------------------
# ● 装備変更後の能力値の描画色取得
# old_value : 装備変更前の能力値
# new_value : 装備変更後の能力値
#--------------------------------------------------------------------------
def new_parameter_color(old_value, new_value)
if new_value > old_value # 強くなる
return power_up_color
elsif new_value == old_value # 変わらず
return normal_color
else # 弱くなる
return power_down_color
end
end
#--------------------------------------------------------------------------
# ● 能力値の描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
# type : 能力値の種類 (0~3)
#--------------------------------------------------------------------------
def draw_parameter(x, y, type)
case type
when 0
name = Vocab::atk
value = @actor.atk
new_value = @new_atk
when 1
name = Vocab::def
value = @actor.def
new_value = @new_def
when 2
name = Vocab::spi
value = @actor.spi
new_value = @new_spi
when 3
name = Vocab::agi
value = @actor.agi
new_value = @new_agi
end
self.contents.font.color = system_color
self.contents.draw_text(x + 3, y, 80, WLH, name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 45, y, 86, WLH, value, 2)
self.contents.font.color = system_color
self.contents.draw_text(x + 140, y, 20, WLH, "→", 1)
if new_value != nil
self.contents.font.color = new_parameter_color(value, new_value)
self.contents.draw_text(x + 165, y, 86, WLH, new_value, 2)#122,55
end
end
#--------------------------------------------------------------------------
# ● 基本情報の描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_basic_info(x, y)
draw_actor_level(@actor, 90, 0)
draw_actor_hp(@actor, 210, 0) # (@actor, x, y + WLH * 1)
draw_actor_mp(@actor, 380, 0) # (@actor, x, y + WLH * 2)
end
end
[/code]
[attachment=1]名称未設定.png[/attachment]
添付ファイル
5235325.png
5235325.png (278.46 KiB) 閲覧数: 6236 回
名称未設定.png

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by TOMO » 2020年11月12日(木) 02:17

Window_EquipとWindow_EquipItemのinitialize内に

コード: 全て選択

@column_max = 2

を追加すれば横移動が可能なはずです
Mirin
記事: 38
登録日時: 2018年10月20日(土) 15:52

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by Mirin » 2020年11月12日(木) 17:38

上げさせたスクリプトを入れたら動きました。(CACAO様の講座を見て理解しました。
また、別なのですが、「デフォルト(VX)他サイト様からのスクリプトなし」、
で盾を消すことは可能なのでしょうか?(下のような図面)

武器    頭
身体    装飾品
装飾品

みたいな感じはできか、どうか試しているんですが。。うまく行かず困ってます。
やはり盾は二刀流の為に存在してるのだけであって、消すことは出来ないのでしょうか?
上記のようなデザイン?は作れたのですが、装備選択がずれる状態になっています。

Window_Equipにある。

コード: 全て選択

@column_max =  2

新たに追加した。

コード: 全て選択

@item_max = 5

Scene_Equip内のここ。

コード: 全て選択

EQUIP_TYPE_MAX = 5  #定数5

Scene_Equipのアイテムウィンドウの作成or 更新をいじるのかな?と思ってますが、うまくいきません。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by TOMO » 2020年11月13日(金) 04:55

やはり盾は二刀流の為に存在してるのだけであって、消すことは出来ないのでしょうか?
別に二刀流や両手持ちを使わないなら、消しても大丈夫です
使うとバグるけど

上記のようなデザイン?は作れたのですが、装備選択がずれる状態になっています。

コード: 全て選択

class Window_EquipItem < Window_Item
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x          : ウィンドウの X 座標
  #     y          : ウィンドウの Y 座標
  #     width      : ウィンドウの幅
  #     height     : ウィンドウの高さ
  #     actor      : アクター
  #     equip_type : 装備部位 (0~4)
  #--------------------------------------------------------------------------
  alias tomo_ex_equip_types_initialize initialize
  def initialize(x, y, width, height, actor, equip_type)
    equip_type = [0,2,3,4,4][equip_type]
    tomo_ex_equip_types_initialize(x, y, width, height, actor, equip_type)
    @column_max = 2
  end
end
これで可能なはずです
Window_Equipの装備部位名はそちらで何とかしてください
Mirin
記事: 38
登録日時: 2018年10月20日(土) 15:52

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by Mirin » 2020年11月13日(金) 22:18

Window_Equipの装備部位名は、できてました。
コードを入れて確認ができ、理想、装備画面になってくれました。
ありがとうございます。
Mirin
記事: 38
登録日時: 2018年10月20日(土) 15:52

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by Mirin » 2020年11月14日(土) 22:03

装備画面で武具を装備したら、存在しない選択が左下に出て。決定を押すとエラーでてしまいました…。
それと、この素材は、有償に使ってもよろしいでしょうか?
現在、諸事情がありまして…。下記、装備画面になりました。(大変、申し訳ございません。

武器    身体
頭     装飾品


以前のスクリプトから[4]を1つ消して、名称を調整し終わっています。
Window_EquipItem
の「○アイテムをリストに含めるかどうか」というところだと思うのですが、
どう改変したらいいのかお手上げです。
部分的に

コード: 全て選択

return false unless item.kind == @equip_type - 1

だと思う。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by TOMO » 2020年11月14日(土) 22:51

それだけだと分かりにくいので、
装備画面で武具を装備したら、存在しない選択が左下に出て。
の実際のスクショと
決定を押すとエラーでてしまいました…。
で出たエラーメッセージを載せて欲しいです

それと、この素材は、有償に使ってもよろしいでしょうか?
OKです

現在、諸事情がありまして…。下記、装備画面になりました。(大変、申し訳ございません。

武器    身体
頭     装飾品


以前のスクリプトから[4]を1つ消して、名称を調整し終わっています。
こういう時の為にも、
他サイト様(KAMESOFT様とか)の装備拡張系をベースにレイアウトを変更した方がいいんだが…
エラー等も、デフォルトの5個から4個(5個以外)にした辺が原因かな?

※追記
これ書いた後に思ったんだが、前回貼ったスクリプトの

コード: 全て選択

equip_type = [0,2,3,4,4][equip_type]
をそのままにしてる?

[0,2,3,4,4]の配列は、順番に「武器・頭・身体・装飾品・装飾品」なので、
この順番や個数を変更するならここを弄る必要があります

元のequip_typeは「装備の〇番目」なだけだったので、これを

コード: 全て選択

return false unless item.kind == @equip_type - 1
用に「(前述の)配列の〇番目」に変更しました
Mirin
記事: 38
登録日時: 2018年10月20日(土) 15:52

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by Mirin » 2020年11月14日(土) 23:32

説明とスクショ忘れてしまい、すみません。
1:
9357240923490.JPG
9357240923490.JPG (62.58 KiB) 閲覧数: 6014 回


2:エラー画面
0395274832649.JPG
0395274832649.JPG (18.4 KiB) 閲覧数: 6014 回

エラーが履いた部分はイジっていません。

3:有償について、ありがとうございます。

4:装備拡張を最初使っていたのですが、ゲームバランスを考えた結果、装飾品は1つの方がいい+装備画面に1枠の空白が気になりまして…。レイアウトも短くするつもりです。

5:こういう感じになっています。

コード: 全て選択

class Window_EquipItem < Window_Item
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x          : ウィンドウの X 座標
  #     y          : ウィンドウの Y 座標
  #     width      : ウィンドウの幅
  #     height     : ウィンドウの高さ
  #     actor      : アクター
  #     equip_type : 装備部位 (0~4)
  #--------------------------------------------------------------------------
  alias tomo_ex_equip_types_initialize initialize
  def initialize(x, y, width, height, actor, equip_type)
    equip_type = [0, 3, 2, 4][equip_type]
    tomo_ex_equip_types_initialize(x, y, width, height, actor, equip_type)
    @column_max = 2
  end
end


以前作って頂いたスクリプトの番号は変更しています。

コード: 全て選択

equip_type = [0,2,3,4][equip_type]

にしてます。

VXデフォルトの

コード: 全て選択

Window_EquipItem
class Window_EquipItem < Window_Item

部分にある、

コード: 全て選択

return false unless item.kind == @equip_type - 1

は、色々イジってません。

KAMESOFT様の「装備拡張」を利用でも再現は出来るのでしょうか?
(装備拡張画面ではない方です。装備選択で別画面を出すのではなく、デフォルト(VX純正)を改良した感じのほうが、画面が見やすくていいなと。)
aliasされたコードを自分なりに改良をしたいのですが、どこをどう改良したらいいのか、わからずじまいです…。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by TOMO » 2020年11月15日(日) 23:20

> 1と2
調べようとしたけど、別のエラーが出たので現在調査中&修正中です

> 5
KAMESOFT様のを勧めたのは、
レイアウト自体はデフォルトとほぼ変わらず、
Mirinさんが改造した分を装備拡張の上に置けば、
いくつかはそのまま使える可能性があったからです
※私のは不要になるので使わないで下さい(エラーが出てるし)

あとは装備部位の数等を変更した際に生じる様々なバグがあるからです
だからその辺の対応が既に済んでるスクリプトを利用した方が早いのです



ちなみにaliasについては、
CACAO SOFT様の講座だと基礎編6にあります

あまり書かれてないので分かりにくいと思いますが、
aliasが使われてる部分の処理は基本弄らない方がいいです
それが邪魔だと思うならコメントアウトしてみて、エラー等が出なければ大体OKです

aliasはそれより上にある処理を壊さない為に使うものなので、
下に置くと上書きして消してしまいそうなのは、上に置きましょう

Mirinさんのは、
aliasをちゃんと使ってるなら装備拡張の下でいいですが、
使ってないなら上になります
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: RGSS2(VX製)デフォルトの装備画面を改良したい

投稿記事by TOMO » 2020年11月16日(月) 17:03

ついでにKAMESOFT様対応ので作ってみました

コード: 全て選択

class Window_EquipStatus
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_level(@actor, 144, 0)
    draw_actor_hp_gauge(@actor, 220, 0)
    draw_actor_hp(@actor, 220, 0)
    draw_actor_mp_gauge(@actor, 350, 0)
    draw_actor_mp(@actor, 350, 0)
   
    width = (self.contents.width - 8) / 2
    4.times {|i| draw_parameter(width * (i % 2), WLH * (i / 2 + 1), i) }
  end
end
class Scene_Equip
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_windows
    @item_windows = []
    width, height = Graphics.width, Graphics.height - 264
    for i in 0...EQUIP_TYPE_MAX
      @item_windows[i] = Window_EquipItem.new(0, 264, width, height, @actor, i)
      @item_windows[i].help_window = @help_window
      @item_windows[i].visible = (@equip_index == i)
      @item_windows[i].y = 264
      @item_windows[i].height = height
      @item_windows[i].active = false
      @item_windows[i].index = -1
    end
  end
end
これを装備拡張の上に置き、

コード: 全て選択

class Window_Equip < Window_Selectable
  RowMax = 3
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, Graphics.width - x, WLH * RowMax + 32)
    @actor = actor
    @column_max = 2
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @data = @actor.equips.clone
    @item_max = [@data.size, @actor.armor_number + 1].min
    create_contents

    # 装備箇所を描画
    if @actor.two_swords_style
      names = [Vocab::weapon1, Vocab::weapon2]
    else
      names = [Vocab::weapon, armor_slot_name(@actor.equip_type[0])]
    end
    (1...@actor.armor_number).each do |i|
      names << armor_slot_name(@actor.equip_type[i])
    end
    @item_max.times do |i|
      rect = item_rect(i)
      self.contents.font.color = system_color
      self.contents.draw_text(4 + rect.x, rect.y, 72, WLH, names[i])
      draw_item_name(@data[i], rect.x + 72, rect.y)
      rect.x += 92
      rect.width -= 92
      draw_equipment_ep_cost(@data[i], rect)
    end
  end
end
class Window_EquipStatus
  RowMax = 3
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, Graphics.width - x, WLH * RowMax + 32)
    @actor = actor
    @column_max = 2
    refresh
  end
end
class Scene_Equip
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @actor = $game_party.members[@actor_index]
    @help_window = Window_Help.new
    create_item_windows
    @equip_window = Window_Equip.new(0, 56, @actor)
    @equip_window.help_window = @help_window
    @equip_window.index = @equip_index
    @status_window = Window_EquipStatus.new(0, 56, @actor)
    @equip_window.y = @status_window.y + @status_window.height
  end
end
を装備拡張の下に置いて下さい

細かい部分(描画位置等)の調整はそちらでして下さい

“VX / Ace:質問” へ戻る