Project1

标题: 【电影模式对话】不妨碍原有对话模式 [打印本页]

作者: 癫狂侠客    时间: 2011-8-22 15:42
标题: 【电影模式对话】不妨碍原有对话模式
本帖最后由 忧雪の伤 于 2011-8-22 22:21 编辑

某侠为做R剧和电影剧情的同仁们写的脚本,不需要导入任何素材,只有一点脚本。
默认50号开关是打开电影模式的开关,50号变量是电影模式中对话不按空格自动进行的等待时间。
本电影模式与RM原本的对话模式不冲突,可以随时随意的转换,甚至可以做好了的剧情分歧一下就变成了电影的回忆剧情,至于用法亲们自己研究吧,下面是贴图:
电影模式.rar (193.23 KB, 下载次数: 2162)

没有找到插入脚本!!:L
脚本如下:
  1. #==============================================================================
  2. # ■ Window_MSGMovie
  3. #------------------------------------------------------------------------------
  4. #  电影模式下显示文章的信息窗口。
  5. #==============================================================================

  6. # 电影模式开关  默认为 50号开关
  7. $movie_switches = 50
  8. # 电影模式下等待关闭文字 默认 50号变量
  9. $close_speak = 50


  10. class Window_MSGMovie < Window_Base
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化状态
  13.   #--------------------------------------------------------------------------
  14.   def initialize
  15.     super(0,400,640,80)
  16.     self.contents = Bitmap.new(width, height)
  17.     self.windowskin = Bitmap.new(30,30)
  18.     $game_temp.message_window_showing = false
  19.     self.z = 199
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 处理信息结束
  23.   #--------------------------------------------------------------------------
  24.   def end_MSG
  25.     self.active = false
  26.     self.pause = false
  27.     self.contents.clear
  28.     # 呼叫信息调用
  29.     if $game_temp.message_proc != nil
  30.       $game_temp.message_proc.call
  31.     end
  32.     # 清除文章、选择项、输入数值的相关变量
  33.     $game_temp.message_text = nil
  34.     $game_temp.message_proc = nil
  35.     $game_temp.choice_start = 99
  36.     $game_temp.choice_max = 0
  37.     $game_temp.choice_cancel_type = 0
  38.     $game_temp.choice_proc = nil
  39.     $game_temp.num_input_start = 99
  40.     $game_temp.num_input_variable_id = 0
  41.     $game_temp.num_input_digits_max = 0
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 刷新
  45.   #--------------------------------------------------------------------------
  46.   def refresh
  47.     self.contents.clear
  48.     x = 0
  49.     if $game_temp.message_text != nil
  50.       temp_text = $game_temp.message_text.clone
  51.       movie_text = $game_temp.message_text.clone
  52.       # 模拟执行(计算文字位置)
  53.       text = ""
  54.       # 转换字符
  55.       temp_text.gsub!(/\\\\/) { "\000" }
  56.       temp_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  57.       temp_text.gsub!(/\\[Vv]\[([0-9]+)\]/) { "\002[#{$1}]" }
  58.       temp_text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }
  59.       while((c = temp_text.slice!(/./m)) != nil)
  60.         if c == "\000"
  61.           c = "\\"
  62.         end
  63.         if c == "\001"
  64.           # 更改文字色
  65.           temp_text.sub!(/\[([0-9]+)\]/, "")
  66.           color = $1.to_i
  67.           c = ""
  68.           text += c
  69.           next
  70.         end
  71.         if c == "\002"
  72.           c = $game_variables[$1.to_i].to_s
  73.           temp_text.sub!(/\[([0-9]+)\]/, "")
  74.           text += c
  75.           next
  76.         end
  77.         if c == "\003"
  78.           temp_text.sub!(/\[([0-9]+)\]/, "")
  79.           c = $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  80.           text += c
  81.           next
  82.         end
  83.         if c == "\n"
  84.           c = ""
  85.           text += c
  86.           next
  87.         end
  88.         text += c
  89.       end
  90.       # 计算文字居中位置
  91.       move_x = (640 - self.contents.text_size(text).width) / 2 -20
  92.       # 执行 (显示文字)
  93.       movie_text.gsub!(/\\\\/) { "\000" }
  94.       movie_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  95.       movie_text.gsub!(/\\[Vv]\[([0-9]+)\]/) { "\002[#{$1}]" }
  96.       movie_text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }
  97.       while((m = movie_text.slice!(/./m)) != nil)
  98.         if m == "\000"
  99.           m = "\\"
  100.         end
  101.         if m == "\001"
  102.           # 更改文字色
  103.           movie_text.sub!(/\[([0-9]+)\]/, "")
  104.           color = $1.to_i
  105.           if color >= 0 and color <= 7
  106.             self.contents.font.color = text_color(color)
  107.           end
  108.           # 下面的文字
  109.           next
  110.         end
  111.         if m == "\002"
  112.           m = $game_variables[$1.to_i].to_s
  113.           movie_text.sub!(/\[([0-9]+)\]/, "")
  114.         end
  115.         if m == "\003"
  116.           movie_text.sub!(/\[([0-9]+)\]/, "")
  117.           m = $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  118.         end
  119.         if m == "\n"
  120.           m = ""
  121.         end
  122.         self.contents.draw_text(move_x + x,0,self.contents.text_size(m).width,32,m)
  123.         x += self.contents.text_size(m).width
  124.       end
  125.       # 返回系统文字颜色
  126.       self.contents.font.color = normal_color
  127.       # 清理显示文字
  128.       $game_temp.message_text = nil
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 刷新画面
  133.   #--------------------------------------------------------------------------
  134.   def update
  135.     super
  136.     # 等待循环
  137.     if $game_variables[$close_speak] >= 2
  138.       $game_variables[$close_speak] -= 1
  139.     end
  140.     if $game_variables[$close_speak] == 1
  141.       $game_variables[$close_speak] = 0
  142.       end_MSG
  143.     end
  144.     # 当C键按下时
  145.     if Input.trigger?(Input::C) and $game_variables[$close_speak] == 0
  146.       end_MSG
  147.     end
  148.     # 显示文字
  149.     if $game_temp.message_text != nil
  150.       refresh
  151.       return
  152.     end
  153.   end
  154. end

  155. # --重定义Scene_Map类
  156. class Scene_Map
  157.   #--------------------------------------------------------------------------
  158.   # ● 主处理
  159.   #--------------------------------------------------------------------------
  160.   def main
  161.     # 生成活动块
  162.     @spriteset = Spriteset_Map.new
  163.     # 生成信息窗口
  164.     @message_window = Window_Message.new
  165.     # 生成电影模式对话窗口
  166.     @MSG_Movie_Window = Window_MSGMovie.new
  167.     # 电影模式黑框
  168.     @black = Sprite.new
  169.     @black.bitmap = Bitmap.new(640,480)
  170.     @black.bitmap.fill_rect(0,0,640,50,Color.new(25,25,25,255))
  171.     @black.bitmap.fill_rect(0,400,640,80,Color.new(25,25,25,255))
  172.     @black.opacity = 0
  173.     # 执行过渡
  174.     Graphics.transition
  175.     # 主循环
  176.     loop do
  177.       # 刷新游戏画面
  178.       Graphics.update
  179.       # 刷新输入信息
  180.       Input.update
  181.       # 刷新画面
  182.       update
  183.       # 如果画面切换的话就中断循环
  184.       if $scene != self
  185.         break
  186.       end
  187.     end
  188.     # 准备过渡
  189.     Graphics.freeze
  190.     # 释放活动块
  191.     @spriteset.dispose
  192.     # 释放信息窗口
  193.     @message_window.dispose
  194.     # 释放信息窗口
  195.     @MSG_Movie_Window.dispose
  196.     # 标题画面切换中的情况下
  197.     if $scene.is_a?(Scene_Title)
  198.       # 淡入淡出画面
  199.       Graphics.transition
  200.       Graphics.freeze
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 刷新画面
  205.   #--------------------------------------------------------------------------
  206.   def update
  207.     # 循环
  208.     loop do
  209.       # 按照地图、实例、主角的顺序刷新
  210.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  211.       #  的机会的重要因素)
  212.       $game_map.update
  213.       $game_system.map_interpreter.update
  214.       $game_player.update
  215.       # 系统 (计时器)、画面刷新
  216.       $game_system.update
  217.       $game_screen.update
  218.       # 如果主角在场所移动中就中断循环
  219.       unless $game_temp.player_transferring
  220.         break
  221.       end
  222.       # 执行场所移动
  223.       transfer_player
  224.       # 处理过渡中的情况下、中断循环
  225.       if $game_temp.transition_processing
  226.         break
  227.       end
  228.     end
  229.     # 刷新活动块
  230.     @spriteset.update
  231.     # 选择刷新
  232.     if $game_switches[$movie_switches] == false
  233.       # 刷新信息窗口
  234.       @message_window.update
  235.       # 电影模式的黑框
  236.       @black.opacity = 0
  237.     else
  238.       # 刷新电影模式信息
  239.       @MSG_Movie_Window.update
  240.       # 电影模式的黑框
  241.       @black.opacity = 250
  242.     end
  243.     # 游戏结束的情况下
  244.     if $game_temp.gameover
  245.       # 切换的游戏结束画面
  246.       $scene = Scene_Gameover.new
  247.       return
  248.     end
  249.     # 返回标题画面的情况下
  250.     if $game_temp.to_title
  251.       # 切换到标题画面
  252.       $scene = Scene_Title.new
  253.       return
  254.     end
  255.     # 处理过渡中的情况下
  256.     if $game_temp.transition_processing
  257.       # 清除过渡处理中标志
  258.       $game_temp.transition_processing = false
  259.       # 执行过渡
  260.       if $game_temp.transition_name == ""
  261.         Graphics.transition(20)
  262.       else
  263.         Graphics.transition(40, "Graphics/Transitions/" +
  264.           $game_temp.transition_name)
  265.       end
  266.     end
  267.     # 显示信息窗口中的情况下
  268.     if $game_temp.message_window_showing
  269.       return
  270.     end
  271.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  272.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  273.       # 不是在事件执行中或者禁止遇敌中
  274.       unless $game_system.map_interpreter.running? or
  275.              $game_system.encounter_disabled
  276.         # 确定队伍
  277.         n = rand($game_map.encounter_list.size)
  278.         troop_id = $game_map.encounter_list[n]
  279.         # 队伍有效的话
  280.         if $data_troops[troop_id] != nil
  281.           # 设置调用战斗标志
  282.           $game_temp.battle_calling = true
  283.           $game_temp.battle_troop_id = troop_id
  284.           $game_temp.battle_can_escape = true
  285.           $game_temp.battle_can_lose = false
  286.           $game_temp.battle_proc = nil
  287.         end
  288.       end
  289.     end
  290.     # 按下 B 键的情况下
  291.     if Input.trigger?(Input::B)
  292.       # 不是在事件执行中或菜单禁止中
  293.       unless $game_system.map_interpreter.running? or
  294.              $game_system.menu_disabled
  295.         # 设置菜单调用标志以及 SE 演奏
  296.         $game_temp.menu_calling = true
  297.         $game_temp.menu_beep = true
  298.       end
  299.     end
  300.     # 调试模式为 ON 并且按下 F9 键的情况下
  301.     if $DEBUG and Input.press?(Input::F9)
  302.       # 设置调用调试标志
  303.       $game_temp.debug_calling = true
  304.     end
  305.     # 不在主角移动中的情况下
  306.     unless $game_player.moving?
  307.       # 执行各种画面的调用
  308.       if $game_temp.battle_calling
  309.         call_battle
  310.       elsif $game_temp.shop_calling
  311.         call_shop
  312.       elsif $game_temp.name_calling
  313.         call_name
  314.       elsif $game_temp.menu_calling
  315.         call_menu
  316.       elsif $game_temp.save_calling
  317.         call_save
  318.       elsif $game_temp.debug_calling
  319.         call_debug
  320.       end
  321.     end
  322.   end
  323. end
  324. #=============================================================================
  325. # 本脚本来自66RPG,如使用请保留此信息
  326. #[癫狂侠客]书写脚本
  327. #=============================================================================
复制代码

作者: lx527741591    时间: 2011-8-22 16:28
本帖最后由 lx527741591 于 2011-8-22 16:30 编辑

正想要呢,收下啦~~~
这个和呼出对话框脚本会不会冲突捏?
那个脚本最好用代码发下
代码复制
  1.  

作者: 癫狂侠客    时间: 2011-8-22 16:32
lx527741591 发表于 2011-8-22 16:28
正想要呢,收下啦~~~
这个和呼出对话框脚本会不会冲突捏?
那个脚本最好用代码发下

不冲突,你可以看看范例,就明白了,
范例里一个NPC是打开关闭电影模式的,一个是对话框显示的,打开关闭互不冲突!
作者: 忧雪の伤    时间: 2011-8-23 00:10
我勒个去,还不冲突,直接重定义Scene_Map......会死人的知道不。
作者: 癫狂侠客    时间: 2011-8-29 13:28
977590559 发表于 2011-8-29 13:14
文字自动消失只有第一句到第二句好使。。。

从新设置变量,就可以,因为变量会自动置零
作者: sirenke    时间: 2011-8-29 17:08
很不错呢,这样文字就方便了,长时间都没怎么注意文字
作者: fux2    时间: 2011-9-4 00:06
本帖最后由 fux2 于 2011-9-4 00:11 编辑

可移植性很低,无追加定义全部覆盖定义,兼容性很差,两个全局变量也毫无疑义,不如用常量,可以直接继承message却自行重写,浪费了效率,参考性也很低。
建议侠客去参考一下某些前辈的脚本,然后补充自己的不足之处。
作者: 月下黄昏    时间: 2011-11-4 20:41
就是这个非常好楼主辛苦啦!!!
作者: 鼎风乱影    时间: 2011-11-5 17:29
你写Scene_Map的时候为什么不用别名的方法啊
作者: daosi    时间: 2013-3-31 04:09
呜呜呜,有了这个脚本就不用繁琐的弄对话框了呜呜呜非常感谢
作者: 幻哥    时间: 2013-5-12 01:54
为什么放我游戏不行?移植不了啊。
作者: 漫天游弋    时间: 2013-10-30 18:58
就是这个!找了好久,果断好评
作者: zmz6668    时间: 2013-12-25 20:39
了不起,癫狂侠客真了不起.您辛苦了.可惜没有关于通行判定的教程.要是能有个通行判定

的双远景图脚本.或者三远景图脚本.那就好了.希望你能出一个商业素材使用教程.或通行

判定的教程




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1