赞 | 0 |
VIP | 4 |
好人卡 | 0 |
积分 | 2 |
经验 | 31715 |
最后登录 | 2021-9-11 |
在线时间 | 829 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 180
- 在线时间
- 829 小时
- 注册时间
- 2010-6-26
- 帖子
- 671
|
- #==============================================================================
- # Minto's Monster Collapse VX
- # Version: 1.2
- # Author: Minto & modern algebra (rmrk.net)
- # Date: June 25, 2010
- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- # Description:
- #
- # This is a complete rewrite of Minto's Monster Collapse script in order for
- # it to function optimally in RMVX.
- #
- # The script is very simple and allows for three basic functions:
- # 1) Can play a specified animation upon the death of a monster
- # 2) Can specify a special collapse effect, rather than the default fade.
- # 3) Specify the colour each monster changes to, rather than default white
- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- # Instructions:
- #
- # Paste this script in its own slot above Main and below Materials in the
- # Script Editor (F11)
- #
- # To setup collapse effects, all you need to do is use are the following
- # codes in the notebox of the enemy:
- #
- # \COLLAPSE_ANIM[n]
- # n : an integer; the ID of the animation you want played. Defaults to
- # 0, which means no animation played.
- #
- # \COLLAPSE_TYPE[n]
- # n : the ID of the collapse effect you want played. These are:
- # 0 => Default Collapse Effect
- # 1 => Shrink
- # 2 => Horizontal Expansion
- # 3 => Vertical Expansion
- # 4 => Contract and Ascend
- # 5 => Rotate
- # 6 => Shake and Descend
- # 7 => Divides Vertically and Separates Vertically
- # 8 => Divides Horizontally and Separates Horizontally
- # 9 => Divides Vertically and Separates Horizontally
- # 10 => Divides Horizontally and Separates Vertically
- # 11 => Wave
- # 12 => Blur
- # 13 => Rotate Fast & Shrink
- # 14 => Eraser
- # 15 => Pixel Eraser
- #
- # \COLLAPSE_TYPE_RANDOM
- # randomly chooses a collapse type for each instance of the enemy
- #
- # \COLLAPSE_COLOR[#hex]
- # can specify in hexadecimal the colour it changes to when collapsing.
- # [#rrggbbaa]
- # Examples: \collapse_color[#FFFFFF] # Black
- # \collapse_colour[#FF808080] # Default
- #
- # \COLLAPSE_BLEND[n]
- # n : the blend type. 0 => Normal; 1 => Addition; 2 => Subtraction
- # The default is 1. You might want to set it to 0 for pixel away or
- # blur effects.
- #==============================================================================
- #==============================================================================
- # ** RPG::Enemy
- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- # Summary of Changes:
- # new methods - collapse_animation, collapse_type, collapse_blend, effect_ids
- #==============================================================================
- class RPG::Enemy
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Collapse Animation
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def collapse_animation
- @collapse_anim = self.note[/\\COLLAPSE_ANIM\[(\d+)\]/i] != nil ? $1.to_i : 0 if @collapse_anim.nil?
- return @collapse_anim
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Collapse Type
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def collapse_type
- return $1.to_i if self.note[/\\COLLAPSE_TYPE\[(\d+)\]/i] != nil
- array = self.effect_ids
- return array[rand (array.size)] if self.note[/\\COLLAPSE_TYPE_RANDOM/i] != nil
- return 0
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Collapse Colour
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def collapse_color
- r, g, b, a = 255, 128, 128, 128
- if self.note[/\\COLLAPSE_COLOU?R\[#([\dABCDEF]+)\]/i] != nil
- r = $1[0, 2].to_i (16) if $1.size >= 2
- g = $1[2, 2].to_i (16) if $1.size >= 4
- b = $1[4, 2].to_i (16) if $1.size >= 6
- a = $1[6, 2].to_i (16) if $1.size >= 8
- end
- return r, g, b, a
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Collapse Blend
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def collapse_blend
- return $1.to_i % 3 if self.note[/\\COLLAPSE_BLEND\[(\d+)\]/i] != nil
- return 1
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Effect IDs
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def effect_ids
- effects = []
- for i in 0...16 do effects.push (i) end
- return effects
- end
- end
- #==============================================================================
- # ** Game Enemy
- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- # Summary of Changes:
- # new instance variable - collapse_type
- # aliased method - perform_collapse
- #==============================================================================
- class Game_Enemy
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Public Instance Variable
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- attr_reader :collapse_type # The collapse type for this enemy
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Perform Collapse
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- alias malg_mino_prfrmclpse_mons_0ki2 perform_collapse
- def perform_collapse (*args)
- # Do not play Sound Effect here unless no animation is specified
- if enemy.collapse_animation > 0 && $game_temp.in_battle && dead?
- @collapse = true
- self.animation_id = enemy.collapse_animation
- else
- # Run Original Method
- malg_mino_prfrmclpse_mons_0ki2 (*args)
- end
- @collapse_type = enemy.collapse_type
- end
- end
- #==============================================================================
- # ** Sprite_Battler
- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- # Summary of Changes:
- # aliased methods - update_collapse, x=, y=
- # new method - execute_special_collapse, create_dup_sprite
- #==============================================================================
- class Sprite_Battler
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Update Collapse
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- alias malg_mint_moncollapse_upd_0kh2 update_collapse
- def update_collapse (*args)
- if @battler.actor?
- malg_mint_moncollapse_upd_0kh2 (*args) # Run Original Method
- return
- end
- # If animation, hold off on executing collapse
- if self.animation?
- # Restore lost time
- @effect_duration += 1
- return
- end
- execute_special_collapse (@battler.collapse_type)
- malg_mint_moncollapse_upd_0kh2 (*args) # Run Original Method
- self.color.set (*@battler.enemy.collapse_color)
- self.blend_type = @battler.enemy.collapse_blend
- # Update Duplicate Sprite Opacity
- @dup_sprite.opacity = self.opacity if @dup_sprite != nil
- # If Ending the effect
- if @effect_duration == 0
- # Restore Zoom
- self.zoom_x = 1
- self.zoom_y = 1
- # Free @dup_sprite (not dispose because of Cache)
- @dup_sprite = nil
- elsif @effect_duration == 47 && @battler.enemy.collapse_animation > 0
- # Play Collapse SE once animation has finished.
- Sound.play_enemy_collapse
- end
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Set X
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- alias mal_minto_setx_collapse_0kh3 x=
- def x= (n, *args)
- # Override general x setting when collapsing
- return if @effect_type == COLLAPSE && n == @battler.screen_x
- mal_minto_setx_collapse_0kh3 (n, *args)
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Set Y
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- alias algbmod_ntomi_yset_cllpse_9gb2 y=
- def y= (n, *args)
- # Override general x setting when collapsing
- return if @effect_type == COLLAPSE && n == @battler.screen_y
- algbmod_ntomi_yset_cllpse_9gb2 (n, *args)
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Create Duplicate Sprite
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def create_dup_sprite (split_type = 0)
- # Create new sprite of the same class and set components
- @dup_sprite = self.class.new (self.viewport, @battler)
- @dup_sprite.x, @dup_sprite.y = self.x, self.y
- @dup_sprite.blend_type = 1
- @dup_sprite.color.set(255, 128, 128, 128)
- @dup_sprite.update
- if split_type == 0 # Vertical Split
- @dup_sprite.src_rect.width = @dup_sprite.ox
- self.src_rect.x = self.ox
- self.x += self.ox
- elsif split_type == 1 # Horizontal Split
- @dup_sprite.src_rect.height = @dup_sprite.oy / 2
- self.src_rect.y = self.oy / 2
- self.y += self.oy / 2
- end
- end
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # * Execute Special Collapse
- # collapse_type (type of collapse)
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def execute_special_collapse (collapse_type)
- case collapse_type
- when 1 # Shrink
- self.zoom_x -= 0.02
- self.zoom_y -= 0.02
- self.y -= (0.01*self.height)
- when 2 # Horizontal Expansion
- self.zoom_x += 0.05
- when 3 # Vertical Expansion
- self.zoom_y += 0.05
- self.zoom_x -= 0.02
- when 4 # Spring Ascent
- if @effect_duration >= 24 then
- self.zoom_y = [self.zoom_y - 0.02, 0].max
- self.zoom_x = [self.zoom_x + 0.01, 1.24].min
- else
- self.zoom_x -= 0.115
- self.zoom_y += 0.6
- end
- when 5 # Rotate
- self.zoom_x -= 0.03
- self.zoom_y += 0.05
- self.angle += 7.5
- when 6 # Shake Descent
- if @effect_duration >= 44
- self.ox -= 1
- else
- self.ox += ((@effect_duration / 4) % 2) == 0 ? 2 : -2
- end
- self.src_rect.y -= self.bitmap.rect.height / 48
- when 7 # Vertical Division; Vertical Movement
- create_dup_sprite (0) if @effect_duration == 47 # Split Vertically
- self.y += [self.oy / 96, 1].max
- @dup_sprite.y -= [@dup_sprite.oy / 96, 1].max
- when 8 # Horizontal Division; Horizontal Movement
- create_dup_sprite (1) if @effect_duration == 47 # Split Horizontally
- self.x += [self.ox / 48, 1].max
- @dup_sprite.x -= [@dup_sprite.ox / 48, 1].max
- when 9 # Vertical Division; Horizontal Movement
- create_dup_sprite (0) if @effect_duration == 47 # Split Vertically
- self.x += [self.ox / 48, 1].max
- @dup_sprite.x -= [@dup_sprite.ox / 48, 1].max
- when 10 # Horizontal Division; Vertical Movement
- create_dup_sprite (1) if @effect_duration == 47 # Split Horizontally
- self.y += [self.oy / 96, 1].max
- @dup_sprite.y -= [@dup_sprite.oy / 96, 1].max
- when 11 # Wave
- self.wave_amp += 1
- when 12 # Blur
- self.bitmap = self.bitmap.dup if @effect_duration == 47
- self.bitmap.blur if @effect_duration % 4 == 0
- when 13 # Fast Rotate and Shrink
- self.angle += 48 - @effect_duration
- execute_special_collapse (1)
- when 14 # Eraser
- self.bush_opacity = 0
- self.bush_depth += (self.height / 48.0).ceil
- when 15 # Pixel Eraser
- if @effect_duration == 47
- self.bitmap = self.bitmap.dup
- @pixels_to_erase = []
- for i in 0...self.bitmap.width
- for j in 0...self.bitmap.height
- @pixels_to_erase.push ([i, j])
- end
- end
- @pixel_erase_rate = @pixels_to_erase.size / 48
- end
- erase_color = Color.new (255, 255, 255, 0)
- @pixel_erase_rate.times do
- x, y = @pixels_to_erase.delete_at (rand (@pixels_to_erase.size))
- self.bitmap.set_pixel (x, y, erase_color)
- end
- end
- end
- end
复制代码 |
|