查看: 8387|回复: 8

[RMVA发布] (小题大做系列)Ryusa 的脚步声系统 v1.00a

[复制链接]
梦石
0
星屑
50
在线时间
248 小时
注册时间
2010-8-22
回帖
105
发表于 2014-11-7 13:03:07 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 YamazakiRyusa 于 2014-11-7 13:03 编辑

简述
本脚本还原了角色行走时的脚步声。
版本 1.00 Alpha

特性
实现了不同的地图标识响应不同的脚步声
同类脚步声的随机化

计划改进
不同护甲类型(轻、重、魔法)反馈不同脚步声
层叠元件的脚步声区分(通过判断方向)
若干 BUG 修复

需求
若干脚步声文件(范例中已经提供,故建议下载范例以获得声音素材)

使用方法
Step 1:下载 RSP-FSE_RequiredSE 音效文件包,解压到您的工程 Audio\SE 文件夹内

QQ截图20141107130153.png

Step 2:复制脚本粘贴到“插件脚本”之后

QQ截图20141107130201.png

Step 3:游戏中开启一号开关,以启用脚步声

QQ截图20141107130215.png

Step 4:Have Fun!

注释
——地形标识对应的声音类型
QQ截图20141107123223.png
0 - 无声
1 - 草地
2 - 沙地
3 - 雪地
4 - 木头
5 - 水·浅滩
6 - 石头
7 - 金属

——我想换个启用的开关
脚本的 84 行 $game_switches[1] 更改为 $game_switches[#你想要的开关编号]

——我想更换声音素材
两个方法,其一是文件名不变替换掉音频文件;其二也可以更改 Play SE 里面的判断部分
比如草地的脚步声素材按这个文件名替换掉就可以:
fst_grass_light_walk_00x.wav

——其他废话
@amount_of_xxx 是拿给随机数计算的某一类声音(比如草地脚步声)的数量,如果能直接通过文件数量判断更好,未来我也打算把脚步声素材按类型分到不同文件夹,然后 SE\Grass 下面是 001.wav 002.wav…,这样的话直接用代码算出文件数量更方便了。

BUGs
跑动时脚步声过于频繁
脚步声仍然有问题——仔细听了老滚里面的脚步声,其实是按顺序播放音频文件而不是随机的,如果连续三次都随到 1 不死板才怪,以后改进……

脚本

[pre lang="ruby" line="1"]#==============================================================================
# ■ Ryusa FootstepSE
#------------------------------------------------------------------------------
#   脚步声系统 v1.00 by Ryusa - Responced Footstep Sound Playback System
#    ·实现了不同的地图标识响应不同的脚步声 - Multi-terrain ID with different sounds
#    ·同类脚步声随机化 - Randomized sounds in every terrain type to make it more immersive!
#    未来计划改进: - Future update plant
#    ·不同护甲类型(轻、重、魔法)反馈不同脚步声 - Playing back with different armor type: Light, Heavy and Magic
#    ·层叠元件的脚步声区分(通过判断方向)
#------------------------------------------------------------------------------
#    素材来源申明 - WAV Resources Announcement
#    整合自《上古卷轴Ⅴ:天际》的 "IMMERSIVE SOUNDS - COMPENDIUM" MOD 资源包 by lazygecko
#    原素材(脚步声部分)来自 freesound.org 的如下贡献者:
#    ABouch, Halleck, DasDeer, Corsica-S, ddunkley, nickb1608, mallement,
#    Vosvoy, RutgerMuller, jwb4, cheeseheadburger, martinimeniscus
#==============================================================================

# Requirements
module RYUSA
  FootstepSE_Version = "1.00 Alpha"
end

# Functions
class FootstepSE
  include RYUSA
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
    @enable_debug    = true
    @volum           = 65 # Footstep Volum
    @amount_of_grass = 6  # 1 - Sounds Amount of Grass
    @amount_of_sand  = 6  # 2 - Sounds Amount of Sand
    @amount_of_snow  = 6  # 3 - Sounds Amount of Snow
    @amount_of_wood  = 6  # 4 - Sounds Amount of Wood
    @amount_of_water = 3  # 5 - Sounds Amount of Water
    @amount_of_stone = 3  # 6 - Sounds Amount of Stone
    @amount_of_metal = 6  # 7 - Sounds Amount of Metal
    @sets = [1, @amount_of_grass, @amount_of_sand, @amount_of_snow, @amount_of_wood, @amount_of_water, @amount_of_stone, @amount_of_metal]
    @terrain_mark   = 0
  end
  #--------------------------------------------------------------------------
  # ● Pre-process
  #--------------------------------------------------------------------------
  def play
    process if enable? && $game_player.moving?
    debug if @enable_debug
  end
  #--------------------------------------------------------------------------
  # ● Process
  #--------------------------------------------------------------------------
  def process
    play_se
  end
  #--------------------------------------------------------------------------
  # ● Play SE
  #--------------------------------------------------------------------------
  def play_se
    @terrain_mark = get_terrain_mark
    @dice = get_dice
    case @terrain_mark
      when 0 # No Sound
      when 1 # Glass
        Audio.se_play("Audio/SE/fst_grass_light_walk_00" + @dice.to_s,@volum)
      when 2 # Sand
        Audio.se_play("Audio/SE/fst_sand_light_walk_00" + @dice.to_s,@volum)
      when 3 # snow
        Audio.se_play("Audio/SE/fst_snow_light_walk_00" + @dice.to_s,@volum)
      when 4 # wood
        Audio.se_play("Audio/SE/fst_wood_light_walk_00" + @dice.to_s,@volum)
      when 5 # water
        Audio.se_play("Audio/SE/fst_water_heavy_run_00" + @dice.to_s,@volum)
      when 6 # stone
        Audio.se_play("Audio/SE/fst_stone_light_walk_00" + @dice.to_s,@volum)
      when 7 # metal
        Audio.se_play("Audio/SE/fst_metal_light_walk_00" + @dice.to_s,@volum)
      else return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● Get Flag
  #--------------------------------------------------------------------------
  def enable?
    return $game_switches[1]
  end
  #--------------------------------------------------------------------------
  # ● Get Terrain Mark
  #--------------------------------------------------------------------------
  def get_terrain_mark
    return $game_map.terrain_tag($game_player.x, $game_player.y)
  end
  #--------------------------------------------------------------------------
  # ● Get Dice
  #--------------------------------------------------------------------------
  def get_dice
    if enable?
      return rand(@sets[@terrain_mark] - 1) + 1 # Not include zero!
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● Debug
  #--------------------------------------------------------------------------
  def debug
    puts "-----------------------"
    puts "Footstep SE " + (enable? ? "Enable" : "Suspended")
    puts ($game_player.moving? ? "Moving..." : "Standby")
    puts "Player are " + ($game_player.dash? ? "dashing" : ($game_player.moving? ? "walking" : "standing"))
    puts "terrain Mark: " + @terrain_mark.to_s
    puts "Random Sound Index: " + get_dice.to_s
  end
end

#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#    Overwrite
#==============================================================================
class Game_Player
  alias FSSE_move_by_input move_by_input
  def move_by_input
    return if !movable? || $game_map.interpreter.running?
    move_straight(Input.dir4) if Input.dir4 > 0
    footstepse = FootstepSE.new
    footstepse.play
  end
end
[/pre]

下载
范例工程|音频文件包

故九江太守

梦石
0
星屑
314
在线时间
2158 小时
注册时间
2012-12-5
回帖
4323
发表于 2014-11-7 13:34:08 | 显示全部楼层
来个XP版本的
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-11-7 14:25:26 | 显示全部楼层
我也做过一个脚步声的脚本。
https://rpg.blue/thread-371589-1-1.html
喵呜=0大大也有一个足音
https://rpg.blue/home.php?mod=sp ... o=blog&id=13587

点评

高下立判了…… 赶紧抱回去学习2333  发表于 2014-11-9 11:42
回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
发表于 2014-11-7 16:56:26 | 显示全部楼层
求XP版本!!!!!
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-11-8 08:46:32 | 显示全部楼层
地形标识对应的声音类型刚好我的地形标志在其他地方用掉了···能换个别的方式吗?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
50
在线时间
248 小时
注册时间
2010-8-22
回帖
105
 楼主| 发表于 2014-11-9 11:48:25 | 显示全部楼层
chd114 发表于 2014-11-8 08:46
地形标识对应的声音类型刚好我的地形标志在其他地方用掉了···能换个别的方式吗? ...

如果区域 ID 没被占用就暂时先把
  1.   #--------------------------------------------------------------------------
  2.   # ● Get Terrain Mark
  3.   #--------------------------------------------------------------------------
  4.   def get_terrain_mark
  5.     return $game_map.terrain_tag($game_player.x, $game_player.y)
  6.   end
复制代码
替换成
  1.   get_terrain_mark
  2.     return $game_map.region_id($game_player.x, $game_player.y)
  3.   end
复制代码
未来再弄个判断让用于选择用地形标识还是区域 ID 好了

点评

Re: VIPArcher 我秀逗了,多谢指教2333  发表于 2014-11-11 17:27
写繁了,$game_player.terrain_tag 就可以了$game_player.region_id也一样  发表于 2014-11-9 12:24
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-11-9 12:03:22 | 显示全部楼层
YamazakiRyusa 发表于 2014-11-8 18:48
如果区域 ID 没被占用就暂时先把替换成未来再弄个判断让用于选择用地形标识还是区域 ID 好了 ...

话说我现在是混用工程,能不能直接用VX的区域处理来弄?

点评

试什么···  发表于 2014-11-11 22:15
VX没用过,你可以试试  发表于 2014-11-11 17:27
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
652
在线时间
59 小时
注册时间
2020-2-4
回帖
25
发表于 2020-2-7 17:57:32 | 显示全部楼层
游戏中怎么开启1开关啊.....
喜欢做游戏!
回复

使用道具 举报

梦石
0
星屑
652
在线时间
59 小时
注册时间
2020-2-4
回帖
25
发表于 2020-2-22 11:55:56 | 显示全部楼层
用事件开启了1开关 完全没用 怎么回事
喜欢做游戏!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部