Custom Bushes
This simple script allows changing how the "bush" effect is displayed in both the player and events. It's very easy to use, paste it above the script Main and follow the instructions I'll give below.Author: Wecoc
First Release: September 2016
Last Version: October 2016
Terms of use
- Giving credits (Wecoc) for using this script is optional, but appreciated.
- You can repost this code.
- You can edit this code freely, and distribute the edits as well.
- This code can be used on commercial games.
Ruby:
#==============================================================================
# ** Custom Bush v1.2
#------------------------------------------------------------------------------
#Author: Wecoc (credits are optional)
#==============================================================================
module Custom_Bush
DEPTH = 12 # Default depth
COLOR = Color.new(0, 0, 0, 0) # Default color
OPACITY = 160 # Default opacity
TEMPLATE = '' # Template
end
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
attr_writer:bush_depth
attr_accessor :bush_color
attr_accessor :bush_opacity
attr_accessor :bush_template
alias custom_bush_ini initialize unless $@
def initialize
custom_bush_ini
@bush_depth = Custom_Bush::DEPTH
@bush_color = Custom_Bush::COLOR
@bush_opacity = Custom_Bush::OPACITY
@bush_template = Custom_Bush::TEMPLATE
end
def bush_depth
return 0 if @tile_id > 0 or @always_on_top
if @jump_count == 0 and $game_map.bush?(@x, @y)
return @bush_depth
else
return 0
end
end
end
#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character < RPG::Sprite
attr_accessor :bush_color
attr_accessor :bush_opacity
attr_accessor :bush_template
def initialize(viewport, character = nil)
super(viewport)
@character = character
@bush_depth = 0
@bush_color = Custom_Bush::COLOR
@bush_opacity = Custom_Bush::OPACITY
@bush_template = Custom_Bush::TEMPLATE
update
end
def bush_depth
@bush_depth
end
def bush_depth=(bush_depth)
@bush_depth = bush_depth
end
def refresh_bush
return if @bush_depth == 0
bush_depth = @bush_depth
if @template_bitmap != nil
bush_depth += @template_bitmap.height / 2
end
for iy in 0...bush_depth
for ix in 0...bitmap.width
for dy in 0..4
x = ix
y = (@ch * dy) - bush_depth + iy
bitmap_color = self.bitmap.get_pixel(x, y)
if @template_bitmap != nil && iy < @template_bitmap.height
tx = ix % (bitmap.width / 4)
tx = tx % @template_bitmap.width
ty = iy
template_color = @template_bitmap.get_pixel(tx, ty)
next if template_color.alpha == 0
next if template_color == Color.new(0,0,0)
end
next if bitmap_color.alpha == 0
r = bitmap_color.red
g = bitmap_color.green
b = bitmap_color.blue
bc = @bush_color
r = (r * (255 - bc.alpha) + (bc.red* bc.alpha)) / 255
g = (g * (255 - bc.alpha) + (bc.green * bc.alpha)) / 255
b = (b * (255 - bc.alpha) + (bc.blue* bc.alpha)) / 255
a = (bitmap_color.alpha * @bush_opacity) / 255
self.bitmap.set_pixel(x, y, Color.new(r,g,b,a))
end
end
end
end
def update
super
if @bush_template != @character.bush_template or @template_bitmap.nil?
bush_template = @character.bush_template
if bush_template != ''
@template_bitmap = RPG::Cache.picture(bush_template) rescue nil
else
@template_bitmap = nil
end
end
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue or
@bush_depth != @character.bush_depth or
@bush_color != @character.bush_color or
@bush_opacity != @character.bush_opacity or
@bush_template != @character.bush_template
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue).clone
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue).clone
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
self.bush_depth = @character.bush_depth
self.bush_color = @character.bush_color
self.bush_opacity = @character.bush_opacity
self.bush_template = @character.bush_template
refresh_bush
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
self.opacity = @character.opacity
self.blend_type = @character.blend_type
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end
Instructions
On the very beginning of the code you can change the default bush depth, color and opacity. You can also define Picture as a template.
You can change that from an event as well, here's how you would change the bush depth on the player or a certain event:
$game_player.bush_depth = VALUE
$game_map.events[1].bush_depth = VALUE
By default it's 12, if you change it to 0 that would mean the bush effect would never effect that event.
Similarly, this changes the color of the sprite part inside the bush. Eatch RGBA value goes from 0 to 255.
$game_player.bush_color = Color.new(R, G, B, A)
By default on XP only the opacity is changed, but changing the color is a nice touch in my opinion.
To change the opacity use this:
$game_player.bush_opacity = VALUE
Finally, you can define a template like this, and using a width higher than the character's will work like an animated template, like this.
$game_player.bush_template = 'PICTURE NAME'
Spoiler: Screen
Here I defined that second template example on all those events and the player. I also changed the opacity to 0 and the depth on some of the events.
I hope you like it
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
本贴来自国际rpgmaker官方论坛作者:Wecoc处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/custom-bushes.138663/
页:
[1]