ゲーム中の全てのウィンドウのスーパークラスです。

Methods
A
C
D
F
G
H
K
L
M
N
O
P
R
S
T
U
Class Public methods
new(x, y, width, height)

オブジェクト初期化

# File Window_Base.rb, line 10
def initialize(x, y, width, height)
  super
  self.windowskin = Cache.system("Window")
  update_padding
  update_tone
  create_contents
  @opening = @closing = false
end
Instance Public methods
activate()

ウィンドウのアクティブ化

# File Window_Base.rb, line 151
def activate
  self.active = true
  self
end
actor_name(n)

アクター n 番の名前を取得

# File Window_Base.rb, line 269
def actor_name(n)
  actor = n >= 1 ? $game_actors[n] : nil
  actor ? actor.name : ""
end
calc_line_height(text, restore_font_size = true)

行の高さを計算

restore_font_size : 計算後にフォントサイズを元に戻す

# File Window_Base.rb, line 382
def calc_line_height(text, restore_font_size = true)
  result = [line_height, contents.font.size].max
  last_font_size = contents.font.size
  text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc|
    make_font_bigger  if esc == "\e{"
    make_font_smaller if esc == "\e}"
    result = [result, contents.font.size].max
  end
  contents.font.size = last_font_size if restore_font_size
  result
end
change_color(color, enabled = true)

テキスト描画色の変更

enabled : 有効フラグ。false のとき半透明で描画

# File Window_Base.rb, line 209
def change_color(color, enabled = true)
  contents.font.color.set(color)
  contents.font.color.alpha = translucent_alpha unless enabled
end
close()

ウィンドウを閉じる

# File Window_Base.rb, line 126
def close
  @closing = true unless close?
  @opening = false
  self
end
contents_height()

ウィンドウ内容の高さを計算

# File Window_Base.rb, line 58
def contents_height
  height - standard_padding * 2
end
contents_width()

ウィンドウ内容の幅を計算

# File Window_Base.rb, line 51
def contents_width
  width - standard_padding * 2
end
convert_escape_characters(text)

制御文字の事前変換

実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。 文字「」はエスケープ文字(e)に変換。

# File Window_Base.rb, line 254
def convert_escape_characters(text)
  result = text.to_s.clone
  result.gsub!(/\/)            { "\e" }
  result.gsub!(/\e\e/)          { "\\" }
  result.gsub!(/\eV\[(\d+)\]/) { $game_variables[$1.to_i] }
  result.gsub!(/\eV\[(\d+)\]/) { $game_variables[$1.to_i] }
  result.gsub!(/\eN\[(\d+)\]/) { actor_name($1.to_i) }
  result.gsub!(/\eP\[(\d+)\]/) { party_member_name($1.to_i) }
  result.gsub!(/\eG/)          { Vocab::currency_unit }
  result
end
create_contents()

ウィンドウ内容の作成

# File Window_Base.rb, line 79
def create_contents
  contents.dispose
  if contents_width > 0 && contents_height > 0
    self.contents = Bitmap.new(contents_width, contents_height)
  else
    self.contents = Bitmap.new(1, 1)
  end
end
crisis_color()
# File Window_Base.rb, line 177
def crisis_color;      text_color(17);  end
deactivate()

ウィンドウの非アクティブ化

# File Window_Base.rb, line 159
def deactivate
  self.active = false
  self
end
dispose()

解放

# File Window_Base.rb, line 22
def dispose
  contents.dispose unless disposed?
  super
end
draw_actor_class(actor, x, y, width = 112)

職業の描画

# File Window_Base.rb, line 496
def draw_actor_class(actor, x, y, width = 112)
  change_color(normal_color)
  draw_text(x, y, width, line_height, actor.class.name)
end
draw_actor_face(actor, x, y, enabled = true)

アクターの顔グラフィック描画

# File Window_Base.rb, line 481
def draw_actor_face(actor, x, y, enabled = true)
  draw_face(actor.face_name, actor.face_index, x, y, enabled)
end
draw_actor_graphic(actor, x, y)

アクターの歩行グラフィック描画

# File Window_Base.rb, line 474
def draw_actor_graphic(actor, x, y)
  draw_character(actor.character_name, actor.character_index, x, y)
end
draw_actor_hp(actor, x, y, width = 124)

HP の描画

# File Window_Base.rb, line 550
def draw_actor_hp(actor, x, y, width = 124)
  draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
  change_color(system_color)
  draw_text(x, y, 30, line_height, Vocab::hp_a)
  draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
    hp_color(actor), normal_color)
end
draw_actor_icons(actor, x, y, width = 96)

ステートおよび強化/弱体のアイコンを描画

