赞 | 5 |
VIP | 6 |
好人卡 | 15 |
积分 | 1 |
经验 | 12984 |
最后登录 | 2017-3-27 |
在线时间 | 248 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 248 小时
- 注册时间
- 2010-8-22
- 帖子
- 127
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 YamazakiRyusa 于 2011-8-1 11:11 编辑
简介:该脚本整合了 66RPG 原有的一个标题“流星雨”特效,另外增加了一个难度模式选项,以及随着光标切换到不同选项,底部的字幕会随之改变。特别注意,难度模式选项可选,需要游戏目录下的 HARDMARK.HMF(可以自行更改名称)文件校验。如此,便可以让游戏实现二周目功能。需要生成的文件详见第二个脚本。
额外提示:二周目可以用开关设置。进入难度模式时额外打开两个开关(详见 311 行 与 312 行)。其中,闪光属性的设置可以为,数据库的状态增加一个闪光状态,BUFF 状态大家都会设置了吧?攻击力、防御力 150% 啥的就靠 DIY 了。然后在队伍设置事件页,条件分歧当闪光开关打开时敌人全体增加闪光 BUFF 即可。
使用方法:复制脚本,放到 Main 脚本的前面;如果有把握的话也可以直接替换掉 Scene_Title 那个渣脚本。
①标题脚本:- #==============================================================================
- # ■ Scene_Title
- #------------------------------------------------------------------------------
- # 处理标题画面的类。
- #==============================================================================
- =begin
- 更改内容:
- · 增加天气效果,可以自由设定,目前为雨效果 by 66RPG
- · 增加难度模式选项,该选项由文件 HARDMODE.HMF 指定。该文件存在时则开启难度模式,
- 若文件不存在则选项不可用 by Ryusa
- · 取消了切换场景时 BGM 停止的指令 by 66RPG
- 修改/Ryusa 参考/66RPG、宇文隳、SmilP 日期/2011 年 7 月 29 日
- =end
- class Scene_Title
- WEATHER = 1 # 使用自定义效果(0:无,1:雨,2:暴风雨,3:雪,4:自定义)
- MAXNUMBER = 18 # 天气图片数量
-
- WEATHER_FILE = "Graphics/Pictures/TESTMODE.png"
- BLEND_TYPE = 1 # 合成方式(0:普通,1:加法,2:减法)
- WEATHER_X = 5 # X方向每回合减少象素
- WEATHER_Y = 5 # Y方向每回合减少象素
- WEATHER_OPACITY = 2 #每回合减低透明度
- START_OPACITY = 200 #出现时的透明度
- RAND_X = 1200 # 随机X范围
- RAND_Y = 600 # 随机Y范围
- HEIGHT = -600 # 出现时候的屏幕Y
- WIDTH = 100 # 出现时候的屏幕X
- #--------------------------------------------------------------------------
- # ● 住处理
- #--------------------------------------------------------------------------
- def main
- # 战斗测试的情况下
- if $BTEST
- battle_test
- return
- end
- # 载入数据库
- $data_actors = load_data("Data/Actors.rxdata")
- $data_classes = load_data("Data/Classes.rxdata")
- $data_skills = load_data("Data/Skills.rxdata")
- $data_items = load_data("Data/Items.rxdata")
- $data_weapons = load_data("Data/Weapons.rxdata")
- $data_armors = load_data("Data/Armors.rxdata")
- $data_enemies = load_data("Data/Enemies.rxdata")
- $data_troops = load_data("Data/Troops.rxdata")
- $data_states = load_data("Data/States.rxdata")
- $data_animations = load_data("Data/Animations.rxdata")
- $data_tilesets = load_data("Data/Tilesets.rxdata")
- $data_common_events = load_data("Data/CommonEvents.rxdata")
- $data_system = load_data("Data/System.rxdata")
- # 生成系统对像
- $game_system = Game_System.new
- # 生成标题图形
- @sprite = Sprite.new
- @sprite.bitmap = RPG::Cache.title($data_system.title_name)
- @ox = 0
- @oy = 0
- color1 = Color.new(255, 255, 255, 255)
- color2 = Color.new(255, 255, 255, 128)
- @rain_bitmap = Bitmap.new(7, 56)
- for i in 0..6
- @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
- end
- @storm_bitmap = Bitmap.new(34, 64)
- for i in 0..31
- @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
- @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
- @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
- end
- @snow_bitmap = Bitmap.new(6, 6)
- @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
- @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
- @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
- @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
- @sprites = []
- for i in 1..40
- sprite = Sprite.new
- case WEATHER
- when 1
- sprite.bitmap = @rain_bitmap
- when 2
- sprite.bitmap = @storm_bitmap
- when 3
- sprite.bitmap = @snow_bitmap
- when 4
- sprite.bitmap = Bitmap.new(WEATHER_FILE)
- end
- sprite.z = 1000
- sprite.x = -1000
- sprite.y = -1000
- sprite.visible = (i <= MAXNUMBER)
- sprite.blend_type = BLEND_TYPE
- sprite.opacity = START_OPACITY
- @sprites.push(sprite)
- end
- weather_update
- # 生成命令窗口
- s1 = "角色登录"
- s2 = "载入进度"
- s3 = "难度模式"
- s4 = "退出游戏"
- @command_window = Window_Command.new(192, [s1, s2, s3, s4])
- @command_window.back_opacity = 160
- @command_window.x = 545 - @command_window.width / 2
- @command_window.y = 320
- # 判定继续的有效性
- # 存档文件一个也不存在的时候也调查
- # 有効为 @continue_enabled 为 true、無効为 false
- @continue_enabled = false
- for i in 0..3
- if FileTest.exist?("Save#{i+1}.rxdata")
- @continue_enabled = true
- end
- end
- # 继续为有效的情况下、光标停止在继续上
- # 无效的情况下、继续的文字显示为灰色
- if @continue_enabled
- @command_window.index = 1
- else
- @command_window.disable_item(1) # 在第二项显示灰色
- end
- # 判定卡片的存在
- # 有効为 @hardmode_enabled 为 true、无效为 false
- @hardmode_enabled = false
- if FileTest.exist?("HARDMARK.HMF")
- # 读取文件内容,如果利用非法的难度模式标记访问,会被拒绝
- # 附拒绝原因:无法读取二进制以外的编码
- ryusa = file = load_data("HARDMARK.HMF")
- if ryusa == 1
- @hardmode_enabled = true
- end
- end
- # 无效的情况下、继续的文字显示为灰色
- if @hardmode_enabled
- #@command_window.index = 1
- else
- @command_window.disable_item(2) # 在第三项显示灰色
- end
- # 演奏标题 BGM
- $game_system.bgm_play($data_system.title_bgm)
- # 停止演奏 ME、BGS
- Audio.me_stop
- Audio.bgs_stop
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面被切换就中断循环
- if $scene != self
- break
- end
- end
- # 装备过渡
- Graphics.freeze
- # 释放命令窗口
- @command_window.dispose
- # 释放标题图形
- @sprite.bitmap.dispose
- @sprite.dispose
- for sprite in @sprites
- sprite.dispose
- end
- @rain_bitmap.dispose
- @storm_bitmap.dispose
- @snow_bitmap.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新天气
- #--------------------------------------------------------------------------
- def weather_update
- return if WEATHER == 0
- for i in 1..MAXNUMBER
- sprite = @sprites[i]
- if sprite == nil
- break
- end
- if WEATHER == 1
- sprite.x -= 2
- sprite.y += 16
- sprite.opacity -= 8
- end
- if WEATHER == 2
- sprite.x -= 8
- sprite.y += 16
- sprite.opacity -= 12
- end
- if WEATHER == 3
- sprite.x -= 2
- sprite.y += 8
- sprite.opacity -= 8
- end
- if WEATHER == 4
- sprite.x -= WEATHER_X
- sprite.y += WEATHER_Y
- sprite.opacity -= WEATHER_OPACITY
- end
- x = sprite.x - @ox
- y = sprite.y - @oy
- if sprite.opacity < 32 or x < -100 or x > 750 or y < -1000 or y > 500
- sprite.x = rand(RAND_X) + WIDTH + @ox
- sprite.y = rand(RAND_Y) + HEIGHT + @oy
- sprite.opacity = START_OPACITY
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新命令窗口
- @command_window.update
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 命令窗口的光标位置的分支
- case @command_window.index
- when 0 # 新游戏
- command_new_game
- when 1 # 继续
- command_continue
- when 2 # 难度模式
- hardmode
- when 3 # 退出
- command_shutdown
- end
- end
- weather_update
- end
- #--------------------------------------------------------------------------
- # ● 命令 : 新游戏
- #--------------------------------------------------------------------------
- def command_new_game
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 停止 BGM
- #Audio.bgm_stop
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- # 设置初期同伴位置
- $game_party.setup_starting_members
- # 设置初期位置的地图
- $game_map.setup($data_system.start_map_id)
- # 主角向初期位置移动
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- # 刷新主角
- $game_player.refresh
- # 执行地图设置的 BGM 与 BGS 的自动切换
- $game_map.autoplay
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 切换地图画面
- $scene = Scene_Map.new
- end
- #--------------------------------------------------------------------------
- # ● 命令 : 继续
- #--------------------------------------------------------------------------
- def command_continue
- # 继续无效的情况下
- unless @continue_enabled
- # 演奏无效 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 切换到读档画面
- $scene = Scene_Load.new
- end
- #--------------------------------------------------------------------------
- # ● 命令 :难度模式
- #--------------------------------------------------------------------------
- def hardmode
- # 判定卡片是否存在,不存在则选项为灰色。已经在 125 行设定条件
- # 卡片不存在的情况下
- unless @hardmode_enabled
- # 演奏无效 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 停止 BGM
- #Audio.bgm_stop
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- # 打开指定开关,如果下面两行脚本放到前面则会被清空
- $game_switches[132] = true # 难度模式开关,会在窗口左上角显示 HARDMODE 字符
- $game_switches[134] = true # 闪光开关,敌人开启闪光状态,实力增强
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- $game_actors = Game_Actors.new
- # 设置初期同伴位置
- $game_party.setup_starting_members
- # 设置初期位置的地图
- $game_map.setup($data_system.start_map_id)
- # 主角向初期位置移动
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- # 刷新主角
- $game_player.refresh
- # 执行地图设置的 BGM 与 BGS 的自动切换
- $game_map.autoplay
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 切换地图画面
- $scene = Scene_Map.new
- end
- #--------------------------------------------------------------------------
- # ● 命令 : 退出
- #--------------------------------------------------------------------------
- def command_shutdown
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # BGM、BGS、ME 的淡入淡出
- Audio.bgm_fade(800)
- Audio.bgs_fade(800)
- Audio.me_fade(800)
- # 退出
- $scene = nil
- end
- #--------------------------------------------------------------------------
- # ● 窗口:状态解说
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # ● 战斗测试
- #--------------------------------------------------------------------------
- def battle_test
- # 载入数据库 (战斗测试用)
- $data_actors = load_data("Data/BT_Actors.rxdata")
- $data_classes = load_data("Data/BT_Classes.rxdata")
- $data_skills = load_data("Data/BT_Skills.rxdata")
- $data_items = load_data("Data/BT_Items.rxdata")
- $data_weapons = load_data("Data/BT_Weapons.rxdata")
- $data_armors = load_data("Data/BT_Armors.rxdata")
- $data_enemies = load_data("Data/BT_Enemies.rxdata")
- $data_troops = load_data("Data/BT_Troops.rxdata")
- $data_states = load_data("Data/BT_States.rxdata")
- $data_animations = load_data("Data/BT_Animations.rxdata")
- $data_tilesets = load_data("Data/BT_Tilesets.rxdata")
- $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
- $data_system = load_data("Data/BT_System.rxdata")
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- # 设置战斗测试用同伴
- $game_party.setup_battle_test_members
- # 设置队伍 ID、可以逃走标志、战斗背景
- $game_temp.battle_troop_id = $data_system.test_troop_id
- $game_temp.battle_can_escape = true
- $game_map.battleback_name = $data_system.battleback_name
- # 演奏战斗开始 BGM
- $game_system.se_play($data_system.battle_start_se)
- # 演奏战斗 BGM
- $game_system.bgm_play($game_system.battle_bgm)
- # 切换到战斗画面
- $scene = Scene_Battle.new
- end
- end
复制代码 然后这份脚本是难度模式生成器。
该脚本需要在事件中调用,调用的参数为下面两行。
$Scene = Scene_HMark.new
$Scene.Writein()
②难度模式生成器- #————————————————————#——————————————————————————————————————
- # Scene_HardModeWritein 难度模式文件生成器
- #————————————————————#——————————————————————————————————————
- # 制作 / Ryusa
- # 参考 / 尽头 宇文隳 絶倫少女
- class Scene_HMark
- def Writein()
- # 判断最终 BOSS 是否被消灭,(120 是消灭后打开的开关,可以自己改)如果没有,强行调用也没辙
- if $game_switches[120] == true
- ryusa = 1
- # 将二进制字符“1”写入难度模式标记 HARDMARK.HMF
- save_data(ryusa , "HARDMARK.HMF")
- # 弹出窗口提示
- print "已经生成难度模式标记"
- print "在标题界面可以选择难度模式"
- end
- end
- end
复制代码 ③ 选项增加基本解说字幕(这份脚本是从“标题增加版权信息”改编的)
使用方法:复制代码在 Main 前面插入,放进去- #————————————————————#——————————————————————————————————————
- # Scene_TitleEX 标题强化:选项增加基本解说字幕
- #————————————————————#——————————————————————————————————————
- # 改编 / 宇文隳
- module PLAN_COPYRIGHT
- # 标题选项解说
- COPYRIGHT_STR_ARY = ["★☆;开始新的游戏;☆★", "★☆;读取已存进度;☆★", "★☆;功能正在调试;☆★", "重置正式版"]
- FONT_NAME = ["华文细黑" , "华文楷体" , "黑体"] # フォント
- FONT_SIZE = 20 # フォントサイズ
- FONT_BOLD = false # 太字
- FONT_ITALIC = false # 斜体
- STR_COLOR = Color.new(200, 200, 200) # 文字の色
- DRAW_FRAME = true # 縁取りする
- FRAME_COLOR = Color.new(0, 0, 0) # 縁の色
- DRAW_X = -250 # X 座標修正値
- DRAW_Y = -0 # Y 座標修正値
- end
- #==============================================================================
- # ■ Scene_Title
- #==============================================================================
- class Scene_Title
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias plan_copyrcight_main main
- def main
- # 戦闘テストの場合
- if $BTEST
- battle_test
- return
- end
- # スプライトの作成
- @copyrcight_sprite = Sprite.new
- @copyrcight_sprite.z = 100
- bitmap = Bitmap.new(32, 32)
- bitmap.font.name = PLAN_COPYRIGHT::FONT_NAME
- bitmap.font.size = PLAN_COPYRIGHT::FONT_SIZE
- bitmap.font.bold = PLAN_COPYRIGHT::FONT_BOLD
- #rect = bitmap.text_size(PLAN_COPYRIGHT::COPYRIGHT_STR)
- rect = bitmap.text_size(PLAN_COPYRIGHT::COPYRIGHT_STR_ARY[0])
- bitmap.dispose
- bitmap = nil
- @copyrcight_sprite.bitmap = Bitmap.new(rect.width, rect.height)
- @copyrcight_sprite.bitmap.font.name = PLAN_COPYRIGHT::FONT_NAME
- @copyrcight_sprite.bitmap.font.size = PLAN_COPYRIGHT::FONT_SIZE
- @copyrcight_sprite.bitmap.font.bold = PLAN_COPYRIGHT::FONT_BOLD
- @copyrcight_sprite.bitmap.font.italic = PLAN_COPYRIGHT::FONT_ITALIC
- str = PLAN_COPYRIGHT::COPYRIGHT_STR_ARY[0]
- if PLAN_COPYRIGHT::DRAW_FRAME
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::FRAME_COLOR
- if defined?(@copyrcight_sprite.bitmap.draw_text_plan_frame)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(0, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(2, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(0, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(2, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text_plan_frame(1, 1, rect.width, rect.height, str)
- else
- @copyrcight_sprite.bitmap.draw_text(0, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(2, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(0, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(2, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text(1, 1, rect.width, rect.height, str)
- end
- else
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text(rect, str)
- end
- @copyrcight_sprite.x = 640 - rect.width + PLAN_COPYRIGHT::DRAW_X
- @copyrcight_sprite.y = 480 - rect.height + PLAN_COPYRIGHT::DRAW_Y
- # 元のメソッドに戻す
- plan_copyrcight_main
- # スプライトの解放
- @copyrcight_sprite.bitmap.dispose
- @copyrcight_sprite.dispose
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias plan_copyrcight_update update
- def update
- updateExtra
- # スプライトの更新
- @copyrcight_sprite.update
- # 元のメソッドに戻す
- plan_copyrcight_update
- end
-
- #--------------------------------------------------------------------------
- # ● 付くフレーム更新
- #--------------------------------------------------------------------------
- def updateExtra
- bitmap = Bitmap.new(32, 32)
- bitmap.font.name = PLAN_COPYRIGHT::FONT_NAME
- bitmap.font.size = PLAN_COPYRIGHT::FONT_SIZE
- bitmap.font.bold = PLAN_COPYRIGHT::FONT_BOLD
- str = PLAN_COPYRIGHT::COPYRIGHT_STR_ARY[@command_window.index]
- rect = bitmap.text_size(PLAN_COPYRIGHT::COPYRIGHT_STR_ARY[@command_window.index])
- if PLAN_COPYRIGHT::DRAW_FRAME
- @copyrcight_sprite.bitmap.clear
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::FRAME_COLOR
- if defined?(@copyrcight_sprite.bitmap.draw_text_plan_frame)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(0, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(2, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(0, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text_plan_frame(2, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text_plan_frame(1, 1, rect.width, rect.height, str)
- else
- @copyrcight_sprite.bitmap.draw_text(0, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(2, 0, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(0, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.draw_text(2, 2, rect.width, rect.height, str)
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text(1, 1, rect.width, rect.height, str)
- end
- else
- @copyrcight_sprite.bitmap.font.color = PLAN_COPYRIGHT::STR_COLOR
- @copyrcight_sprite.bitmap.draw_text(rect, str)
- end
- end
- end
复制代码 |
|