Advertisement
Guest User

SaS, Edited by Kyoui

a guest
Feb 13th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 59.44 KB | None | 0 0
  1. #-------------------------------------------------------------------------------
  2. # * [ACE] Sapphire Action System IV
  3. #-------------------------------------------------------------------------------
  4. # * By Khas Arcthunder - arcthunder.site40.net
  5. # * Version: 4.4 EN
  6. # * Released on: 11/07/2012
  7. #
  8. #-------------------------------------------------------------------------------
  9. # * Terms of Use
  10. #-------------------------------------------------------------------------------
  11. # Terms of Use – June 22, 2012
  12. # 1. You must give credit to Khas;
  13. # 2. All Khas scripts are licensed under a Creative Commons license
  14. # 3. All Khas scripts are free for non-commercial projects. If you need some
  15. #    script for your commercial project, check bellow these terms which
  16. #    scripts are free and which scripts are paid for commercial use;
  17. # 4. All Khas scripts are for personal use, you can use or edit for your own
  18. #    project, but you are not allowed to post any modified version;
  19. # 5. You can’t give credit to yourself for posting any Khas script;
  20. # 6. If you want to share a Khas script, don’t post the script or the direct
  21. #    download link, please redirect the user to http://arcthunder.site40.net/
  22. # 7. You are not allowed to convert any of Khas scripts to another engine,
  23. #    such converting a RGSS3 script to RGSS2 or something of that nature.
  24. # 8. Its your obligation (user) to check these terms on the date you release
  25. #    your game. Your project must follow them correctly.
  26. #
  27. # Free commercial use scripts:
  28. # - Sapphire Action System IV (RPG Maker VX Ace)
  29. # - Awesome Light Effects (RPG Maker VX Ace)
  30. # - Pixel movement (RPG Maker VX e RPG Maker VX Ace)
  31. # - Sprite & Window Smooth Sliding (RPG Maker VX e RPG Maker VX Ace)
  32. # - Pathfinder (RPG Maker VX Ace)
  33. #
  34. # Check all the terms at http://arcthunder.site40.net/terms/
  35. #
  36. #-------------------------------------------------------------------------------
  37. # * Features
  38. #-------------------------------------------------------------------------------
  39. # The Sapphire Action System IV includes the following features:
  40. # - Pixel Movement
  41. # - Khas Particle Engine powered
  42. # - Realistic collisions
  43. # - Awesome jogability
  44. # - High customization level
  45. # - Weapon Icon
  46. # - Easy to use
  47. # - Skill support
  48. # - Lag free
  49. # - Damage Sprite system
  50. # - Optimized HUD
  51. # - Voice support
  52. # - And more...
  53. #
  54. #-------------------------------------------------------------------------------
  55. # * Instructions
  56. #-------------------------------------------------------------------------------
  57. # All the instructions are on SAS IV guide. Please read them carefully.
  58. #
  59. #-------------------------------------------------------------------------------
  60. # * How to use
  61. #-------------------------------------------------------------------------------
  62. # 1. Physics System
  63. # In order to run this script with the best performance, there's a system
  64. # called "Physics". This system will load each map between the transitions,
  65. # so you may experience little loadings. The Khas Pixel Movement is not
  66. # recommended for huge maps.
  67. #
  68. # 2. Event Commands (place a comment)
  69. # There are two special commands for events, you may add a comment with
  70. # the following sintax:
  71. #
  72. # a. [collision_x A]
  73. # This command sets the x collision to A (A must be an integer)
  74. #
  75. # b. [collision_y B]
  76. # This command sets the y collision to B (B must be an integer)
  77. #
  78. # Please check the demo to understand how the collision system works!
  79. #
  80. # 3. Event Commands (call script)
  81. # You can call the following commands for the player or the events
  82. #
  83. # character.px
  84. # This command returns the pixel coordinate X (4 px = 1 tile)
  85. #
  86. # character.py
  87. # This command returns the pixel coordinate Y (4 py = 1 tile)
  88. #
  89. # character.pixel_passable?(px,py,d)
  90. # This command checks the pixel passability from (px, py) to the direction d.
  91. #
  92. # 4. Map Commands
  93. # You can call a special command to update the passability of the current
  94. # map. You MUST run this command if the option "Auto_Refresh_Tile_Events"
  95. # is set to false.
  96. #
  97. # "But when do I need to use this command?"
  98. # Well, if you change a event graphic to a tileset graphic, or if you remove
  99. # this event graphic, then your map need to be updated!
  100. #
  101. # $game_map.refresh_table(start_x,start_y,end_x,end_y)
  102. #
  103. # Where:
  104. # start_x => Initial X
  105. # start_y => Initial Y
  106. # end_x => End X
  107. # end_y => End Y
  108. #
  109. #-------------------------------------------------------------------------------
  110. # * Warning!
  111. #-------------------------------------------------------------------------------
  112. # Check your tileset directions. If any direction is set as unpassable, the
  113. # system will set the whole tile as unpassable. Setup your tilesets before
  114. # using them!
  115. #
  116. #-------------------------------------------------------------------------------
  117. # * Setup Part (Sapphire Engine)
  118. #-------------------------------------------------------------------------------
  119. module Sapphire_Core
  120.  
  121.   # Enable voice?
  122.   Enable_Voice = false
  123.  
  124.   # Voice files (separated by commas)
  125.   Voice_Files = []
  126.  
  127.   # Voice volume
  128.   Voice_Volume = 80
  129.  
  130.   # Disarmed animation
  131.   Default_Animation = 1
  132.  
  133.   # Default recover time
  134.   Default_Recover = 60
  135.  
  136.   # Switch that will be activated when player dies
  137.   Kill_Switch = 3
  138.  
  139.   # Random factor
  140.   Damage_Random = 0.1
  141.  
  142.   # Enable weapon icon drawing?
  143.   Enable_Weapon_Graphics = true
  144.  
  145.   # Default skill speed
  146.   Default_Skill_Speed = 6
  147.  
  148.   # Default skill recover time
  149.   Default_Skill_Recover = 30
  150.  
  151.   # Default skill spread
  152.   Default_Skill_Spread = 0
  153.  
  154.   # Skill volume
  155.   Skill_Volume = 60
  156.  
  157.   # Default skill blend type
  158.   Default_Particle_Blend = 1
  159.  
  160.   # Default enemy view range, in virtual pixels (1 tile = 4 virtual pixels)
  161.   Enemy_View = 20
  162.  
  163.   # Enemies' default nature
  164.   # 0 -> Only attack
  165.   # 1 -> Attack and cast skills
  166.   # 2 -> Only cast skills
  167.   Enemy_Nature = 1
  168.  
  169.   # Default enemies' recover time
  170.   Enemy_Recover = 60
  171.  
  172.   # Enable animation when player is seen
  173.   Enemy_Exclamation = false
  174.  
  175.   # Minimal distance to use skills, in virtual pixels (1 tile = 4 virtual pixels)
  176.   Enemy_Skill_Distance = 6
  177.  
  178.   # System constant - DO NOT CHANGE!
  179.   Local_Switch = ["A","B","C","D"]
  180.  
  181.   # System constant - DO NOT CHANGE!
  182.   Weapon_Range = {2=>[0,2],4=>[-2,0],6=>[2,0],8=>[0,-2]}
  183. end
  184. #-------------------------------------------------------------------------------
  185. # * Setup Part (Pixel Movement)
  186. #-------------------------------------------------------------------------------
  187. module Pixel_Core
  188.  
  189.   # Auto Update events with tileset graphics?
  190.   Auto_Refresh_Tile_Events = true
  191.  
  192.   # Auto Update range
  193.   TileEvent_Range = 3
  194.  
  195.   # Auto Multiply event commands?
  196.   # (this option will multiply the event commands by 4 if set to true)
  197.   Multiply_Commands = false
  198.  
  199.   # Commands to multiply (ID)
  200.   Commands = [1,2,3,4,5,6,7,8,9,10,11,12,13]
  201.  
  202. #-------------------------------------------------------------------------------
  203. # * Constants - Do not modify!
  204. #-------------------------------------------------------------------------------
  205.   Pixel = 4
  206.   Tile = 0.25
  207.   Default_Collision_X = 3
  208.   Default_Collision_Y = 3
  209.   Body_Axis = [0.25,0.25,0.5,0.75]
  210.   Bush_Axis = [0.5,0.75]
  211.   Counter_Axis = [0.25,0.25,0.25,0.25]
  212.   Ladder_Axis = [0.25,0.25]
  213.   Pixel_Range = {2=>[0,0.25],4=>[-0.25,0],6=>[0.25,0],8=>[0,-0.25]}
  214.   Tile_Range = {2=>[0,1],4=>[-1,0],6=>[1,0],8=>[0,-1]}
  215.   Water_Range = {2=>[0,3],4=>[-3,0],6=>[3,0],8=>[0,-3]}
  216.   Trigger_Range = {2=>[0,2],4=>[-2,0],6=>[2,0],8=>[0,-2]}
  217.   Counter_Range = {2=>[0,3],4=>[-3,0],6=>[3,0],8=>[0,-3]}
  218.   Chase_Axis = {2=>[0,1],4=>[1,0],6=>[1,0],8=>[0,1]}
  219. end
  220. #-------------------------------------------------------------------------------
  221. # * Register
  222. #-------------------------------------------------------------------------------
  223. if $khas_awesome.nil?
  224.   $khas_awesome = []
  225. else
  226.   scripts = []
  227.   $khas_awesome.each { |script| scripts << script[0] }
  228.   if scripts.include?("Pixel Movement")
  229.     error = Sprite.new
  230.     error.bitmap = Bitmap.new(544,416)
  231.     error.bitmap.draw_text(0,208,544,32,"Please remove the script Khas Pixel Movement",1)
  232.     continue = Sprite.new
  233.     continue.bitmap = Bitmap.new(544,416)
  234.     continue.bitmap.font.color = Color.new(0,255,0)
  235.     continue.bitmap.font.size = error.bitmap.font.size - 3
  236.     continue.bitmap.draw_text(0,384,544,32,"Press Enter to exit",1)
  237.     add = Math::PI/80; max = 2*Math::PI; angle = 0
  238.     loop do
  239.       Graphics.update; Input.update
  240.       angle += add; angle %= max
  241.       continue.opacity = 185 + 70* Math.cos(angle)
  242.       break if Input.trigger?(Input::C)
  243.     end
  244.     error.bitmap.dispose; continue.bitmap.dispose
  245.     error.bitmap = nil; continue.bitmap = nil
  246.     error.dispose; continue.dispose
  247.     error = nil; continue = nil
  248.     exit
  249.   end
  250. end
  251.  
  252. $khas_awesome << ["Sapphire Action System",4.4]
  253.  
  254. #-------------------------------------------------------------------------------
  255. # * Sapphire Enemy
  256. #-------------------------------------------------------------------------------
  257.  
  258. class Sapphire_Enemy
  259.   attr_accessor :event
  260.   attr_accessor :id
  261.   attr_accessor :char_file
  262.   attr_accessor :char_index
  263.   attr_accessor :animation
  264.   attr_accessor :skills
  265.   attr_accessor :object
  266.   attr_accessor :view
  267.   attr_accessor :recover
  268.   attr_accessor :step_anime
  269.   attr_accessor :nature
  270.   attr_accessor :auto_attack
  271.   attr_accessor :attack
  272.   attr_accessor :defence
  273.   attr_accessor :exp
  274.   attr_accessor :hp
  275.   attr_accessor :atk_invincible
  276.   attr_accessor :skl_invincible
  277.   attr_accessor :die_switch
  278.   attr_accessor :die_variable
  279.   attr_accessor :die_localsw
  280.   attr_accessor :die_erase
  281.   attr_accessor :magic
  282.   attr_accessor :mdefence
  283.   attr_accessor :static
  284.   def initialize(event,id)
  285.     @event = event
  286.     @id = id
  287.     @game_enemy = Game_Enemy.new(0,@id)
  288.     setup_enemy
  289.     setup_skills
  290.     setup_nature
  291.     @attack = @game_enemy.atk
  292.     @defence = @game_enemy.def
  293.     @magic = @game_enemy.mat
  294.     @mdefence = @game_enemy.mdf
  295.     @exp = @game_enemy.exp
  296.     @hp = @game_enemy.mhp
  297.     @atk_invincible = false
  298.     @skl_invincible = false
  299.     @die_switch = nil
  300.     @die_variable = nil
  301.     @die_localsw = nil
  302.     @die_erase = false
  303.   end
  304.   def setup_nature
  305.     @nature = 0 if @skills.empty?
  306.   end
  307.   def setup_enemy
  308.     @animation = @game_enemy.enemy.animation
  309.     @char_file = @game_enemy.enemy.char_file
  310.     @char_index = @game_enemy.enemy.char_index
  311.     @object = @game_enemy.enemy.object?
  312.     @view = @game_enemy.enemy.view
  313.     @recover = @game_enemy.enemy.recover
  314.     @step_anime = @game_enemy.enemy.step_anime?
  315.     @nature = @game_enemy.enemy.nature
  316.     @auto_attack = @game_enemy.enemy.auto_attack
  317.     @static = @game_enemy.enemy.static
  318.   end
  319.   def setup_skills
  320.     ids = @game_enemy.enemy.skills
  321.     @skills = []
  322.     ids.each { |i|;
  323.     skill = $data_skills[i];
  324.     skills << [skill,skill.particle] unless skill.particle.nil?}
  325.   end
  326. end
  327.  
  328. #-------------------------------------------------------------------------------
  329. # * Sapphire Particle
  330. #-------------------------------------------------------------------------------
  331.  
  332. class Sapphire_Particle < Sprite
  333.   attr_accessor :done
  334.   def initialize(key,char)
  335.     super(nil)
  336.     @key = key
  337.     self.bitmap = Sapphire_Bitcore[@key]
  338.     self.ox = self.bitmap.width/2
  339.     self.oy = self.bitmap.height/2
  340.     self.z = 7
  341.     @projangle = (-char.angleshot)*(180/(Math::PI))
  342.     @add = 0
  343.     @done = false
  344.     @aim = $aim
  345.     @rx = char.real_x
  346.     @ry = char.real_y
  347.     self.blend_type = char.blend
  348.   end
  349.   def update
  350.     self.angle = @projangle
  351.     self.x =  $game_map.adjust_unlx(@rx) * 32 + 16
  352.     self.y = $game_map.adjust_unly(@ry) * 32 + 16
  353.     self.opacity <= 154 ? dispose : self.opacity -= 100
  354.   end
  355.   def release
  356.     return Virtual_Particle.new(self.x,self.y,@rx,@ry,@key,self.z,self.angle,@add,self.blend_type,self.opacity)
  357.   end
  358.   def dispose
  359.     self.bitmap = nil
  360.     super
  361.     @done = true
  362.   end
  363. end
  364.  
  365.  
  366. #-------------------------------------------------------------------------------
  367. # * Sapphire Restored Particle
  368. #-------------------------------------------------------------------------------
  369.  
  370. class Sapphire_Restored_Particle < Sprite
  371.   attr_accessor :done
  372.   def initialize(vp)
  373.     super(nil)
  374.     @key = vp.key
  375.     self.bitmap = Sapphire_Bitcore[@key]
  376.     self.ox = self.bitmap.width/2
  377.     self.oy = self.bitmap.height/2
  378.     self.z = vp.z
  379.     self.angle = vp.angle
  380.     @add = vp.add
  381.     @done = false
  382.     @rx = vp.rx
  383.     @ry = vp.ry
  384.     self.blend_type = vp.blend
  385.     self.opacity = vp.opacity
  386.   end
  387.   def update
  388.     self.x = $game_map.adjust_unlx(@rx) * 32 + 16
  389.     self.y = $game_map.adjust_unly(@ry) * 32 + 16
  390.     self.angle += @add
  391.     self.opacity <= 154 ? dispose : self.opacity -= 100
  392.   end
  393.   def release
  394.     return Virtual_Particle.new(self.x,self.y,@rx,@ry,@key,self.z,self.angle,@add,self.blend_type,self.opacity)
  395.   end
  396.   def dispose
  397.     self.bitmap = nil
  398.     super
  399.     @done = true
  400.   end
  401. end
  402.  
  403. #-------------------------------------------------------------------------------
  404. # * Virtual Particle
  405. #-------------------------------------------------------------------------------
  406.  
  407. class Virtual_Particle
  408.   attr_reader :x
  409.   attr_reader :y
  410.   attr_reader :rx
  411.   attr_reader :ry
  412.   attr_reader :key
  413.   attr_reader :z
  414.   attr_reader :angle
  415.   attr_reader :add
  416.   attr_reader :blend
  417.   attr_reader :opacity
  418.   attr_reader :shot
  419.   def initialize(x,y,rx,ry,key,z,angle,add,blend,opacity,shot)
  420.     @x = x
  421.     @y = y
  422.     @rx = rx
  423.     @ry = ry
  424.     @key = key
  425.     @z = z
  426.     @angle = angle
  427.     @add = add
  428.     @blend = blend
  429.     @opacity = opacity
  430.     @shot = shot
  431.   end
  432. end
  433.  
  434. #-------------------------------------------------------------------------------
  435. # * Sapphire Skill
  436. #-------------------------------------------------------------------------------
  437.  
  438. class Sapphire_Skill
  439.   include Pixel_Core
  440.   attr_accessor :px
  441.   attr_accessor :py
  442.   attr_accessor :cx
  443.   attr_accessor :cy
  444.   attr_reader :x
  445.   attr_reader :y
  446.   attr_reader :real_x
  447.   attr_reader :real_y
  448.   attr_reader :move_speed
  449.   attr_reader :move_frequency
  450.   attr_reader :direction
  451.   attr_reader :priority_type
  452.   attr_reader :skill
  453.   attr_reader :done
  454.   attr_reader :blend
  455.   attr_reader :angleshot
  456.  
  457.   def initialize(char)
  458.     @char = char
  459.     if @char.is_a?(Game_Event)
  460.       skills = char.enemy.skills
  461.       select = skills[rand(skills.size)]
  462.       @skill = select[0]
  463.       @bitmap = select[1]
  464.       @power = @char.enemy.magic
  465.       @cast_by_enemy = true
  466.        @shot = -Math.atan((($game_player.px - @char.px).abs)/(($game_player.py - @char.py).abs+0.000001))* (180 / Math::PI)
  467.  
  468.  
  469.         @shot = 180 - @shot if $game_player.px-@char.px > 0 && $game_player.py-@char.py > 0
  470.         @shot += 180 if $game_player.px-@char.px <= 0 && $game_player.py-@char.py >= 0
  471.         @shot = 360 - @shot if $game_player.px-@char.px < 0 && $game_player.py-@char.py < 0
  472.                
  473.         @shot = -@shot * (Math::PI / 180)-(@skill.spread*(Math::PI)/180) + 2*rand(@skill.spread)*(Math::PI)/180
  474.         $shot = @shot
  475.       else
  476.       @skill = $game_player.current_skill[0]
  477.       @bitmap = $game_player.current_skill[1]
  478.       @power = $game_party.members[0].mat
  479.       @cast_by_enemy = false
  480.       @shot = $aim -(@skill.spread*(Math::PI)/180) + 2*rand(@skill.spread)*(Math::PI)/180
  481.       $shot = @shot
  482.     end
  483.    
  484.     @real_x = @char.x
  485.     @real_y = @char.y
  486.     @x = @char.x.to_f
  487.     @y = @char.y.to_f
  488.     @px = @char.px
  489.     @py = @char.py
  490.     @move_speed = @skill.speed
  491.     @move_frequency = 6
  492.     @direction = @char.direction
  493.     @cx = 3
  494.     @cy = 3
  495.     @done = false
  496.     @last_move = false
  497.     @remaining = 0
  498.     @blend = @skill.blend
  499.     @angleshot = $shot
  500.     @water_remaining = 0
  501.     RPG::SE.new(@skill.cast_se,Sapphire_Core::Skill_Volume).play unless @skill.cast_se.nil?
  502.   end
  503.   def perform_damage(char)
  504.     if @cast_by_enemy
  505.       char.animation_id = @skill.animation_id
  506.       char.set_direction(10-@direction)
  507.  
  508.       damage = @power + @skill.power
  509.       damage += rand(damage*Sapphire_Core::Damage_Random).to_i
  510.       $game_player.skill_damage_hero(damage)
  511.     else
  512.       char.animation_id = @skill.animation_id
  513.       unless char.enemy.object
  514.  
  515.       end
  516.       damage = @power + @skill.power
  517.       damage += rand(damage*Sapphire_Core::Damage_Random).to_i
  518.       char.skill_damage_enemy(damage,true) unless char.enemy.skl_invincible
  519.     end
  520.   end
  521.   def moving?
  522.     @real_x != @x || @real_y != @y
  523.   end
  524.   def distance_per_frame
  525.     2 ** @move_speed / 256.0
  526.   end
  527.   def screen_x
  528.     $game_map.adjust_unlx(@real_x) * 32 + 16
  529.   end
  530.   def screen_y
  531.     $game_map.adjust_unly(@real_y) * 32 + 16
  532.   end
  533.   def update
  534.     cast_particle
  535.     move unless moving?
  536.     return update_move if moving?
  537.   end
  538.   def move
  539.     @last_move ? move_last : move_pixel
  540.   end
  541.   def move_last
  542.     if @remaining > 0
  543.       @px += (Tile_Range[@direction][0] + Math.tan(-@shot)*Tile_Range[@direction][1])
  544.       @py += (Tile_Range[@direction][1] + (Tile_Range[@direction][0]/Math.tan(-@shot)))
  545.       @real_x = @x
  546.       @real_y = @y
  547.       @x += (Pixel_Range[@direction][0] + Math.tan(-@shot)*Pixel_Range[@direction][1])
  548.       @y += (Pixel_Range[@direction][1] + (Pixel_Range[@direction][0]/Math.tan(-@shot)))
  549.       @remaining -= 1
  550.       @shot = @shot
  551.     else
  552.       destroy
  553.     end
  554.   end
  555.   def destroy
  556.     @done = true
  557.   end
  558.   def cast_particle
  559.     $game_map.particles << Sapphire_Particle.new(@bitmap,self)
  560.   end
  561.   def update_move
  562.     @real_x = [@real_x - distance_per_frame, @x].max if @x < @real_x
  563.     @real_x = [@real_x + distance_per_frame, @x].min if @x > @real_x
  564.     @real_y = [@real_y - distance_per_frame, @y].max if @y < @real_y
  565.     @real_y = [@real_y + distance_per_frame, @y].min if @y > @real_y
  566.   end
  567.   def pixel_range?(px,py)
  568.     return (@px - px).abs <= @cx && (@py - py).abs <= @cy
  569.   end
  570.   def pixel_passable?(px,py,d)
  571.     nx = px+Tile_Range[d][0]
  572.     ny = py+Tile_Range[d][1]
  573.     return false unless $game_map.pixel_valid?(nx,ny)
  574.     return false if $game_map.pixel_table[px+Tile_Range[d][0],py+Tile_Range[d][1],1] == 0
  575.     return false if collision?(nx,ny)
  576.     return true
  577.   end
  578.   def collision?(px,py)
  579.     if @cast_by_enemy
  580.       for event in $game_map.events.values
  581.         if (event.px - px).abs < event.cx && (event.py - py).abs < event.cy
  582.           next if event.through || event == @char
  583.           return true if event.priority_type == 1
  584.         end
  585.       end
  586.       return ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  587.     else
  588.       for event in $game_map.events.values
  589.         if (event.px - px).abs < event.cx && (event.py - py).abs < event.cy
  590.           next if event.through
  591.           return true if event.priority_type == 1
  592.         end
  593.       end
  594.       return false
  595.     end
  596.   end
  597.   def move_pixel
  598.     if pixel_passable?(@px,@py,@direction)
  599.      
  600.       @px += (Tile_Range[@direction][0] + Math.tan(-@shot)*Tile_Range[@direction][1])
  601.       @py += (Tile_Range[@direction][1] + (Tile_Range[@direction][0]/Math.tan(-@shot)))
  602.       @real_x = @x
  603.       @real_y = @y
  604.       @x += (Pixel_Range[@direction][0] + Math.tan(-@shot)*Pixel_Range[@direction][1])
  605.       @y += (Pixel_Range[@direction][1] + (Pixel_Range[@direction][0]/Math.tan(-@shot)))
  606.       @shot = @shot
  607.       else
  608.       front_pixel_touch?(@px + Tile_Range[@direction][0],@py + Tile_Range[@direction][1])
  609.       @last_move = true
  610.       @remaining = 1
  611.     end
  612.   end
  613.   def front_pixel_touch?(px,py)
  614.     if @cast_by_enemy
  615.       perform_damage($game_player) if ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  616.     else
  617.       for event in $game_map.enemies
  618.         if (event.px - px).abs < event.cx && (event.py - py).abs < event.cy
  619.           next if event.enemy.static
  620.           perform_damage(event)
  621.         end
  622.       end
  623.     end
  624.   end
  625. end
  626.  
  627. #-------------------------------------------------------------------------------
  628. # * Sapphire HUD
  629. #-------------------------------------------------------------------------------
  630.  
  631. class Sapphire_Hud
  632.   def refresh_bars(arg=nil)
  633.   end
  634.   def refresh_base
  635.   end
  636.   def hide(arg=nil)
  637.   end
  638.   def show(arg=nil)
  639.   end
  640. end
  641.  
  642. #-------------------------------------------------------------------------------
  643. # * RGSS3 Object
  644. #-------------------------------------------------------------------------------
  645.  
  646. class Object
  647.   def check(string)
  648.     self.each_line { |i| return true if i =~ /#{string}/i }
  649.     return false
  650.   end
  651.   def get(string,default=nil)    
  652.     self.each_line { |i| return i.gsub("#{string} = ", "").chomp if i =~ /#{string} = /i }
  653.     return default
  654.   end
  655. end
  656.  
  657. #-------------------------------------------------------------------------------
  658. # * Cache
  659. #-------------------------------------------------------------------------------
  660.  
  661. module Cache
  662.   def self.particle(filename)
  663.     load_bitmap("Graphics/Particles/", filename)
  664.   end
  665. end
  666.  
  667. #-------------------------------------------------------------------------------
  668. # * RPG::Enemy
  669. #-------------------------------------------------------------------------------
  670.  
  671. class RPG::Enemy < RPG::BaseItem
  672.   def skills
  673.     value = self.note.get("Skills","")
  674.     return eval("[#{value}]")
  675.   end
  676.   def object?
  677.     self.note.check("Object")
  678.   end
  679.   def view
  680.     self.note.get("View", Sapphire_Core::Enemy_View).to_i
  681.   end
  682.   def recover
  683.     self.note.get("Recover", Sapphire_Core::Enemy_Recover).to_i
  684.   end
  685.   def step_anime?
  686.     self.note.check("StepAnime")
  687.   end
  688.   def nature
  689.     self.note.get("Nature", Sapphire_Core::Enemy_Nature).to_i
  690.   end
  691.   def char_file
  692.     self.note.get("Char",nil)
  693.   end
  694.   def char_index
  695.     self.note.get("Char_index",0).to_i
  696.   end
  697.   def animation
  698.     self.note.get("Animation",0).to_i
  699.   end
  700.   def auto_attack
  701.     self.note.check("Auto_Attack")
  702.   end
  703.   def static
  704.     self.note.check("Static")
  705.   end
  706. end
  707.  
  708. #-------------------------------------------------------------------------------
  709. # * RPG::Skill
  710. #-------------------------------------------------------------------------------
  711.  
  712. class RPG::Skill < RPG::UsableItem
  713.   attr_reader :recover
  714.   def particle
  715.     self.note.get("Particle", nil)
  716.   end
  717.   def speed
  718.     self.note.get("Speed", Sapphire_Core::Default_Skill_Speed).to_i
  719.   end
  720.   def blend
  721.     self.note.get("Blend", Sapphire_Core::Default_Particle_Blend).to_i
  722.   end
  723.   def set_recover
  724.     @recover = self.note.get("Recover", Sapphire_Core::Default_Skill_Recover).to_i
  725.   end
  726.   def power
  727.     self.note.get("Power", 0).to_i
  728.   end
  729.   def spread
  730.     self.note.get("Spread", Sapphire_Core::Default_Skill_Spread).to_i
  731.   end
  732.   def cast_se
  733.     self.note.get("Sound", nil)
  734.   end
  735. end
  736.  
  737. #-------------------------------------------------------------------------------
  738. # * Scene Map
  739. #-------------------------------------------------------------------------------
  740.  
  741. class Scene_Map < Scene_Base
  742.   attr_accessor :spriteset
  743. end
  744.  
  745. #-------------------------------------------------------------------------------
  746. # * Sprite Base
  747. #-------------------------------------------------------------------------------
  748.  
  749. class Sprite_Base
  750.   Reduce = 3
  751.   def animation_set_sprites(frame)
  752.     cell_data = frame.cell_data
  753.     @ani_sprites.each_with_index do |sprite, i|
  754.       next unless sprite
  755.       pattern = cell_data[i, 0]
  756.       if !pattern || pattern < 0
  757.         sprite.visible = false
  758.         next
  759.       end
  760.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  761.       sprite.visible = true
  762.       sprite.src_rect.set(pattern % 5 * 192,
  763.         pattern % 100 / 5 * 192, 192, 192)
  764.       if @ani_mirror
  765.         sprite.x = @ani_ox - cell_data[i, 1] / Reduce
  766.         sprite.y = @ani_oy + cell_data[i, 2] / Reduce
  767.         sprite.angle = (360 - cell_data[i, 4])
  768.         sprite.mirror = (cell_data[i, 5] == 0)
  769.       else
  770.         sprite.x = @ani_ox + cell_data[i, 1] / Reduce
  771.         sprite.y = @ani_oy + cell_data[i, 2] / Reduce
  772.         sprite.angle = cell_data[i, 4]
  773.         sprite.mirror = (cell_data[i, 5] == 1)
  774.       end
  775.       sprite.z = self.z + 300 + i
  776.       sprite.ox = 96
  777.       sprite.oy = 96
  778.       sprite.zoom_x = cell_data[i, 3] / (100.0 * Reduce)
  779.       sprite.zoom_y = cell_data[i, 3] / (100.0 * Reduce)
  780.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  781.       sprite.blend_type = cell_data[i, 7]
  782.     end
  783.   end
  784. end
  785.  
  786. #-------------------------------------------------------------------------------
  787. # * Spriteset Map
  788. #-------------------------------------------------------------------------------
  789.  
  790. class Spriteset_Map
  791.   alias sas_update update
  792.   alias sas_initialize initialize
  793.   alias sas_dispose dispose
  794.   def initialize
  795.     @trash = []
  796.     $game_map.show_particles
  797.     $game_map.show_damage_sprites
  798.     $game_map.sas_hud.show
  799.     sas_initialize
  800.     @weapon_graphic = Sprite.new(@viewport1)
  801.     @weapon_graphic.ox = 22
  802.     @weapon_graphic.oy = 22
  803.     @attacking = false
  804.     @attack_timer = 0
  805.     @angles = {2=>[80,110,140,170],4=>[340,10,40,70],6=>[290,260,230,200],8=>[290,320,350,20]}
  806.     @correction = {2=>[-8,-10],4=>[0,-10],6=>[0,-4],8=>[4,-10]}
  807.     @z_values = {2=>120,4=>50,6=>120,8=>50}
  808.     refresh_weapon
  809.   end
  810.   def refresh_weapon
  811.     @weapon_bitmap.dispose unless @weapon_bitmap.nil?
  812.     @weapon_bitmap = nil
  813.     return if $game_party.members.empty?
  814.     index = ($game_party.members[0].weapons[0].icon_index rescue nil)
  815.     unless index == nil
  816.       temp = Cache.system("Iconset")
  817.       @weapon_bitmap = Bitmap.new(24,24)
  818.       @weapon_bitmap.blt(0,0,temp,Rect.new(index%16*24,index/16*24,24,24))
  819.       temp.dispose
  820.       temp = nil
  821.     end
  822.   end
  823.   def dispose
  824.     sas_dispose
  825.     $game_map.sas_hud.hide
  826.     $game_map.hide_particles
  827.     $game_map.hide_damage_sprites
  828.     @weapon_graphic.bitmap = nil
  829.     unless @weapon_bitmap.nil?
  830.       @weapon_bitmap.dispose
  831.       @weapon_bitmap = nil
  832.     end
  833.     @weapon_graphic.dispose
  834.     @weapon_graphic = nil
  835.   end
  836.   def update
  837.     sas_update
  838.     update_particles
  839.     update_damage_sprites
  840.     update_weapon_graphic if @attacking
  841.   end
  842.   def update_damage_sprites
  843.   end
  844.   def update_particles
  845.     $game_map.particles.each { |particle| particle.update; @trash << particle if particle.done }
  846.     @trash.each { |item| $game_map.particles.delete(item) }
  847.     @trash.clear
  848.   end
  849.   def update_weapon_graphic
  850.     @weapon_graphic.x = $game_player.screen_x + @correction[$game_player.direction][0]
  851.     @weapon_graphic.y = $game_player.screen_y + @correction[$game_player.direction][1]
  852.     case @attack_timer
  853.     when 12
  854.       @weapon_graphic.angle = @angles[$game_player.direction][0]
  855.       @weapon_graphic.z = @z_values[$game_player.direction]
  856.     when 9
  857.       @weapon_graphic.angle = @angles[$game_player.direction][1]
  858.       @weapon_graphic.z = @z_values[$game_player.direction]
  859.     when 6
  860.       @weapon_graphic.angle = @angles[$game_player.direction][2]
  861.       @weapon_graphic.z = @z_values[$game_player.direction]
  862.     when 3
  863.       @weapon_graphic.angle = @angles[$game_player.direction][3]
  864.       @weapon_graphic.z = @z_values[$game_player.direction]
  865.     when 0
  866.       @attacking = false
  867.       @weapon_graphic.bitmap = nil
  868.     end
  869.     @weapon_graphic.update
  870.     @attack_timer -= 1
  871.   end
  872.   def weapon_animation
  873.     return if @weapon_bitmap.nil?
  874.     @weapon_graphic.bitmap = @weapon_bitmap
  875.     @attacking = true
  876.     @attack_timer = 12
  877.   end
  878. end
  879.  
  880. #-------------------------------------------------------------------------------
  881. # * Game Map
  882. #-------------------------------------------------------------------------------
  883.  
  884. class Game_Map
  885.   include Pixel_Core
  886.   attr_accessor :enemies
  887.   attr_reader :sas_active
  888.   attr_accessor :particles
  889.   attr_accessor :skills
  890.   attr_accessor :sas_hud
  891.   attr_accessor :damage_sprites
  892.   attr_reader :pixel_table
  893.   alias kp_referesh_vehicles referesh_vehicles
  894.   alias sas_update update
  895.   alias sas_setup_events setup_events
  896.   alias sas_initialize initialize
  897.   def initialize
  898.     sas_initialize
  899.     @sas_hud = Sapphire_Hud.new
  900.     @trash = []
  901.   end
  902.   def damage(target,value)
  903.   end
  904.   def level_up
  905.   end
  906.   def hide_damage_sprites
  907.   end
  908.   def show_damage_sprites
  909.   end
  910.   def setup_events
  911.     @enemies = []
  912.     sas_setup_events
  913.   end
  914.   def update(arg=false)
  915.     sas_update(arg)
  916.     update_skills
  917. #    update_action_system if @sas_active && arg
  918.   end
  919. #  def update_action_system
  920. #    if Input.trigger?(Input::X)
  921. #      $game_player.attack
  922. #    elsif Input.trigger?(Input::Y)
  923. #      $game_player.cast_skill
  924. #    elsif Input.trigger?(Input::Z)
  925. #     $game_player.next_skill
  926. #    end
  927. #  end
  928.   def start_sas
  929.     @sas_active = true
  930.   end
  931.   def pause_sas
  932.     @sas_active = false
  933.   end
  934.   def hide_particles
  935.     virtual_particles = []
  936.     @particles.each { |particle| virtual_particles << particle.release; particle.dispose }
  937.     @particles = virtual_particles
  938.   end
  939.   def show_particles
  940.     virtual_particles = @particles
  941.     @particles = []
  942.     virtual_particles.each { |vp| @particles << Sapphire_Restored_Particle.new(vp)}
  943.     virtual_particles.clear
  944.   end
  945.   def delete_particles
  946.     if @particles.nil?
  947.       @particles = []
  948.     else
  949.       @particles.each { |particle| particle.dispose }
  950.       @particles.clear
  951.     end
  952.   end
  953.   def delete_skills
  954.     if @skills.nil?
  955.       @skills = []
  956.     else
  957.       @skills.each { |skill| skill.destroy }
  958.       @skills.clear
  959.     end
  960.   end
  961.   def delete_damage_sprites
  962.   end
  963.   def adjust_unlx(x)
  964.     return x - @display_x
  965.   end
  966.   def adjust_unly(y)
  967.     return y - @display_y
  968.   end
  969.   def update_skills
  970.     @skills.each { |skill| skill.update; @trash << skill if skill.done }
  971.     @trash.each { |item| @skills.delete(item) }
  972.     @trash.clear
  973.   end
  974.   def pixel_valid?(x, y)
  975.     x >= 0 && x <= @pixel_wm && y >= 0 && y <= @pixel_hm
  976.   end
  977.   def referesh_vehicles
  978.     setup_table
  979.     delete_particles
  980.     delete_skills
  981.     delete_damage_sprites
  982.     kp_referesh_vehicles
  983.   end
  984.   def setup_table
  985.     @pixel_table = Table.new(width*Pixel, height*Pixel,6)
  986.     for x in 0...(width*Pixel)
  987.       for y in 0...(height*Pixel)
  988.         @pixel_table[x,y,0] = table_player_collision(x*Tile,y*Tile)
  989.         @pixel_table[x,y,1] = table_skill_collision(x*Tile,y*Tile)
  990.         @pixel_table[x,y,3] = table_ladder(x*Tile,y*Tile)
  991.         @pixel_table[x,y,4] = table_bush(x*Tile+Bush_Axis[0],y*Tile+Bush_Axis[1])
  992.         @pixel_table[x,y,5] = table_counter(x*Tile+Counter_Axis[0],y*Tile+Counter_Axis[1])
  993.       end
  994.     end
  995.     @pixel_wm = (width-1)*Pixel
  996.     @pixel_hm = (height-1)*Pixel
  997.   end
  998.   def table_player_collision(x,y)
  999.     return 0 unless table_pp((x+Body_Axis[0]).to_i,(y+Body_Axis[1]).to_i)
  1000.     return 0 unless table_pp((x+Body_Axis[2]).to_i,(y+Body_Axis[1]).to_i)
  1001.     return 0 unless table_pp((x+Body_Axis[0]).to_i,(y+Body_Axis[3]).to_i)
  1002.     return 0 unless table_pp((x+Body_Axis[2]).to_i,(y+Body_Axis[3]).to_i)
  1003.     return 1
  1004.   end
  1005.   def table_skill_collision(x,y)
  1006.     return 0 unless table_ps((x+Body_Axis[0]).to_i,(y+Body_Axis[1]).to_i)
  1007.     return 0 unless table_ps((x+Body_Axis[2]).to_i,(y+Body_Axis[1]).to_i)
  1008.     return 0 unless table_ps((x+Body_Axis[0]).to_i,(y+Body_Axis[3]).to_i)
  1009.     return 0 unless table_ps((x+Body_Axis[2]).to_i,(y+Body_Axis[3]).to_i)
  1010.     return 1
  1011.   end
  1012.   def refresh_table(start_x,start_y,end_x,end_y)
  1013.     for x in (start_x*Pixel)..(end_x*Pixel)
  1014.       for y in (start_y*Pixel)..(end_y*Pixel)
  1015.         @pixel_table[x,y,0] = table_pcrf(x*Tile,y*Tile)
  1016.         @pixel_table[x,y,1] = table_scrf(x*Tile,y*Tile)
  1017.       end
  1018.     end
  1019.   end
  1020.   def refresh_table_px(start_px,start_py,end_px,end_py)
  1021.     for x in start_px..end_px
  1022.       for y in start_py..end_py
  1023.         @pixel_table[x,y,0] = table_pcrf(x*Tile,y*Tile)
  1024.         @pixel_table[x,y,1] = table_scrf(x*Tile,y*Tile)
  1025.       end
  1026.     end
  1027.   end
  1028.   def table_pcrf(x,y)
  1029.     return 0 unless table_pprf((x+Body_Axis[0]).to_i,(y+Body_Axis[1]).to_i)
  1030.     return 0 unless table_pprf((x+Body_Axis[2]).to_i,(y+Body_Axis[1]).to_i)
  1031.     return 0 unless table_pprf((x+Body_Axis[0]).to_i,(y+Body_Axis[3]).to_i)
  1032.     return 0 unless table_pprf((x+Body_Axis[2]).to_i,(y+Body_Axis[3]).to_i)
  1033.     return 1
  1034.   end
  1035.   def table_scrf(x,y)
  1036.     return 0 unless table_psrf((x+Body_Axis[0]).to_i,(y+Body_Axis[1]).to_i)
  1037.     return 0 unless table_psrf((x+Body_Axis[2]).to_i,(y+Body_Axis[1]).to_i)
  1038.     return 0 unless table_psrf((x+Body_Axis[0]).to_i,(y+Body_Axis[3]).to_i)
  1039.     return 0 unless table_psrf((x+Body_Axis[2]).to_i,(y+Body_Axis[3]).to_i)
  1040.     return 1
  1041.   end
  1042.   def table_p(x,y,bit)
  1043.     layered_tiles(x,y).each do |tile_id|
  1044.       flag = tileset.flags[tile_id]
  1045.       next if flag & 0x10 != 0
  1046.       return true  if flag & bit == 0
  1047.       return false if flag & bit == bit
  1048.     end
  1049.     return false
  1050.   end
  1051.   def table_pp(x,y)
  1052.     layered_tiles(x,y).each do |tile_id|
  1053.       flag = tileset.flags[tile_id]
  1054.       next if flag & 0x10 != 0
  1055.       return true if flag & 0x0f == 0
  1056.       return false if flag & 0x0f == 0x0f
  1057.     end
  1058.     return false
  1059.   end
  1060.   def table_ps(x,y)
  1061.     layered_tiles(x,y).each do |tile_id|
  1062.       flag = tileset.flags[tile_id]
  1063.       next if flag & 0x10 != 0
  1064.       return true if flag & 0x0400 == 0
  1065.       return true if flag & 0x0f == 0
  1066.       return false if flag & 0x0f == 0x0f
  1067.     end
  1068.     return false
  1069.   end
  1070.   def table_pprf(x,y)
  1071.     all_tiles(x, y).each do |tile_id|
  1072.       flag = tileset.flags[tile_id]
  1073.       next if flag & 0x10 != 0
  1074.       return true if flag & 0x0f == 0
  1075.       return false if flag & 0x0f == 0x0f
  1076.     end
  1077.     return false
  1078.   end
  1079.   def table_psrf(x,y)
  1080.     all_tiles(x,y).each do |tile_id|
  1081.       flag = tileset.flags[tile_id]
  1082.       next if flag & 0x10 != 0
  1083.       return true if flag & 0x0400 == 0
  1084.       return true if flag & 0x0f == 0
  1085.       return false if flag & 0x0f == 0x0f
  1086.     end
  1087.     return false
  1088.   end
  1089.   def table_bush(x,y)
  1090.     return layered_tiles_flag?(x.to_i, y.to_i, 0x40) ? 1 : 0
  1091.   end
  1092.   def table_ladder(x,y)
  1093.     return 1 if layered_tiles_flag?(x.to_i,(y+Ladder_Axis[1]).to_i, 0x20)
  1094.     return 1 if layered_tiles_flag?((x+Ladder_Axis[0]).to_i, (y+Ladder_Axis[1]).to_i, 0x20)
  1095.     return 0
  1096.   end
  1097.   def table_counter(x,y)
  1098.     return 1 if layered_tiles_flag?(x.to_i,y.to_i, 0x80)
  1099.     return 1 if layered_tiles_flag?((x+Counter_Axis[2]).to_i,y.to_i, 0x80)
  1100.     return 1 if layered_tiles_flag?(x.to_i,(y+Counter_Axis[3]).to_i, 0x80)
  1101.     return 1 if layered_tiles_flag?((x+Counter_Axis[2]).to_i,(y+Counter_Axis[3]).to_i, 0x80)
  1102.     return 0
  1103.   end
  1104. end
  1105.  
  1106. if Pixel_Core::Auto_Refresh_Tile_Events
  1107.   class Game_Map
  1108.     def refresh_tile_events
  1109.       @tile_events = @events.values.select {|event| event.tile? }
  1110.       @tile_events.each { |event| refresh_table_px(event.px-TileEvent_Range,event.py-TileEvent_Range,event.px+TileEvent_Range,event.py+TileEvent_Range)}
  1111.     end
  1112.   end
  1113. end
  1114.  
  1115. #-------------------------------------------------------------------------------
  1116. # * Game CharacterBase
  1117. #-------------------------------------------------------------------------------
  1118.  
  1119. class Game_CharacterBase
  1120.   include Pixel_Core
  1121.   attr_accessor :px
  1122.   attr_accessor :py
  1123.   attr_accessor :cx
  1124.   attr_accessor :cy
  1125.   alias kp_moveto moveto
  1126.   alias kp_move_straight move_straight
  1127.   alias kp_move_diagonal move_diagonal
  1128.   alias kp_bush? bush?
  1129.   alias kp_ladder? ladder?
  1130.   alias kp_terrain_tag terrain_tag
  1131.   alias kp_region_id region_id
  1132.   alias sas_update update
  1133.   alias sas_public_members init_public_members
  1134.   alias sas_straighten straighten
  1135.   def pixel_range?(px,py)
  1136.     return (@px - px).abs <= @cx && (@py - py).abs <= @cy
  1137.   end
  1138.   def update
  1139.     sas_update
  1140.     update_step_action if @step_action
  1141.   end
  1142.   def straighten
  1143.     sas_straighten
  1144.     @step_action = false
  1145.     @step_timer = 0
  1146.   end
  1147.   def update_step_action
  1148.     case @step_timer
  1149.     when 12; @pattern = 0
  1150.     when 8; @pattern = 1
  1151.     when 4; @pattern = 2
  1152.     when 0
  1153.       @step_action = false
  1154.       @pattern = 1
  1155.       return
  1156.     end
  1157.     @step_timer -= 1
  1158.   end
  1159.   def do_step
  1160.     @step_action = true
  1161.     @step_timer = 12
  1162.   end
  1163.   def init_public_members
  1164.     sas_public_members
  1165.     @x = @x.to_f
  1166.     @y = @y.to_f
  1167.     @px = (@x*Pixel).to_i
  1168.     @py = (@y*Pixel).to_i
  1169.     @cx = Default_Collision_X
  1170.     @cy = Default_Collision_Y
  1171.     @step_action = false
  1172.     @step_timer = 0
  1173.   end
  1174.   def moveto(x,y)
  1175.     kp_moveto(x,y)
  1176.     @x = @x.to_f
  1177.     @y = @y.to_f
  1178.     @px = (@x*Pixel).to_i
  1179.     @py = (@y*Pixel).to_i
  1180.   end
  1181.   def pixel_passable?(px,py,d)
  1182.     nx = px+Tile_Range[d][0]
  1183.     ny = py+Tile_Range[d][1]
  1184.     return false unless $game_map.pixel_valid?(nx,ny)
  1185.     return true if @through || debug_through?
  1186.     return false if $game_map.pixel_table[nx,ny,0] == 0
  1187.     return false if collision?(nx,ny)
  1188.     return true
  1189.   end
  1190.   def collision?(px,py)
  1191.     for event in $game_map.events.values
  1192.       if (event.px - px).abs <= event.cx && (event.py - py).abs <= event.cy
  1193.         next if event.through || event == self
  1194.         return true if event.priority_type == 1
  1195.       end
  1196.     end
  1197.     if @priority_type == 1
  1198.       return true if ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  1199.     end
  1200.     return false
  1201.   end
  1202.   def move_straight(d,turn_ok = true)
  1203.     move_pixel(d,turn_ok)
  1204.   end
  1205.   def move_diagonal(horz, vert)
  1206.     move_dpixel(horz,vert)
  1207.   end
  1208.   def move_pixel(d,t)
  1209.     @move_succeed = pixel_passable?(@px,@py,d)
  1210.     if @move_succeed
  1211.       set_direction(d)
  1212.       @px += Tile_Range[d][0]
  1213.       @py += Tile_Range[d][1]
  1214.       @real_x = @x
  1215.       @real_y = @y
  1216.       @x += Pixel_Range[d][0]
  1217.       @y += Pixel_Range[d][1]
  1218.       increase_steps
  1219.     elsif t
  1220.       set_direction(d)
  1221.       front_pixel_touch?(@px + Tile_Range[d][0],@py + Tile_Range[d][1])
  1222.     end
  1223.   end
  1224.   def move_dpixel(h,v)
  1225.     @move_succeed = false
  1226.     if pixel_passable?(@px,@py,v)
  1227.       @move_succeed = true
  1228.       @real_x = @x
  1229.       @real_y = @y
  1230.       set_direction(v)
  1231.       @px += Tile_Range[v][0]
  1232.       @py += Tile_Range[v][1]
  1233.       @x += Pixel_Range[v][0]
  1234.       @y += Pixel_Range[v][1]
  1235.       increase_steps
  1236.     else
  1237.       set_direction(v)
  1238.       front_pixel_touch?(@px + Tile_Range[v][0],@py + Tile_Range[v][1])
  1239.     end
  1240.     if pixel_passable?(@px,@py,h)
  1241.       unless @move_succeed
  1242.         @real_x = @x
  1243.         @real_y = @y
  1244.         @move_succeed = true
  1245.       end
  1246.       set_direction(h)
  1247.       @px += Tile_Range[h][0]
  1248.       @py += Tile_Range[h][1]
  1249.       @x += Pixel_Range[h][0]
  1250.       @y += Pixel_Range[h][1]
  1251.       increase_steps
  1252.     else
  1253.       set_direction(h)
  1254.       front_pixel_touch?(@px + Tile_Range[h][0],@py + Tile_Range[h][1])
  1255.     end
  1256.   end
  1257.   def bush?
  1258.     return $game_map.pixel_table[@px, @py, 4] == 1
  1259.   end
  1260.   def ladder?
  1261.     return $game_map.pixel_table[@px, @py, 3] == 1
  1262.   end
  1263.   def terrain_tag
  1264.     rx = ((@px % Pixel) > 1 ? @x.to_i + 1 : @x.to_i)
  1265.     ry = ((@py % Pixel) > 1 ? @y.to_i + 1 : @y.to_i)
  1266.     return $game_map.terrain_tag(rx,ry)
  1267.   end
  1268.   def region_id
  1269.     rx = ((@px % Pixel) > 1 ? @x.to_i + 1 : @x.to_i)
  1270.     ry = ((@py % Pixel) > 1 ? @y.to_i + 1 : @y.to_i)
  1271.     return $game_map.region_id(rx, ry)
  1272.   end
  1273.   def front_pixel_touch?(x,y)
  1274.   end
  1275. end
  1276.  
  1277. #-------------------------------------------------------------------------------
  1278. # * Game FakeFollowers
  1279. #-------------------------------------------------------------------------------
  1280.  
  1281. class Game_FakeFollowers
  1282.   attr_accessor :visible
  1283.   def initialize
  1284.     @visible = true
  1285.   end
  1286.   def refresh
  1287.   end
  1288.   def update
  1289.   end
  1290.   def gathering?
  1291.     return false
  1292.   end
  1293.   def synchronize(x,y,d)
  1294.   end
  1295.   def collide?(x,y)
  1296.     return false
  1297.   end
  1298.   def gather
  1299.   end
  1300.   def gather?
  1301.     return true
  1302.   end
  1303.   def reverse_each
  1304.     return []
  1305.   end
  1306.   def each
  1307.     return []
  1308.   end
  1309. end
  1310.  
  1311. #-------------------------------------------------------------------------------
  1312. # * Game Character
  1313. #-------------------------------------------------------------------------------
  1314.  
  1315. class Game_Character < Game_CharacterBase
  1316.   attr_accessor :pattern
  1317.   alias kp_force_move_route force_move_route
  1318.   alias kp_move_toward_character move_toward_character
  1319.   alias kp_move_away_from_character move_away_from_character
  1320.   alias kp_jump jump
  1321.   def force_move_route(route)
  1322.     kp_force_move_route(route.clone)
  1323.     multiply_commands
  1324.   end
  1325.   def multiply_commands
  1326.     return unless Multiply_Commands
  1327.     return if @move_route.list.empty?
  1328.     new_route = []
  1329.     for cmd in @move_route.list
  1330.       if Commands.include?(cmd.code)
  1331.         Pixel.times do
  1332.           new_route << cmd
  1333.         end
  1334.       else
  1335.         new_route << cmd
  1336.       end
  1337.     end
  1338.     @move_route.list = new_route
  1339.   end
  1340.   def move_toward_character(character)
  1341.     dx = @px - character.px
  1342.     dy = @py - character.py
  1343.     if dx.abs < character.cx
  1344.       unless dy.abs < character.cy
  1345.         move_pixel(dy < 0 ? 2 : 8,true)
  1346.         unless @move_succeed
  1347.           return if dx.abs - Chase_Axis[@direction][0] <= @cx && dy.abs - Chase_Axis[@direction][1] <= @cy
  1348.           move_dpixel(dx < 0 ? 6 : 4, dy < 0 ? 2 : 8)
  1349.         end
  1350.       end
  1351.     else
  1352.       if dy.abs < character.cy
  1353.         move_pixel(dx < 0 ? 6 : 4,true)
  1354.         unless @move_succeed
  1355.           return if dx.abs - Chase_Axis[@direction][0] <= @cx && dy.abs - Chase_Axis[@direction][1] <= @cy
  1356.           move_dpixel(dx < 0 ? 6 : 4, dy < 0 ? 2 : 8)
  1357.         end
  1358.       else
  1359.         move_dpixel(dx < 0 ? 6 : 4, dy < 0 ? 2 : 8)
  1360.       end
  1361.     end
  1362.   end
  1363.   def move_away_from_character(character)
  1364.     dx = @px - character.px
  1365.     dy = @py - character.py
  1366.     if dx == 0
  1367.       move_pixel(dy > 0 ? 2 : 8,true)
  1368.     else
  1369.       if dy == 0
  1370.         move_pixel(dx > 0 ? 6 : 4,true)
  1371.       else
  1372.         move_dpixel(dx > 0 ? 6 : 4, dy > 0 ? 2 : 8)
  1373.       end
  1374.     end
  1375.   end
  1376.   def jump(xp,yp)
  1377.     kp_jump(xp,yp)
  1378.     @px = @x*Pixel
  1379.     @py = @y*Pixel
  1380.   end
  1381. end
  1382.  
  1383. #-------------------------------------------------------------------------------
  1384. # * Game Player
  1385. #-------------------------------------------------------------------------------
  1386.  
  1387. class Game_Player < Game_Character
  1388.   attr_accessor :recover
  1389.   attr_accessor :current_skill
  1390.   alias sas_initialize initialize
  1391.   alias sas_player_update update
  1392.   def update
  1393.     sas_player_update
  1394.     @recover -= 1 if @recover > 0
  1395.   end
  1396.   def straighten
  1397.     super
  1398.     refresh_weapon_stats
  1399.     @recover = 0
  1400.   end
  1401.   def initialize
  1402.     sas_initialize
  1403.     @followers = Game_FakeFollowers.new
  1404.     @current_skill = [nil,nil]
  1405.   end
  1406.   def update_vehicle
  1407.   end
  1408.   def cast_skill
  1409.     return if @current_skill[0].nil? || @recover > 0
  1410.     return if $game_party.members[0].mp < @current_skill[0].mp_cost
  1411.     $game_map.skills << Sapphire_Skill.new(self)
  1412.     $game_party.members[0].mp -= @current_skill[0].mp_cost
  1413.     $game_map.sas_hud.refresh_bars
  1414.     @recover = @current_skill[0].recover
  1415.   end
  1416.   def next_skill
  1417.     unless @current_skill[1].nil?
  1418.       @current_skill[1] = nil
  1419.     end
  1420.     skills = $game_party.members[0].skills
  1421.     if skills.empty?
  1422.       @current_skill = [nil,nil]
  1423.     else
  1424.       ns = 0
  1425.       unless @current_skill[0].nil?
  1426.         max = skills.size-1
  1427.         for id in 0..max
  1428.           ns = (id == max ? 0 : id + 1) if skills[id] == @current_skill[0]
  1429.         end
  1430.       end
  1431.       skills[ns].set_recover
  1432.       @current_skill = [skills[ns],skills[ns].particle]
  1433.       $game_map.sas_hud.refresh_base
  1434.     end
  1435.   end
  1436.   def damage_hero(value)
  1437.     actor = $game_party.members[0]
  1438.     value -= actor.def
  1439.     value = 0 if value < 0
  1440.     $game_map.show_text(self,value)
  1441.     if actor.hp <= value
  1442.       actor.hp = 1
  1443.       $game_map.sas_hud.refresh_bars(0)
  1444.       kill_player
  1445.     else
  1446.       actor.hp -= value
  1447.       $game_map.sas_hud.refresh_bars
  1448.     end
  1449.   end
  1450.   def skill_damage_hero(value)
  1451.     actor = $game_party.members[0]
  1452.     value -= actor.mdf
  1453.     value = 0 if value < 0
  1454.     $game_map.show_text(self,value)
  1455.     if actor.hp <= value
  1456.       actor.hp = 1
  1457.       $game_map.sas_hud.refresh_bars(0)
  1458.       kill_player
  1459.     else
  1460.       actor.hp -= value
  1461.       $game_map.sas_hud.refresh_bars
  1462.     end
  1463.   end
  1464.   def kill_player
  1465.     $game_map.pause_sas
  1466.     $game_switches[Sapphire_Core::Kill_Switch] = true
  1467.     $game_map.need_refresh = true
  1468.   end
  1469.   def attack
  1470.     return if @recover > 0 || $game_map.interpreter.running?
  1471.     can_move = true
  1472.     @recover = @max_recover
  1473.     SceneManager.scene.spriteset.weapon_animation if Sapphire_Core::Enable_Weapon_Graphics
  1474.     play_voice if Sapphire_Core::Enable_Voice
  1475.     tx = @px + Sapphire_Core::Weapon_Range[@direction][0]
  1476.     ty = @py + Sapphire_Core::Weapon_Range[@direction][1]
  1477.     for char in $game_map.enemies
  1478.       if char.pixel_range?(tx,ty)
  1479.         next if char.enemy.static
  1480.         char.animation_id = @weapon_animation
  1481.         unless char.enemy.object
  1482.           char.turn_toward_character(self)
  1483.           2.times do; char.move_backward; end
  1484.           char.do_step
  1485.         else
  1486.           can_move = false
  1487.         end
  1488.         damage = $game_party.members[0].atk
  1489.         damage += rand(damage*Sapphire_Core::Damage_Random).to_i
  1490.         char.damage_enemy(damage,true) unless char.enemy.atk_invincible
  1491.       end
  1492.     end
  1493.     return unless can_move
  1494.     do_step
  1495.     move_forward
  1496.   end
  1497.   def get_weapon_recover(actor)
  1498.     for feature in actor.weapons[0].features
  1499.       return feature.value if feature.code == 33
  1500.     end
  1501.     return Sapphire_Core::Default_Recover
  1502.   end
  1503.   def refresh_weapon_stats
  1504.     hero = $game_party.members[0]
  1505.     if hero.weapons[0].nil?
  1506.       @max_recover = Sapphire_Core::Default_Recover
  1507.       @weapon_animation = Sapphire_Core::Default_Animation
  1508.     else
  1509.       @max_recover = get_weapon_recover(hero)
  1510.       @weapon_animation = hero.weapons[0].animation_id
  1511.     end
  1512.   end
  1513.   def play_voice
  1514.     RPG::SE.new(Sapphire_Core::Voice_Files[rand(Sapphire_Core::Voice_Files.size)],Sapphire_Core::Voice_Volume).play
  1515.   end
  1516.   def encounter_progress_value
  1517.     return 1
  1518.   end
  1519.   def get_on_off_vehicle
  1520.     return false
  1521.   end
  1522.   def check_event_trigger_here(triggers)
  1523.     for event in $game_map.events.values
  1524.       if (event.px - @px).abs <= event.cx && (event.py - @py).abs <= event.cy
  1525.         event.start if triggers.include?(event.trigger) && event.priority_type != 1
  1526.       end
  1527.     end
  1528.   end
  1529.   def check_event_trigger_there(triggers)
  1530.     fx = @px+Trigger_Range[@direction][0]
  1531.     fy = @py+Trigger_Range[@direction][1]
  1532.     for event in $game_map.events.values
  1533.       if (event.px - fx).abs <= event.cx && (event.py - fy).abs <= event.cy
  1534.         if triggers.include?(event.trigger) && event.normal_priority?
  1535.           event.start
  1536.           return
  1537.         end
  1538.       end
  1539.     end
  1540.     if $game_map.pixel_table[fx,fy,5] == 1
  1541.       fx += Counter_Range[@direction][0]
  1542.       fy += Counter_Range[@direction][1]
  1543.       for event in $game_map.events.values
  1544.         if (event.px - fx).abs <= event.cx && (event.py - fy).abs <= event.cy
  1545.           if triggers.include?(event.trigger) && event.normal_priority?
  1546.             event.start
  1547.             return
  1548.           end
  1549.         end
  1550.       end
  1551.     end
  1552.   end
  1553.   def front_pixel_touch?(px,py)
  1554.     return if $game_map.interpreter.running?
  1555.     for event in $game_map.events.values
  1556.       if (event.px - px).abs <= event.cx && (event.py - py).abs <= event.cy
  1557.         if [1,2].include?(event.trigger) && event.normal_priority?
  1558.           event.start
  1559.           result = true
  1560.         end
  1561.       end
  1562.     end
  1563.   end
  1564.   def pixel_passable?(px,py,d)
  1565.     nx = px+Tile_Range[d][0]
  1566.     ny = py+Tile_Range[d][1]
  1567.     return false unless $game_map.pixel_valid?(nx,ny)
  1568.     return true if @through || debug_through?
  1569.     return false if $game_map.pixel_table[nx,ny,0] == 0
  1570.     return false if collision?(nx,ny)
  1571.     return true
  1572.   end
  1573.   def move_by_input
  1574.     return if !movable? || $game_map.interpreter.running?
  1575.     case Input.dir8
  1576.       when 1; move_dpixel(4,2)
  1577.       when 2; move_pixel(2,true)
  1578.       when 3; move_dpixel(6,2)
  1579.       when 4; move_pixel(4,true)
  1580.       when 6; move_pixel(6,true)
  1581.       when 7; move_dpixel(4,8)
  1582.       when 8; move_pixel(8,true)
  1583.       when 9; move_dpixel(6,8)
  1584.     end
  1585.   end
  1586.   def on_damage_floor?
  1587.     return false
  1588.   end
  1589.   def collision?(px,py)
  1590.     for event in $game_map.events.values
  1591.       if (event.px - px).abs <= event.cx && (event.py - py).abs <= event.cy
  1592.         next if event.through
  1593.         return true if event.priority_type == 1
  1594.       end
  1595.     end
  1596.     return false
  1597.   end
  1598.   def move_straight(d, turn_ok = true)
  1599.     super(d, turn_ok)
  1600.   end
  1601.   def move_diagonal(horz, vert)
  1602.     super(horz, vert)
  1603.   end
  1604. end
  1605.  
  1606. #-------------------------------------------------------------------------------
  1607. # * Game Event
  1608. #-------------------------------------------------------------------------------
  1609.  
  1610. class Game_Event < Game_Character
  1611.   attr_accessor :enemy
  1612.   alias sas_setup_page setup_page
  1613.   alias sas_initialize initialize
  1614.   alias sas_event_update update
  1615.   alias kp_move_type_toward_player move_type_toward_player
  1616.   alias kp_setup_page_settings setup_page_settings
  1617.   def initialize(m,e)
  1618.     @enemy = nil
  1619.     @recover = 0
  1620.     @request_view = false
  1621.     sas_initialize(m,e)
  1622.     setup_collision
  1623.   end
  1624.   def update
  1625.     if $game_map.sas_active && @enemy != nil
  1626.       @request_view ? update_view : update_skills
  1627.       @recover -= 1 if @recover > 0
  1628.     end
  1629.     sas_event_update
  1630.   end
  1631.   def update_skills
  1632.     return if @recover > 0 || @enemy.nature == 0
  1633.     if @enemy.auto_attack
  1634.       $game_map.skills << Sapphire_Skill.new(self)
  1635.       @recover = @enemy.recover
  1636.     else
  1637.       update_cast
  1638.     end
  1639.   end
  1640.   def damage_enemy(value,by_player=false)
  1641.     value -= @enemy.defence
  1642.     value = 0 if value < 0
  1643.     @enemy.hp -= value
  1644.     $game_map.show_text(self,value)
  1645.     if @enemy.hp <= 0
  1646.       kill_enemy(by_player)
  1647.     elsif by_player && @request_view
  1648.       @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1649.       @move_type = 3
  1650.       @move_frequency = 6
  1651.       @request_view = false
  1652.     end
  1653.   end
  1654.   def skill_damage_enemy(value,by_player=false)
  1655.     value -= @enemy.mdefence
  1656.     value = 0 if value < 0
  1657.     @enemy.hp -= value
  1658.     $game_map.show_text(self,value)
  1659.     if @enemy.hp <= 0
  1660.       kill_enemy(by_player)
  1661.     elsif by_player && @request_view
  1662.       @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1663.       @move_type = 3
  1664.       @move_frequency = 6
  1665.       @request_view = false
  1666.     end
  1667.   end
  1668.   def attack
  1669.     @recover = @enemy.recover
  1670.     tx = @px + Sapphire_Core::Weapon_Range[@direction][0]
  1671.     ty = @py + Sapphire_Core::Weapon_Range[@direction][1]
  1672.     if $game_player.pixel_range?(tx,ty)
  1673.       $game_player.animation_id = @enemy.animation
  1674.       $game_player.turn_toward_character(self)
  1675.       2.times do; $game_player.move_backward; end
  1676.       $game_player.do_step
  1677.       damage = @enemy.attack
  1678.       damage += rand(damage*Sapphire_Core::Damage_Random).to_i
  1679.       $game_player.damage_hero(damage)
  1680.     end
  1681.     do_step
  1682.     move_forward
  1683.   end
  1684.   def kill_enemy(by_player)
  1685.     @direction = 2
  1686.     moveto(@x,@y)
  1687.     @request_view = false
  1688.     @step_anime = false
  1689.     @move_type = 0
  1690.     @character_name = ""
  1691.     @tile_id = 0
  1692.     @priority_type = 0
  1693.     @opacity = 255
  1694.     if by_player
  1695.       actor = $game_party.members[0]
  1696.       current_level = actor.level
  1697.       actor.change_exp(actor.exp + @enemy.exp,false)
  1698.       if current_level != actor.level
  1699.         $game_map.sas_hud.refresh_base
  1700.         $game_map.level_up
  1701.       end
  1702.       $game_map.sas_hud.refresh_bars
  1703.     end
  1704.     run_enemy_commands
  1705.   end
  1706.   def update_view
  1707.       distance = ($game_player.py - @py)
  1708.       if ($game_player.px - @px).abs <= distance && distance <= @enemy.view && distance >= 0
  1709.         @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1710.         @move_type = 3
  1711.         @move_frequency = 6
  1712.         @request_view = false
  1713.       end
  1714.  
  1715.       distance = (@px - $game_player.px)
  1716.       if ($game_player.py - @py).abs <= distance && distance <= @enemy.view && distance >= 0
  1717.         @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1718.         @move_type = 3
  1719.         @move_frequency = 6
  1720.         @request_view = false
  1721.       end
  1722.  
  1723.       distance = ($game_player.px - @px)
  1724.       if ($game_player.py - @py).abs <= distance && distance <= @enemy.view && distance >= 0
  1725.         @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1726.         @move_type = 3
  1727.         @move_frequency = 6
  1728.         @request_view = false
  1729.       end
  1730.  
  1731.       distance = (@py - $game_player.py)
  1732.       if ($game_player.px - @px).abs <= distance && distance <= @enemy.view && distance >= 0
  1733.         @balloon_id = 1 if Sapphire_Core::Enemy_Exclamation
  1734.         @move_type = 3
  1735.         @move_frequency = 6
  1736.         @request_view = false
  1737.       end
  1738.   end
  1739.   def update_cast
  1740.     case @direction
  1741.     when 2
  1742.       distance = ($game_player.py - @py)
  1743.       if ($game_player.px - @px).abs <= @cx && distance <= @enemy.view && distance >= Sapphire_Core::Enemy_Skill_Distance
  1744.         $game_map.skills << Sapphire_Skill.new(self)
  1745.         @recover = @enemy.recover
  1746.       end
  1747.     when 4
  1748.       distance = (@px - $game_player.px)
  1749.       if ($game_player.py - @py).abs <= @cx && distance <= @enemy.view && distance >= Sapphire_Core::Enemy_Skill_Distance
  1750.         $game_map.skills << Sapphire_Skill.new(self)
  1751.         @recover = @enemy.recover
  1752.       end
  1753.     when 6
  1754.       distance = ($game_player.px - @px)
  1755.       if ($game_player.py - @py).abs <= @cx && distance <= @enemy.view && distance >= Sapphire_Core::Enemy_Skill_Distance
  1756.         $game_map.skills << Sapphire_Skill.new(self)
  1757.         @recover = @enemy.recover
  1758.       end
  1759.     when 8
  1760.       distance = (@py - $game_player.py)
  1761.       if ($game_player.px - @px).abs <= @cx && distance <= @enemy.view && distance >= Sapphire_Core::Enemy_Skill_Distance
  1762.         $game_map.skills << Sapphire_Skill.new(self)
  1763.         @recover = @enemy.recover
  1764.       end
  1765.     end
  1766.   end
  1767.   def setup_page(np)
  1768.     sas_setup_page(np)
  1769.     setup_enemy(np.nil?)
  1770.   end
  1771.   def setup_enemy(dispose_enemy)
  1772.     unless @enemy.nil?
  1773.       $game_map.enemies.delete(self)
  1774.       @enemy = nil
  1775.     end
  1776.     unless dispose_enemy && @list.nil?
  1777.       for command in @list
  1778.         if command.code == 108 && command.parameters[0].include?("[enemy")
  1779.           command.parameters[0].scan(/\[enemy ([0.0-9.9]+)\]/)
  1780.           spawn_enemy($1.to_i)
  1781.           return
  1782.         end
  1783.       end
  1784.     end
  1785.   end
  1786.   def spawn_enemy(id)
  1787.     $game_map.enemies << self if @enemy.nil?
  1788.     @enemy = Sapphire_Enemy.new(self,id)
  1789.     @recover = 0
  1790.     @step_anime = @enemy.step_anime
  1791.     @request_view = true unless @enemy.object
  1792.     @character_name = @enemy.char_file unless @enemy.char_file.nil?
  1793.     @character_index = @enemy.char_index unless @enemy.char_file.nil?
  1794.     @priority_type = 1
  1795.     setup_parameters
  1796.   end
  1797.   def setup_parameters
  1798.     return if @list.nil?
  1799.     for value in 0...@list.size
  1800.       next if @list[value].code != 108 && @list[value].code != 408
  1801.       @enemy.atk_invincible = true if @list[value].parameters[0] == "[attack_invincible]"
  1802.       @enemy.skl_invincible = true if @list[value].parameters[0] == "[skill_invincible]"
  1803.       @enemy.die_erase = true if @list[value].parameters[0] == "[erase]"
  1804.       if @list[value].parameters[0].include?("[localsw")
  1805.         @list[value].parameters[0].scan(/\[localsw ([0.0-9.9]+)\]/)
  1806.         @enemy.die_localsw = $1.to_i
  1807.       end
  1808.       if @list[value].parameters[0].include?("[switch")
  1809.         @list[value].parameters[0].scan(/\[switch ([0.0-9.9]+)\]/)
  1810.         @enemy.die_switch = $1.to_i
  1811.       end
  1812.       if @list[value].parameters[0].include?("[variable")
  1813.         @list[value].parameters[0].scan(/\[variable ([0.0-9.9]+)\]/)
  1814.         @enemy.die_variable = $1.to_i
  1815.       end
  1816.     end
  1817.   end
  1818.   def run_enemy_commands
  1819.     ers = @enemy.die_erase
  1820.     $game_map.enemies.delete(self)
  1821.     unless @enemy.die_localsw.nil?
  1822.       key = [$game_map.map_id,@id,Sapphire_Core::Local_Switch[@enemy.die_localsw]]
  1823.       $game_self_switches[key] = true
  1824.       $game_map.need_refresh = true
  1825.     end
  1826.     unless @enemy.die_variable.nil?
  1827.       $game_variables[@enemy.die_variable] += 1
  1828.       $game_map.need_refresh = true
  1829.     end
  1830.     unless @enemy.die_switch.nil?
  1831.       $game_switches[@enemy.die_switch] = true
  1832.       $game_map.need_refresh = true
  1833.     end
  1834.     @enemy = nil
  1835.     erase if ers
  1836.   end
  1837.   def move_type_toward_player
  1838.     move_toward_player if near_the_player?
  1839.   end
  1840.   def setup_page_settings
  1841.     kp_setup_page_settings
  1842.     setup_collision
  1843.     multiply_commands
  1844.   end
  1845.   def collision?(px,py)
  1846.     for event in $game_map.events.values
  1847.       if (event.px - px).abs <= event.cx && (event.py - py).abs <= event.cy
  1848.         next if event.through || event == self
  1849.         return true if event.priority_type == 1
  1850.       end
  1851.     end
  1852.     if @priority_type == 1
  1853.       return true if ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  1854.     end
  1855.     return false
  1856.   end
  1857.   def setup_collision
  1858.     @cx = Default_Collision_X
  1859.     @cy = Default_Collision_Y
  1860.     unless @list.nil?
  1861.       for value in 0...@list.size
  1862.         next if @list[value].code != 108 && @list[value].code != 408
  1863.         if @list[value].parameters[0].include?("[collision_x ")
  1864.           @list[value].parameters[0].scan(/\[collision_x ([0.0-9.9]+)\]/)
  1865.           @cx = $1.to_i
  1866.         end
  1867.         if @list[value].parameters[0].include?("[collision_y ")
  1868.           @list[value].parameters[0].scan(/\[collision_y ([0.0-9.9]+)\]/)
  1869.           @cy = $1.to_i
  1870.         end
  1871.       end
  1872.     end
  1873.   end
  1874.   def front_pixel_touch?(px,py)
  1875.     return if $game_map.interpreter.running?
  1876.     if @enemy.nil?
  1877.       if @trigger == 2 && ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  1878.         start if !jumping? && normal_priority?
  1879.       end
  1880.     else
  1881.       return if jumping? || @recover > 0 || @enemy.nature == 2 || @enemy.object
  1882.       attack if $game_map.sas_active && ($game_player.px - px).abs <= @cx && ($game_player.py - py).abs <= @cy
  1883.     end
  1884.   end
  1885. end
  1886.  
  1887. #-------------------------------------------------------------------------------
  1888. # * Game Interpreter
  1889. #-------------------------------------------------------------------------------
  1890.  
  1891. class Game_Interpreter
  1892.   def self_event
  1893.     return $game_map.events[@event_id]
  1894.   end
  1895. end
  1896.  
  1897. #-------------------------------------------------------------------------------
  1898. # * Sapphire Bitcore
  1899. #-------------------------------------------------------------------------------
  1900.  
  1901. module Sapphire_Bitcore
  1902.   def self.initialize
  1903.     @@buffer = {}
  1904.     for skill in load_data("Data/Skills.rvdata2")
  1905.       next if skill.nil? || skill.particle.nil?
  1906.       Sapphire_Bitcore.push(skill.particle)
  1907.     end
  1908.   end
  1909.   def self::[](key)
  1910.     return @@buffer[key]
  1911.   end
  1912.   def self.push(key)
  1913.     return if @@buffer.keys.include?(key)
  1914.     @@buffer[key] = Cache.particle(key)
  1915.   end
  1916. end
  1917.  
  1918. Sapphire_Bitcore.initialize
  1919.  
  1920. #-------------------------------------------------------------------------------
  1921. # * Sapphire Action System IV - Script End
  1922. #-------------------------------------------------------------------------------
  1923. #-------------------------------------------------------------------------------
  1924. # * [ACE] SAS IV Party Refresh
  1925. #-------------------------------------------------------------------------------
  1926. # * By Khas Arcthunder - arcthunder.site40.net
  1927. # * Version: 1.0 EN
  1928. # * Released on: 28/02/2012
  1929. #
  1930. #-------------------------------------------------------------------------------
  1931. # * Instructions
  1932. #-------------------------------------------------------------------------------
  1933. # Use the following code inside the "Call Script" box to refresh player:
  1934. #
  1935. # SceneManager.refresh_sas_party
  1936. #
  1937. #-------------------------------------------------------------------------------
  1938. class << SceneManager
  1939.   def refresh_sas_party
  1940.     @scene.spriteset.refresh_weapon
  1941.     $game_player.refresh_weapon_stats
  1942.     $game_player.next_skill
  1943.   end
  1944. end
  1945. class Spriteset_Map
  1946.   def refresh_weapon
  1947.     unless @weapon_bitmap.nil?
  1948.       @weapon_bitmap.dispose
  1949.       @weapon_bitmap = nil
  1950.     end
  1951.     index = ($game_party.members[0].weapons[0].icon_index rescue nil)
  1952.     if index != nil
  1953.       temp = Cache.system("Iconset")
  1954.       @weapon_bitmap = Bitmap.new(24,24)
  1955.       @weapon_bitmap.blt(0,0,temp,Rect.new(index%16*24,index/16*24,24,24))
  1956.       temp.dispose
  1957.       temp = nil
  1958.     end
  1959.   end
  1960. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement