This class handles enemy groups and battle-related data. Also performs battle events. The instance of this class is referenced by $game_troop.
- C
- E
- G
- I
- L
- M
- N
- S
- T
- U
| 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'] |
Characters to be added to the end of enemy names |
||
| 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'] |
| [R] | event_flags | |
| [R] | interpreter | |
| [R] | name_counts | |
| [R] | screen | Public Instance Variables |
| [R] | turn_count |
Object Initialization
Source: show
# File Game_Troop.rb, line 30 def initialize super @screen = Game_Screen.new @interpreter = Game_Interpreter.new @event_flags = {} clear end
Clear
Source: show
# File Game_Troop.rb, line 48 def clear @screen.clear @interpreter.clear @event_flags.clear @enemies = [] @turn_count = 0 @names_count = {} end
Determine if Battle Event (Page) Conditions Are Met
Source: show
# 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 # Conditions not set: not executed end if @event_flags[page] return false # Executed end if c.turn_ending # At turn end return false unless BattleManager.turn_end? end if c.turn_valid # Number of turns 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 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 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 # Switch return false if !$game_switches[c.switch_id] end return true # Condition met end
Get Enemy Name Array
For display at start of battle. Overlapping names are removed.
Source: show
# 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
Calculate Total Experience
Source: show
# File Game_Troop.rb, line 198 def exp_total dead_members.inject(0) {|r, enemy| r += enemy.exp } end
Get Multiplier for Gold
Source: show
# File Game_Troop.rb, line 212 def gold_rate $game_party.gold_double? ? 2 : 1 end
Calculate Total Gold
Source: show
# File Game_Troop.rb, line 205 def gold_total dead_members.inject(0) {|r, enemy| r += enemy.gold } * gold_rate end
Increase Turns
Source: show
# 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
Initialize Screen Tone
Source: show
# File Game_Troop.rb, line 86 def init_screen_tone @screen.start_tone_change($game_map.screen.tone, 0) if $game_map end
Get Text Table to Place Behind Enemy Name
Source: show
# File Game_Troop.rb, line 110 def letter_table $game_system.japanese? ? LETTER_TABLE_FULL : LETTER_TABLE_HALF end
Create Array of Dropped Items
Source: show
# File Game_Troop.rb, line 219 def make_drop_items dead_members.inject([]) {|r, enemy| r += enemy.make_drop_items } end
Add letters (ABC, etc) to enemy characters with the same name
Source: show
# 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
Setup
Source: show
# 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
Battle Event Setup
Source: show
# 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