敵グループおよび戦闘に関するデータを扱うクラスです。バトルイベントの処理も 行います。このクラスのインスタンスは $game_troop で参照されます。
- A
- C
- E
- G
- I
- M
- N
- S
- T
- U
| LETTER_TABLE | = | [ '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'] |
敵キャラ名の後ろにつける文字の表 |
||
| [RW] | can_escape | |
| [RW] | can_lose | |
| [R] | event_flags | |
| [RW] | forcing_battler | |
| [R] | interpreter | |
| [R] | name_counts | |
| [RW] | preemptive | |
| [R] | screen | 公開インスタンス変数 |
| [RW] | surprise | |
| [R] | turn_count | |
| [RW] | turn_ending |
オブジェクト初期化
Source: show
# File Game_Troop.rb, line 33 def initialize super @screen = Game_Screen.new @interpreter = Game_Interpreter.new @event_flags = {} @enemies = [] # トループメンバー (敵キャラオブジェクトの配列) clear end
全滅判定
Source: show
# File Game_Troop.rb, line 222 def all_dead? return existing_members.empty? end
クリア
Source: show
# File Game_Troop.rb, line 52 def clear @screen.clear @interpreter.clear @event_flags.clear @enemies = [] @turn_count = 0 @names_count = {} @can_escape = false @can_lose = false @preemptive = false @surprise = false @turn_ending = false @forcing_battler = nil end
バトルイベント (ページ) の条件合致判定
page : バトルイベントページ
Source: show
# File Game_Troop.rb, line 138 def conditions_met?(page) c = page.condition if not c.turn_ending and not c.turn_valid and not c.enemy_valid and not c.actor_valid and not c.switch_valid return false # 条件未設定…実行しない end if @event_flags[page] return false # 実行済み end if c.turn_ending # ターン終了時 return false unless @turn_ending end if c.turn_valid # ターン数 n = @turn_count a = c.turn_a b = c.turn_b return false if (b == 0 and n != a) return false if (b > 0 and (n < 1 or n < a or 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 * 100.0 / enemy.maxhp > c.enemy_hp end if c.actor_valid # アクター actor = $game_actors[c.actor_id] return false if actor == nil return false if actor.hp * 100.0 / actor.maxhp > c.actor_hp end if c.switch_valid # スイッチ return false if $game_switches[c.switch_id] == false end return true # 条件合致 end
敵キャラ名の配列取得
戦闘開始時の表示用。重複は除去する。
Source: show
# File Game_Troop.rb, line 124 def enemy_names names = [] for enemy in members next unless enemy.exist? next if names.include?(enemy.original_name) names.push(enemy.original_name) end return names end
経験値の合計計算
Source: show
# File Game_Troop.rb, line 229 def exp_total exp = 0 for enemy in dead_members exp += enemy.exp unless enemy.hidden end return exp end
お金の合計計算
Source: show
# File Game_Troop.rb, line 240 def gold_total gold = 0 for enemy in dead_members gold += enemy.gold unless enemy.hidden end return gold end
ターンの増加
Source: show
# File Game_Troop.rb, line 197 def increase_turn for page in troop.pages if page.span == 1 @event_flags[page] = false end end @turn_count += 1 end
戦闘行動の作成
Source: show
# File Game_Troop.rb, line 209 def make_actions if @preemptive clear_actions else for enemy in members enemy.make_action end end end
ドロップアイテムの配列作成
Source: show
# File Game_Troop.rb, line 251 def make_drop_items drop_items = [] for enemy in dead_members for di in [enemy.drop_item1, enemy.drop_item2] next if di.kind == 0 next if rand(di.denominator) != 0 if di.kind == 1 drop_items.push($data_items[di.item_id]) elsif di.kind == 2 drop_items.push($data_weapons[di.weapon_id]) elsif di.kind == 3 drop_items.push($data_armors[di.armor_id]) end end end return drop_items end
同名の敵キャラに ABC などの文字を付加
Source: show
# File Game_Troop.rb, line 97 def make_unique_names for enemy in members next unless enemy.exist? next unless enemy.letter.empty? n = @names_count[enemy.original_name] n = 0 if n == nil enemy.letter = LETTER_TABLE[n % LETTER_TABLE.size] @names_count[enemy.original_name] = n + 1 end for enemy in members n = @names_count[enemy.original_name] n = 0 if n == nil enemy.plural = true if n >= 2 end end
セットアップ
troop_id : 敵グループ ID
Source: show
# File Game_Troop.rb, line 78 def setup(troop_id) clear @troop_id = troop_id @enemies = [] for member in troop.members next if $data_enemies[member.enemy_id] == nil enemy = Game_Enemy.new(@enemies.size, member.enemy_id) enemy.hidden = member.hidden enemy.immortal = member.immortal enemy.screen_x = member.x enemy.screen_y = member.y @enemies.push(enemy) end make_unique_names end
バトルイベントのセットアップ
Source: show
# File Game_Troop.rb, line 176 def setup_battle_event return if @interpreter.running? if $game_temp.common_event_id > 0 common_event = $data_common_events[$game_temp.common_event_id] @interpreter.setup(common_event.list) $game_temp.common_event_id = 0 return end for page in troop.pages next unless conditions_met?(page) @interpreter.setup(page.list) if page.span <= 1 @event_flags[page] = true end return end end