修改小筆記 Part.6
热度 2已有 752 次阅读2013-2-18 18:26
1. 跳過標題菜單的腳本修改
這次要改的是一個國外找到的腳本,這腳本是我見過最短的跳過標題頁腳本,用來做事件標題菜單或者乾脆直接進游戲都可以,它並不是真的略過默認 Scene_Title 腳本,而是簡化到一個極致,自動進入地圖 MAP001,當開啟 RMVA 後雖然執行了標題頁,但因為沒有看到那些選單窗口,也沒有背景之類,是一片黑色,所以會感覺好像跳過了標題頁直接進入游戲地圖。
但是它有一個問題,就是作者刪減太過頭了,以至於開啟游戲後要進入標題頁再進入地圖一,這之間有一個淡入淡出浪費了些許時間,所以感覺上一片黑的時間比較久,我們就是不要浪費這一段時間,所以就要修改。
原本的跳過標題畫面腳本如下:
#==============================================================================
# Skip Title Screen JV Master Script
#------------------------------------------------------------------------------
# Skip Title Screen, going to first game map.
#==============================================================================
#==============================================================================
# Scene Title
#==============================================================================
class Scene_Title < Scene_Base
def start
SceneManager.clear
Graphics.freeze
DataManager.setup_new_game
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
def terminate
SceneManager.snapshot_for_background
Graphics.fadeout(Graphics.frame_rate)
end
end
#==============================================================================
令人驚訝的簡短,那要怎麼改,很簡單,原本的 Scene_Title 有個調整轉場漸變時間的設置:
def transition_speed
return 20
end
我們把這一段加到 def terminate 的上面位置,然後,把 20 改成 1,只要 1 幀的時間。
2. 禁止隊伍第一位角色在菜單的整隊(formation)選項中被替換位置
如果製作遊戲時,不想要被人把領隊換了,該怎麼辦?我知道已經有現成的腳本,但現在我要做的是直接在默認腳本上進行修改。
現成的腳本,其實是用一個 alias 把原有的方法繼承別名後,重新定義方法,判斷 pending_index 是不是第一位,如果是就發出選擇無效的音效,然後重新選擇,如果不是,才去執行原來的方法,最常被動到的方法就是 Scene_Menu 腳本的on_formation_ok 或是 Window_MenuStatus 的 process_ok 了,在國內 66rpg 中流傳的是前者,而國外常用的則是後者。
不過,其實它們都只是在菜單上下工夫,禁止隊伍中的第一位在整隊選項被選擇,真正要完全避免,可以改 Game_Party 中的 swap_order 方法,它的功用就是交換角色順序,原來的方法如下:
#--------------------------------------------------------------------------
# ● 交換順序
#--------------------------------------------------------------------------
def swap_order(index1, index2)
@actors[index1], @actors[index2] = @actors[index2], @actors[index1]
$game_player.refresh
end
給它兩個參數,也就是選好的兩個角色位置值,它就進行順序對換,並且刷新隊伍。
那要怎麼改呢?很簡單,就是最前面加上幾行,如下:
#--------------------------------------------------------------------------
# ● 交換順序
#--------------------------------------------------------------------------
def swap_order(index1, index2)
if index1 == 0 or index2 == 0
Sound.play_buzzer
return
end
@actors[index1], @actors[index2] = @actors[index2], @actors[index1]
$game_player.refresh
end
判斷兩個參數中有沒有一個是選中領隊的,如果有就發出選擇無效的音效,然後跳出方法。
不過,這樣做雖然保障了領隊不會被交換,但在菜單上的整隊選擇時有可能出現光標不正常消失的現象,所以也可以在菜單上做這個功能,類似現有的腳本,我同樣針對 Scene_Menu 的 on_formation_ok 下手吧,不過既然是直接修改默認腳本了,當然不可能用什麼 alias 別名的方式,我只是在最前面加一段判別,原本的 on_formation_ok 內容如下:
#--------------------------------------------------------------------------
# ● 整隊“確定”
#--------------------------------------------------------------------------
def on_formation_ok
if @status_window.pending_index >= 0
$game_party.swap_order(@status_window.index,
@status_window.pending_index)
@status_window.pending_index = -1
@status_window.redraw_item(@status_window.index)
else
@status_window.pending_index = @status_window.index
end
@status_window.activate
end
修改後的內容如下:
#--------------------------------------------------------------------------
# ● 整隊“確定”
#--------------------------------------------------------------------------
def on_formation_ok
if @status_window.index == 0
Sound.play_buzzer
@status_window.pending_index = -1
@status_window.activate
return
end
if @status_window.pending_index >= 0
$game_party.swap_order(@status_window.index,
@status_window.pending_index)
@status_window.pending_index = -1
@status_window.redraw_item(@status_window.index)
else
@status_window.pending_index = @status_window.index
end
@status_window.activate
end
修改的內容中,先判斷整隊選擇的位置值 @status_window.index 是不是選了第一位,由於 index 是從零起算,所以第一位的 index 值是 0,不是 1,當確認 index 等於 0 時,就發出選擇無效的音效,然後取消這一次的選擇。
當然,也可以把 Game_Party 的 swap_order 與 Scene_Menu 的 on_formation_ok 兩處都修改,那就萬無一失了,除非遇到角色倉庫之類把主角退出隊伍再重新加入,不然的話,整隊想要換掉主角的位置是不會起作用了。