比方說破關後在某段劇情會多出什麼新事件之類的,這是RM2k時代的硬傷,要做到這個...應該只能把主程式魔改了吧,不過主程式魔改了還叫2k嗎?呃、你說明明就很多2k的遊戲都有破關要素啊?這位太太,你換個存檔就神馬都沒有了,2k頂多就N週目吧,標題多個回顧選項都沒辦法
同時,2k也不能跳劇情,相信很多時候有這種狀況:
BOSS戰前會跑一段很長的劇情,這很好,我愛看劇情。但接下來就開戰了、然後又不小心爆炸了,耶,
罰你重看,就算是好片強迫你連續看個10來次你也會受不了。比較貼心的作者會在開打前讓你存個檔或是一開始就有跳過的選項,雖然突兀但這也是沒辦法的事
多結局的更不用講了,這裏指的是那種一定要破過某些結局才能看True End的類型,短篇還好,長篇......喔對,之前的BOSS戰劇情也要
重☆來☆一☆遍 喔
額好,在RMXP以後導入了RGSS編輯器,這問題就能確實解決
,不過還是一堆作品都沒出現,我覺得這是必備系統啊,尤其一堆遊戲都在搞破關要素怎麼做呢?
1.上網搜尋"RMXP/VX/ACE 二週目(←大部分會做成共通存檔)"
2.找到腳本
3.套進自己的專案
4.等燈~
゚Å゚) < 城鎮中心就遭到攻擊了!
⊂彡#))д´).; ''.' .嘛,要快就這樣
因為我不希望RGSS只是套套樂,所以在我這很難有一套就有效果的腳本
自己動手☆快樂無窮 (有嗎)
因為下面內容需要點基礎知識,
如果還不懂Class、Object、變量的關係,這裏進行
不負責任簡單說明:
Object: 遊戲中的任何東西,就叫物件。人物、特效、場景、阿貓阿狗..... 其他名稱還有實體、實例、對像等等... |
Class: 物件的設計圖。所有物件都需要一個設計圖才能做成,設計圖有各種定義讓物件可以做什麼事(也就是方法),物件生成後,只要物件(的變量).方法名稱就能執行設計圖定義的動作 |
變量: 物件的活動空間,對人來說算是給物件一個識別的名稱。 必須先宣告一個變量才能做出物件(a = People.new), 也至少要有一個變量才能讓物件做事(a.say_hello) 物件沒變量的話就可以當做它不存在了,連確認它的死活都沒辦法。 一個物件可以同時有多個變量,但注意代表的都是同個物件。 |
※如果上面說明有誤歡迎指證
額好,扯了老半天還是沒進入重點
共通存檔要做也不難,只因為它是有RGSS才能做到的事
,人對未知的事物總是充滿恐懼所以要學會怎麼
自己建立一份獨立的存檔和讀檔那麼就是腳本範例(事前準備:遊戲主目錄做成一個名稱為 Save 的資料夾):
#==============================================================================
# ■ 共通變數
#------------------------------------------------------------------------------
# 建立公共變數
# 適用跳過攏長的戰前劇情這類會影響「所有存檔(含新遊戲)」的事件處理
#
# 操作變量後,用 $game_config.system_save 儲存變量
#==============================================================================
class Game_GolbalConfig
#--------------------------------------------------------------------------
# ● 變量公開
#--------------------------------------------------------------------------
attr_accessor :cleared # 破關判定
attr_accessor :scenario_schedule # 故事進度
attr_accessor :version # 版本
attr_accessor :bgm_rate # BGM控制
attr_accessor :se_rate # SE控制
#--------------------------------------------------------------------------
# ● 物件初始化
#--------------------------------------------------------------------------
def initialize
@cleared = false
@scenario_schedule = 0
@version = 1
@bgm_rate = 10
@se_rate = 10
end
#--------------------------------------------------------------------------
# ● 儲存變量
#-------------------------------------------------------------------------- def system_save
save_data($game_config, "Save/config.rxdata") end
#--------------------------------------------------------------------------
# ● 重置
#--------------------------------------------------------------------------
def reset
initialize
system_save
p "系統變數已重置"
end
end
可以看到這裏定義一個新的Class,然後有一些變量,然後有定義儲存方法,然後就沒了,耶
總之重點就是要
有一個裝共通變量的Class,然後能存取接下來是初始化和讀取,基本上要讓它一啟動遊戲就載入,所以請到
Main腳本開頭追加條件分歧:
# 載入設定檔
if FileTest.exist?("Save/Config.rxdata")
$game_config = load_data("Save/config.rxdata") else
# 檔案不存在時,重新建立
$game_config = Game_GolbalConfig.new $game_config.system_save
end
紅字為載入,藍字為檔案不存在(第一次玩遊戲)時做成一個新存檔
變量保存在 Save\Config.rxdata ,載入時用 $game_config 這個變量代入,因為要在每個地方都能用所以要用全域變量
準備工作就完成了,剩下就是操作變量了
如果你會使用
$game_variables[變量編號] = n ,那這個絕對沒問題
看Class有什麼變量,在事件編輯器的「腳本」指令使用
$game_config.變量名 = xxx 並且儲存就可以了,變量有需要就自己加,剩下全部都是條件分歧
操作範例:
# 「故事進度」變量加 1 $game_config.scenario_schedule += 1 $game_config.system_save |
覺得每次都要調用存檔語句太麻煩,可以自己在 Game_GolbalConfig 加個方法像是:
#-------------------------------------------------------------------------- # ● 增減「故事進度」變量 # n:只要是數字,都可以 #-------------------------------------------------------------------------- def scenario_schedule_plus(n) @scenario_schedule += n system_save end |
這樣就能在事件編輯器用
scenario_schedule_plus(數值) 增減@scenario_schedule (減少用負數),而且會馬上儲存
判斷範例(如果「故事進度」變量在1以上):
條件分歧:腳本: $game_config.scenario_schedule >= 1 (跳過劇情選項) 不符合條件的情況 (劇情) 分歧結束 (劇情後的事件) |
添加變量範例:
於initialize中加入 @變量名稱 = 值 之後在變量公開那一區加入attr_accessor :變量名稱 |
值全看用途而定,大部分是數字或是否(true / false)的判斷,請自行決定
添加完後請記得把已生成的config.rxdata存檔移除讓遊戲再生成注意:
發布遊戲前請確定變量不會再追加,否則就只能再另外做一個Class存取新變量
並記得把config.rxdata移除,不然玩家就會看到全破狀態的遊戲了
嗯,大概就這樣囉,用這個條件分歧要很熟練,不然很容易亂掉
XP使用範例(mega):
https://mega.nz/#!MUZ3jbZJ!2vzgs0uWG7Euaq0zAiBJZOdQBpYdDHFZYdP4wCABA44Q.所以我能做N週目囉?
A.
要做也可以啦,不過
週目記錄我覺得不是共通變量在做的事,
這樣我用一個破關前的記錄一直洗不就好了嗎?嗯,的確是有防洗的方法,不過那和直接保存在事件變量有什麼差別呢?
你想說的應該是「破關後的新要素」,而這新要素可能分A、B、C、D...好幾個,
然後又是在具備 A 的情況下才能取得 B 這種設定...嗯...嘛...這要做多少變量判斷看人囉
當然週目數也可以當成一種成就,某存檔過關時判斷已重玩10次以上,某個要素開放......
Q.為什麼不直接用$開頭的全域變量就好,還要額外做個Class?
A.第一美觀乾淨,第二未來新增其他共通變數時也不用回頭修改存檔的部分
Q.會不會衝突?只能在XP用嗎?
A.理論上沒衝突,各版本適用
結果還是打了一大串