实现效果
玩家打出真结局后,以后每次打开游戏,标题画面都会自动换成通关后的特殊标题图(跨存档,删了存档也还在)。
准备工作
先准备好两张标题背景图,都放到 Graphics/System
图片名 用途Title.png 默认标题图(原来的那张)
Title_True.png 通关后的标题图(自己命名,比如叫 Title_Ending 也行)
(图片名字可以自己改,后面脚本里对应改就行)
完整的 Scene_Title 脚本(可直接全选粘贴替换)#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# 標題畫面
# 修改:通關真結局後自動更換標題畫面和標題音樂
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * 主處理
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
super
end
#--------------------------------------------------------------------------
# * 開始處理
#--------------------------------------------------------------------------
def start
super
create_title_graphic
create_command_window
play_title_music
end
#--------------------------------------------------------------------------
# * 結束處理
#--------------------------------------------------------------------------
def terminate
super
@sprite.dispose
@command_window.dispose
end
#--------------------------------------------------------------------------
# * 更新畫面
#--------------------------------------------------------------------------
def update
super
@command_window.update
update_command
end
#--------------------------------------------------------------------------
# ★ 創建標題圖形(通關後自動更換)
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
# 判斷是否通關:如果 true_ending.dat 文件存在,就用通關後的標題圖
if FileTest.exist?("true_ending.dat")
@sprite.bitmap = Cache.system("Title_True") # 通關後的標題圖
else
@sprite.bitmap = Cache.system("Title") # 默認標題圖
end
end
#--------------------------------------------------------------------------
# * 創建指令視窗
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(172, [s1, s2, s3])
@command_window.x = (544 - @command_window.width) / 2
@command_window.y = 288
if @continue_enabled
@command_window.index = 1
else
@command_window.draw_item(1, false)
end
@command_window.openness = 0
@command_window.open
end
#--------------------------------------------------------------------------
# ★ 播放標題音樂(通關後自動更換)
#--------------------------------------------------------------------------
def play_title_music
if FileTest.exist?("true_ending.dat")
# 通關後的標題音樂(引號裡改音樂文件名,不用加後綴)
RPG::BGM.new("Title_True", 100, 100).play
else
# 默認標題音樂
$data_system.title_bgm.play
end
RPG::BGS.stop
RPG::ME.stop
end
#--------------------------------------------------------------------------
# * 更新指令
#--------------------------------------------------------------------------
def update_command
if Input.trigger?(Input::C)
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# * 確定繼續遊戲的有效性
#--------------------------------------------------------------------------
def continue_enabled
return false unless FileTest.exist?("Save1.rvdata")
return true
end
#--------------------------------------------------------------------------
# * 指令:新遊戲
#--------------------------------------------------------------------------
def command_new_game
Sound.play_decision
$game_system = Game_System.new
$game_message = Game_Message.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
$scene = Scene_Map.new
RPG::BGM.fade(800)
RPG::BGS.fade(800)
RPG::ME.fade(800)
end
#--------------------------------------------------------------------------
# * 指令:繼續遊戲
#--------------------------------------------------------------------------
def command_continue
unless continue_enabled
Sound.play_buzzer
return
end
Sound.play_decision
$scene = Scene_File.new(false, false, false)
end
#--------------------------------------------------------------------------
# * 指令:結束遊戲
#--------------------------------------------------------------------------
def command_shutdown
Sound.play_decision
$scene = nil
end
#--------------------------------------------------------------------------
# * 戰鬥測試
#--------------------------------------------------------------------------
def battle_test
$data_actors = load_data("Data/Actors.rvdata")
$data_classes = load_data("Data/Classes.rvdata")
$data_skills = load_data("Data/Skills.rvdata")
$data_items = load_data("Data/Items.rvdata")
$data_weapons = load_data("Data/Weapons.rvdata")
$data_armors = load_data("Data/Armors.rvdata")
$data_enemies = load_data("Data/Enemies.rvdata")
$data_troops = load_data("Data/Troops.rvdata")
$data_states = load_data("Data/States.rvdata")
$data_animations = load_data("Data/Animations.rvdata")
$data_tilesets = load_data("Data/Tilesets.rvdata")
$data_common_events = load_data("Data/CommonEvents.rvdata")
$data_system = load_data("Data/System.rvdata")
$game_system = Game_System.new
$game_message = Game_Message.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
for i in 0...$data_system.party_members.size
actor = $game_actors[$data_system.party_members]
$game_party.add_actor(actor.id)
end
$game_party.make_actors_battle_test
$game_troop.setup($data_system.battle_test_troop_id)
$game_troop.can_escape = true
$game_troop.can_lose = true
$game_temp.battle_proc = Proc.new { $scene = nil }
$scene = Scene_Battle.new
end
end
需要你改的两个地方
1. 标题图片名(第 35 行左右)- @sprite.bitmap = Cache.system("Title_True") # 通关后的标题图复制代码
复制代码 把 "Title_True" 改成你通关后标题图的文件名(放在 Graphics/System 文件夹里,不用加 .png)。
2. 标题音乐名(第 72 行左右)- RPG::BGM.new("Title_True", 100, 100).play复制代码
复制代码 把 "Title_True" 改成你通关后标题音乐的文件名(放在 Audio/BGM 文件夹里,不用加 .mp3/.ogg)。
如果不想换音乐,就把这三行删掉,只保留 $data_system.title_bgm.play 那行。
结局事件里加的脚本
在真结局的最后,加一条「脚本」指令(第 3 页→进阶的指令→脚本),输入:
- File.open("true_ending.dat", "w") { |f| f.write("1") }复制代码
复制代码 这行代码会在游戏目录下创建一个 true_ending.dat 文件,作为通关标记。
测试方法
先把脚本替换好打开游戏,确认标题还是默认的(说明没通关时正常)触发真结局,运行那行脚本退出游戏,重新打开标题画面应该变成通关后的样子了
想恢复默认怎么办?
去游戏目录下,删掉 true_ending.dat 这个文件,标题就变回默认的了。
本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=499063 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |