查看: 9762|回复: 16

[RMVA发布] 【极简易】脸图替换为立绘(好吧我知道满大街都是)

[复制链接]

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2017-3-12 18:21:48 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

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

×
本帖最后由 百里_飞柳 于 2017-4-23 10:28 编辑

  ※  前言

好吧我知道满大街都是显示立绘的脚本了不用再说了
我只是单纯想体验下发个脚本帖子的快乐(逃)

  ※  简介

一句话:非常简易的,和默认显示脸图一般的(显示模式、显示位置等)显示单张立绘图片
注:只有在文本框位于底部时,才会转变为显示立绘
如果想要什么自由控制立绘移入移出、立绘多帧动态抖动特效等,请去找其他脚本,
我真记得日站有几个这种全能的脚本,但是相应地无奈便是,设置起来都十分麻烦。
所以我这次的试水便只是一个十分简易的,让你的默认对话框显示脸图机制变成显示立绘机制,且提供直接的开关操控,应该还算是可能实用的吧
其实我只是想玩下发帖排版

  ※  脚本

[fold=脸图映射到对应立绘显示][pre lang="ruby"]#==============================================================================
# ■ 脸图映射到对应立绘显示 by老鹰
#------------------------------------------------------------------------------
#  当对应开关开启时,修改脸图为对应的立绘图像显示
#   实现:在 window message 中新建了个精灵来控制显示立绘图像
#==============================================================================
# ● 更新记录
#  2017.4.23 V1.0.1 修复显示立绘的对话框后插入不显示立绘对话框时,会暂留上一次立绘图像的bug
#  2017.3.12 V1.0.0 发布
#==============================================================================
module EAGLE
  module Bustup
    #--------------------------------------------------------------------------
    # ● 存储立绘文件的路径
    #--------------------------------------------------------------------------
    DIR = "Graphics/Bustups/"   
    #--------------------------------------------------------------------------
    # ● 控制是否显示立绘的开关的序号
    #    - 当该序号的开关被开启时,脸图会被替换成立绘
    #  【注意】
    #    - 当 显示文字 的位置不为 居下 时,不会显示立绘
    #  【格式】
    #    - 在 显示文字 命令中设置的 脸图文件 和 序号 ,如:face.png,序号0
    #      会被索引到 所设定 目录下的 face_0.png 立绘图像
    #    - 单张脸图文件中的脸图序号排列:
    #                    0 1 2 3
    #                    4 5 6 7
    #--------------------------------------------------------------------------
    S_ID = 1
    #--------------------------------------------------------------------------
    # ● 控制立绘/脸图默认朝向的开关的序号
    #   - 由于默认开关关闭,故默认立绘/脸图放在左侧,且文字自动缩进图像宽度
    #  【显示立绘时】
    #   - 1.当该序号的开关被关闭时,立绘显示在左侧,其左下角与屏幕左下角重合
    #   - 2.当该序号的开关被开启时,立绘显示在右侧,其右下角与屏幕右下角重合
    #  【显示脸图时】
    #   - 1.开关关闭时,为默认脸图显示方式
    #   - 2.开关开启时,脸图显示到对话框右侧
    #--------------------------------------------------------------------------
    S_ID_DIR = 2
    #--------------------------------------------------------------------------
    # ● 控制是否显示左右镜面翻转立绘/脸图的开关的序号
    #   - 当该序号的开关被开启时,启用镜面翻转
    #   - 注:脸图的镜面翻转可能会出现极少幅度的掉帧
    #--------------------------------------------------------------------------
    S_ID_MIRROR = 3
    #--------------------------------------------------------------------------
    # ● 设置显示立绘时左侧换行缩进的补充值的变量序号
    #  【显示立绘时实际的换行缩进值】
    #    - 立绘显示在左侧: 图像文件宽度 + 该序号变量的值
    #    - 立绘显示在右侧: 该序号变量的值
    #--------------------------------------------------------------------------
    V_ID_LINE_POS = 1
  end
end
#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias eagle_bustup_init initialize
  def initialize
    eagle_bustup_init
    create_bustup_sprite
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  alias eagle_bustup_dispose dispose
  def dispose
    eagle_bustup_dispose
    dispose_bustup
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  alias eagle_bustup_update update
  def update
    eagle_bustup_update
    update_bustup
  end
  #--------------------------------------------------------------------------
  # ● 生成显示立绘的精灵
  #--------------------------------------------------------------------------
  def create_bustup_sprite
    @fail = false  # 未找到立绘文件而显示脸图的标志
    @bustup_sprite = Sprite.new
    @bustup_sprite.bitmap = Bitmap.new(1,1)
    @bustup_sprite.visible = false
    @bustup_sprite.z = z + 1
  end
  #--------------------------------------------------------------------------
  # ● 随着对话框更新立绘
  #--------------------------------------------------------------------------
  def update_bustup
    if self.openness > 0
      # 对话框开启的情况
      @bustup_sprite.visible = true
      @bustup_sprite.opacity += 25 if @bustup_sprite.opacity < 255
    elsif self.openness < 255
      # 对话框关闭的情况
      if @bustup_sprite.opacity > 0
        @bustup_sprite.opacity -= 51
      else
        @bustup_sprite.visible = false
        @bustup_sprite.bitmap.dispose if @bustup_sprite.bitmap
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放立绘精灵
  #--------------------------------------------------------------------------
  def dispose_bustup
    @bustup_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● 翻页处理
  #--------------------------------------------------------------------------
  def new_page(text, pos)
    contents.clear
    draw_face_or_bustup
    reset_font_settings
    pos[:x] = new_line_x
    pos[:y] = 0
    pos[:new_x] = new_line_x
    pos[:height] = calc_line_height(text)
    clear_flags
  end
  #--------------------------------------------------------------------------
  # ● 绘制立绘or脸图
  #--------------------------------------------------------------------------
  def draw_face_or_bustup
    if(@position == 2 && $game_switches[EAGLE::Bustup::S_ID])
      draw_bustup($game_message.face_name, $game_message.face_index)
    else
      draw_face($game_message.face_name, $game_message.face_index)
    end
  end
  #--------------------------------------------------------------------------
  # ● 绘制脸图
  #--------------------------------------------------------------------------
  def draw_face(face_name, face_index, x = 0, y = 0, enabled = true)
    @bustup_sprite.bitmap = Bitmap.new(1,1)
    dir = $game_switches[EAGLE::Bustup::S_ID_DIR]
    x = dir ? (self.width - standard_padding * 2 - 96) : 0
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
    if $game_switches[EAGLE::Bustup::S_ID_MIRROR]
      contents.mirror_blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
    else
      contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
    end
    bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # ● 绘制立绘
  #--------------------------------------------------------------------------
  def draw_bustup(face_name, face_index)
    begin
      _face_name = face_name + '_' + face_index.to_s
      @bustup_sprite.bitmap = Cache.bustup(_face_name)
      @bustup_sprite.mirror = $game_switches[EAGLE::Bustup::S_ID_MIRROR]
      @bustup_sprite.opacity = 0      
      dir = $game_switches[EAGLE::Bustup::S_ID_DIR]
      @bustup_sprite.x = dir ? self.width - @bustup_sprite.bitmap.width : 0
      @bustup_sprite.y = Graphics.height - @bustup_sprite.bitmap.height
      @fail = false
    rescue
      draw_face(face_name, face_index)
      @fail = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取换行位置
  #--------------------------------------------------------------------------
  def new_line_x
    return 0 if $game_message.face_name.empty?
    if $game_switches[EAGLE::Bustup::S_ID] && !@fail
      # 显示立绘
      offset = $game_variables[EAGLE::Bustup::V_ID_LINE_POS]
      dir = $game_switches[EAGLE::Bustup::S_ID_DIR]
      offset += dir ? 0 : @bustup_sprite.bitmap.width
      return offset
    else
      # 显示脸图
      $game_switches[EAGLE::Bustup::S_ID_DIR] ? 0 : 112
    end
  end
end
module Cache
  #--------------------------------------------------------------------------
  # ● 获取立绘图像
  #--------------------------------------------------------------------------
  def self.bustup(filename)
    load_bitmap(EAGLE::Bustup::DIR, filename)
  end
end
class Bitmap
  #--------------------------------------------------------------------------
  # ● 镜像复制位图
  #--------------------------------------------------------------------------
  def mirror_blt(x, y, src_bitmap, src_rect, opacity = 255)
    _x = x + src_rect.width - 1
    _rect = src_rect.dup
    _rect.width = 1
    while(_x > x)
      self.blt(_x, y, src_bitmap, _rect, opacity)
      _x -= 1
      _rect.x += 1
    end
  end
end[/pre][/fold]
  ※  效果截图

(注:出现的立绘为本人的《实验观察记录》中助手的立绘,由 骸(微博:@骸呀骸呀) 触触绘制)

※ 立绘文件放置
注:由于立绘位置计算时只由文件大小决定,故最好图像左右不留空白
0.png

※ 实际事件中设置
注:显示文字指令后即可看到选择的脸图文件名、索引号
4.png

※ 显示立绘开关开启时
注:可利用变量来调整文字左侧缩进值
1.png

※ 显示立绘开关开启 + 显示到右侧开关开启
2.png

※ 显示到右侧开关开启
2-2.png

※ 显示立绘开关开启 + 镜像开关开启
3.png

※ 镜像开关开启
3-2.png

评分

参与人数 9星屑 +150 赞 +5 收起 理由
子叶子 + 1 精品文章
laodaTao + 1
龙夫三拳tan + 1 塞糖
garfeng + 1 塞糖
21世纪游戏吧 + 1 塞糖
樱花树下 + 8 整
king + 96 塞糖
涅炎 + 30 塞糖
W.Q.C. + 16 偷偷的扔个分就跑

查看全部评分

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-1-14
回帖
52
发表于 2017-4-17 15:39:01 | 显示全部楼层
不会搞立绘脚本,想(na)学(lai)习(yong)一下,发现立绘居然是骸姐画的!世界真小
回复

使用道具 举报

梦石
0
星屑
468
在线时间
132 小时
注册时间
2016-6-15
回帖
146
发表于 2017-4-17 17:36:44 | 显示全部楼层
好物支持正好需要这个作用
技能:Icon绘制,头像&立绘,VA行走图,地图绘制(全PS制作),脚本盲
回复

使用道具 举报

梦石
0
星屑
50
在线时间
18 小时
注册时间
2017-3-27
回帖
5
发表于 2017-5-1 18:06:24 | 显示全部楼层
....哪里下载啊。

点评

折叠框里面有脚本框  发表于 2017-5-1 18:18
回复

使用道具 举报

梦石
0
星屑
66
在线时间
396 小时
注册时间
2013-11-9
回帖
217
发表于 2017-6-1 19:33:48 | 显示全部楼层
{:2_259:}时隔好几年,我又回来啦
(๑ŐдŐ)b我决定这次要认真做一次游戏了.
回复

使用道具 举报

梦石
3
星屑
1802
在线时间
111 小时
注册时间
2016-1-25
回帖
78
发表于 2017-7-22 15:17:50 | 显示全部楼层
本帖最后由 daceice 于 2017-7-22 15:38 编辑

你好,我刚才试了一下但是不知道为什么都没有显示出来,嗯,当然连报错也没有。
是在脚本编辑的最下面,新建一个,然后贴进去?
图片位置我也反复检查过了,结果运行起来还是普通的方块脸图。
因为是新手,不知道使用脚本还有什么地方要改的吗?

=======================

啊,我发现有时候会出来,有时候不出来,完全找不到规律。

点评

1号开关需要打开  发表于 2019-2-11 09:34
在main的上方 其他脚本的下方  发表于 2017-7-22 16:12
日常唠嗑lof:http://daceice.lofter.com
回复

使用道具 举报

梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2019-2-11 09:35:26 | 显示全部楼层
超级好用了(✪▽✪),很简洁,但自由度又很高!

点评

喵喵喵?  发表于 2019-2-11 11:13
回复

使用道具 举报

梦石
0
星屑
1474
在线时间
41 小时
注册时间
2016-2-28
回帖
17
发表于 2021-4-3 00:57:25 | 显示全部楼层
大大 我想請問下 有辦法讓立繪在對話框下面,臉圖在對話框上面麼?

点评

謝謝大大的腳本,我弄好了~  发表于 2021-4-3 13:13
啊这...大佬这么晚还在逛论壇...orz  发表于 2021-4-3 01:07
臉圖本来就是在對話框上面吧...至于讓立繪在對話框下面...把脚本第92行改成@bustup_sprite.z = z - 1试试?  发表于 2021-4-3 01:06
92行改成 @bustup_sprite.z = z - 1,因为脸图依然是默认的绘制方式,只是新增了一个立绘绘制,把立绘精灵的z改成对话框下面就好  发表于 2021-4-3 01:05
做了5年RPG還沒有做出來的人
回复

使用道具 举报

梦石
0
星屑
1474
在线时间
41 小时
注册时间
2016-2-28
回帖
17
发表于 2021-4-3 01:08:08 | 显示全部楼层
alexmaxnudge 发表于 2021-4-3 00:57
大大 我想請問下 有辦法讓立繪在對話框下面,臉圖在對話框上面麼?

不好意思大大 我自己整出來了 謝謝您的腳本
做了5年RPG還沒有做出來的人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部