View difference between Paste ID: VRyZf09m and LherAyWS
SHOW: | | - or go back to the newest paste.
1
#===============================================================================
2
# ** RBS - Ramiro's Battle System (PART II - Classes And Modules) 
3
# Version 2.2
4
# Difficulty Very Hard.
5-
# + little shield Addon by Stesc
5+
# + small Shield Addon by Stesc
6
#-------------------------------------------------------------------------------
7
# If you don't know what to do... DO NOT EDIT THIS FILE.
8
#-------------------------------------------------------------------------------
9
# YANFLY SCRIPTS COMPATIBILITY:
10
#
11
# Common ways to test if an YF script works:
12
#
13
# First of all, put the Unlisted YEA script BEFORE the RBS, why before? because
14
# YEA is 'older' (in terms of published date) and the compatibility patches are
15
# made with the RBS (that supports a way to mix both battle systems altogether)
16
#
17
# If the script does not work properly, you may put it AFTER RBS and TRY AGAIN.
18
# 
19
# If even with that change the script does not work, you may then call it a 
20
# "compatibility issue" and I will, eventually, make a patch for it.
21
#
22
# Why are you making compatibility patches? 
23
#
24
# It's quite simple, YF scripts sometimes overrite some methods that I had to
25
# alias or vice-versa. in that cases, Yanfly or I should need to make a Patch.
26
# To run the scripts toguether.
27
#
28
# The next section will show HOW TO APPLY each script, knowkn in wich order
29
# and if it needs or not this patch.
30
#
31
# 
32
#
33
# List of Compatible YEA scripts:
34
# BATTLE SCRIPTS:
35
#  - Ace Battle Engine (Insert BEFORE RBS)
36
#           Known Issues: Disable one of the popup systems or YEA popup or
37
#                         RBS popup.
38
#  - Lunatic Objects (Doesn't infleunce the place)
39
#           Known Issues: None.
40
#  - TargetManager (Doesn't infleunce the place)
41
#           Known Issues: None.
42
#  - CastAnimations (Doesn't infleunce the place)
43
#           Known Issues: None.
44
#
45
# OTHER YF SCRIPTS:
46
# Because other YF scripts won't collide with this battle system.
47
# They should be compatible. If there is an incompatibility issue, just 
48
# ask and I'll do as much as I can to repair it.
49
#-------------------------------------------------------------------------------
50
# License:
51
#Copyright (c) 2012, Ramiro Rojo
52
#All rights reserved.
53
#
54
#Redistribution and use in source and binary forms, with or without
55
#modification, are permitted provided that the following conditions are met: 
56
#
57
#1. Redistributions of source code must retain the above copyright notice, this
58
#   list of conditions and the following disclaimer. 
59
#2. Redistributions in binary form must reproduce the above copyright notice,
60
#   this list of conditions and the following disclaimer in the documentation
61
#   and/or other materials provided with the distribution. 
62
#
63
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
64
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
65
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
66
#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
67
#ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68
#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
69
#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
70
#ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
71
#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
72
#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
73
#
74
#The views and conclusions contained in the software and documentation are those
75
#of the authors and should not be interpreted as representing official policies, 
76
#either expressed or implied, of the FreeBSD Project.
77
#===============================================================================
78
79
#===============================================================================
80
# BEGIN MODULE SECTION
81
#===============================================================================
82
83
module Cache
84
  
85
  #-----------------------------------------------------------------------------
86
  # Constants
87
  #-----------------------------------------------------------------------------  
88
  @@icon_bitmaps = {}
89
  
90
  def self.get_icon_bitmap(icon_index)
91
    if !@@icon_bitmaps[icon_index] || @@icon_bitmaps[icon_index].disposed?
92
      bmp = Bitmap.new(24,24)
93
      bitmap = Cache.system("Iconset")
94
      rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
95
      bmp.blt(0, 0, bitmap, rect)    
96
      @@icon_bitmaps[icon_index] = bmp
97
    end
98
    @@icon_bitmaps[icon_index]
99
  end
100
  
101
  class << self
102
    alias rbs_cache_clear clear
103
    
104
    def clear
105
      @@icon_bitmaps ||= {}
106
      @@icon_bitmaps.clear
107
      rbs_cache_clear
108
    end
109
  end
110
  
111
end
112
113
#===============================================================================
114
# * BattleCamera module
115
#-------------------------------------------------------------------------------
116
# Controls the camera`s position on the battlefield.
117
# It can be zoomed in and out.
118
#===============================================================================
119
module BattleCamera
120
  
121
  #-----------------------------------------------------------------------------
122
  # Starts the camera
123
  #-----------------------------------------------------------------------------
124
  def self.start
125
    self.reset
126
  end
127
  
128
  #-----------------------------------------------------------------------------
129
  # Resets the camera
130
  #-----------------------------------------------------------------------------  
131
  def self.reset
132
    @center_x = Graphics.width  / 2
133
    @center_y = Graphics.height / 2
134
    @current_x = @desired_x = @center_x
135
    @current_y = @desired_y = @center_y
136
    @current_zoom = @desired_zoom = 1.0
137
    @zoom_time = 0
138
    @movement_time = 0
139
    @target = :screen
140
  end
141
  
142
  #-----------------------------------------------------------------------------
143
  # Corrects a position
144
  #-----------------------------------------------------------------------------  
145
  def self.correct_position(pos, current, current_zoom, center)
146
    return ((pos - current) * (current_zoom - 1.0) + pos - (current - center))
147
  end
148
  
149
  #-----------------------------------------------------------------------------
150
  # Corrects the x position given
151
  #-----------------------------------------------------------------------------  
152
  def self.correct_x(x)
153
    return correct_position(x, @current_x, @current_zoom, @center_x)
154
  end
155
  
156
  #-----------------------------------------------------------------------------
157
  # Corrects the y position given
158
  #-----------------------------------------------------------------------------  
159
  def self.correct_y(y)
160
    return correct_position(y, @current_y, @current_zoom, @center_y)
161
  end
162
  
163
  #-----------------------------------------------------------------------------
164
  # Corrects the zoom given
165
  #-----------------------------------------------------------------------------  
166
  def self.correct_zoom(zoom, x=nil, y=nil, zoom_effective=true)
167
    if BattleConfig::BattleCamera_UsePanoramicCamera
168
      if !x || !y || !zoom_effective
169
        return zoom * @current_zoom
170
      else
171
        return ((y - @center_y * 130 / 100) * 0.005 + 1.0) * @current_zoom
172
      end  
173
    else
174
      return zoom * @current_zoom
175
    end  
176
  end
177
  
178
  #-----------------------------------------------------------------------------
179
  # Corrects the angle given
180
  #-----------------------------------------------------------------------------  
181
  def self.correct_angle(angle)
182
    return angle
183
  end
184
  
185
  #-----------------------------------------------------------------------------
186
  # Corrects the mirror value given
187
  #-----------------------------------------------------------------------------  
188
  def self.correct_mirror(mirror)
189
    return mirror
190
  end
191
  
192
  #-----------------------------------------------------------------------------
193
  # Calculates the difference of movement in the frame
194
  #-----------------------------------------------------------------------------  
195
  def self.calculate_display_change(current, desired, count)
196
    ((current * (count - 1) + desired) / count)
197
  end  
198
  
199
  #-----------------------------------------------------------------------------
200
  # Updates the camera.
201
  #-----------------------------------------------------------------------------  
202
  def self.update
203
    @center_x = Graphics.width  / 2
204
    @center_y = Graphics.height / 2
205
    if @zoom_time > 0
206
      @current_zoom = self.calculate_display_change(@current_zoom, @desired_zoom, @zoom_time)
207
      @zoom_time -= 1
208
    end
209
    
210
    if @movement_time > 0
211
      @current_x = self.calculate_display_change(@current_x, @desired_x, @movement_time)
212
      @current_y = self.calculate_display_change(@current_y, @desired_y, @movement_time)
213
      @movement_time -= 1
214
    end
215
    
216
    if @target != :screen && !moving?
217
      cx = 0
218
      cy = 0
219
      @target.each do |i|
220
        cx += i.current_x
221
        cy += i.current_y
222
      end
223
      if @target.size > 0
224
        cx /= @target.size
225
        cy /= @target.size
226
      end
227
      @current_x = cx
228
      @current_y = cy
229
    end  
230
231
  end
232
  
233
  #-----------------------------------------------------------------------------
234
  # Sets the movement of the Camera.
235
  #-----------------------------------------------------------------------------  
236
  def self.set_movement(x, y, time)
237
    @desired_x = x
238
    @desired_y = y
239
    @movement_time = time
240
  end
241
  
242
  #-----------------------------------------------------------------------------
243
  # Sets the zoom of the Camera.
244
  #-----------------------------------------------------------------------------   
245
  def self.set_zoom(zoom, time)
246
    @desired_zoom = zoom
247
    @zoom_time = time
248
  end  
249
  
250
  #-----------------------------------------------------------------------------
251
  # Sets the target of the Camera.
252
  #-----------------------------------------------------------------------------   
253
  def self.set_target(target)
254
    @target = target
255
  end    
256
  
257
  #-----------------------------------------------------------------------------
258
  # Checks if the camera is moving.
259
  #-----------------------------------------------------------------------------   
260
  def self.moving?
261
    return ( @movement_time > 0 || @zoom_time > 0 )
262
  end
263
  
264
end
265
266
#===============================================================================
267
# * BattleInterpreter module
268
#-------------------------------------------------------------------------------
269
# This module manages the battle's actions and keeps track of all of them.
270
# it can read commands for using in battle animations.
271
#===============================================================================
272
module BattleInterpreter
273
  
274
  #-----------------------------------------------------------------------------
275
  # CONSTANTS
276
  #-----------------------------------------------------------------------------  
277
  Commands = {}
278
  
279
  #=============================================================================
280
  # * BattleInterpreter::Action
281
  #-----------------------------------------------------------------------------
282
  # An action used by the battle interpreter module.
283
  # It stores information of the action used and process part of them.
284
  #=============================================================================
285
  class Action
286
    
287
    #---------------------------------------------------------------------------
288
    # Class properties
289
    #---------------------------------------------------------------------------  
290
    attr_reader   :original_user
291
    attr_reader   :original_target
292
    attr_accessor :user
293
    attr_accessor :targets
294
    attr_accessor :item
295
    attr_accessor :loop_depth
296
    attr_accessor :linked_actions
297
    attr_accessor :paused
298
    
299
    #---------------------------------------------------------------------------
300
    # Starts an action
301
    #---------------------------------------------------------------------------      
302
    def initialize(spriteset, user, targets, sequence, item, can_counter=true)
303
      @extra_affected_battlers = []
304
      @sequence = sequence
305
      @user = user
306
      @targets = targets
307
      @item = item
308
      @loop_depth = 0
309
      @wait_count = 0
310
      @original_user = user
311
      @original_targets = targets
312
      @spriteset = spriteset
313
      @counter_check = can_counter
314
      @linked_actions = []
315
      @paused = false
316
      compile_data
317
    end  
318
    
319
    #---------------------------------------------------------------------------
320
    # Checks if a counter can be realized
321
    #---------------------------------------------------------------------------    
322
    def counter_active?
323
      return @counter_check
324
    end
325
    
326
    #---------------------------------------------------------------------------
327
    # Evaluates parameters
328
    #---------------------------------------------------------------------------    
329
    def eval_data(data)
330
      make_parameters(data)[0]
331
    end
332
    
333
    #---------------------------------------------------------------------------
334
    # Sets the wait time of the action
335
    #---------------------------------------------------------------------------    
336
    def wait(wait)
337
      @wait_count = wait
338
    end
339
    
340
    #---------------------------------------------------------------------------
341
    # Makes the parameters for an action
342
    #---------------------------------------------------------------------------    
343
    def make_parameters(parameters)
344
      return [] if !parameters
345
      a = @user
346
      b = @targets[0]
347
      t = @targets
348
      s = $game_siwtches
349
      v = $game_variables
350
      result = []
351
      parameters.split(',').each do |i|
352
        r = Kernel.eval(i) rescue nil
353
        result.push(r)
354
      end  
355
      return result
356
    end
357
    
358
    #---------------------------------------------------------------------------
359
    # Compiles the data for the action
360
    #---------------------------------------------------------------------------    
361
    def compile_data
362
      @commands = get_compile_commands(@sequence)
363
    end
364
    
365
    #---------------------------------------------------------------------------
366
    # Returns the compiled result
367
    #---------------------------------------------------------------------------     
368
    def get_compile_commands(data)
369
      result = []
370
      data.split(';').each do |line|
371
        next if (line.gsub(/\s/mi) {''}) == ''
372
        line += ';'
373
        if line[/((\s+)?)(.*?)(:(.*?))?;/mi]
374
          result.push([$3.upcase, make_parameters($5)])
375
        end  
376
      end   
377
      return result
378
    end
379
    
380
    #---------------------------------------------------------------------------
381
    # Updates the action
382
    #---------------------------------------------------------------------------    
383
    def update
384
      return if @paused
385
      if (@wait_count && @wait_count > 0)
386
        @wait_count -= 1
387
        return
388
      end
389
      call_next_command
390
    end
391
    
392
    #---------------------------------------------------------------------------
393
    # Calls next command
394
    #---------------------------------------------------------------------------    
395
    def call_next_command
396
      return if @commands.size == 0 || (@wait_count && @wait_count > 0)
397
      initial_depth = current_depth = @loop_depth
398
      command, params = next_command
399
      raise sprintf(Vocab::Error_CommandNotRecognized, command) if !Commands[command]
400
      has_depth, link_method = Commands[command]
401
      current_depth += 1
402
      result = []
403
      if has_depth
404
        while initial_depth != current_depth && @commands.size > 0
405
          i = next_command
406
          nested_command, nested_params = i
407
          if Commands[nested_command] && Commands[nested_command][0]
408
            current_depth += 1
409
          elsif nested_command[/END/mi]  
410
            current_depth -= 1
411
          end
412
          result.push(i)
413
        end
414
        if initial_depth == current_depth
415
          params.push(result)
416
          @loop_depth += 1
417
        else
418
          raise Vocab::Error_TagSintaxError
419
        end        
420
      end
421
      link_method.call(self, params)
422
      call_next_command
423
    end
424
    
425
    #---------------------------------------------------------------------------
426
    # Gets the next command
427
    #---------------------------------------------------------------------------    
428
    def next_command
429
      @commands.shift
430
    end
431
    
432
    #---------------------------------------------------------------------------
433
    # Insert commands as next
434
    #---------------------------------------------------------------------------    
435
    def insert_commands_as_next(commands)
436
      @commands = commands + @commands
437
    end
438
    
439
    #---------------------------------------------------------------------------
440
    # Checks if the action is running
441
    #---------------------------------------------------------------------------    
442
    def running?
443
      return (@commands.size > 0 || @wait_count > 0)
444
    end
445
    
446
    #---------------------------------------------------------------------------
447
    # Pauses the action
448
    #---------------------------------------------------------------------------    
449
    def pause
450
      @paused = true
451
    end
452
    
453
    #---------------------------------------------------------------------------
454
    # Checks if the action is paused
455
    #---------------------------------------------------------------------------    
456
    def paused?
457
      @paused
458
    end
459
    
460
    #---------------------------------------------------------------------------
461
    # Resumes the action
462
    #---------------------------------------------------------------------------    
463
    def resume
464
      @paused = false
465
      call_next_command
466
    end
467
    
468
    #---------------------------------------------------------------------------
469
    # Stops the action
470
    #---------------------------------------------------------------------------    
471
    def abort
472
      @commands.clear
473
      @wait_count = 0
474
    end
475
    
476
    #---------------------------------------------------------------------------
477
    # Analizes targets by a string
478
    #---------------------------------------------------------------------------    
479
    def analize_target_string(string, origin_valid = true, screen_valid = false)
480
      case string
481
      when /(.*?) except (.*)/im
482
        t1 = analize_target_string($1, origin_valid, screen_valid)
483
        t2 = analize_target_string($2, origin_valid, screen_valid)
484
        return t1 - t2
485
      when /(.*?) but (.*)/im
486
        t1 = analize_target_string($1, origin_valid, screen_valid)
487
        t2 = analize_target_string($2, origin_valid, screen_valid)
488
        return t1 - t2        
489
      when /(\d+) random ([\w\s]+)/im 
490
        num = $1.to_i
491
        targets = analize_target_string($2, false, false)
492
        result = []
493
        num.times do |i|
494
          result.push(targets[rand(targets.size)])
495
        end  
496
        return result
497
      when /original (\w+)/im
498
        case $1
499
        when /user/im
500
          return [@original_user]
501
        when /target(s?)/im
502
          return @original_targets
503
        end  
504
      when /dead battler(s?)/im
505
          return $game_troop.dead_members + $game_party.dead_members         
506
      when /dead all(y||es)/im
507
        case @user.confusion_level
508
        when 0
509
          return @user.friend_unit.dead_members
510
        when 1
511
          return @user.enemy_unit.dead_members+@user.friend_unit.dead_members
512
        when 2
513
          return @user.enemy_unit.dead_members
514
        end 
515
      when /dead enem(y||ies)/im
516
        case @user.confusion_level
517
        when 0
518
          return @user.enemy_unit.dead_members
519
        when 1
520
          return @user.enemy_unit.dead_members+@user.friend_unit.dead_members
521
        when 2
522
          return @user.friend_unit.dead_members
523
        end          
524
      when /battler(s?)/im
525
          return $game_troop.alive_members + $game_party.alive_members
526
      when /all(y||es)/im
527
        case @user.confusion_level
528
        when 0
529
          return @user.friend_unit.alive_members
530
        when 1
531
          return @user.enemy_unit.alive_members+@user.friend_unit.alive_members
532
        when 2
533
          return @user.enemy_unit.alive_members
534
        end  
535
      when /friend(s?)/im
536
        case @user.confusion_level
537
        when 0
538
          group = @user.friend_unit.alive_members
539
        when 1
540
          group = @user.enemy_unit.alive_members+@user.friend_unit.alive_members
541
        when 2
542
          group = @user.enemy_unit.alive_members
543
        end   
544
        return group - [@user]
545
      when /enem(y||ies)/im
546
        case @user.confusion_level
547
        when 0
548
          return @user.enemy_unit.alive_members
549
        when 1
550
          return @user.enemy_unit.alive_members+@user.friend_unit.alive_members
551
        when 2
552
          return @user.friend_unit.alive_members
553
        end         
554
      when /target(s?)/im  
555
        return @targets
556
      when /user/im
557
        return [@user]
558
      when /screen/im
559
        if screen_valid
560
          return :screen
561
        else
562
          raise Vocab::Error_ScreenNotValid
563
        end  
564
      when /origin/im
565
        if origin_valid
566
          return :origin
567
        else
568
          raise Vocab::Error_OriginNotValid
569
        end          
570
      end
571
      return nil
572
      
573
    end
574
    
575
    #---------------------------------------------------------------------------
576
    # Get the sprites of battlers.
577
    #---------------------------------------------------------------------------    
578
    def get_battler_sprites(battlers)
579
      result = []
580
      @spriteset.battler_sprites.each do |i|
581
        result.push(i) if battlers.any? {|j| i.battler == j }
582
      end 
583
      return result
584
    end
585
    
586
    #---------------------------------------------------------------------------
587
    # gets the battler sprites of a determined target string
588
    #---------------------------------------------------------------------------    
589
    def analize_battler_sprites_string(string, origin_valid = true, screen_valid = false)
590
      battlers = analize_target_string(string, origin_valid, screen_valid)
591
      return battlers if battlers.is_a?(Symbol)
592
      return battlers ? get_battler_sprites(battlers) : []
593
    end
594
    
595
    def affected_battlers    
596
      targets + [user] + @extra_affected_battlers    
597
    end
598
    
599
  end
600
  
601
  class LoopingAction < BattleInterpreter::Action
602
      
603
    def next_command
604
      new_command = @commands.shift
605
      @commands.push(new_command)
606
      return new_command
607
    end
608
      
609
  end  
610
  
611
  #-----------------------------------------------------------------------------
612
  # Starts the interpreter
613
  #----------------------------------------------------------------------------- 
614
  def self.start(spriteset)
615
    self.reset
616
    @spriteset = spriteset
617
  end
618
 
619
  #-----------------------------------------------------------------------------
620
  # Resets the interpreter
621
  #-----------------------------------------------------------------------------   
622
  def self.reset
623
    Commands.clear
624
    @looping_actions = {}
625
    @actions = []
626
  end  
627
  
628
  #-----------------------------------------------------------------------------
629
  # Adds an action
630
  #-----------------------------------------------------------------------------   
631
  def self.add_action(user, targets, sequence, item, can_counter = true)
632
    action = BattleInterpreter::Action.new(@spriteset, user, targets, sequence, item, can_counter)
633
    @actions.push(action) if @actions
634
    action
635
  end
636
  
637
  #-----------------------------------------------------------------------------
638
  # Updates the interpreter
639
  #-----------------------------------------------------------------------------   
640
  def self.update
641
    current_battlers = []
642
    @actions.each do |i|
643
      i.update
644
      if i.running?
645
        i.affected_battlers.each do |j|
646
          current_battlers.push(j)
647
        end
648
      else  
649
        @actions.delete(i)
650
      end  
651
    end  
652
    @looping_actions.each_pair do |battler, action|
653
      action.update if !current_battlers.include?(battler)
654
    end  
655
  end
656
  
657
  #-----------------------------------------------------------------------------
658
  # Checks if the interpreter is running
659
  #-----------------------------------------------------------------------------   
660
  def self.running?
661
    return true if @actions.any? {|i| i.running? && !i.paused?} 
662
    return true if BattleCamera.moving? 
663
    return true if @spriteset.animation?
664
    return false
665
  end
666
  
667
  #-----------------------------------------------------------------------------
668
  # Adds a looping action to an user
669
  #-----------------------------------------------------------------------------   
670
  def self.add_looping_action(user, sequence)
671
    action = BattleInterpreter::LoopingAction.new(@spriteset, user, [user], sequence, nil)
672
    @looping_actions[user] = action
673
    action    
674
  end
675
  
676
  def self.pause_looping_action(user)
677
    @looping_actions[user].pause if @looping_actions[user]
678
  end
679
  
680
  def self.resume_looping_action(user)
681
    @looping_actions[user].resume if @looping_actions[user]
682
  end
683
  
684
end
685
686
#==============================================================================
687
# ¦ BattleManager
688
#==============================================================================
689
690
module BattleManager
691
  
692
  #-----------------------------------------------------------------------------
693
  # Checks if the battle is a surprise battle
694
  #-----------------------------------------------------------------------------   
695
  def self.surprise?
696
    return @surprise
697
  end
698
  
699
  #-----------------------------------------------------------------------------
700
  # Checks if the battle is a preemptive battle
701
  #-----------------------------------------------------------------------------   
702
  def self.preemptive?
703
    return @preemptive
704
  end
705
  
706
  class << self
707
    
708
    #---------------------------------------------------------------------------
709
    # Alias methods
710
    #---------------------------------------------------------------------------
711
    alias rbs_battle_manager_process_victory process_victory
712
    
713
    #-----------------------------------------------------------------------------
714
    # Process victory
715
    #-----------------------------------------------------------------------------     
716
    def process_victory
717
      for member in $game_party.alive_members
718
        sequence = member.get_victory_sequence
719
        BattleInterpreter.add_action(member, [member], sequence, nil, false)
720
      end 
721
      rbs_battle_manager_process_victory
722
    end  
723
  end
724
  
725
end
726
#===============================================================================
727
# END MODULE SECTION
728
#===============================================================================
729
#===============================================================================
730
# BEGIN SPRITE SECTION
731
#===============================================================================
732
733
#===============================================================================
734
# ¦ Sprite_Battler
735
#===============================================================================
736
class Sprite_Battler < Sprite_Base
737
  
738
  #-----------------------------------------------------------------------------
739
  # Alias methods
740
  #-----------------------------------------------------------------------------   
741
  alias rbs_sprite_battler_initialize initialize
742
  alias rbs_sprite_battler_update update
743
  alias rbs_sprite_battler_animation? animation?
744
  alias rbs_sprite_battler_dispose dispose
745
  
746
  #-----------------------------------------------------------------------------
747
  # Class Properties
748
  #-----------------------------------------------------------------------------   
749
  attr_reader :current_x
750
  attr_reader :current_y
751
  attr_reader :original_x
752
  attr_reader :original_y
753
  
754
  #-----------------------------------------------------------------------------
755
  # Resets the position.
756
  #----------------------------------------------------------------------------- 
757
  def reset_position
758
    @character_started = true
759
    @original_battler = @battler
760
    @original_x = @battler.screen_x
761
    @original_y = @battler.screen_y
762
    @current_x = @desired_x = @original_x
763
    @current_y = @desired_y = @original_y    
764
    @jump_count = 0
765
    @jump_axis  = 0
766
    @jump_value = 0
767
    @movement_count = 0
768
    @frame_count = 0
769
    @frame_delay = 16
770
    @last_battler = battler
771
    @battler_index = @battler.default_battler_index
772
    @frame = 0
773
    @pose  = 0
774
    @poses = 1
775
    @frames = 1
776
    @frame_style = :rmvx
777
    @loops = 0
778
    @last_battle_index = 0
779
    @desired_zoom_x = @current_zoom_x = 1
780
    @desired_zoom_y = @current_zoom_y = 1
781
    @current_angle = @desired_angle = 0
782
    @angle_time = 0   
783
    @zoom_time = 0    
784
    @current_opacity = @desired_opacity = 0
785
    @opacity_time = 0    
786
    @battler_name_result = ''
787
    @mirrored_sprite = false
788
    @effect_opacity = 255
789
    @effect_ox  = 0
790
    @effect_height = 0   
791
    @balloon_id = 0
792
    @need_refresh = true
793
    @last_battler = nil
794
    @last_battler_name = ''
795
    @last_battler_hue = 0
796
  end
797
  
798
  def make_return_sequence(include_stand=true)
799
    return if !@battler
800
    seq = ''
801
    if (@original_x != @current_x) || (@original_y != @current_y)
802
      seq = @battler.get_return_sequence
803
    end  
804
    BattleInterpreter.add_action(@battler, [@battler], seq, nil, false)
805
    if @battler.alive? && include_stand
806
      BattleInterpreter.add_looping_action(@battler, @battler.get_stand_sequence)
807
    end
808
  end
809
  
810
  #-----------------------------------------------------------------------------
811
  # Sets the mirror value
812
  #----------------------------------------------------------------------------- 
813
  def set_mirror_value(value)
814
    @mirrored_sprite = value
815
  end
816
817
  #-----------------------------------------------------------------------------
818
  # Creates the sprite
819
  #-----------------------------------------------------------------------------   
820
  def initialize(viewport, battler=nil)
821
    @weapon_sprites = []
822
    @character_started = false
823
    @afterimages = []
824
    @afterimages_visible = false
825
    @afterimage_separation = 8
826
    @animation_reg = []   
827
    rbs_sprite_battler_initialize(viewport, battler)
828
  end
829
    
830
  #-----------------------------------------------------------------------------
831
  # Dispose
832
  #-----------------------------------------------------------------------------   
833
  def dispose
834
    dispose_afterimages
835
    dispose_weapon_sprites
836
    dispose_balloon
837
    rbs_sprite_battler_dispose
838
  end
839
  
840
  #-----------------------------------------------------------------------------
841
  # Dispose afterimages
842
  #-----------------------------------------------------------------------------   
843
  def dispose_afterimages
844
    @afterimages.each do |i|
845
      i.dispose
846
    end  
847
    @afterimages.clear
848
  end
849
  
850
  #-----------------------------------------------------------------------------
851
  # Dispose weapon sprites
852
  #-----------------------------------------------------------------------------   
853
  def dispose_weapon_sprites
854
    @weapon_sprites.each do |i|
855
      i.dispose
856
    end  
857
  end
858
  
859
  #-----------------------------------------------------------------------------
860
  # Checks if the sprite is moving?
861
  #-----------------------------------------------------------------------------   
862
  def moving?
863
    return false if !@battler
864
    return (@movement_count > 0 || @angle_time > 0 || @zoom_time > 0 || @opacity_time > 0 )
865
  end
866
  
867
  #--------------------------------------------------------------------------
868
  # ? Update blink effect
869
  #--------------------------------------------------------------------------
870
  def update_blink
871
    @effect_opacity = (@effect_duration % 10 < 5) ? 255 : 0
872
  end
873
  #--------------------------------------------------------------------------
874
  # ? Opdates appear effect
875
  #--------------------------------------------------------------------------
876
  def update_appear
877
    @effect_opacity = (16 - @effect_duration) * 16
878
  end
879
  #--------------------------------------------------------------------------
880
  # ? Opdates disappear effect
881
  #--------------------------------------------------------------------------
882
  def update_disappear
883
    @effect_opacity = 256 - (32 - @effect_duration) * 10
884
  end
885
  #--------------------------------------------------------------------------
886
  # ? Update collapse effect
887
  #--------------------------------------------------------------------------
888
  def update_collapse
889
    self.blend_type = 1
890
    self.color.set(255, 128, 128, 128)
891
    @effect_opacity = 256 - (48 - @effect_duration) * 6
892
  end  
893
  
894
  #--------------------------------------------------------------------------
895
  # ? Reverts the sprite to normal
896
  #--------------------------------------------------------------------------
897
  def revert_to_normal
898
    self.blend_type = 0
899
    self.color.set(0, 0, 0, 0)
900
    @effect_opacity = 255
901
    @effect_ox = @battler_width / 2 if bitmap
902
    @effect_height = 0
903
  end  
904
  
905
  #--------------------------------------------------------------------------
906
  # ? Updates boss collpase
907
  #--------------------------------------------------------------------------
908
  def update_boss_collapse
909
    alpha = @effect_duration * 120 / bitmap.height
910
    @effect_ox = @battler_width / 2 + @effect_duration % 2 * 4 - 2
911
    self.blend_type = 1
912
    self.color.set(255, 255, 255, 255 - alpha)
913
    @effect_opacity = alpha
914
    @effect_height -= 1
915
    Sound.play_boss_collapse2 if @effect_duration % 20 == 19
916
  end
917
  #--------------------------------------------------------------------------
918
  # ?  updates instant collapse
919
  #--------------------------------------------------------------------------
920
  def update_instant_collapse
921
    @effect_opacity = 0
922
  end  
923
  
924
  #-----------------------------------------------------------------------------
925
  # Frame update
926
  #-----------------------------------------------------------------------------   
927
  def update
928
    if @battler && (!@character_started || @battler != @original_battler)
929
      start = @character_started
930
      reset_position
931
      if start
932
        @current_opacity = @desired_opacity = 255
933
        start_effect(:appear)
934
        update
935
        make_return_sequence
936
      end  
937
    elsif !@battler && @original_battler
938
      @original_battler = nil
939
    end    
940
    set_animation_origin if @animation
941
    rbs_sprite_battler_update   
942
    if @battler      
943
      update_battler_position
944
      update_battler_pose  
945
      update_afterimages
946
      update_weapon_sprites
947
      update_balloon
948
    end  
949
950
  end
951
  
952
  #-----------------------------------------------------------------------------
953
  # Update positions.
954
  #-----------------------------------------------------------------------------   
955
  def update_battler_position
956
    if @movement_count > 0
957
      @current_x = BattleCamera.calculate_display_change(@current_x, @desired_x, @movement_count)
958
      @current_y = BattleCamera.calculate_display_change(@current_y, @desired_y, @movement_count)
959
      if @jump_count > 0
960
        @jump_value = BattleCamera.calculate_display_change(@jump_value, @jump_axis, @jump_count)
961
        @jump_count -= 1
962
      elsif @jump_value != 0
963
        @jump_axis = 0
964
        @jump_count = @movement_count - 1
965
      end  
966
      @movement_count -= 1
967
    end
968
    
969
    if @zoom_time > 0
970
      @current_zoom_x = BattleCamera.calculate_display_change(@current_zoom_x, @desired_zoom_x, @zoom_time)
971
      @current_zoom_y = BattleCamera.calculate_display_change(@current_zoom_y, @desired_zoom_y, @zoom_time)
972
      @zoom_time -= 1
973
    end
974
    
975
    if @angle_time > 0  
976
      @current_angle = BattleCamera.calculate_display_change(@current_angle, @desired_angle, @angle_time)
977
      @angle_time -= 1
978
    end
979
980
    if @opacity_time > 0  
981
       @current_opacity = BattleCamera.calculate_display_change(@current_opacity, @desired_opacity, @opacity_time)
982
       @opacity_time -= 1      
983
    end
984
    
985
    @original_x = @battler.screen_x
986
    @original_y = @battler.screen_y    
987
988
    self.x = BattleCamera.correct_x( @current_x )
989
    self.y = BattleCamera.correct_y( @current_y - @jump_value - @effect_height / 2)    
990
    self.z = @current_y + 100     
991
    self.zoom_x = BattleCamera.correct_zoom(@current_zoom_x, @current_x, @current_y, @battler.zoom_effective?)
992
    self.zoom_y = BattleCamera.correct_zoom(@current_zoom_y, @current_x, @current_y, @battler.zoom_effective?)
993
    self.angle =  BattleCamera.correct_angle(@current_angle)
994
    self.mirror = BattleCamera.correct_mirror(@battler.enemy? ? @mirrored_sprite : !@mirrored_sprite)
995
    self.opacity = @current_opacity * @effect_opacity / 255
996
    self.visible = @effect_type || @battler.exist?
997
  end
998
  
999
  #-----------------------------------------------------------------------------
1000
  # Get the max frame number
1001
  #-----------------------------------------------------------------------------   
1002
  def max_frames
1003
    return @frame_style == -2 ? @frames * 2 : @frames 
1004
  end
1005
  
1006
  #-----------------------------------------------------------------------------
1007
  # Gets the real frame number
1008
  #----------------------------------------------------------------------------- 
1009
  def real_frame
1010
    return @frame < @frames ? @frame : (max_frames - @frame - 1)
1011
  end
1012
  
1013
  #-----------------------------------------------------------------------------
1014
  # Updates the current pose
1015
  #-----------------------------------------------------------------------------   
1016
  def update_battler_pose
1017
    
1018
    if @loops != 0
1019
      if @frame_style < 0
1020
        @frame_count = (@frame_count + 1) % @frame_delay
1021
        if @frame_count == 0
1022
          @frame = (@frame + 1) % max_frames
1023
          @loops -= 1 if  @frame == 0 && @loops > 0
1024
        end
1025
      else
1026
        @frame = @frame_style
1027
      end
1028
    end  
1029
    o_x = @battler_width  * real_frame
1030
    o_y = @battler_height * @pose + @effect_height
1031
    bh  = [@battler_height + @effect_height, 1].max
1032
    self.src_rect.set(o_x, o_y, @battler_width, bh)
1033
  end
1034
1035
  #-----------------------------------------------------------------------------
1036
  # Makes the new battler name
1037
  #-----------------------------------------------------------------------------   
1038
  def make_battler_name
1039
    if @need_refresh || @last_battler != self.battler ||
1040
          @last_battler_name != battler.battler_name ||
1041
          @last_battler_hue != battler.battler_hue
1042
      @last_battler_name = battler.battler_name
1043
      @last_battler_hue = battler.battler_hue          
1044
      @need_refresh = false
1045
      @last_battler = self.battler
1046
      battler_name = @battler.battler_name.sub(/\[(\d+),(\d+)\]/i) { '' }    
1047
      battler_name = @battler_index == 0 ? @battler.battler_name : "#{@battler.battler_name}_#{@battler_index}"
1048
      files = Dir.glob("Graphics/Battlers/#{battler_name}*")
1049
      @battler_name_result = (files.size > 0) ? files[0] : battler_name 
