设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 81|回复: 0

[转载发布] Custom Bushes

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    6120

    主题

    864

    回帖

    3万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    26247
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    33261

    灌水之王

    发表于 2026-7-19 09:18:33 | 显示全部楼层 |阅读模式
    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:       
    1. #==============================================================================
    2. # ** Custom Bush v1.2
    3. #------------------------------------------------------------------------------
    4. #  Author: Wecoc (credits are optional)
    5. #==============================================================================
    6. module Custom_Bush
    7.   DEPTH = 12                    # Default depth
    8.   COLOR = Color.new(0, 0, 0, 0) # Default color
    9.   OPACITY = 160                 # Default opacity
    10.   TEMPLATE = ''                 # Template
    11. end
    12. #==============================================================================
    13. # ** Game_Character
    14. #==============================================================================
    15. class Game_Character
    16.   attr_writer  :bush_depth
    17.   attr_accessor :bush_color
    18.   attr_accessor :bush_opacity
    19.   attr_accessor :bush_template
    20.   alias custom_bush_ini initialize unless $@
    21.   def initialize
    22.     custom_bush_ini
    23.     @bush_depth = Custom_Bush::DEPTH
    24.     @bush_color = Custom_Bush::COLOR
    25.     @bush_opacity = Custom_Bush::OPACITY
    26.     @bush_template = Custom_Bush::TEMPLATE
    27.   end
    28.   def bush_depth
    29.     return 0 if @tile_id > 0 or @always_on_top
    30.     if @jump_count == 0 and $game_map.bush?(@x, @y)
    31.       return @bush_depth
    32.     else
    33.       return 0
    34.     end
    35.   end
    36. end
    37. #==============================================================================
    38. # ** Sprite_Character
    39. #==============================================================================
    40. class Sprite_Character < RPG::Sprite
    41.   attr_accessor :bush_color
    42.   attr_accessor :bush_opacity
    43.   attr_accessor :bush_template
    44.   def initialize(viewport, character = nil)
    45.     super(viewport)
    46.     @character = character
    47.     @bush_depth = 0
    48.     @bush_color = Custom_Bush::COLOR
    49.     @bush_opacity = Custom_Bush::OPACITY
    50.     @bush_template = Custom_Bush::TEMPLATE
    51.     update
    52.   end
    53.   def bush_depth
    54.     @bush_depth
    55.   end
    56.   def bush_depth=(bush_depth)
    57.     @bush_depth = bush_depth
    58.   end
    59.   def refresh_bush
    60.     return if @bush_depth == 0
    61.     bush_depth = @bush_depth
    62.     if @template_bitmap != nil
    63.       bush_depth += @template_bitmap.height / 2
    64.     end
    65.     for iy in 0...bush_depth
    66.       for ix in 0...bitmap.width
    67.         for dy in 0..4
    68.           x = ix
    69.           y = (@ch * dy) - bush_depth + iy
    70.           bitmap_color = self.bitmap.get_pixel(x, y)
    71.           if @template_bitmap != nil && iy < @template_bitmap.height
    72.             tx = ix % (bitmap.width / 4)
    73.             tx = tx % @template_bitmap.width
    74.             ty = iy
    75.             template_color = @template_bitmap.get_pixel(tx, ty)
    76.             next if template_color.alpha == 0
    77.             next if template_color == Color.new(0,0,0)
    78.           end
    79.           next if bitmap_color.alpha == 0
    80.           r = bitmap_color.red
    81.           g = bitmap_color.green
    82.           b = bitmap_color.blue
    83.           bc = @bush_color
    84.           r = (r * (255 - bc.alpha) + (bc.red  * bc.alpha)) / 255
    85.           g = (g * (255 - bc.alpha) + (bc.green * bc.alpha)) / 255
    86.           b = (b * (255 - bc.alpha) + (bc.blue  * bc.alpha)) / 255
    87.           a = (bitmap_color.alpha * @bush_opacity) / 255
    88.           self.bitmap.set_pixel(x, y, Color.new(r,g,b,a))
    89.         end
    90.       end
    91.     end
    92.   end
    93.   def update
    94.     super
    95.     if @bush_template != @character.bush_template or @template_bitmap.nil?
    96.       bush_template = @character.bush_template
    97.       if bush_template != ''
    98.         @template_bitmap = RPG::Cache.picture(bush_template) rescue nil
    99.       else
    100.         @template_bitmap = nil
    101.       end
    102.     end
    103.     if @tile_id != @character.tile_id or
    104.       @character_name != @character.character_name or
    105.       @character_hue != @character.character_hue or
    106.       @bush_depth != @character.bush_depth or
    107.       @bush_color != @character.bush_color or
    108.       @bush_opacity != @character.bush_opacity or
    109.       @bush_template != @character.bush_template
    110.       @tile_id = @character.tile_id
    111.       @character_name = @character.character_name
    112.       @character_hue = @character.character_hue
    113.       if @tile_id >= 384
    114.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,
    115.           @tile_id, @character.character_hue).clone
    116.         self.src_rect.set(0, 0, 32, 32)
    117.         self.ox = 16
    118.         self.oy = 32
    119.       else
    120.         self.bitmap = RPG::Cache.character(@character.character_name,
    121.           @character.character_hue).clone
    122.         @cw = bitmap.width / 4
    123.         @ch = bitmap.height / 4
    124.         self.ox = @cw / 2
    125.         self.oy = @ch
    126.         self.bush_depth = @character.bush_depth
    127.         self.bush_color = @character.bush_color
    128.         self.bush_opacity = @character.bush_opacity
    129.         self.bush_template = @character.bush_template
    130.         refresh_bush
    131.       end
    132.     end
    133.     self.visible = (not @character.transparent)
    134.     if @tile_id == 0
    135.       sx = @character.pattern * @cw
    136.       sy = (@character.direction - 2) / 2 * @ch
    137.       self.src_rect.set(sx, sy, @cw, @ch)
    138.     end
    139.     self.x = @character.screen_x
    140.     self.y = @character.screen_y
    141.     self.z = @character.screen_z(@ch)
    142.     self.opacity = @character.opacity
    143.     self.blend_type = @character.blend_type
    144.     if @character.animation_id != 0
    145.       animation = $data_animations[@character.animation_id]
    146.       animation(animation, true)
    147.       @character.animation_id = 0
    148.     end
    149.   end
    150. 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



    本贴来自国际rpgmaker官方论坛作者:Wecoc处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/custom-bushes.138663/

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-7-27 07:06 , Processed in 0.110067 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表