otwl007 BASS創作者兼二代目管理員 Lv.47:0 Lv.1
私訊
發言
+好友
2014-03-23 21:11:51
|
|
啊哈哈,這裏是用來教學如何把變數運用得更高階,所以如果想知道變數的基本使用法的話就自己爬文吧 這個基本上是給做模擬養成的人看 甲、基本但高階知識 變數有無限個, 而指令常用的有4種: 1.四則運算 2.條件式 3.機率 4.物件傳送 指令會有以下三個原則: 1.別跟我談先乘除後加減 2.先來先操作 3.同類同SYS,勿放在對話中 1.別跟我談先乘除後加減 其實和第二個原則一樣,但是這個是針對四則運算的 例子1: sys(setv: v1: 5,setv: v1: +2,setv: v1: *2,setv: v1: -2,setv: v1: /2) 那麼v1的數值= ((5+2)*2-2)/2 = 6 而不是 5+2*2-2/2 = 8了 2.先來先操作 故名思義,就是會先操作放在前面的指令 例子2: sys(setv: v1: 1,setv: v1: +1,setv: v1: *3,setv: v1: 2,setv: v1: /2) 系統會這樣操作: 指令一後,V1的變數為1 指令二後,V1的變數為1+1 = 2 指令三後,V1的變數為2*3 = 6 指令四後,V1的變數為2 指令五後,V1的變數為2/2 = 1 從以上可見,根本首三個指令是沒有用的,所以編寫指令時要注意指令的先後順序!! 3.同類同SYS,勿放在對話中 意思就是在同一個SYS()內你只能操作同一類的指令 例子:sys(setd: v1: equa1: stage1,setd: v2: equa1: stage2,setd: v3: equa1: stage3) 這裏就同樣都是條件式指令,這樣就沒有問題的 我們看一個不正確的例子: sys(setd: v1: equa1: stage1,prob:a:a:a:b:b:c) 在同一個sys內出現了條件式和機率指令,是錯得太離譜的行為,因為這樣有很高的機率系統無法執行這些指令!! 所以一個sys內只能有同一類條件式,不過當然並非必然: 變數設定和給物件指令是可以放在同一個sys()內,所以兩者可以歸為同一類 那麼什麼是「勿放在對話中」? 就是指如果你想有一個嚴謹的遊戲的話 任何指令都要另起新的一行 不要因想省位和不想空點而放在對話中 這樣做有機會造成系統略過指令的情況發生! 乙、更複雜的條件式 難度:非常簡單 有些條件式不是簡單的x=k、x>k和x<k就可以完事的 當然也有一些是a<x<b啊 又或是 if condition a=TRUE THEN event a else if condition b=TRUE THEN event b else if condition c=TRUE THEN event c else event d 等等的多重條件式了 ------------------分隔線-------------- 先談a<x<b的處理法 可以嘗試以下指令: 例子一:如果不符合條件的話,就滾到第二個舞台 在舞台「stage0」: sys(setd: v: moreb: stage1,setd: v: lessa: stage1) 例子二:如果符合條件的話,就滾到第二個舞台 這個比較複雜,基本上都是使用 在舞台「stage0」: sys(setd: v: lessb: stage1) 並設置「stage0」的出口為「stage3」 然後 在舞台「stage1」: sys(setd: v: morea: stage2) 並設置「stage1」的出口為「stage3」 看懂的可能會問: 為什麼當 v<a 時要到「stage3」,而不是「stage0」呢? 來到這裏,我們要有清晰的邏輯思考 假設回到「stage1」的出口是stage0,我們又會再次遇上sys(setd: v: lessb: stage1) 指令成立,所以會到stage1(因為b>a>v) 到了stage1 因為指令不成立,所以回到stage0,然後無限輪迴 所以「stage1」的出口一定要是新舞台 從上面的複雜度可見,「如果不符合條件的話,就滾到第二個舞台」是比較簡單 ------------------分隔線-------------- 多重條件式 例子(最簡單和容易做的): 當0<v<2,到舞台stage1 當2<v<4,到舞台stage2 當v>4,到舞台stage3 當以上皆不是,繼續舞台 我們可以這樣做: 在舞台「stage0」: sys(setd: v: more0: stage1,setd: v: more2: stage2,setd: v: more4: stage3) 丙、BUFF 難度:簡單 總之就是要好好運用BASS這個理論上可以用無限個變數的程式 給一個情景作為例子,那麼大家自然融會貫通,可以用此技巧作為其他用途 情景: 遊戲一開始,玩家可以獲得BUFF A或BUFF B。 當玩家發動了BUFF A的時侯,可以在事件A發生後有一條故事線,並同時在之後的遊戲有一些效果。 如果發動BUFF B的話,可以在事件A發生後有另一條故事線,並同時在之後的遊戲有其他不同效果。 在遊戲途中,玩家有一些方法獲得此兩個BUFF,但玩家只可以存在其中一個BUFF,若同時有兩個buff即入BAD END. 事件B結束後,BUFF 失效 做法: 舞台1: 「初始」 並詢問玩家要選擇哪一個BUFF 選擇BUFF A前往舞台「BA」 選擇BUFF B前往舞台「BB」 舞台2: 「BA」 sys(setv: BA: 1) :這個是用作表達BUFF A已經開啟(0=關閉,1=開啟,當然可以按自己喜好) 舞台3: 「BB」 sys(setv: BB: 1) :這個是用作表達BUFF B已經開啟(0=關閉,1=開啟,當然可以按自己喜好) 事件A後, 舞台4: 「事件A後檢查」 sys(setd: BUFFTOTAL: BA,setd: BUFFTOTAL: +BB) :剛才設定了,當BUFF A和B開啟時就會是1,BUFFTOTAL這變數 就是用來檢查是否有兩個BUFF存在) sys(setd: BUFFTOTAL: equa2: BADEND,setd: BA: equa1: 故事線A,setd: BB: equa1: 故事線B) :第一個條件式的作用:如果BUFF A和B開啟,兩者都是1,加起來就會是2,那麼就可以立刻送進BAD END 事件B後, 舞台5: 「事件B後檢查」 sys(setv: BA: 0,setv: BB: 0) 那麼或許會問,有什麼作用呢? 在做養成遊戲時,例如是想為某些結局設置一些觸發性條件 並不是指好感、主角能力這些東西, 而是指例如是: 當有看過隱藏事件1,隱藏事件4,隱藏事件5後,才能進入真.結局 又或是: 當你進行二周目時,劇情將會有微變 但是舞台發展不會再是這個模式: 而是成為這個模式: 這樣就能夠大大減少舞台數量 其實只要明白變數的原理,可以發揮出來的還有很多用途 其實還有些更加困難的技巧,不過對戀愛養成遊戲幾乎沒有幫助 小技巧: 如果是做比較複雜的模擬養成的話, 抓蟲(BUG)是很痛苦的事 因此可以不妨增加一個測試用舞台, 把用來測試的變數啊物品啊都寫進去, 出口就設置在你想測試的舞台 如: 你想測試5天後當好感度多於100時會否好結局時, 可以在測試用舞台設置變數 天數:5 好感度834729(隨意就可以了,總之要大於100) 出口設置判斷會否好結局的舞台, 即方便測試 這樣就不用每一次也重新玩,重新找這麼辛苦 暫時寫這麼多,再想到再寫
|