1050
      @battler_name_result.gsub! (/Graphics\/Battlers\//mi) {''}
1051
    end  
1052
    return @battler_name_result
1053
  end
1054
  
1055
  #-----------------------------------------------------------------------------
1056
  # Updates the bitmap
1057
  #-----------------------------------------------------------------------------   
1058
  def update_bitmap
1059
    battler_name = make_battler_name
1060
    new_bitmap = Cache.battler(battler_name, @battler.battler_hue)
1061
    if self.bitmap != new_bitmap
1062
      data = []
1063
      if battler_name[/\[(.*?),(.*?)\]/i] 
1064
        @frames = eval($1)
1065
        @poses  = eval($2)
1066
      else
1067
        @poses = BattleConfig::DefaultPoses
1068
        @frames = BattleConfig::DefaultFrames
1069
      end  
1070
      @frame_delay = 16
1071
      @frame_style = -2
1072
      @loops = -1
1073
      self.bitmap = new_bitmap
1074
      @battler_width  = self.bitmap.width  / @frames
1075
      @battler_height = self.bitmap.height / @poses
1076
      @effect_ox = @battler_width / 2 if bitmap
1077
      init_visibility
1078
    end
1079
  end
1080
1081
  #-----------------------------------------------------------------------------
1082
  # Updates the weapon sprites
1083
  #----------------------------------------------------------------------------- 
1084
  def update_weapon_sprites
1085
    @weapon_sprites.each do |i|
1086
      if i.animation?
1087
        i.update
1088
      else
1089
        i.dispose
1090
        @weapon_sprites.delete(i)
1091
      end
1092
    end  
1093
  end    
1094
1095
  #-----------------------------------------------------------------------------
1096
  # Updates original position.
1097
  #----------------------------------------------------------------------------- 
1098
  def update_origin
1099
    if bitmap
1100
      self.ox = @effect_ox
1101
      self.oy = @battler_height + @effect_height
1102
    end
1103
  end   
1104
  #-----------------------------------------------------------------------------
1105
  # Sets the movememnt
1106
  #----------------------------------------------------------------------------- 
1107
  def set_movement(x, y, jump, time)
1108
    @desired_x = x
1109
    @desired_y = y
1110
    @jump_count = time / 2
1111
    @jump_axis  = jump
1112
    @jump_value = 0
1113
    @movement_count = time    
1114
  end
1115
  #-----------------------------------------------------------------------------
1116
  # Sets the pose
1117
  #----------------------------------------------------------------------------- 
1118
  def set_pose(character_index, pose, style, loops, interval)
1119
    @poses = 0 if !@poses
1120
    @battler_index = character_index
1121
    @frame = 0
1122
    @frame_delay = interval
1123
    @pose  = pose if pose < @poses
1124
    @frame_style = style
1125
    @loops = loops
1126
    @need_refresh = true
1127
  end
1128
  #-----------------------------------------------------------------------------
1129
  # Sets the zoom
1130
  #----------------------------------------------------------------------------- 
1131
  def set_zoom(x, y, time)
1132
    @desired_zoom_x = x
1133
    @desired_zoom_y = y
1134
    @zoom_time = time
1135
  end
1136
  
1137
  #-----------------------------------------------------------------------------
1138
  # Sets the angle
1139
  #-----------------------------------------------------------------------------   
1140
  def set_angle(angle, time)
1141
    @desired_angle = angle
1142
    @angle_time = time
1143
  end
1144
  
1145
  #-----------------------------------------------------------------------------
1146
  # Sets the opacity
1147
  #-----------------------------------------------------------------------------   
1148
  def set_opacity(opacity, time)
1149
    @desired_opacity = opacity
1150
    @opacity_time = time    
1151
  end
1152
  
1153
  #-----------------------------------------------------------------------------
1154
  # Checks if the sprite is on animation
1155
  #-----------------------------------------------------------------------------   
1156
  def animation?
1157
    return rbs_sprite_battler_animation? || moving? || (@effect_duration > 0)
1158
  end
1159
  
1160
  #--------------------------------------------------------------------------
1161
  # ? Starts new effect
1162
  #--------------------------------------------------------------------------
1163
  def start_effect(effect_type)
1164
    @effect_type = effect_type
1165
    case @effect_type
1166
    when :appear
1167
      @effect_duration = 16
1168
      @battler_visible = true
1169
    when :disappear
1170
      @effect_duration = 32
1171
      @battler_visible = false
1172
    when :whiten
1173
      @effect_duration = 16
1174
      @battler_visible = true
1175
    when :blink
1176
      @effect_duration = 20
1177
      @battler_visible = true
1178
    when :collapse
1179
      @effect_duration = 48
1180
      @battler_visible = false
1181
    when :boss_collapse
1182
      @effect_duration = @battler_height
1183
      @battler_visible = false
1184
    when :instant_collapse
1185
      @effect_duration = 16
1186
      @battler_visible = false
1187
    end
1188
    revert_to_normal
1189
  end  
1190
  
1191
  #-----------------------------------------------------------------------------
1192
  # Sets the sprites of the animation
1193
  #----------------------------------------------------------------------------- 
1194
  def animation_set_sprites(frame)
1195
    cell_data = frame.cell_data
1196
    @ani_sprites.each_with_index do |sprite, i|
1197
      next unless sprite
1198
      pattern = cell_data[i, 0]
1199
      if !pattern || pattern < 0
1200
        sprite.visible = false
1201
        next
1202
      end
1203
      sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
1204
      sprite.visible = true
1205
      sprite.src_rect.set(pattern % 5 * 192,
1206
        pattern % 100 / 5 * 192, 192, 192)
1207
      if @ani_mirror
1208
        sprite.x = @ani_ox - cell_data[i, 1]
1209
        sprite.y = @ani_oy + cell_data[i, 2]
1210
        sprite.angle = BattleCamera.correct_angle(360 - cell_data[i, 4])
1211
        sprite.mirror =  BattleCamera.correct_mirror(cell_data[i, 5] == 0)
1212
      else
1213
        sprite.x = @ani_ox + cell_data[i, 1]
1214
        sprite.y = @ani_oy + cell_data[i, 2]
1215
        sprite.angle = BattleCamera.correct_angle(cell_data[i, 4])
1216
        sprite.mirror = BattleCamera.correct_mirror(cell_data[i, 5] == 1)
1217
      end
1218
      sprite.z = self.z + 300 + i
1219
      sprite.ox = 96
1220
      sprite.oy = 96
1221
      sprite.zoom_x = BattleCamera.correct_zoom(cell_data[i, 3] / 100.0, @current_x, @current_y, zoom_effective?)
1222
      sprite.zoom_y = BattleCamera.correct_zoom(cell_data[i, 3] / 100.0, @current_x, @current_y, zoom_effective?)
1223
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
1224
      sprite.blend_type = cell_data[i, 7]
1225
    end
1226
  end  
1227
  
1228
  def zoom_effective?
1229
    return false if !@battler
1230
    @battler.zoom_effective?
1231
  end
1232
  
1233
  #-----------------------------------------------------------------------------
1234
  # Updates the animation
1235
  #-----------------------------------------------------------------------------   
1236
  def update_animation
1237
    return unless @animation
1238
    @ani_duration -= 1
1239
    if @ani_duration % @ani_rate == 0
1240
      if @ani_duration > 0
1241
        frame_index = @animation.frame_max
1242
        frame_index -= (@ani_duration + @ani_rate - 1) / @ani_rate
1243
        animation_set_sprites(@animation.frames[frame_index])
1244
        @animation.timings.each do |timing|
1245
          animation_process_timing(timing) if timing.frame == frame_index
1246
        end
1247
      else
1248
        end_animation
1249
      end
1250
    end
1251
  end  
1252
  #-----------------------------------------------------------------------------
1253
  # Updates afterimages
1254
  #----------------------------------------------------------------------------- 
1255
  def update_afterimages
1256
    @animation_reg.push([self.bitmap, @current_x, @current_y - @jump_value, 
1257
                         self.z,
1258
                         @current_zoom_x, @current_zoom_y,
1259
                         self.src_rect.clone, self.ox, self.oy,
1260
                         @current_angle, self.mirror])        
1261
    @afterimages.each_with_index do |afterimage, i|
1262
      j = @animation_reg.size - ((i + 1) * @afterimage_separation)
1263
      reg = @animation_reg[j]
1264
      next if !reg
1265
      afterimage.update(i, @afterimages.size, reg, self)
1266
    end  
1267
  end
1268
  
1269
  #-----------------------------------------------------------------------------
1270
  # Sets the afterimages
1271
  #----------------------------------------------------------------------------- 
1272
  def set_aftermages(value, count, separation)
1273
    @afterimages_visible = value
1274
    dispose_afterimages
1275
    @afterimages.clear
1276
    if @afterimages_visible
1277
      count.times do |i|
1278
        @afterimages.push(Sprite_Afterimage.new(viewport))
1279
      end  
1280
    end  
1281
    @afterimage_separation = separation
1282
  end
1283
  
1284
  #-----------------------------------------------------------------------------
1285
  # Sets a weapon sprite by icons
1286
  #-----------------------------------------------------------------------------  
1287
  def set_weapon_icon(x_corr, y_corr, start_angle, end_angle, time, left_hand=false, over=false)
1288
    if left_hand
1289
      if @battler.weapons[1]
1290
        bitmap = get_equip_sprite_icon(@battler.weapons[1]) 
1291
      else
1292
        return
1293
      end  
1294
    else
1295
      if @battler.weapons[0]
1296
        bitmap = get_equip_sprite_icon(@battler.weapons[0]) 
1297
      else
1298
        return
1299
      end  
1300
    end
1301
    sprite = Sprite_Weapon.new(self, bitmap, time, 1, 1, over, true)
1302
    sprite.set_angles(start_angle, end_angle)
1303
    sprite.setup_correction(x_corr, y_corr)
1304
    @weapon_sprites.push(sprite)
1305
  end
1306
  
1307
    def set_shield_icon(x_corr, y_corr, start_angle, end_angle, time, over=false)
1308
1309
1310-
    bitmap = get_equip_sprite_icon(@battler.armors[0]) 
1310+
    if @battler.armors[0]
1311
        bitmap = get_equip_sprite_icon(@battler.armors[0])
1312
      else
1313
      return
1314
    end   
1315
    sprite = Sprite_Weapon.new(self, bitmap, time, 1, 1, over, true)
1316
    sprite.set_angles(start_angle, end_angle)
1317
    sprite.setup_correction(x_corr, y_corr)
1318
    @weapon_sprites.push(sprite)
1319
  end
1320
  
1321
  def get_equip_sprite_icon(equip)
1322
    Cache.get_icon_bitmap(equip.icon_index)
1323
  end
1324
  
1325
  def set_weapon_sprite(bitmap_name, x_corr, y_corr, frames, interval, over)
1326
    time = frames * interval + 1
1327
    bitmap = get_weapon_bitmap_anime(bitmap_name)
1328
    sprite = Sprite_Weapon.new(self, bitmap, time, frames, interval, over, false)
1329
    sprite.setup_correction(x_corr, y_corr)
1330
    @weapon_sprites.push(sprite)
1331
  end
1332
  
1333
  def get_weapon_bitmap_anime(bitmap, hue=0)
1334
    name = @battler.battler_name.sub(/\[(\d+),(\d+)\]/i) { '' }
1335
    bitmap_name = "#{name}_#{bitmap}"
1336
    if FileTest.exists?("Graphics/Battlers/#{bitmap_name}")
1337
      return Cache.battler(bitmap_name, hue)
1338
    else
1339
      return Cache.battler(bitmap, hue)
1340
    end
1341
  end
1342
  
1343
  #--------------------------------------------------------------------------
1344
  # ? ?????????????
1345
  #--------------------------------------------------------------------------
1346
  def start_balloon(balloon_id)
1347
    dispose_balloon
1348
    @balloon_id = balloon_id
1349
    @balloon_duration = 8 * balloon_speed + balloon_wait
1350
    @balloon_sprite = ::Sprite.new(viewport)
1351
    @balloon_sprite.bitmap = Cache.system("Balloon")
1352
    @balloon_sprite.ox = 16
1353
    @balloon_sprite.oy = 32
1354
    update_balloon
1355
  end
1356
  #--------------------------------------------------------------------------
1357
  # ? ???????????
1358
  #--------------------------------------------------------------------------
1359
  def dispose_balloon
1360
    if @balloon_sprite
1361
      @balloon_sprite.dispose
1362
      @balloon_sprite = nil
1363
    end
1364
    @balloon_id = 0
1365
  end
1366
  #--------------------------------------------------------------------------
1367
  # ? ???????????
1368
  #--------------------------------------------------------------------------
1369
  def update_balloon
1370
    return if @balloon_id == 0
1371
    if @balloon_duration > 0
1372
      @balloon_duration -= 1
1373
      if @balloon_duration > 0
1374
        @balloon_sprite.x = BattleCamera.correct_x(@current_x)
1375
        @balloon_sprite.y = BattleCamera.correct_y(@current_y - @battler_height)
1376
        @balloon_sprite.z = self.z + 200
1377
        sx = balloon_frame_index * 32
1378
        sy = (@balloon_id - 1) * 32
1379
        @balloon_sprite.src_rect.set(sx, sy, 32, 32)
1380
      else
1381
        end_balloon
1382
      end
1383
    end
1384
  end
1385
  #--------------------------------------------------------------------------
1386
  # ? ???????????
1387
  #--------------------------------------------------------------------------
1388
  def end_balloon
1389
    dispose_balloon
1390
    @balloon_id = 0
1391
  end
1392
  #--------------------------------------------------------------------------
1393
  # ? ?????????????
1394
  #--------------------------------------------------------------------------
1395
  def balloon_speed
1396
    return 8
1397
  end
1398
  #--------------------------------------------------------------------------
1399
  # ? ?????????????????
1400
  #--------------------------------------------------------------------------
1401
  def balloon_wait
1402
    return 12
1403
  end
1404
  #--------------------------------------------------------------------------
1405
  # ? ???????????????
1406
  #--------------------------------------------------------------------------
1407
  def balloon_frame_index
1408
    return 7 - [(@balloon_duration - balloon_wait) / balloon_speed, 0].max
1409
  end  
1410
  
1411
end
1412
1413
#===============================================================================
1414
# ¦ Sprite_Weapon
1415
#-------------------------------------------------------------------------------
1416
# The class that controls weapon animations.
1417
#===============================================================================
1418
class Sprite_Weapon < Sprite
1419
  
1420
  attr_reader :anime_count
1421
  
1422
  def initialize(sprite, bitmap, anime_count, frames=1, frame_interval=1, over=false, icon=false)
1423
    super(sprite.viewport)
1424
    @sprite = sprite
1425
    @anime_count = anime_count
1426
    @current_angle = 0
1427
    @end_angle = 0
1428
    @frames = frames
1429
    @frame_interval = frame_interval
1430
    @frame_count = 0
1431
    @frame = 0
1432
    @over = over
1433
    @x_correction = @y_correction = 0
1434
    self.bitmap = bitmap
1435
    @bw = self.bitmap.width / @frames
1436
    @bh = self.bitmap.height
1437
    self.mirror = sprite.battler.enemy?
1438
    self.ox = icon ? @bw : @bw / 2
1439
    self.oy = @bh
1440
    update_rect
1441
  end
1442
  
1443
  def update
1444
    super
1445
    return if @anime_count < 1
1446
    update_animation
1447
    @anime_count -= 1
1448
  end
1449
  
1450
  def update_animation
1451
    update_angle
1452
    update_frame
1453
    update_rect
1454
    update_coordinates
1455
  end
1456
  
1457
  def update_angle
1458
    @current_angle = (@current_angle * (@anime_count - 1) + @end_angle) / @anime_count
1459
    self.angle = @sprite.angle + @current_angle
1460
  end
1461
  
1462
  def update_frame
1463
    @frame_count = (@frame_count + 1) % @frame_interval
1464
    @frame = (@frame + 1) % @frames if @frame_count == 0  
1465
  end
1466
  
1467
  def update_rect  
1468
    self.src_rect.set(@bw * @frame, 0, @bw, @bh)
1469
  end
1470
  
1471
  def animation?
1472
    return (@anime_count > 0)
1473
  end
1474
  
1475
  def update_coordinates
1476
    self.x = BattleCamera.correct_x(@sprite.current_x + @x_correction)
1477
    self.y = BattleCamera.correct_y(@sprite.current_y + @y_correction)
1478
    self.z = @over ? @sprite.z + 1 : @sprite.z - 1
1479
    self.zoom_x = @sprite.zoom_x
1480
    self.zoom_y = @sprite.zoom_y
1481
    
1482
  end
1483
  
1484
  def set_angles(start_angle, end_angle)
1485
    @current_angle = start_angle
1486
    @end_angle = end_angle
1487
  end
1488
  
1489
  def setup_correction(x, y)
1490
    @x_correction = x 
1491
    @y_correction = y
1492
  end
1493
  
1494
end
1495
1496
#===============================================================================
1497
# ¦ Sprite_Afterimage
1498
#-------------------------------------------------------------------------------
1499
# The class that controls afterimage processing.
1500
#===============================================================================
1501
1502
class Sprite_Afterimage < Sprite
1503
  
1504
  #-----------------------------------------------------------------------------
1505
  # Updates the afterimage
1506
  #-----------------------------------------------------------------------------   
1507
  def update(index, size, data, sprite)
1508
    super()
1509
    self.bitmap = data[0]
1510
    self.x = BattleCamera.correct_x(data[1])
1511
    self.y = BattleCamera.correct_y(data[2])
1512
    self.z = data[3]
1513
    self.zoom_x = BattleCamera.correct_zoom(data[4], data[1], data[2], sprite.battler.zoom_effective?)
1514
    self.zoom_y = BattleCamera.correct_zoom(data[5], data[1], data[2], sprite.battler.zoom_effective?)
1515
    self.src_rect = data[6]
1516
    self.ox = data[7]
1517
    self.oy = data[8]
1518
    self.angle = BattleCamera.correct_angle(data[9])
1519
    self.mirror = data[10]
1520
    self.opacity = 255 - (index * 255 / size)
1521
  end
1522
  
1523
end
1524
1525
#==============================================================================
1526
# ¦ Sprite_BattlePicture
1527
#==============================================================================
1528
1529
class Sprite_BattlePicture < Sprite_Base
1530
  #--------------------------------------------------------------------------
1531
  # ? ?????????
1532
  #     picture : Game_Picture
1533
  #--------------------------------------------------------------------------
1534
  def initialize(viewport, picture)
1535
    super(viewport)
1536
    @picture = picture
1537
    update
1538
  end
1539
  #--------------------------------------------------------------------------
1540
  # ? ??
1541
  #--------------------------------------------------------------------------
1542
  def dispose
1543
    bitmap.dispose if bitmap
1544
    super
1545
  end
1546
  #--------------------------------------------------------------------------
1547
  # ? ??????
1548
  #--------------------------------------------------------------------------
1549
  def update
1550
    super
1551
    update_bitmap
1552
    update_origin
1553
    update_position
1554
    update_zoom
1555
    update_other
1556
  end
1557
  #-----------------------------------------------------------------------------
1558
  # Updates the bitmap
1559
  #-----------------------------------------------------------------------------  
1560
  def update_bitmap
1561
    if @picture.name.is_a?(Integer)
1562
      self.bitmap = Cache.get_icon_bitmap(@picture.name) 
1563
    else  
1564
      self.bitmap = Cache.picture(@picture.name)
1565
    end  
1566
  end
1567
  
1568
  #--------------------------------------------------------------------------
1569
  # ? ?????
1570
  #--------------------------------------------------------------------------
1571
  def update_origin
1572
    if @picture.origin == 0
1573
      self.ox = 0
1574
      self.oy = 0
1575
    else
1576
      self.ox = bitmap.width / 2
1577
      self.oy = bitmap.height / 2
1578
    end
1579
  end
1580
  #--------------------------------------------------------------------------
1581
  # ? ?????
1582
  #--------------------------------------------------------------------------
1583
  def update_position
1584
    self.x = BattleCamera.correct_x(@picture.x)
1585
    self.y = BattleCamera.correct_y(@picture.y)
1586
    self.z = @picture.number
1587
  end
1588
  #--------------------------------------------------------------------------
1589
  # ? ??????
1590
  #--------------------------------------------------------------------------
1591
  def update_zoom
1592
    self.zoom_x = BattleCamera.correct_zoom(@picture.zoom_x / 100.0)
1593
    self.zoom_y = BattleCamera.correct_zoom(@picture.zoom_y / 100.0)
1594
  end
1595
  #--------------------------------------------------------------------------
1596
  # ? ??????
1597
  #--------------------------------------------------------------------------
1598
  def update_other
1599
    self.opacity = @picture.opacity
1600
    self.blend_type = @picture.blend_type
1601
    self.angle = @picture.angle
1602
    self.tone.set(@picture.tone)
1603
  end
1604
  
1605
  def start_animation_ex(animation, mirror = false)
1606
    start_animation(animation, mirror)
1607
  end  
1608
  
1609
     
1610
  
1611
end
1612
1613
#===============================================================================
1614
# ¦ Spriteset_Battle
1615
#===============================================================================
1616
1617
class Spriteset_Battle
1618
  
1619
  #--------------------------------------------------------------------------
1620
  # ? Class variables
1621
  #--------------------------------------------------------------------------  
1622
  @@inverted_x_cache    = {}
1623
  @@inverted_y_cache    = {}
1624
  @@inverted_both_cache = {}
1625
  
1626
  #--------------------------------------------------------------------------
1627
  # ? Alias methods
1628
  #--------------------------------------------------------------------------  
1629
  alias rbs_spriteset_battle_initialize initialize
1630
  alias rbs_spriteset_battle_battleback1_bitmap battleback1_bitmap
1631
  alias rbs_spriteset_battle_battleback2_bitmap battleback2_bitmap
1632
  
1633
  #--------------------------------------------------------------------------
1634
  # ? Creates the spriteset
1635
  #-------------------------------------------------------------------------- 
1636
  def initialize
1637
    rbs_spriteset_battle_initialize
1638
    @battler_sprites = @enemy_sprites + @actor_sprites  
1639
    @icon_sprites = {}
1640
  end
1641
1642
  def create_actors
1643
    @actor_sprites = $game_party.members.collect do |actor|
1644
      Sprite_Battler.new(@viewport1, actor)
1645
    end  
1646
  end  
1647
  
1648
1649
  def update_actors
1650
    @actor_sprites.each do |sprite|
1651
      if !sprite.battler
1652
        @actor_sprites.delete(sprite)
1653
        sprite.dispose
1654
      else
1655
        sprite.update
1656
      end
1657
    end
1658
    $game_party.members.each do |actor|
1659
      if !@actor_sprites.any? { |sprite| sprite.battler == actor}
1660
        new_sprite = Sprite_Battler.new(@viewport1, actor)
1661
        @actor_sprites.push(new_sprite)
1662
        new_sprite.update
1663
        if $game_troop.turn_count > 0 || BattleManager.turn_end?
1664
          BattleInterpreter.add_action(actor, [actor], actor.get_presentation_sequence, nil)
1665
          SceneManager.scene.wait_for_battle_interpreter
1666
        end  
1667
      end
1668
    end  
1669
  end  
1670
  
1671
  #--------------------------------------------------------------------------
1672
  # ? checks if animating
1673
  #--------------------------------------------------------------------------
1674
  def animation?
1675
    battler_sprites.any? {|sprite| sprite.animation? || sprite.moving? || BattleCamera.moving? }
1676
  end  
1677
  
1678
  #--------------------------------------------------------------------------
1679
  # ? gets the battler sprites
1680
  #--------------------------------------------------------------------------  
1681
  def battler_sprites
1682
    @actor_sprites + @enemy_sprites
1683
  end
1684
  
1685
  #--------------------------------------------------------------------------
1686
  # ? Get the battler sprite of a target
1687
  #--------------------------------------------------------------------------  
1688
  def battler_sprite(battler)
1689
    @battler_sprites.each do |i|
1690
      return i if i.battler == battler
1691
    end
1692
  end
1693
  
1694
  #--------------------------------------------------------------------------
1695
  # ? Creates the lower battleback
1696
  #--------------------------------------------------------------------------
1697
  def create_battleback1
1698
    @back1_sprite = Plane.new(@viewport1)
1699
    @back1_sprite.bitmap = battleback1_bitmap
1700
    @back1_sprite.z = 0
1701
  end
1702
  #--------------------------------------------------------------------------
1703
  # ? Creats the upper battleback
1704
  #--------------------------------------------------------------------------
1705
  def create_battleback2
1706
    @back2_sprite = Plane.new(@viewport1)
1707
    @back2_sprite.bitmap = battleback2_bitmap
1708
    @back2_sprite.z = 1
1709
  end  
1710
  
1711
  #--------------------------------------------------------------------------
1712
  # ? Updates lower battleback
1713
  #--------------------------------------------------------------------------
1714
  def update_battleback1
1715
    z = BattleConfig::Battleback_NormalZoom
1716
    ox = @back1_sprite.bitmap.width * 3 / 4
1717
    oy = @back1_sprite.bitmap.height * 3 / 4   
1718
    @back1_sprite.ox = -BattleCamera.correct_x(ox)
1719
    @back1_sprite.oy = -BattleCamera.correct_y(oy)
1720
    zoom = BattleCamera.correct_zoom(BattleConfig::Battleback_NormalZoom)
1721
    @back1_sprite.zoom_x = @back1_sprite.zoom_y = zoom
1722
  end
1723
  #--------------------------------------------------------------------------
1724
  # ? Updates upper battleback
1725
  #--------------------------------------------------------------------------
1726
  def update_battleback2
1727
    z = BattleConfig::Battleback_NormalZoom
1728
    ox = @back2_sprite.bitmap.width * 3 / 4
1729
    oy = @back2_sprite.bitmap.height * 3 / 4
1730
    @back2_sprite.ox = -BattleCamera.correct_x(ox)
1731
    @back2_sprite.oy = -BattleCamera.correct_y(oy) 
1732
    zoom = BattleCamera.correct_zoom(BattleConfig::Battleback_NormalZoom)
1733
    @back2_sprite.zoom_x = @back2_sprite.zoom_y = zoom
1734
  end  
1735
  
1736
  #--------------------------------------------------------------------------
1737
  # ? Gets the bitmap of lower battleback
1738
  #--------------------------------------------------------------------------  
1739
  def battleback1_bitmap
1740
    if BattleConfig::UsingDefaultBattlebacks
1741
      return create_mirrored_battleback(rbs_spriteset_battle_battleback1_bitmap)
1742
    else
1743
      return rbs_spriteset_battle_battleback1_bitmap
1744
    end  
1745
  end
1746
  
1747
  #--------------------------------------------------------------------------
1748
  # ? Gets the bitmap of upper battleback
1749
  #--------------------------------------------------------------------------   
1750
  def battleback2_bitmap
1751
    if BattleConfig::UsingDefaultBattlebacks
1752
      return create_mirrored_battleback(rbs_spriteset_battle_battleback2_bitmap)
1753
    else
1754
      return rbs_spriteset_battle_battleback2_bitmap
1755
    end     
1756
  end
1757
  
1758
  #--------------------------------------------------------------------------
1759
  # ? Creates the sprite of the battleback for compatibility
1760
  #--------------------------------------------------------------------------   
1761
  def create_mirrored_battleback(battleback)
1762
    org_w = battleback.width
1763
    org_h = battleback.height
1764
    bw = battleback.width << 1
1765
    bh = battleback.height << 1
1766
    bmp = Bitmap.new(bw, bh)
1767
    bmp.blt(org_w >> 1, org_h >> 1, battleback, battleback.rect)
1768
    battleback.dispose
1769
    return bmp
1770
  end
1771
1772
  def make_return_sequence(include_stand=true)
1773
    battler_sprites.each do |i|
1774
      i.make_return_sequence(include_stand)
1775
    end  
1776
  end
1777
  
1778
  #--------------------------------------------------------------------------
1779
  # ? ????????????
1780
  #--------------------------------------------------------------------------
1781
  def update_pictures
1782
    $game_troop.screen.pictures.each do |pic|
1783
      @picture_sprites[pic.number] ||= Sprite_BattlePicture.new(@viewport2, pic)
1784
      @picture_sprites[pic.number].update
1785
    end
1786
  end  
1787
  
1788
end
1789
1790
#===============================================================================
1791
# END SPRITE SECTION
1792
#===============================================================================
1793
1794
#===============================================================================
1795
# BEGIN GAME DATA SECTION
1796
#===============================================================================
1797
1798
#===============================================================================
1799
# * RPG::BaseItem
1800
#===============================================================================
1801
module RPG
1802
  class BaseItem
1803
    
1804
    #---------------------------------------------------------------------------
1805
    # Gets attack skill id
1806
    #---------------------------------------------------------------------------
1807
    def get_atk_skill_id
1808
      return self.note[/<atk skill id:(.*?)>/mi] ? eval($1) : nil
1809
    end
1810
    
1811
    #---------------------------------------------------------------------------
1812
    # Gets guard skill id
1813
    #---------------------------------------------------------------------------    
1814
    def get_guard_skill_id
1815
      return self.note[/<guard skill id:(.*?)>/mi] ? eval($1) : nil
1816
    end
1817
    
1818
    #---------------------------------------------------------------------------
1819
    # Gets a sequence
1820
    #---------------------------------------------------------------------------     
1821
    def get_sequence(key)
1822
      ex = BattleConfig::Default_SequenceNotes 
1823
      reg = /<sequence:#{key}>(.*?)<\/sequence>/mi
1824
      ex_r = ''
1825
      if self.is_a?(RPG::Actor) || self.is_a?(RPG::Enemy)
1826
        ex_r = (ex[reg] ? $1 : '')  
1827
      end  
1828
      return self.note[reg] ? $1 : ex_r
1829
    end
1830
    
1831
    #---------------------------------------------------------------------------
1832
    # Gets a sequence
1833
    #---------------------------------------------------------------------------    
1834
    def get_turn_start_sequence
1835
      get_sequence('turn start')
1836
    end     
1837
    
1838
    #---------------------------------------------------------------------------
1839
    # Gets a sequence
1840
    #---------------------------------------------------------------------------    
1841
    def get_turn_end_sequence
1842
      get_sequence('turn end')     
1843
    end        
1844
    
1845
    #---------------------------------------------------------------------------
1846
    # Gets a sequence
1847
    #---------------------------------------------------------------------------    
1848
    def get_presentation_sequence
1849
      get_sequence('presentation')    
1850
    end
1851
    
1852
    #---------------------------------------------------------------------------
1853
    # Gets a sequence
1854
    #---------------------------------------------------------------------------    
1855
    def get_surprised_sequence
1856
      get_sequence('surprised')     
1857
    end
1858
    
1859
    #---------------------------------------------------------------------------
1860
    # Gets a sequence
1861
    #---------------------------------------------------------------------------    
1862
    def get_preemptive_sequence
1863
      get_sequence('preemptive')    
1864
    end
1865
    
1866
    #---------------------------------------------------------------------------
1867
    # Gets a sequence
1868
    #---------------------------------------------------------------------------    
1869
    def get_attack_sequence
1870
      get_sequence('attack')   
1871
    end   
1872
    
1873
    #---------------------------------------------------------------------------
1874
    # Gets a sequence
1875
    #---------------------------------------------------------------------------    
1876
    def get_guard_sequence
1877
      get_sequence('guard')   
1878
    end       
1879
    
1880
    #---------------------------------------------------------------------------
1881
    # Gets a sequence
1882
    #---------------------------------------------------------------------------    
1883
    def get_counter_sequence
1884
      get_sequence('counter')    
1885
    end
1886
  
1887
    #---------------------------------------------------------------------------
1888
    # Gets a sequence
1889
    #---------------------------------------------------------------------------    
1890
    def get_die_sequence
1891
      get_sequence('die')    
1892
    end
1893
1894
    #---------------------------------------------------------------------------
1895
    # Gets a sequence
1896
    #---------------------------------------------------------------------------    
1897
    def get_dead_sequence
1898
      get_sequence('dead')    
1899
    end    
1900
    
1901
    #---------------------------------------------------------------------------
1902
    # Gets a sequence
1903
    #---------------------------------------------------------------------------    
1904
    def get_revive_sequence
1905
      get_sequence('revive')    
1906
    end    
1907
    
1908
    #---------------------------------------------------------------------------
1909
    # Gets a sequence
1910
    #---------------------------------------------------------------------------    
1911
    def get_victory_sequence
1912
      get_sequence('victory')    
1913
    end
1914
  
1915
    #---------------------------------------------------------------------------
1916
    # Gets a sequence
1917
    #---------------------------------------------------------------------------    
1918
    def get_substitute_sequence
1919
      get_sequence('substitute')    
1920
    end
1921
  
1922
    #---------------------------------------------------------------------------
1923
    # Gets a sequence
1924
    #---------------------------------------------------------------------------    
1925
    def get_reflect_sequence
1926
      get_sequence('reflect')
1927
    end    
1928
    
1929
    #---------------------------------------------------------------------------
1930
    # Gets a sequence
1931
    #---------------------------------------------------------------------------    
1932
    def get_item_use_sequence
1933
      get_sequence('item')
1934
    end  
1935
  
1936
    #---------------------------------------------------------------------------
1937
    # Gets a sequence
1938
    #---------------------------------------------------------------------------    
1939
    def get_skill_use_sequence
1940
      get_sequence('skill')
1941
    end    
1942
1943
    #---------------------------------------------------------------------------
1944
    # Gets a sequence
1945
    #---------------------------------------------------------------------------    
1946
    def get_stand_sequence
1947
      get_sequence('stand')
1948
    end
1949
    
1950
    #---------------------------------------------------------------------------
1951
    # Gets a sequence
1952
    #---------------------------------------------------------------------------    
1953
    def get_evade_sequence
1954
      get_sequence('evade')
1955
    end
1956
    
1957
    #---------------------------------------------------------------------------
1958
    # Gets a sequence
1959
    #---------------------------------------------------------------------------    
1960
    def get_miss_sequence
1961
      get_sequence('miss')
1962
    end
1963
 
1964
    #---------------------------------------------------------------------------
1965
    # Gets a sequence
1966
    #---------------------------------------------------------------------------     
1967
    def get_return_sequence
1968
      get_sequence('return position')
1969
    end    
1970
    
1971
    #---------------------------------------------------------------------------
1972
    # Gets the sequence used when actor is processing an input
1973
    #---------------------------------------------------------------------------     
1974
    def get_action_selection_sequence
1975
      get_sequence('action selection')
1976
    end
1977
    
1978
    #---------------------------------------------------------------------------
1979
    # Gets the default battler index
1980
    #---------------------------------------------------------------------------    
1981
    def get_default_battler_index
1982
      return self.note[/<default battler index:(.*?)>/mi] ? eval($1) : nil
1983
    end    
1984
    
1985
  end
1986
end
1987
1988
class RPG::Skill < RPG::UsableItem
1989
  
1990
    #---------------------------------------------------------------------------
1991
    # Gets a sequence
1992
    #---------------------------------------------------------------------------    
1993
    def get_attack_sequence
1994
      get_sequence('skill') == '' ? get_sequence('attack') : get_sequence('skill')
1995
    end   
1996
  
1997
end
1998
1999
class RPG::Item < RPG::UsableItem
2000
  
2001
    #---------------------------------------------------------------------------
2002
    # Gets a sequence
2003
    #---------------------------------------------------------------------------    
2004
    def get_attack_sequence
2005
      get_sequence('item') == '' ? get_sequence('attack') : get_sequence('skill')
2006
    end   
2007
  
2008
end
2009
2010
2011
#===============================================================================
2012
# END GAME DATA SECTION
2013
#===============================================================================
2014
2015
#===============================================================================
2016
# BEGIN GAME OBJECTS SECTION
2017
#===============================================================================
2018
2019
#===============================================================================
2020
# ¦ Game_Battler
2021
#===============================================================================
2022
class Game_Battler
2023
  
2024
  def friend_unit
2025
    return []
2026
  end
2027
  
2028
  def enemy_unit
2029
    return []
2030
  end
2031
  
2032
  def counter_skill_id
2033
    return attack_skill_id
2034
  end
2035
2036
  def zoom_effective?
2037
    return true
2038
  end
2039
 
2040
end
2041
2042
#==============================================================================
2043
# ¦ Game_Enemy
2044
#==============================================================================
2045
class Game_Enemy < Game_Battler
2046
  
2047
  #-----------------------------------------------------------------------------
2048
  # Class atributes
2049
  #----------------------------------------------------------------------------- 
2050
  attr_reader :atk_animation_id1
2051
  attr_reader :atk_animation_id2
2052
  
2053
  #-----------------------------------------------------------------------------
2054
  # Alias methods
2055
  #-----------------------------------------------------------------------------  
2056
  alias rbs_game_enemy_initialize initialize
2057
  
2058
  #-----------------------------------------------------------------------------
2059
  # Object Creation
2060
  #-----------------------------------------------------------------------------   
2061
  def initialize(index, enemy_id)
2062
    rbs_game_enemy_initialize(index, enemy_id)
2063
    @atk_animation_id1 = enemy.note[/<atk ani1:(.*?)>/im] ? eval($1) : BattleConfig::DefaultEnemey_Ani1ID
2064
    @atk_animation_id2 = enemy.note[/<atk ani2:(.*?)>/im] ? eval($1) : BattleConfig::DefaultEnemey_Ani2ID
2065
    @counter_skill_id  = enemy.note[/<counter skill id:(.*?)>/im] ? eval($1) : attack_skill_id
2066
    @weapon_1_id       = enemy.note[/<weapon 1 id:(.*?)>/im] ? eval($1) : 0
2067
    @weapon_2_id       = enemy.note[/<weapon 2 id:(.*?)>/im] ? eval($1) : 0
2068
  end
2069
  
2070
  #--------------------------------------------------------------------------
2071
  # ? Get the attack skll id
2072
  #--------------------------------------------------------------------------
2073
  def attack_skill_id
2074
    id = enemy.get_atk_skill_id
2075
    return id ? id : super
2076
  end
2077
  #--------------------------------------------------------------------------
2078
  # ? Get the guard skill id
2079
  #--------------------------------------------------------------------------
2080
  def guard_skill_id
2081
    id = enemy.get_guard_skill_id 
2082
    return id ? id : super
2083
  end   
2084
  
2085
  #--------------------------------------------------------------------------
2086
  # ? Get sequence
2087
  #--------------------------------------------------------------------------  
2088
  def get_turn_start_sequence
2089
    return enemy.presentation_sequence
2090
  end     
2091
    
2092
  #--------------------------------------------------------------------------
2093
  # ? Get sequence
2094
  #--------------------------------------------------------------------------   
2095
  def get_turn_end_sequence
2096
    return enemy.presentation_sequence 
2097
  end     
2098
  
2099
  #--------------------------------------------------------------------------
2100
  # ? Get sequence
2101
  #--------------------------------------------------------------------------   
2102
  def get_presentation_sequence
2103
    return enemy.get_presentation_sequence
2104
  end
2105
    
2106
  #--------------------------------------------------------------------------
2107
  # ? Get sequence
2108
  #--------------------------------------------------------------------------   
2109
  def get_surprised_sequence
2110
    return enemy.get_surprised_sequence
2111
  end
2112
    
2113
  #--------------------------------------------------------------------------
2114
  # ? Get sequence
2115
  #--------------------------------------------------------------------------   
2116
  def get_preemptive_sequence
2117
    return enemy.get_preemptive_sequence
2118
  end
2119
    
2120
  #--------------------------------------------------------------------------
2121
  # ? Get sequence
2122
  #-------------------------------------------------------------------------- 
2123
  def get_attack_sequence
2124
    return enemy.get_attack_sequence
2125
  end
2126
  
2127
  #--------------------------------------------------------------------------
2128
  # ? Get sequence
2129
  #-------------------------------------------------------------------------- 
2130
  def get_guard_sequence
2131
    return enemy.get_guard_sequence
2132
  end  
2133
  
2134
  #--------------------------------------------------------------------------
2135
  # ? Get sequence
2136
  #-------------------------------------------------------------------------- 
2137
  def get_counter_sequence
2138
    return enemy.get_counter_sequence
2139
  end
2140
  
2141
  #--------------------------------------------------------------------------
2142
  # ? Get sequence
2143
  #-------------------------------------------------------------------------- 
2144
  def get_die_sequence
2145
    return enemy.get_die_sequence
2146
  end
2147
2148
  #--------------------------------------------------------------------------
2149
  # ? Get sequence
2150
  #-------------------------------------------------------------------------- 
2151
  def get_dead_sequence
2152
    return enemy.get_dead_sequence
2153
  end  
2154
  
2155
  #--------------------------------------------------------------------------
2156
  # ? Get sequence
2157
  #-------------------------------------------------------------------------- 
2158
  def get_revive_sequence
2159
    return enemy.get_revive_sequence
2160
  end
2161
  
2162
  #--------------------------------------------------------------------------
2163
  # ? Get sequence
2164
  #-------------------------------------------------------------------------- 
2165
  def get_victory_sequence
2166
    return enemy.get_victory_sequence
2167
  end
2168
2169
  #--------------------------------------------------------------------------
2170
  # ? Get sequence
2171
  #-------------------------------------------------------------------------- 
2172
  def get_substitute_sequence
2173
    return enemy.get_substitute_sequence
2174
  end
2175
  
2176
  #--------------------------------------------------------------------------
2177
  # ? Get sequence
2178
  #-------------------------------------------------------------------------- 
2179
  def get_reflect_sequence
2180
    return enemy.get_substitute_sequence
2181
  end
2182
  
2183
  #--------------------------------------------------------------------------
2184
  # ? Get sequence
2185
  #-------------------------------------------------------------------------- 
2186
  def get_item_use_sequence
2187
    return enemy.get_item_use_sequence
2188
  end  
2189
  
2190
  #--------------------------------------------------------------------------
2191
  # ? Get sequence
2192
  #-------------------------------------------------------------------------- 
2193
  def get_skill_use_sequence
2194
    return enemy.get_skill_use_sequence
2195
  end    
2196
  
2197
  #--------------------------------------------------------------------------
2198
  # ? Get sequence
2199
  #-------------------------------------------------------------------------- 
2200
  def get_stand_sequence
2201
    seq = ''
2202
    states.each do |i|
2203
      next if !i
2204
      seq += i.get_stand_sequence
2205
    end     
2206
    return seq == '' ? enemy.get_stand_sequence : seq
2207
  end
2208
    
2209
  #--------------------------------------------------------------------------
2210
  # ? Get sequence
2211
  #-------------------------------------------------------------------------- 
2212
  def get_evade_sequence
2213
    return enemy.get_evade_sequence
2214
  end
2215
   
2216
  #--------------------------------------------------------------------------
2217
  # ? Get sequence
2218
  #-------------------------------------------------------------------------- 
2219
  def get_miss_sequence
2220
    return enemy.get_miss_sequence
2221
  end    
2222
  
2223
  #--------------------------------------------------------------------------
2224
  # ? Get sequence
2225
  #-------------------------------------------------------------------------- 
2226
  def get_return_sequence
2227
    return enemy.get_return_sequence
2228
  end  
2229
  
2230
  #-----------------------------------------------------------------------------
2231
  # Gets friend unit
2232
  #-----------------------------------------------------------------------------   
2233
  def friend_unit
2234
    return $game_troop
2235
  end
2236
 
2237
  #-----------------------------------------------------------------------------
2238
  # Gets enemy unit
2239
  #-----------------------------------------------------------------------------  
2240
  def enemy_unit
2241
    return $game_party
2242
  end  
2243
  
2244
  #-----------------------------------------------------------------------------
2245
  # Gets default battler index
2246
  #-----------------------------------------------------------------------------   
2247
  def default_battler_index
2248
    a = enemy.get_default_battler_index
2249
    return a ? a : BattleConfig::DefaultEnemyIndex
2250
  end
2251
  
2252
  #-----------------------------------------------------------------------------
2253
  # Gets the real presentation action according to situation
2254
  #-----------------------------------------------------------------------------  
2255
  def get_real_presentation_action
2256
    return get_dead_sequence if dead?
2257
    BattleManager.surprise? ? get_preemptive_sequence : (BattleManager.preemptive? ? get_surprised_sequence : get_presentation_sequence )
2258
  end
2259
  
2260
  #-----------------------------------------------------------------------------
2261
  # Gets the counter skill id
2262
  #-----------------------------------------------------------------------------  
2263
  def counter_skill_id
2264
    return @counter_skill_id
2265
  end  
2266
  
2267
  #-----------------------------------------------------------------------------
2268
  # has dia sequence?
2269
  #-----------------------------------------------------------------------------  
2270
  def die_sequence?
2271
    return enemy.note[/<die sequence on>/mi] ? true : false
2272
  end  
2273
  
2274
  #-----------------------------------------------------------------------------
2275
  # Get weapons
2276
  #-----------------------------------------------------------------------------  
2277
  def weapons
2278
    result = []
2279
    result.push($data_weapons[@weapon_1_id]) if @weapon_1_id > 0
2280
    result.push($data_weapons[@weapon_2_id]) if @weapon_2_id > 0
2281
    return result
2282
  end
2283
  
2284
end
2285
2286
#==============================================================================
2287
# ¦ Game_Actor
2288
#==============================================================================
2289
class Game_Actor < Game_Battler
2290
  
2291
  #-----------------------------------------------------------------------------
2292
  # Class atributes
2293
  #-----------------------------------------------------------------------------   
2294
  attr_accessor :battler_name
2295
  attr_accessor :battler_hue  
2296
  attr_accessor :counter_skill_id
2297
  
2298
  #-----------------------------------------------------------------------------
2299
  # Alias methods
2300
  #-----------------------------------------------------------------------------  
2301
  alias rbs_game_actor_setup setup
2302
  alias rbs_game_actor_make_actions make_actions
2303
  
2304
  #--------------------------------------------------------------------------
2305
  # ? Setups an actor by ID
2306
  #--------------------------------------------------------------------------   
2307
  def setup(actor_id)
2308
    rbs_game_actor_setup(actor_id)
2309
    @battler_name = actor.note[/<battler name:(.*?)>/im] ? $1 : @character_name
2310
    @battler_hue  = actor.note[/<battler hue:(.*?)>/im] ? $1.to_i : 0
2311
    @custom_screen_x = actor.note[/<screen x:(.*?)>/im] ? $1.to_i : nil
2312
    @custom_screen_y = actor.note[/<screen y:(.*?)>/im] ? $1.to_i : nil
2313
    id1 = actor.note[/<atk ani1:(.*?)>/im] ? Kernel.eval($1) : ($data_classes[@class_id].note[/<atk ani1:(.*?)>/im] ? Kernel.eval($1) : BattleConfig::DefaultEnemey_Ani1ID)
2314
    id2 = actor.note[/<atk ani2:(.*?)>/im] ? Kernel.eval($1) : ($data_classes[@class_id].note[/<atk ani2:(.*?)>/im] ? Kernel.eval($1) : BattleConfig::DefaultEnemey_Ani2ID)
2315
    @default_atk_animation_id1 = id1
2316
    @default_atk_animation_id2 = id2
2317
    c_s_id = $data_classes[@class_id].note[/<counter skill id:(.*?)>/im] ? Kernel.eval($1) : attack_skill_id
2318
    @counter_skill_id  = actor.note[/<counter skill id:(.*?)>/im]  ? Kernel.eval($1) : c_s_id
2319
  end
2320
  
2321
  #--------------------------------------------------------------------------
2322
  # ? Use sprite?
2323
  #--------------------------------------------------------------------------   
2324
  def use_sprite?
2325
    return true
2326
  end
2327
  
2328
  #--------------------------------------------------------------------------
2329
  # ? Get battle screen x position
2330
  #--------------------------------------------------------------------------   
2331
  def screen_x
2332
    return 0 if !self.index
2333
    return @custom_screen_x ? @custom_screen_x : BattleConfig::ActorPos[self.index][0]
2334
  end
2335
  
2336
  #--------------------------------------------------------------------------
2337
  # ? Get battle screen y position
2338
  #--------------------------------------------------------------------------   
2339
  def screen_y
2340
    return 0 if !self.index
2341
    return @custom_screen_y ? @custom_screen_y : BattleConfig::ActorPos[self.index][1]
2342
  end
2343
  
2344
  #--------------------------------------------------------------------------
2345
  # ? Get battle screen z position
2346
  #--------------------------------------------------------------------------   
2347
  def screen_z
2348
    return 100
2349
  end
2350
  
2351
  #--------------------------------------------------------------------------
2352
  # ? Get sequence
2353
  #--------------------------------------------------------------------------   
2354
  def get_turn_start_sequence
2355
    seq = ''
2356
    equips.each do |i|
2357
      next if !i
2358
      seq += i.get_turn_start_sequence
2359
    end  
2360
    return seq != '' ? seq : actor.get_turn_start_sequence
2361
  end     
2362
    
2363
  #--------------------------------------------------------------------------
2364
  # ? Get sequence
2365
  #--------------------------------------------------------------------------   
2366
  def get_turn_end_sequence
2367
    seq = ''
2368
    equips.each do |i|
2369
      next if !i
2370
      seq += i.get_turn_end_sequence
2371
    end  
2372
    return seq != '' ? seq : actor.get_turn_end_sequence
2373
  end    
2374
  
2375
  #--------------------------------------------------------------------------
2376
  # ? Get sequence
2377
  #--------------------------------------------------------------------------   
2378
  def get_presentation_sequence
2379
    seq = ''
2380
    equips.each do |i|
2381
      next if !i
2382
      seq += i.get_presentation_sequence
2383
    end  
2384
    return seq != '' ? seq : actor.get_presentation_sequence
2385
  end
2386
    
2387
  #--------------------------------------------------------------------------
2388
  # ? Get sequence
2389
  #--------------------------------------------------------------------------   
2390
  def get_surprised_sequence
2391
    seq = ''
2392
    equips.each do |i|
2393
      next if !i
2394
      seq += i.get_surprised_sequence
2395
    end  
2396
    return seq != '' ? seq : actor.get_surprised_sequence
2397
  end
2398
    
2399
  #--------------------------------------------------------------------------
2400
  # ? Get sequence
2401
  #--------------------------------------------------------------------------   
2402
  def get_preemptive_sequence
2403
    seq = ''
2404
    equips.each do |i|
2405
      next if !i
2406
      seq += i.get_preemptive_sequence
2407
    end  
2408
    return seq != '' ? seq : actor.get_preemptive_sequence
2409
  end
2410
    
2411
  #--------------------------------------------------------------------------
2412
  # ? Get sequence
2413
  #--------------------------------------------------------------------------   
2414
  def get_attack_sequence
2415
    seq = ''
2416
    equips.each do |i|
2417
      next if !i
2418
      seq += i.get_attack_sequence
2419
    end  
2420
    return seq != '' ? seq : actor.get_attack_sequence
2421
  end
2422
  
2423
  #--------------------------------------------------------------------------
2424
  # ? Get sequence
2425
  #--------------------------------------------------------------------------   
2426
  def get_guard_sequence
2427
    seq = ''
2428
    equips.each do |i|
2429
      next if !i
2430
      seq += i.get_guard_sequence
2431
    end  
2432
    return seq != '' ? seq : actor.get_guard_sequence
2433
  end  
2434
  
2435
  #--------------------------------------------------------------------------
2436
  # ? Get sequence
2437
  #--------------------------------------------------------------------------   
2438
  def get_counter_sequence
2439
    seq = ''
2440
    equips.each do |i|
2441
      next if !i
2442
      seq += i.get_counter_sequence
2443
    end  
2444
    return seq != '' ? seq : actor.get_counter_sequence
2445
  end  
2446
  
2447
  #--------------------------------------------------------------------------
2448
  # ? Get sequence
2449
  #--------------------------------------------------------------------------   
2450
  def get_die_sequence
2451
    seq = ''
2452
    equips.each do |i|
2453
      next if !i
2454
      seq += i.get_die_sequence
2455
    end  
2456
    return seq != '' ? seq : actor.get_die_sequence
2457
  end
2458
2459
  #--------------------------------------------------------------------------
2460
  # ? Get sequence
2461
  #--------------------------------------------------------------------------   
2462
  def get_dead_sequence
2463
    seq = ''
2464
    equips.each do |i|
2465
      next if !i
2466
      seq += i.get_dead_sequence
2467
    end  
2468
    return seq != '' ? seq : actor.get_dead_sequence
2469
  end  
2470
  
2471
  #--------------------------------------------------------------------------
2472
  # ? Get sequence
2473
  #--------------------------------------------------------------------------   
2474
  def get_revive_sequence
2475
    seq = ''
2476
    equips.each do |i|
2477
      next if !i
2478
      seq += i.get_revive_sequence
2479
    end  
2480
    return seq != '' ? seq : actor.get_revive_sequence
2481
  end  
2482
  
2483
  #--------------------------------------------------------------------------
2484
  # ? Get sequence
2485
  #--------------------------------------------------------------------------   
2486
  def get_victory_sequence
2487
    seq = ''
2488
    equips.each do |i|
2489
      next if !i
2490
      seq += i.get_victory_sequence
2491
    end  
2492
    return seq != '' ? seq : actor.get_victory_sequence
2493
  end
2494
  
2495
  #--------------------------------------------------------------------------
2496
  # ? Get sequence
2497
  #--------------------------------------------------------------------------   
2498
  def get_substitute_sequence
2499
    seq = ''
2500
    equips.each do |i|
2501
      next if !i
2502
      seq += i.get_substitute_sequence
2503
    end  
2504
    return seq != '' ? seq : actor.get_substitute_sequence
2505
  end
2506
  
2507
  #--------------------------------------------------------------------------
2508
  # ? Get sequence
2509
  #--------------------------------------------------------------------------   
2510
  def get_reflect_sequence
2511
    seq = ''
2512
    equips.each do |i|
2513
      next if !i
2514
      seq += i.get_reflect_sequence
2515
    end  
2516
    return seq != '' ? seq : actor.get_reflect_sequence
2517
  end  
2518
  
2519
  #--------------------------------------------------------------------------
2520
  # ? Get sequence
2521
  #-------------------------------------------------------------------------- 
2522
  def get_item_use_sequence
2523
    seq = ''
2524
    equips.each do |i|
2525
      next if !i
2526
      seq += i.get_item_use_sequence
2527
    end  
2528
    return seq != '' ? seq : actor.get_item_use_sequence
2529
  end  
2530
  
2531
  #--------------------------------------------------------------------------
2532
  # ? Get sequence
2533
  #-------------------------------------------------------------------------- 
2534
  def get_skill_use_sequence
2535
    seq = ''
2536
    equips.each do |i|
2537
      next if !i
2538
      seq += i.get_skill_use_sequence
2539
    end  
2540
    return seq != '' ? seq : actor.get_skill_use_sequence
2541
  end    
2542
  
2543
  #--------------------------------------------------------------------------
2544
  # ? Get sequence
2545
  #-------------------------------------------------------------------------- 
2546
  def get_stand_sequence
2547
    seq = ''
2548
    equips.each do |i|
2549
      next if !i
2550
      seq += i.get_stand_sequence if seq == ''
2551
    end  
2552
    states.each do |i|
2553
      next if !i
2554
      seq += i.get_stand_sequence if seq == ''
2555
    end      
2556
    return seq != '' ? seq : actor.get_stand_sequence
2557
  end
2558
2559
  #--------------------------------------------------------------------------
2560
  # ? Get sequence
2561
  #-------------------------------------------------------------------------- 
2562
  def get_evade_sequence
2563
    seq = ''
2564
    equips.each do |i|
2565
      next if !i
2566
      seq += i.get_evade_sequence
2567
    end  
2568
    return seq != '' ? seq : actor.get_evade_sequence
2569
  end    
2570
  
2571
  #--------------------------------------------------------------------------
2572
  # ? Get sequence
2573
  #-------------------------------------------------------------------------- 
2574
  def get_miss_sequence
2575
    seq = ''
2576
    equips.each do |i|
2577
      next if !i
2578
      seq += i.get_miss_sequence if seq == ''
2579
    end  
2580
    return seq != '' ? seq : actor.get_miss_sequence
2581
  end       
2582
  
2583
  #--------------------------------------------------------------------------
2584
  # ? Get sequence
2585
  #-------------------------------------------------------------------------- 
2586
  def get_return_sequence
2587
    seq = ''
2588
    equips.each do |i|
2589
      next if !i
2590
      seq += i.get_return_sequence if seq == ''
2591
    end  
2592
    states.each do |i|
2593
      next if !i
2594
      seq += i.get_return_sequence if seq == ''
2595
    end  
2596
    return seq != '' ? seq : actor.get_return_sequence
2597
  end   
2598
  
2599
  #---------------------------------------------------------------------------
2600
  # Gets the sequence used when actor is processing an input
2601
  #---------------------------------------------------------------------------     
2602
  def get_action_selection_sequence  
2603
    seq = ''
2604
    equips.each do |i|
2605
      next if !i
2606
      seq += i.get_action_selection_sequence  if seq == ''
2607
    end  
2608
    states.each do |i|
2609
      next if !i
2610
      seq += i.get_action_selection_sequence  if seq == ''
2611
    end  
2612
    return seq != '' ? seq : actor.get_action_selection_sequence   
2613
  end
2614
  
2615
  #-----------------------------------------------------------------------------
2616
  # Gets the real presentation action according to situation
2617
  #-----------------------------------------------------------------------------  
2618
  def get_real_presentation_action
2619
    return get_dead_sequence if dead?
2620
    BattleManager.surprise? ? get_surprised_sequence : (BattleManager.preemptive? ? get_preemptive_sequence : get_presentation_sequence )
2621
  end  
2622
  
2623
  #-----------------------------------------------------------------------------
2624
  # Performs collapse effect
2625
  #-----------------------------------------------------------------------------  
2626
  def perform_collapse_effect
2627
    case collapse_type
2628
    when 0
2629
      @sprite_effect_type = :collapse
2630
      Sound.play_enemy_collapse
2631
    when 1
2632
      @sprite_effect_type = :boss_collapse
2633
      Sound.play_boss_collapse1
2634
    when 2
2635
      @sprite_effect_type = :instant_collapse
2636
    end
2637
  end  
2638
  
2639
  #-----------------------------------------------------------------------------
2640
  # Has die sequence
2641
  #-----------------------------------------------------------------------------  
2642
  def die_sequence?
2643
    return actor.note[/<die sequence on>/mi] ? true : false
2644
  end
2645
  
2646
  #--------------------------------------------------------------------------
2647
  # ? Get the attack skill id
2648
  #--------------------------------------------------------------------------
2649
  def attack_skill_id
2650
    id = actor.get_atk_skill_id
2651
    wpns = weapons.compact
2652
    if wpns.size > 0
2653
      w = wpns[rand(wpns.size)]   
2654
      id2 = w.get_atk_skill_id
2655
      id  = id2 if id2
2656
    end  
2657
    return id ? id : super
2658
  end
2659
  #--------------------------------------------------------------------------
2660
  # ? Get the guard skill id
2661
  #--------------------------------------------------------------------------
2662
  def guard_skill_id
2663
    id = actor.get_guard_skill_id
2664
    armrs = armors.compact
2665
    if armrs.size > 0
2666
      a = armrs[rand(armrs.size)]   
2667
      id2 = a.get_guard_skill_id
2668
      id  = id2 if id2
2669
    end  
2670
    return id ? id : super
2671
  end    
2672
  
2673
  #-----------------------------------------------------------------------------
2674
  # Get friend unit
2675
  #-----------------------------------------------------------------------------
2676
  def friend_unit
2677
    return $game_party
2678
  end
2679
  
2680
  #-----------------------------------------------------------------------------
2681
  # Get enemy unit
2682
  #-----------------------------------------------------------------------------  
2683
  def enemy_unit
2684
    return $game_troop
2685
  end   
2686
  
2687
  #-----------------------------------------------------------------------------
2688
  # Get default battler index
2689
  #-----------------------------------------------------------------------------  
2690
  def default_battler_index
2691
    a = actor.get_default_battler_index
2692
    return a ? a : BattleConfig::DefaultActorIndex
2693
  end 
2694
2695
  #-----------------------------------------------------------------------------
2696
  # Get attack animation 1
2697
  #-----------------------------------------------------------------------------  
2698
  def atk_animation_id1
2699
    if dual_wield?
2700
      return weapons[0].animation_id if weapons[0]
2701
      return weapons[1] ? 0 : @default_atk_animation_id1
2702
    else
2703
      return weapons[0] ? weapons[0].animation_id : 1
2704
    end
2705
  end
2706
2707
  #-----------------------------------------------------------------------------
2708
  # Get attack animation 2
2709
  #-----------------------------------------------------------------------------   
2710
  def atk_animation_id2
2711
    if dual_wield?
2712
      return weapons[1] ? weapons[1].animation_id : @default_atk_animation_id2
2713
    else
2714
      return 0
2715
    end
2716
  end  
2717
  
2718
  #-----------------------------------------------------------------------------
2719
  # Get counter attack skill id
2720
  #-----------------------------------------------------------------------------   
2721
  def counter_skill_id
2722
    id = @counter_skill_id
2723
    equips.each do |i|
2724
      next if !i
2725
      id = i.note[/<counter skill id:(.*?)>/im] ? Kernel.eval($1) : id
2726
    end      
2727
    return id
2728
  end   
2729
  
2730
end
2731
2732
#==============================================================================
2733
# ¦ Game_Picture
2734
#------------------------------------------------------------------------------
2735
#  ??????????????????? Game_Pictures ??????????
2736
# ??????????????????????????
2737
#==============================================================================
2738
2739
class Game_Picture
2740
  
2741
  #-----------------------------------------------------------------------------
2742
  # Class atributes
2743
  #----------------------------------------------------------------------------- 
2744
  attr_accessor :animation_id
2745
  attr_accessor :animation_flip
2746
  
2747
  #-----------------------------------------------------------------------------
2748
  # Alias methods
2749
  #-----------------------------------------------------------------------------  
2750
  alias rbs_game_picture_init_basic init_basic
2751
  
2752
  #-----------------------------------------------------------------------------
2753
  # Start basic information
2754
  #-----------------------------------------------------------------------------   
2755
  def init_basic
2756
    @animation_id = 0
2757
    @animation_flip = false    
2758
    rbs_game_picture_init_basic
2759
  end
2760
  
2761
  #-----------------------------------------------------------------------------
2762
  #  Move ex
2763
  #-----------------------------------------------------------------------------   
2764
  def move_ex(x, y, duration)
2765
    @target_x = x.to_f
2766
    @target_y = y.to_f
2767
    @duration = duration    
2768
  end
2769
  
2770
  #-----------------------------------------------------------------------------
2771
  # Set zoom
2772
  #-----------------------------------------------------------------------------   
2773
  def set_zoom(zoom_x, zoom_y, duration)
2774
    @target_zoom_x = zoom_x.to_f
2775
    @target_zoom_y = zoom_y.to_f
2776
    @duration = duration      
2777
  end
2778
  
2779
  #-----------------------------------------------------------------------------
2780
  # Set opacity
2781
  #-----------------------------------------------------------------------------   
2782
  def set_opacity(opacity, duration)
2783
    @target_opacity = opacity.to_f
2784
    @duration = duration      
2785
  end  
2786
  
2787
  #-----------------------------------------------------------------------------
2788
  # Set animation
2789
  #-----------------------------------------------------------------------------   
2790
  def set_animation(animation_id, flip=false)
2791
    @animation_id = animation_id
2792
    @animation_flip = flip
2793
  end
2794
  
2795
end
2796
2797
#===============================================================================
2798
# END GAME OBJECTS SECTION
2799
#===============================================================================
2800
2801
#===============================================================================
2802
# BEGIN WINDOW SECTION
2803
#===============================================================================
2804
2805
if !$imported["YEA-BattleEngine"] # If you use YEA please configure it from YEA.
2806
2807
2808
2809
end # if $imported["YEA-BattleEngine"]
2810
2811
#==============================================================================
2812
# ¦ Window_BattleItem
2813
#==============================================================================
2814
class Window_BattleItem < Window_ItemList
2815
  
2816
  #--------------------------------------------------------------------------
2817
  # ? Object creation
2818
  #--------------------------------------------------------------------------
2819
  def initialize(help_window, info_viewport)
2820
    y = Graphics.height - window_height
2821
    super(0, y, window_width, window_height)
2822
    self.visible = false
2823
    @help_window = help_window
2824
    @info_viewport = info_viewport
2825
  end
2826
  
2827
  #--------------------------------------------------------------------------
2828
  # ? Get window width
2829
  #--------------------------------------------------------------------------
2830
  def window_width
2831
    Graphics.width
2832
  end
2833
  
2834
  #--------------------------------------------------------------------------
2835
  # ? Get window height
2836
  #--------------------------------------------------------------------------
2837
  def window_height
2838
    fitting_height(visible_line_number)
2839
  end
2840
2841
  #--------------------------------------------------------------------------
2842
  # ? Get visible line muber
2843
  #--------------------------------------------------------------------------  
2844
  def visible_line_number
2845
    return 4
2846
  end  
2847
  
2848
  
2849
end 
2850
2851
#==============================================================================
2852
# ¦ Window_BattleSkill
2853
#------------------------------------------------------------------------------
2854
#  ???????????????????????????
2855
#==============================================================================
2856
2857
class Window_BattleSkill < Window_SkillList
2858
  
2859
  #--------------------------------------------------------------------------
2860
  # ? Object Creation
2861
  #--------------------------------------------------------------------------
2862
  def initialize(help_window, info_viewport)
2863
    y = Graphics.height - window_height
2864
    super(0, y, window_width, window_height)
2865
    self.visible = false
2866
    @help_window = help_window
2867
    @info_viewport = info_viewport
2868
  end
2869
  #--------------------------------------------------------------------------
2870
  # ? Gets window width
2871
  #--------------------------------------------------------------------------
2872
  def window_width
2873
    Graphics.width
2874
  end
2875
  #--------------------------------------------------------------------------
2876
  # ? Gets window height
2877
  #--------------------------------------------------------------------------
2878
  def window_height
2879
    fitting_height(visible_line_number)
2880
  end
2881
  
2882
  #--------------------------------------------------------------------------
2883
  # ? Get visible line muber
2884
  #--------------------------------------------------------------------------   
2885
  def visible_line_number
2886
    return 4
2887
  end  
2888
2889
end
2890
2891
#===============================================================================
2892
# END WINDOW SECTION
2893
#===============================================================================
2894
2895
#===============================================================================
2896
# BEGIN SCENE SECTION
2897
#===============================================================================
2898
2899
#==============================================================================
2900
# ¦ Scene_Battle
2901
#==============================================================================
2902
class Scene_Battle < Scene_Base
2903
  #--------------------------------------------------------------------------
2904
  # ? Alias methods
2905
  #-------------------------------------------------------------------------- 
2906
  alias rbs_scene_battle_start start
2907
  alias rbs_scene_battle_post_start post_start
2908
  alias rbs_scene_battle_battle_start battle_start
2909
  alias rbs_scene_battle_use_item use_item
2910
  alias rbs_scene_battle_update_basic update_basic
2911
  alias rbs_scene_battle_start_actor_command_selection start_actor_command_selection
2912
  alias rbs_scene_battle_next_command next_command
2913
  alias rbs_scene_battle_prior_command prior_command
2914
  
2915
  #--------------------------------------------------------------------------
2916
  # ? Start scene
2917
  #-------------------------------------------------------------------------- 
2918
  def start
2919
    BattleCamera.start
2920
    rbs_scene_battle_start
2921
    BattleInterpreter.start(@spriteset)
2922
    setup_battle_commands 
2923
  end
2924
  
2925
  #--------------------------------------------------------------------------
2926
  # ? Post star scene
2927
  #--------------------------------------------------------------------------   
2928
  def post_start
2929
    rbs_scene_battle_post_start
2930
    show_presentation_animation
2931
  end
2932
  
2933
  #--------------------------------------------------------------------------
2934
  # ? Start battle
2935
  #--------------------------------------------------------------------------   
2936
  def battle_start    
2937
    rbs_scene_battle_battle_start
2938
  end
2939
    
2940
  #--------------------------------------------------------------------------
2941
  # ? Get next command
2942
  #--------------------------------------------------------------------------   
2943
  def next_command
2944
    if BattleManager.actor
2945
      actor = BattleManager.actor
2946
      BattleInterpreter.add_looping_action(actor, actor.get_stand_sequence) 
2947
      BattleInterpreter.add_action(actor, [actor], actor.get_turn_end_sequence, $data_skills[1])
2948
      wait_for_battle_interpreter       
2949
    end  
2950
    rbs_scene_battle_next_command  
2951
  end
2952
  
2953
  #--------------------------------------------------------------------------
2954
  # ? Get Prior command
2955
  #--------------------------------------------------------------------------   
2956
  def prior_command
2957
    if BattleManager.actor
2958
      actor = BattleManager.actor
2959
      BattleInterpreter.add_looping_action(actor, actor.get_stand_sequence)    
2960
      BattleInterpreter.add_action(actor, [actor], actor.get_turn_end_sequence, $data_skills[1])
2961
      wait_for_battle_interpreter       
2962
    end  
2963
    rbs_scene_battle_prior_command  
2964
  end  
2965
  
2966
  #--------------------------------------------------------------------------
2967
  # ? Show presentation animation
2968
  #--------------------------------------------------------------------------   
2969
  def show_presentation_animation
2970
    @spriteset.update
2971
    act = @party_command_window.active
2972
    @party_command_window.deactivate
2973
    @party_command_window.hide
2974
    for member in $game_party.members+$game_troop.members
2975
      sequence = member.get_real_presentation_action
2976
      BattleInterpreter.add_action(member, [member], sequence, $data_skills[1])
2977
    end  
2978
    wait_for_battle_interpreter
2979
    wait(20)
2980
    @spriteset.make_return_sequence
2981
    wait_for_battle_interpreter
2982
    if $imported["YEA-BattleEngine"]
2983
      @party_command_window.show
2984
      @party_command_window.active = act
2985
    else  
2986
      @party_command_window.activate
2987
      @party_command_window.show
2988
    end  
2989
  end
2990
  
2991
  #--------------------------------------------------------------------------
2992
  # ? Start actor command selection
2993
  #--------------------------------------------------------------------------   
2994
  def start_actor_command_selection
2995
    if BattleManager.actor
2996
      actor = BattleManager.actor
2997
      BattleInterpreter.add_looping_action(actor, actor.get_action_selection_sequence)  
2998
      BattleInterpreter.add_action(actor, [actor], actor.get_turn_start_sequence, $data_skills[1])
2999
      wait_for_battle_interpreter       
3000
    end     
3001
    rbs_scene_battle_start_actor_command_selection
3002
  end
3003
3004
  #--------------------------------------------------------------------------
3005
  # ? Show attack animation
3006
  #--------------------------------------------------------------------------    
3007
  def show_attack_animation(targets)
3008
    show_normal_animation(targets, @subject.atk_animation_id1, false)
3009
    wait_for_animation
3010
    show_normal_animation(targets, @subject.atk_animation_id2, true)
3011
  end  
3012
3013
  #--------------------------------------------------------------------------
3014
  # ? Use item
3015
  #--------------------------------------------------------------------------
3016
  def use_item
3017
    setup_dead_battlers
3018
    item = @subject.current_action.item
3019
    sequence = get_sequence(@subject, item)
3020
    @log_window.display_use_item(@subject, item)
3021
    @subject.use_item(item)    
3022
    if $imported["YEA-LunaticObjects"]
3023
      lunatic_object_effect(:before, item, @subject, @subject)
3024
    end    
3025
    if sequence == ''
3026
      refresh_status
3027
      targets = @subject.current_action.make_targets.compact
3028
      show_animation(targets, item.animation_id)
3029
      targets.each {|target| item.repeats.times { invoke_item(target, item) } }
3030
    else
3031
      targets = @subject.current_action.make_targets.compact
3032
      if $imported["YEA-TargetManager"]
3033
        if item.for_random?
3034
          targets = targets.collect do |target|
3035
            alive_random_target(target, item)
3036
          end  
3037
        end
3038
      end
3039
      process_casting_animation if $imported["YEA-CastAnimations"]
3040
      BattleInterpreter.add_action(@subject, targets, sequence, item)
3041
      wait_for_battle_interpreter
3042
    end   
3043
    if $imported["YEA-LunaticObjects"]
3044
      lunatic_object_effect(:after, item, @subject, @subject)
3045
    end     
3046
    finish_item_use
3047
  end
3048
  
3049
  def setup_dead_battlers
3050
    @dead_battlers = []
3051
    for battler in $game_troop.dead_members+$game_party.dead_members
3052
      @dead_battlers.push(battler) if battler.dead?
3053
    end      
3054
  end
3055
  
3056
  def finish_item_use
3057
    @spriteset.make_return_sequence
3058
    wait_for_battle_interpreter
3059
    for battler in $game_troop.members+$game_party.members
3060
      if battler.dead? && !@dead_battlers.include?(battler)
3061
        @dead_battlers.delete(battler)
3062
        if battler.die_sequence? 
3063
          sequence = battler.get_die_sequence 
3064
          BattleInterpreter.add_action(battler, [battler], sequence, nil, false) 
3065
        else
3066
          battler.perform_collapse_effect
3067
        end  
3068
      elsif battler.alive? &&  @dead_battlers.include?(battler)
3069
        sequence = battler.get_revive_sequence
3070
        BattleInterpreter.add_action(battler, [battler], sequence, nil, false)
3071
      end        
3072
    end 
3073
    wait_for_battle_interpreter    
3074
  end
3075
  
3076
  #--------------------------------------------------------------------------
3077
  # ? Gets the sequence for an item
3078
  #--------------------------------------------------------------------------   
3079
  def get_sequence(subject, item)
3080
    sequence = item.get_attack_sequence
3081
    if item.is_a?(RPG::Skill) and item.id == subject.attack_skill_id
3082
      seq = subject.get_attack_sequence
3083
      if seq != ''
3084
        sequence = seq
3085
      end 
3086
    elsif item.is_a?(RPG::Skill) and item.id == subject.guard_skill_id
3087
      seq = subject.get_guard_sequence
3088
      if seq != ''
3089
        sequence = seq
3090
      end
3091
    end  
3092
    if sequence == ''  
3093
      if item.is_a?(RPG::Skill)
3094
        seq = subject.get_skill_use_sequence
3095
        if seq != ''
3096
          sequence = seq
3097
        end        
3098
      elsif item.is_a?(RPG::Item)
3099
        seq = subject.get_item_use_sequence
3100
        if seq != ''
3101
          sequence = seq
3102
        end
3103
      end
3104
    end    
3105
    return sequence
3106
  end
3107
  
3108
  #--------------------------------------------------------------------------
3109
  # ? Wait for battle interpreter
3110
  #--------------------------------------------------------------------------    
3111
  def wait_for_battle_interpreter
3112
    update_for_wait while BattleInterpreter.running?
3113
    wait_for_animation
3114
  end
3115
  
3116
  #--------------------------------------------------------------------------
3117
  # ? Basic update
3118
  #--------------------------------------------------------------------------    
3119
  def update_basic
3120
    rbs_scene_battle_update_basic
3121
    BattleCamera.update
3122
    BattleInterpreter.update
3123
  end
3124
 
3125
  #--------------------------------------------------------------------------
3126
  # ? Show animation ex
3127
  #--------------------------------------------------------------------------  
3128
  def show_animation_ex(targets, animation_id, mirror = false)
3129
    return if !targets || targets.empty?
3130
    animation = $data_animations[animation_id]
3131
    if animation
3132
      if animation.to_screen?
3133
        target = targets[0]
3134
        target.start_animation(animation, mirror)      
3135
      else  
3136
        targets.each do |target|
3137
          target.start_animation(animation, mirror)     
3138
        end
3139
      end  
3140
    end
3141
  end  
3142
  
3143
  #--------------------------------------------------------------------------
3144
  # ? Apply item efects
3145
  #--------------------------------------------------------------------------
3146
  def apply_item_effects_ex(user, target, item)
3147
    if $imported["YEA-LunaticObjects"]
3148
      lunatic_object_effect(:prepare, item, user, target)
3149
    end    
3150
    target.item_apply(user, item)
3151
    if $imported["YEA-LunaticObjects"]
3152
      lunatic_object_effect(:during, item, user, target)
3153
    end     
3154
    refresh_status
3155
    @log_window.display_action_results(target, item)
3156
  end
3157
  
3158
  #--------------------------------------------------------------------------
3159
  # ? Invoke counter attack
3160
  #--------------------------------------------------------------------------
3161
  def invoke_counter_attack_ex(user, target, item)
3162
    @log_window.display_counter(target, item)
3163
    attack_skill = $data_skills[target.counter_skill_id]
3164
    sequence = attack_skill.get_counter_sequence 
3165
    sequence = target.get_counter_sequence if sequence == ''
3166
    BattleInterpreter.add_action(target, [user], sequence, attack_skill, false)
3167
    @log_window.display_action_results(target, attack_skill)
3168
  end
3169
  
3170
  #--------------------------------------------------------------------------
3171
  # ? Invoke magic reflection
3172
  #--------------------------------------------------------------------------
3173
  def invoke_magic_reflection_ex(action, target)
3174
    item = action.item
3175
    user = action.user
3176
    @log_window.display_reflection(target, item)
3177
    action.targets.delete(target)
3178
    action.targets.push(user)
3179
    sequence = target.get_reflect_sequence
3180
    BattleInterpreter.add_action(target, [user], sequence, item, false)
3181
  end
3182
  
3183
  #--------------------------------------------------------------------------
3184
  # ? Apply substitute
3185
  #--------------------------------------------------------------------------
3186
  def apply_substitute_ex(action, target, item)
3187
    if check_substitute(target, item)
3188
      substitute = target.friends_unit.substitute_battler
3189
      if substitute && target != substitute && !@substitutes.include?(substitute)
3190
        @log_window.display_substitute(substitute, target)
3191
        sequence = substitute.get_substitute_sequence
3192
        action.targets.delete(target)
3193
        action.targets.push(substitute)
3194
        @substitutes.push(substitute)
3195
        BattleInterpreter.add_action(substitute, [target], sequence, item)
3196
      end
3197
    end
3198
  end  
3199
  
3200
  #--------------------------------------------------------------------------
3201
  # ? Get battler sprites
3202
  #--------------------------------------------------------------------------    
3203
  def get_sprites(battlers)
3204
    battlers.collect do |battler|
3205
      @spriteset.battler_sprite(battler)
3206
    end
3207
  end 
3208
  
3209
end  
3210
3211
#===============================================================================
3212
# END SCENE SECTION
3213
#===============================================================================
3214
3215
#===============================================================================
3216
# START YEA COMPATIBILITY
3217
#===============================================================================
3218
3219
if $imported["YEA-BattleEngine"]
3220
  
3221
#==============================================================================
3222
# ¦ Sprite_Popup
3223
#==============================================================================
3224
3225
class Scene_Battle < Scene_Base
3226
  attr_accessor :spriteset
3227
end
3228
3229
class Sprite_Popup < Sprite_Base  
3230
  
3231
  attr_accessor :current_x
3232
  attr_accessor :current_y
3233
  
3234
  alias rbs_yea_sprite_popup_create_popup_bitmap create_popup_bitmap  
3235
  
3236
  #--------------------------------------------------------------------------
3237
  # create_popup_bitmap
3238
  #--------------------------------------------------------------------------
3239
  def create_popup_bitmap 
3240
    rbs_yea_sprite_popup_create_popup_bitmap
3241
    @current_x = @battler.sprite.current_x
3242
    @current_y = @battler.sprite.current_y
3243
    @current_x += rand(4) - rand(4) if @battler.sprite.popups.size >= 1
3244
    @current_x -= SceneManager.scene.spriteset.viewport1.ox
3245
    @current_y  = @battler.sprite.current_y - @battler.sprite.oy/2
3246
    @current_y -= @battler.sprite.oy/2 if @battler.actor?
3247
    @current_y -= SceneManager.scene.spriteset.viewport1.oy
3248
    update
3249
  end
3250
  
3251
  #--------------------------------------------------------------------------
3252
  # update
3253
  #--------------------------------------------------------------------------
3254
  def update
3255
    super
3256
    @current_zoom_x = 0 if !@current_zoom_x
3257
    @current_zoom_y = 0 if !@current_zoom_y
3258
    @current_x = self.x if !@current_x
3259
    @current_y = self.y if !@current_y   
3260
    #---
3261
    if @flags.include?("critical") && YEA::BATTLE::FLASH_CRITICAL
3262
      @hue_duration = 2 if @hue_duration == nil || @hue_duration == 0
3263
      @hue_duration -= 1
3264
      self.bitmap.hue_change(15) if @hue_duration <= 0
3265
    end
3266
    #---
3267
    if @zoom_direction == "up"
3268
      @current_zoom_x = [@current_zoom_x + 0.075, @target_zoom].min
3269
      @current_zoom_y = [@current_zoom_y + 0.075, @target_zoom].min
3270
    else
3271
      @current_zoom_x = [@current_zoom_x - 0.075, @target_zoom].max
3272
      @current_zoom_y = [@current_zoom_y - 0.075, @target_zoom].max
3273
    end
3274
    self.zoom_x = BattleCamera.correct_zoom(@current_zoom_x)
3275
    self.zoom_y = BattleCamera.correct_zoom(@current_zoom_y)
3276
    
3277
    self.x = BattleCamera.correct_x(@current_x)
3278
    self.y = BattleCamera.correct_y(@current_y)
3279
    
3280
    #---
3281
    @full -= 1
3282
    return if @full > 0
3283
    @current_y -= 1
3284
    self.opacity -= @fade
3285
    self.y = BattleCamera.correct_y(@current_y)
3286
  end  
3287
  
3288
end  
3289
  
3290
class Sprite_Battler < Sprite_Base
3291
3292
  alias rbs_yea_create_new_popup create_new_popup
3293
  
3294
  #--------------------------------------------------------------------------
3295
  # new method: create_new_popup
3296
  #--------------------------------------------------------------------------
3297
  def create_new_popup(value, rules, flags)
3298
    return if @battler == nil
3299
    return if flags & @popup_flags != []
3300
    for popup in @popups
3301
      popup.current_y -= 24
3302
    end
3303
    rbs_yea_create_new_popup(value, rules, flags)
3304
  end
3305
  
3306
end
3307
3308
end
3309
3310
#===============================================================================
3311
# END YEA COMPATIBILITY
3312
#===============================================================================
3313
3314
#===============================================================================
3315
# END OF FILE!!!
3316
#===============================================================================