# File Window_Base.rb, line 522
def draw_actor_icons(actor, x, y, width = 96)
  icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
  icons.each_with_index {|n, i| draw_icon(n, x + 24 * i, y) }
end
draw_actor_level(actor, x, y)

レベルの描画

# File Window_Base.rb, line 512
def draw_actor_level(actor, x, y)
  change_color(system_color)
  draw_text(x, y, 32, line_height, Vocab::level_a)
  change_color(normal_color)
  draw_text(x + 32, y, 24, line_height, actor.level, 2)
end
draw_actor_mp(actor, x, y, width = 124)

MP の描画

# File Window_Base.rb, line 561
def draw_actor_mp(actor, x, y, width = 124)
  draw_gauge(x, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
  change_color(system_color)
  draw_text(x, y, 30, line_height, Vocab::mp_a)
  draw_current_and_max_values(x, y, width, actor.mp, actor.mmp,
    mp_color(actor), normal_color)
end
draw_actor_name(actor, x, y, width = 112)

名前の描画

# File Window_Base.rb, line 488
def draw_actor_name(actor, x, y, width = 112)
  change_color(hp_color(actor))
  draw_text(x, y, width, line_height, actor.name)
end
draw_actor_nickname(actor, x, y, width = 180)

二つ名の描画

# File Window_Base.rb, line 504
def draw_actor_nickname(actor, x, y, width = 180)
  change_color(normal_color)
  draw_text(x, y, width, line_height, actor.nickname)
end
draw_actor_param(actor, x, y, param_id)

能力値の描画

# File Window_Base.rb, line 595
def draw_actor_param(actor, x, y, param_id)
  change_color(system_color)
  draw_text(x, y, 120, line_height, Vocab::param(param_id))
  change_color(normal_color)
  draw_text(x + 120, y, 36, line_height, actor.param(param_id), 2)
end
draw_actor_simple_status(actor, x, y)

シンプルなステータスの描画

# File Window_Base.rb, line 583
def draw_actor_simple_status(actor, x, y)
  draw_actor_name(actor, x, y)
  draw_actor_level(actor, x, y + line_height * 1)
  draw_actor_icons(actor, x, y + line_height * 2)
  draw_actor_class(actor, x + 120, y)
  draw_actor_hp(actor, x + 120, y + line_height * 1)
  draw_actor_mp(actor, x + 120, y + line_height * 2)
end
draw_actor_tp(actor, x, y, width = 124)

TP の描画

# File Window_Base.rb, line 572
def draw_actor_tp(actor, x, y, width = 124)
  draw_gauge(x, y, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)
  change_color(system_color)
  draw_text(x, y, 30, line_height, Vocab::tp_a)
  change_color(tp_color(actor))
  draw_text(x + width - 42, y, 42, line_height, actor.tp.to_i, 2)
end
draw_character(character_name, character_index, x, y)

歩行グラフィックの描画

# File Window_Base.rb, line 431
def draw_character(character_name, character_index, x, y)
  return unless character_name
  bitmap = Cache.character(character_name)
  sign = character_name[/^[\!\$]./]
  if sign && sign.include?('$')
    cw = bitmap.width / 3
    ch = bitmap.height / 4
  else
    cw = bitmap.width / 12
    ch = bitmap.height / 8
  end
  n = character_index
  src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
draw_currency_value(value, unit, x, y, width)

通貨単位つき数値(所持金など)の描画

# File Window_Base.rb, line 616
def draw_currency_value(value, unit, x, y, width)
  cx = text_size(unit).width
  change_color(normal_color)
  draw_text(x, y, width - cx - 2, line_height, value, 2)
  change_color(system_color)
  draw_text(x, y, width, line_height, unit, 2)
end
draw_current_and_max_values(x, y, width, current, max, color1, color2)

現在値/最大値を分数形式で描画

current : 現在値 max : 最大値 color1 : 現在値の色 color2 : 最大値の色

# File Window_Base.rb, line 534
def draw_current_and_max_values(x, y, width, current, max, color1, color2)
  change_color(color1)
  xr = x + width
  if width < 96
    draw_text(xr - 40, y, 42, line_height, current, 2)
  else
    draw_text(xr - 92, y, 42, line_height, current, 2)
    change_color(color2)
    draw_text(xr - 52, y, 12, line_height, "/", 2)
    draw_text(xr - 42, y, 42, line_height, max, 2)
  end
end
draw_face(face_name, face_index, x, y, enabled = true)

顔グラフィックの描画

enabled : 有効フラグ。false のとき半透明で描画

# File Window_Base.rb, line 421
def draw_face(face_name, face_index, x, y, enabled = true)
  bitmap = Cache.face(face_name)
  rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  bitmap.dispose
end
draw_gauge(x, y, width, rate, color1, color2)

ゲージの描画

rate : 割合(1.0 で満タン) color1 : グラデーション 左端 color2 : グラデーション 右端

# File Window_Base.rb, line 400
def draw_gauge(x, y, width, rate, color1, color2)
  fill_w = (width * rate).to_i
  gauge_y = y + line_height - 8
  contents.fill_rect(x, gauge_y, width, 6, gauge_back_color)
  contents.gradient_fill_rect(x, gauge_y, fill_w, 6, color1, color2)
end
draw_icon(icon_index, x, y, enabled = true)

アイコンの描画

enabled : 有効フラグ。false のとき半透明で描画

# File Window_Base.rb, line 411
def draw_icon(icon_index, x, y, enabled = true)
  bitmap = Cache.system("Iconset")
  rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
end
draw_item_name(item, x, y, enabled = true, width = 172)

アイテム名の描画

enabled : 有効フラグ。false のとき半透明で描画

# File Window_Base.rb, line 606
def draw_item_name(item, x, y, enabled = true, width = 172)
  return unless item
  draw_icon(item.icon_index, x, y, enabled)
  change_color(normal_color, enabled)
  draw_text(x + 24, y, width, line_height, item.name)
end
draw_text(*args)

テキストの描画

args : Bitmap#draw_text と同じ

# File Window_Base.rb, line 218
def draw_text(*args)
  contents.draw_text(*args)
end
draw_text_ex(x, y, text)

制御文字つきテキストの描画

# File Window_Base.rb, line 232
def draw_text_ex(x, y, text)
  reset_font_settings
  text = convert_escape_characters(text)
  pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  process_character(text.slice!(0, 1), text, pos) until text.empty?
end
fitting_height(line_number)

指定行数に適合するウィンドウの高さを計算

# File Window_Base.rb, line 65
def fitting_height(line_number)
  line_number * line_height + standard_padding * 2
end
gauge_back_color()
# File Window_Base.rb, line 179
def gauge_back_color;  text_color(19);  end
hide()

ウィンドウの非表示

# File Window_Base.rb, line 143
def hide
  self.visible = false
  self
end
hp_color(actor)

HP の文字色を取得

# File Window_Base.rb, line 450
def hp_color(actor)
  return knockout_color if actor.hp == 0
  return crisis_color if actor.hp < actor.mhp / 4
  return normal_color
end
hp_gauge_color1()
# File Window_Base.rb, line 180
def hp_gauge_color1;   text_color(20);  end
hp_gauge_color2()
# File Window_Base.rb, line 181
def hp_gauge_color2;   text_color(21);  end
knockout_color()
# File Window_Base.rb, line 178
def knockout_color;    text_color(18);  end
line_height()

行の高さを取得

# File Window_Base.rb, line 30
def line_height
  return 24
end
make_font_bigger()

フォントを大きくする

# File Window_Base.rb, line 367
def make_font_bigger
  contents.font.size += 8 if contents.font.size <= 64
end
make_font_smaller()

フォントを小さくする

# File Window_Base.rb, line 374
def make_font_smaller
  contents.font.size -= 8 if contents.font.size >= 16
end
mp_color(actor)

MP の文字色を取得

# File Window_Base.rb, line 459
def mp_color(actor)
  return crisis_color if actor.mp < actor.mmp / 4
  return normal_color
end
mp_cost_color()
# File Window_Base.rb, line 184
def mp_cost_color;     text_color(23);  end
mp_gauge_color1()
# File Window_Base.rb, line 182
def mp_gauge_color1;   text_color(22);  end
mp_gauge_color2()
# File Window_Base.rb, line 183
def mp_gauge_color2;   text_color(23);  end
normal_color()

各種文字色の取得

# File Window_Base.rb, line 175
def normal_color;      text_color(0);   end
obtain_escape_code(text)

制御文字の本体を破壊的に取得

# File Window_Base.rb, line 328
def obtain_escape_code(text)
  text.slice!(/^[\$\.\|\^!><\{\}\]|^[A-Z]+/)
end
obtain_escape_param(text)

制御文字の引数を破壊的に取得

# File Window_Base.rb, line 335
def obtain_escape_param(text)
  text.slice!(/^\[\d+\]/)[/\d+/].to_i rescue 0
end
open()

ウィンドウを開く

# File Window_Base.rb, line 117
def open
  @opening = true unless open?
  @closing = false
  self
end
param_change_color(change)

能力値変化の描画色取得

# File Window_Base.rb, line 627
def param_change_color(change)
  return power_up_color   if change > 0
  return power_down_color if change < 0
  return normal_color
end
party_member_name(n)

パーティメンバー n 番の名前を取得

# File Window_Base.rb, line 277
def party_member_name(n)
  actor = n >= 1 ? $game_party.members[n - 1] : nil
  actor ? actor.name : ""
end
pending_color()

保留項目の背景色を取得

# File Window_Base.rb, line 194
def pending_color
  windowskin.get_pixel(80, 80)
end
power_down_color()
# File Window_Base.rb, line 186
def power_down_color;  text_color(25);  end
power_up_color()
# File Window_Base.rb, line 185
def power_up_color;    text_color(24);  end
process_character(c, text, pos)

文字の処理

c : 文字 text : 描画処理中の文字列バッファ(必要なら破壊的に変更) pos : 描画位置 {:x, :y, :new_x, :height}

# File Window_Base.rb, line 288
def process_character(c, text, pos)
  case c
  when "\n"   # 改行
    process_new_line(text, pos)
  when "\f"   # 改ページ
    process_new_page(text, pos)
  when "\e"   # 制御文字
    process_escape_character(obtain_escape_code(text), text, pos)
  else        # 普通の文字
    process_normal_character(c, pos)
  end
end
process_draw_icon(icon_index, pos)

制御文字によるアイコン描画の処理

# File Window_Base.rb, line 359
def process_draw_icon(icon_index, pos)
  draw_icon(icon_index, pos[:x], pos[:y])
  pos[:x] += 24
end
process_escape_character(code, text, pos)

制御文字の処理

code : 制御文字の本体部分(「C」なら「C」)

# File Window_Base.rb, line 343
def process_escape_character(code, text, pos)
  case code.upcase
  when 'C'
    change_color(text_color(obtain_escape_param(text)))
  when 'I'
    process_draw_icon(obtain_escape_param(text), pos)
  when '{'
    make_font_bigger
  when '}'
    make_font_smaller
  end
end
process_new_line(text, pos)

改行文字の処理

# File Window_Base.rb, line 313
def process_new_line(text, pos)
  pos[:x] = pos[:new_x]
  pos[:y] += pos[:height]
  pos[:height] = calc_line_height(text)
end
process_new_page(text, pos)

改ページ文字の処理

# File Window_Base.rb, line 322
def process_new_page(text, pos)
end
process_normal_character(c, pos)

通常文字の処理

# File Window_Base.rb, line 304
def process_normal_character(c, pos)
  text_width = text_size(c).width
  draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
  pos[:x] += text_width
end
reset_font_settings()

フォント設定のリセット

# File Window_Base.rb, line 242
def reset_font_settings
  change_color(normal_color)
  contents.font.size = Font.default_size
  contents.font.bold = false
  contents.font.italic = false
end
show()

ウィンドウの表示

# File Window_Base.rb, line 135
def show
  self.visible = true
  self
end
standard_padding()

標準パディングサイズの取得

# File Window_Base.rb, line 37
def standard_padding
  return 12
end
system_color()
# File Window_Base.rb, line 176
def system_color;      text_color(16);  end
text_color(n)

文字色取得

n : 文字色番号(0..31)

# File Window_Base.rb, line 168
def text_color(n)
  windowskin.get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
end
text_size(str)

テキストサイズの取得

# File Window_Base.rb, line 225
def text_size(str)
  contents.text_size(str)
end
tp_color(actor)

TP の文字色を取得

# File Window_Base.rb, line 467
def tp_color(actor)
  return normal_color
end
tp_cost_color()
# File Window_Base.rb, line 189
def tp_cost_color;     text_color(29);  end
tp_gauge_color1()
# File Window_Base.rb, line 187
def tp_gauge_color1;   text_color(28);  end
tp_gauge_color2()
# File Window_Base.rb, line 188
def tp_gauge_color2;   text_color(29);  end
translucent_alpha()

半透明描画用のアルファ値を取得

# File Window_Base.rb, line 201
def translucent_alpha
  return 160
end
update()

フレーム更新

# File Window_Base.rb, line 91
def update
  super
  update_tone
  update_open if @opening
  update_close if @closing
end
update_close()

閉じる処理の更新

# File Window_Base.rb, line 109
def update_close
  self.openness -= 48
  @closing = false if close?
end
update_open()

開く処理の更新

# File Window_Base.rb, line 101
def update_open
  self.openness += 48
  @opening = false if open?
end
update_padding()

パディングの更新

# File Window_Base.rb, line 44
def update_padding
  self.padding = standard_padding
end
update_tone()

色調の更新

# File Window_Base.rb, line 72
def update_tone
  self.tone.set($game_system.window_tone)
end