Advertisement
dsiver144

DSI Advanced Tone System

Jun 15th, 2017
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.35 KB | None | 0 0
  1. #==============================================================================
  2. # DSI Advanced Tone System
  3. # -- Last Updated: 2017.06.15
  4. # -- Author: dsiver144
  5. # -- Level: Normal
  6. # -- Requires: n/a
  7. #==============================================================================
  8. $imported = {} if $imported.nil?
  9. $imported["DSI-AdvancedTone"] = true
  10. #==============================================================================
  11. # Script Call:
  12. #    untone(id,frames) -> Untone an event/player. This mean event/player sprite
  13. #                         tone won't be changed by map tone. (Using Tint Command)
  14. #    free_tone(id,tone,frames) -> Change sprite tone of an-untoned-event or player
  15. #    retone(id,frames) -> Reset to default. This mean event/player sprite tone
  16. #                         will be changed by map tone. (Using Tint Command)
  17. #    id = 0 : this event
  18. #    id = -1: player
  19. #==============================================================================
  20. class Game_Interpreter
  21.   #--------------------------------------------------------------------------
  22.   # * Free Tone Character Sprite
  23.   #--------------------------------------------------------------------------
  24.   def free_tone(id,tone,frames=60)
  25.     new_id = id == 0 ? @event_id : id
  26.     object = new_id != -1 ? $game_map.events[new_id] : $game_player
  27.     return if object.mapToneStatus == true
  28.     basic_tone = Tone.new(*tone)
  29.     object.start_tone_change(basic_tone, frames)
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # * Tint Screen
  33.   #--------------------------------------------------------------------------
  34.   def untone(id,frames=60)
  35.     new_id = id == 0 ? @event_id : id
  36.     object = new_id != -1 ? $game_map.events[new_id] : $game_player
  37.     object.mapToneStatus = false
  38.     basic_tone = Tone.new(0,0,0,0)
  39.     object.start_tone_change(basic_tone, frames)
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # * Tint Screen
  43.   #--------------------------------------------------------------------------
  44.   def retone(id,frames=60)
  45.     new_id = id == 0 ? @event_id : id
  46.     object = new_id != -1 ? $game_map.events[new_id] : $game_player
  47.     object.mapToneStatus = true
  48.     basic_tone = screen.tone
  49.     object.start_tone_change(basic_tone, frames)
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # * Tint Screen
  53.   #--------------------------------------------------------------------------
  54.   def tone_player(tone_param, frames=60, wait=false)
  55.     return unless $game_player.untone_status
  56.     if tone_param
  57.       new_tone = Tone.new(*tone_param)
  58.     else
  59.       new_tone = Tone.new(0,0,0,0)
  60.     end
  61.     $game_player.start_tone_change2(new_tone, frames)
  62.     wait(frames) if wait
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # * overwrite method: command_223
  66.   #--------------------------------------------------------------------------
  67.   def command_223
  68.     $game_player.start_tone_change(@params[0], @params[1]) if $game_player.mapToneStatus
  69.     $game_map.events.values.each do |event|
  70.       event.start_tone_change(@params[0], @params[1]) if event.mapToneStatus
  71.     end
  72.     screen.start_tone_change(@params[0], @params[1])
  73.     wait(@params[1]) if @params[2]
  74.   end
  75. end # Game_Interpreter
  76.  
  77. class Spriteset_Map
  78.   attr_accessor :viewport1_5
  79.   alias_method(:init_event_tone_system, :initialize)
  80.   #--------------------------------------------------------------------------
  81.   # * Object Initialization
  82.   #--------------------------------------------------------------------------
  83.   def initialize
  84.     set_default_event_tone
  85.     init_event_tone_system # Call original method
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # * new method: set_default_event_tone
  89.   #--------------------------------------------------------------------------
  90.   def set_default_event_tone
  91.     $game_player.mapToneStatus = true
  92.     $game_map.events.values.each do |event|
  93.       next if event.nil?
  94.       next if event.list.nil?
  95.       event.mapToneStatus = true
  96.       event.list.each do |command|
  97.         next if command.code != 108
  98.         if command.parameters[0] =~ /<untone[ _]event>/i
  99.           event.mapToneStatus = false
  100.           next
  101.         end
  102.       end
  103.     end
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # * overwrite_method: create_characters
  107.   #--------------------------------------------------------------------------
  108.   alias_method(:dsi_tone_system_create_characters, :create_characters)
  109.   def create_characters
  110.     @viewport1_5 = Viewport.new
  111.     @viewport1_5.z = @viewport1.z + 1
  112.     dsi_tone_system_create_characters # Call original method
  113.     @character_sprites.each do |sprite|
  114.       sprite.viewport = @viewport1_5
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # * alias method: dispose_viewports
  119.   #--------------------------------------------------------------------------
  120.   alias_method(:dsi_tone_system_dispose_viewports, :dispose_viewports)
  121.   def dispose_viewports
  122.     dsi_tone_system_dispose_viewports
  123.     @viewport1_5.dispose
  124.   end
  125. end # Spriteset_Map
  126.  
  127. class Game_CharacterBase
  128.   attr_accessor :sprite_tone
  129.   attr_accessor :free_tone
  130.   attr_accessor :mapToneStatus
  131.   alias_method(:dsi_untone_sprite_update, :update)
  132.   #--------------------------------------------------------------------------
  133.   # * new method: isMapToned?
  134.   #--------------------------------------------------------------------------
  135.   def isMapToned?
  136.     @mapToneStatus
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # * Update
  140.   #--------------------------------------------------------------------------
  141.   def update
  142.     dsi_untone_sprite_update
  143.     update_tone
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # * Start Changing Color Tone
  147.   #--------------------------------------------------------------------------
  148.   def start_tone_change(tone, duration)
  149.     @tone_target = tone.clone
  150.     @tone_duration = duration
  151.     @sprite_tone ||= Tone.new(0,0,0,0)
  152.     @sprite_tone = @tone_target.clone if @tone_duration == 0
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # * Update Tone
  156.   #--------------------------------------------------------------------------
  157.   def update_tone
  158.     if @sprite_tone && @tone_duration && @tone_duration > 0
  159.       d = @tone_duration
  160.       @sprite_tone.red = (@sprite_tone.red * (d - 1) + @tone_target.red) / d
  161.       @sprite_tone.green = (@sprite_tone.green * (d - 1) + @tone_target.green) / d
  162.       @sprite_tone.blue = (@sprite_tone.blue * (d - 1) + @tone_target.blue) / d
  163.       @sprite_tone.gray = (@sprite_tone.gray * (d - 1) + @tone_target.gray) / d
  164.       @tone_duration -= 1
  165.     end
  166.   end
  167. end # Game_CharacterBase
  168.  
  169. class Sprite_Character < Sprite_Base
  170.   alias_method(:dsi_tone_system_sprite_character_update_other, :update_other)
  171.   #--------------------------------------------------------------------------
  172.   # * Update Other
  173.   #--------------------------------------------------------------------------
  174.   def update_other
  175.     self.tone = @character.sprite_tone if @character.sprite_tone
  176.     dsi_tone_system_sprite_character_update_other
  177.   end
  178. end # Sprite_Character
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement