敵グループおよび戦闘に関するデータを扱うクラスです。バトルイベントの処理も 行います。このクラスのインスタンスは $game_troop で参照されます。

Methods
C
E
G
I
L
M
N
S
T
U
Constants
LETTER_TABLE_HALF = [' A',' B',' C',' D',' E',' F',' G',' H',' I',' J', ' K',' L',' M',' N',' O',' P',' Q',' R',' S',' T', ' U',' V',' W',' X',' Y',' Z']
 

敵キャラ名の後ろにつける文字の表

LETTER_TABLE_FULL = ['A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z']
 
Attributes
[R] event_flags
[R] interpreter
[R] name_counts
[R] screen

公開インスタンス変数

[R] turn_count
Class Public methods
new()

オブジェクト初期化

# File Game_Troop.rb, line 30
def initialize
  super
  @screen = Game_Screen.new
  @interpreter = Game_Interpreter.new
  @event_flags = {}
  clear
end
Instance Public methods
clear()

クリア

# File Game_Troop.rb, line 48
def clear
  @screen.clear
  @interpreter.clear
  @event_flags.clear
  @enemies = []
  @turn_count = 0
  @names_count = {}
end
conditions_met?(page)

バトルイベント(ページ)の条件合致判定

# File Game_Troop.rb, line 138
def conditions_met?(page)
  c = page.condition
  if !c.turn_ending && !c.turn_valid && !c.enemy_valid &&
     !c.actor_valid && !c.switch_valid
    return false      # 条件未設定…実行しない
  end
  if @event_flags[page]
    return false      # 実行済み
  end
  if c.turn_ending    # ターン終了時
    return false unless BattleManager.turn_end?
  end
  if c.turn_valid     # ターン数
    n = @turn_count
    a = c.turn_a
    b = c.turn_b
    return false if (b == 0 && n != a)
    return false if (b > 0 && (n < 1 || n < a || n % b != a % b))
  end
  if c.enemy_valid    # 敵キャラ
    enemy = $game_troop.members[c.enemy_index]
    return false if enemy == nil
    return false if enemy.hp_rate * 100 > c.enemy_hp
  end
  if c.actor_valid    # アクター
    actor = $game_actors[c.actor_id]
    return false if actor == nil 
    return false if actor.hp_rate * 100 > c.actor_hp
  end
  if c.switch_valid   # スイッチ
    return false if !$game_switches[c.switch_id]
  end
  return true         # 条件合致
end
enemy_names()

敵キャラ名の配列取得

戦闘開始時の表示用。重複は除去する。

# File Game_Troop.rb, line 125
def enemy_names
  names = []
  members.each do |enemy|
    next unless enemy.alive?
    next if names.include?(enemy.original_name)
    names.push(enemy.original_name)
  end
  names
end
exp_total()

経験値の合計計算

# File Game_Troop.rb, line 198
def exp_total
  dead_members.inject(0) {|r, enemy| r += enemy.exp }
end
gold_rate()

お金の倍率を取得

# File Game_Troop.rb, line 212
def gold_rate
  $game_party.gold_double? ? 2 : 1
end
gold_total()

お金の合計計算

# File Game_Troop.rb, line 205
def gold_total
  dead_members.inject(0) {|r, enemy| r += enemy.gold } * gold_rate
end
increase_turn()

ターンの増加

# File Game_Troop.rb, line 190
def increase_turn
  troop.pages.each {|page| @event_flags[page] = false if page.span == 1 }
  @turn_count += 1
end
init_screen_tone()

画面の色調を初期化

# File Game_Troop.rb, line 86
def init_screen_tone
  @screen.start_tone_change($game_map.screen.tone, 0) if $game_map
end
letter_table()

敵キャラ名の後ろにつける文字の表を取得

# File Game_Troop.rb, line 110
def letter_table
  $game_system.japanese? ? LETTER_TABLE_FULL : LETTER_TABLE_HALF
end
make_drop_items()

ドロップアイテムの配列作成

# File Game_Troop.rb, line 219
def make_drop_items
  dead_members.inject([]) {|r, enemy| r += enemy.make_drop_items }
end
make_unique_names()

同名の敵キャラに ABC などの文字を付加

# File Game_Troop.rb, line 93
def make_unique_names
  members.each do |enemy|
    next unless enemy.alive?
    next unless enemy.letter.empty?
    n = @names_count[enemy.original_name] || 0
    enemy.letter = letter_table[n % letter_table.size]
    @names_count[enemy.original_name] = n + 1
  end
  members.each do |enemy|
    n = @names_count[enemy.original_name] || 0
    enemy.plural = true if n >= 2
  end
end
members()

メンバーの取得

# File Game_Troop.rb, line 41
def members
  @enemies
end
setup(troop_id)

セットアップ

# File Game_Troop.rb, line 67
def setup(troop_id)
  clear
  @troop_id = troop_id
  @enemies = []
  troop.members.each do |member|
    next unless $data_enemies[member.enemy_id]
    enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
    enemy.hide if member.hidden
    enemy.screen_x = member.x
    enemy.screen_y = member.y
    @enemies.push(enemy)
  end
  init_screen_tone
  make_unique_names
end
setup_battle_event()

バトルイベントのセットアップ

# File Game_Troop.rb, line 176
def setup_battle_event
  return if @interpreter.running?
  return if @interpreter.setup_reserved_common_event
  troop.pages.each do |page|
    next unless conditions_met?(page)
    @interpreter.setup(page.list)
    @event_flags[page] = true if page.span <= 1
    return
  end
end
troop()

敵グループオブジェクト取得

# File Game_Troop.rb, line 60
def troop
  $data_troops[@troop_id]
end
update()

フレーム更新

# File Game_Troop.rb, line 117
def update
  @screen.update
end