創作內容

5 GP

[RMXP RGSS] 共通存檔

作者:未来ずら│2014-01-19 19:24:08│巴幣:13│人氣:1413

比方說破關後在某段劇情會多出什麼新事件之類的,這是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!2vzgs0uWG7Euaq0zAiBJZOdQBpYdDHFZYdP4wCABA44





Q.所以我能做N週目囉?
A.
要做也可以啦,不過週目記錄我覺得不是共通變量在做的事,這樣我用一個破關前的記錄一直洗不就好了嗎?嗯,的確是有防洗的方法,不過那和直接保存在事件變量有什麼差別呢?
你想說的應該是「破關後的新要素」,而這新要素可能分A、B、C、D...好幾個,
然後又是在具備 A 的情況下才能取得 B 這種設定...嗯...嘛...這要做多少變量判斷看人囉

當然週目數也可以當成一種成就,某存檔過關時判斷已重玩10次以上,某個要素開放......



Q.為什麼不直接用$開頭的全域變量就好,還要額外做個Class?
A.第一美觀乾淨,第二未來新增其他共通變數時也不用回頭修改存檔的部分


Q.會不會衝突?只能在XP用嗎?
A.理論上沒衝突,各版本適用


結果還是打了一大串
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2314634
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:RM|RGSS

留言共 10 篇留言

先行者
首席[e29]

01-19 19:46

未来ずら
坐墊。話說想請教一下怎麼讓表格內的文字前面有空格?01-20 01:48
先行者
恩恩?不就是直接 enter 就可以了嗎?
不過您的表格好像不是用巴哈姆特文章裡面的表格......?[e18]

01-20 08:19

未来ずら
哎...周圍有框線的是用插入表格,但這樣從腳本複製貼上的內容不知為什麼編輯時還有,送出時就自動把空格消了[e27]。比較長的腳本我是用兩個水平線包起來01-20 13:32
先行者
我剛剛才發現我把空白鍵打成了 enter 鍵...[e27]

01-20 15:47

未来ずら
不會每行都要重新按空白吧,會薯啊 [e26]01-20 17:27
先行者
不然就是可以用截圖的方式?把腳本複製到筆記本或 word 之類的,然後再用截圖程式擷取?[e29]

01-20 17:33

未来ずら
這樣別人怎麼複製啊[e27]

像你的這篇
home.gamer.com.tw/creationDetail.php?sn=1609381
最下面的"腳本檢視"真的是重新把空白全部補上嗎?01-20 17:51
先行者
咦我的文章是直接從 RM 腳本複製貼上的喔,那您可以下次寫在 RM 上之後貼過來?[e6]

01-20 17:54

未来ずら
我是直接從RM複製貼上的捏
耶--- [e28]01-20 17:58
000
其實,只要在劇情結束後啟動開關利用條件判定是否看過劇情就好了啊OAO
End之後也可以打開開關這樣OuO
不過換存檔之後一樣什麼都沒了XD

07-03 17:47

未来ずら
額,所以這篇的重點就是對所有存檔(包含新遊戲)通用啊 [e26]07-06 12:47
未来ずら
不一定只限遊戲事件,如果有調整音量、全螢幕切換之類的功能,儲存外部變數就會很有用07-06 12:50
000
可是這樣如果我換個新的紀錄檔想用不同角色跑劇情的時候怎麼辦XD
打Boss結果發現,奇怪明明是新的紀錄檔怎麼Boss表示我又跑過來了XDDDDD

07-06 12:53

未来ずら
嗯...突然搞不懂你的問題了,哪些變數需另外保存應該是作者自己規畫,不是一股腦兒的全存到外部啊 [e21]07-06 13:03
000
不是XD
只是看到你前面舉的例子~
Boss前的劇情這一塊,如果利用腳本儲存到外部~
變成如果我換新的存檔也會跳過劇情對吧XD

07-06 13:09

未来ずら
是的,所以通常會多出選項讓玩家決定要不要跳過,可參考一下月夜に響くノクターン

另外我再重看了幾次你的例子,這個就算用事件寫也不會只用一個變數,
畢竟要多判斷"誰"打敗過此Boss

...額,不過重點還是作者要很清楚自己遊戲所有變數的用途就是,免得弄巧成拙07-06 14:01
000
嗯嗯~

另外剛才有逛大大的小屋~
大大是RED的腳本師OAO?
最近在學習寫腳本想找個前輩教學一下XD

07-06 14:04

未来ずら
額,可啊,看要不要加QQ或skype,不然在訪客留言問也行07-06 14:15
000
這邊留下某言的Skype
abbidm901
請加離奇多聲道那隻,其他隻目前沒有在使用囉~

07-06 14:26

我要留言提醒:您尚未登入,請先登入再留言

5喜歡★qootm2 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:『自製遊戲公會』成員報到... 後一篇:[RMXP RGSS] ...

追蹤私訊切換新版閱覽

作品資料夾

ShuLongQinHu給大家
小屋更新~APH軍服路德(德國)納粹軍服版插圖看更多我要大聲說12小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】