嗨!各位觀眾大家好,我是雪凡。歡迎各位螢幕前的觀眾們準時收看「雪凡與好朋友們的 Ren'Py 遊戲引擎初學心得提示」第二回:基本觀念與前置作業!
本回,雪凡將概略講述一個 Ren'Py 遊戲專案的資料夾結構,並從不會寫程式的人的角度,講述遊戲腳本檔案的基本觀念。除此之外,還有說明如何讓 Ren'Py 支援中文、使用網路資源的注意事項,並附上可幫您更輕鬆編寫遊戲腳本的額外贈品,敬請各位愉快享用。
沒錯,或許您已經注意到了,本回的內容看來起相當雜亂而零散。事實上,這點節目製作人(我)也感到相當困擾。
雖然希望能儘快讓各位進入遊戲製作實戰中,但在這之前,需要預先準備、解說的東西又實在太多......老實說,本回節目已經重製了三次,報廢的腳本字數已經超過一萬字......我的上帝、媽祖、魔法少女!
但這一切都是製作遊戲所需要的。是必須的啊!(推眼鏡)
那麼,就讓我們踏穩腳步,一步步開始今日的心得吧。
為了能有個好的開始,我們先來了解一下 Ren'Py 遊戲的專案目錄架構。
請打開您的啟動器,選擇您上次新建過的專案。並選擇 base 按鈕,將專案的 base 資料夾打開。
如果您已經忘記啟動器要如何操作,請回頭參考第一回的介紹。
▲ 圖2:新專案的 base 資料夾,內容大約是這樣。
base 資料夾中,你可以看到大而顯眼的 "README.html" 檔案。這就是當前遊戲的說明檔案......說的更直白一點,就是日後會隨遊戲一起發佈出去,可以給玩家看的遊戲使用說明書。
注意,這是給玩家看的,不是給您看的。您看了也沒什麼大用。
當然囉,因為目前的 "README.html" 檔案是由系統自動產生的,所以只包含了遊戲基本操作方式--像是滑鼠右鍵點了會怎樣 ,中鍵點了又會怎樣。其中人設、背景故事等東西全都沒寫,而且還是英文的。
本說明檔案的內容,各位日後可以自行改寫,怎樣改都行。但現在暫時不用理會它。我們去看其他部份。
讓遊戲實際運行所需的「一切」東西,是被放在一旁的 "game" 資料夾中。
【無用檔案】除了 "README.html" 與 "game" 資料夾以外,目前 base 資料夾中的其他檔案,都只是些暫時性檔案。他們對遊戲製作完全不重要,您不需要理解,而嫌他們礙眼的話刪掉也無所謂的。當然也可以不管。請打開 game 資料夾。
▲ 圖3:新專案的 game 資料夾。檔案不多看起來蠻單純的。如前所述,game 資料夾中放的是遊戲執行時所需的資源。
因為新建立的遊戲中還沒有圖,也沒有音樂音效,所以這時,在 game 資料夾中,也就只有幾個可憐的「腳本檔」而已。
【腳本檔】所謂的腳本檔,就是以 .rpy 為副檔名的檔案。這也是 Ren'Py 開發過程中最重要的檔案。腳本檔案在初期共有三個,分別是 "options.rpy"、"screens.rpy"、"script.rpy"。
至於 game 資料夾中其他的檔案,像是 .rpyb、.rpyc、.bak 這些檔案,都是由程式自動產生的,並不重要。刪掉也無所謂。
一言以蔽之:腳本檔的檔名--除了副檔名固定需為 rpy 以外--其他部份並沒有任何特殊意義!
雖然前面介紹了三個特殊檔案,但其實對於 Ren'Py 來說,只要是放在 game 資料夾下,且副檔名是 .rpy 的檔案。遊戲啟動時,都會被一視同仁地以相同的方式讀取運行。
所以就技術上來說,您也可以在 script.rpy 中寫入遊戲設定,或是手動將 screens.rpy 檔案重新改名。總之,只要您有充份的理由這麼做,那就動手吧;不過我打賭你一定找不到那種理由,所以別這麼幹就對了。
【請儘量做到】基本設定應集中於 options.rpy 中;而面板方面的設定,也應放在 screens.rpy 裡面。以上三個基本檔案中,通常只有 script.rpy 會被我們分割切細。
這是因為一個十萬字規模的遊戲,就表示遊戲腳本的份量至少會有十萬字之多,再加上圖片、分歧劇情等等細部操作,要是全部集中在一個檔案中,實在是有點為難人......
總之,檔案安排的原則全在於「容易管理」這項。
同樣地,為了方便管理,推荐您在 game 資料夾中加入子目錄。讓各種不同的資源,能夠放在不同的子目錄下面。
比方說如下這般......
bg/ #背景 char/ #立繪 side/ #side image (對話框旁邊的大頭圖) ui/ #使用者介面用的圖檔 item/ #其他非全屏圖片 effect #轉場特效濾鏡 music/ #音樂 sound/ #音效 voice/ #語音 movie/ #影片 font/ #字型
特別強調,替資源分類並非必要,僅僅只是為了方便管理而已。
舉例來說,官方提供的 tutorial 教學示範專案中,game 資料夾內部就因完全沒有分類,而成為一個異常恐怖的負面示範教材......我想您一定不會希望您的專案變成那樣。
▲ 圖4:慘烈的 tutorial/game 資料夾。資源完全沒分類,這樣很難處理。
請用文字編輯軟體將 options.rpy 檔案打開來看,觀察一下 rpy 檔案的長相。
▲ 圖5:options.rpy 檔案最初的樣子。順便一提,雪凡這邊用的編輯器是 gedit,同時使用 Oblivion 的色彩配置。對於沒寫過程式,英文又相當普通的同學來說,這時恐怕頭暈得想哭了對吧?
想逃走?
哎呀,別急著逃走啦,本章幾乎不會動到 options.rpy 檔案,所以別慌,這裡只是拿它來說明 rpy 的腳本特性。目前您只要隨便翻翻就夠了。
且聽我解說幾個觀念,您就會知道日後該怎麼閱讀 Ren'Py 腳本。
Ren'Py 腳本是以「實體行」作為基本單位來運作的。
一言以蔽之,程式會依照順序,一行接一行地執行。上一行執行完成後,這才處理下一行。
提醒一下:因編輯器寬度不足而「自動折行」產生的行,並不算是前述的「實體行」。只有在行尾按 Enter 鍵產生的那種行才算數--對初學者來說,這點切勿搞混。
在 options.rpy 檔案中,可看到許多 "#" 符號。
這些 # 號的功用是在說明。在同一行中,# 號後面的內容其實是「註解」。
所謂的註解,就是指寫在腳本裡面,但電腦會忽略過去,當作根本沒看到的東西。
換句話說,註解是寫給人看的,而不是給電腦看的。註解可以提醒閱讀這份腳本的人許多事情,比方說提醒某個變數是幹嘛的啦,某段天書般的程式碼有什麼用......總之,可以讓寫程式的人知道這份程式的用途,以後才方便修改與維護它。
不過,聽說也有人在註解中間寫日記,或是對老闆的咒罵什麼的......嗯嗯,怨念太深的人,我們這就不去管他了。
腳本中的 "=" 符號,表示的不是數學中的「等於」,而是「指定」
一言以蔽之,"=" 左邊的「變數」,將會被指定為右邊的「值」。
舉例來說:
HP = 5 # HP 被指定為 5 MP = 4 # MP 被指定為 4 name = "Luci" # name 被指定為一串文字:Luci damage = 3 # damage 被指定為 3 HP = 5 - damage # HP 被重新指定為 2 (因為 5-3)
上例中,HP、MP、name、damage 都是「變數」。
顧名思義,變數是一些「可被改變的數」。您可以將變數理解為一個「容器」,這個容器實際上表達什麼意思,取決於裡面裝了什麼「值」。
以上面的片段為例,變數 "MP",其實代表著 "4" 這個數字;變數 "name" 代表著 "Luci" 這串文字。
變數的名字有些規則要遵循,這包括:
除了以上這些條件外,絕大多數的英數混雜字,都能成為變數名稱。
重新強調一次,您可以透過 "=" 決定這些變數的「值」是什麼。
如前所述。在腳本中隨便打入文字,電腦會將他視為變數。那麼我們又該如何表示「文字本身」呢?
就靠「字串」語法。
「字串」是由兩個 "(雙撇號),又或兩個 '(單撇號)束縛起來的一串文字。您不能直接「用文字代表文字」,因為電腦會將您打進去的文字視為變數或指令對待,所以當您要輸入文字時,就得靠字串。
比方說:
Luci = "A good girl!" name = "Luci" # 變數 name 被指定為 "Luci" # 以下這行沒有語法錯誤,程式可以執行,但執行結果鐵定不是您想要的意思 name = Luci # 變數 name 被指定為 "A good girl!"
不管是單撇號還是雙撇號,都可以被字串使用。只要兩兩相同地,成對使用就行了。
區塊是由許多具有相同程度「縮進」的行,連在一起組成的多行程式碼。
用講得很抽象,乾脆舉例一下:
label act1: # 第一個區塊,包含下面三行 "很久很久以前……" "西彷國有一位皇后。" "皇后擁有一面巨大的,有著神奇魔力的鏡子" label act2: # 第二個區塊,包含下面兩行 "她有一位漂亮而人見人愛的女兒,這位女兒擁有雪白的皮膚與蘋果般的臉頰,名字叫白雪" # 沒有實際功能的行--包括註解與空行--並不會打斷區塊 "不過身為繼母,皇后發現,自己好像不太受到女兒的歡迎。" label act3: # 第三個區塊,僅僅包含下面一行 "皇后感到煩惱,於是她向巨大的鏡子提出問題……" "「魔鏡啊魔鏡,請告訴我,我是不是被白雪討厭了?」" # 這行變更了縮進,就不包含在原本的區塊之內了。
理想狀況是,每級縮進都是四個半形空白。不過實務上,使用 tab 或不同數量的空白也是被允許的。唯一需注意的是,相同一個區塊中,縮進的量要「完全相同」。
區塊幹什麼用的相當囉唆難懂,三言兩語不容易解釋清楚。勉強用一句話來解釋的話:區塊可以將程式碼給聚集起來,供遊戲集中調派使用。
......這樣說好像會讓觀眾更加困惑的樣子。稍微說清楚一點好了。
前面曾經提過,程式是一行接一行執行的,這基本上沒錯。但在需要「進入區塊」的場合,有時卻有例外--是的,遊戲程式可能「直接跳過整個區塊」。
您可以觀察一下上面的範例腳本,區塊開頭前一行,總會見到一個用 ":" (冒號)結尾的前導語句。比方說 "label act2:" 這樣。
透過各式各樣有著不同功能的前導語句,後方區塊內的程式碼,就有可能會被跳過。這些程式碼可能只會在某種特殊狀況下才會執行,又或是當其他程式碼在別處「呼叫」它時,它才會掉頭回來實際運作。總之,區塊內的東西,究竟會在什麼狀況下被執行,是由前導語句決定的。
嘿呀?果然還是有點困惑吧?沒關係啦,區塊這種東西在腳本中確實常常見到。但您現在不用完全搞懂它,日後再作觀察就好。
暫時,您只要記住「縮進本身是有意義的」就可以了。
除非您知道自己在幹嘛,否則不要變更縮進!遊戲會壞掉的。
程式碼很難讀?頭很暈?
▲ 圖5:options.rpy 檔案於 Gedit 編輯器。對於使用 Vim (GVim) 與 Gedit 編輯器的用戶們,為了替大家減緩編寫腳本時的頭暈症狀,雪凡有些禮物要送給大家。
Vim 與 Gedit 編輯器的用戶們,咱在此提供語法高亮與編輯器支援。就看各位要不要用了。
如果您用的編輯器不是以上這兩個,很可惜本節目暫時沒法提供您幫助,或許您該去網路上面搜搜,看看有沒有人已經寫了不錯的外掛程式,或許能幫上您的忙。當然囉,您也可以在沒有語法高亮的狀況下寫腳本--其實這也不算太難啦。只要把 rpy 的語法規則弄懂就可以了。
或是說,您也可以直接用 Ren'Py 內建的 jEdit 編輯器來編寫遊戲。jEdit 本身是有提供 rpy 高亮支援的。雖然我覺得 jEdit 不好用......總之各位就自行斟酌囉。
這個語法高亮檔案的原作者為 Musashi Aharon,他的原作品可在以下位置找到:https://yesoidos.sourceforge.net/upload/renpy.vim。
和原版相比,雪凡修改的版本,額外增加了大量關鍵字高亮區段。在下修改的版本請到這裡下載:https://www.openfoundry.org/tw/papers-and-teaching-materials/doc_download/1625-vim-renpytar2。
安裝方式為:
將壓縮包 (vim-renpy.tar.bz2) 解壓縮後,放到「Vim 設定資料夾」下面。
Gedit (https://projects.gnome.org/gedit/) 是一款大巧不工,表面看來簡單易用,實則功能異常豐富的編輯器。主要運作在 Gnome 環境下,但也可在 windows 系統中使用。
本語法高亮檔案的原作者為 Koichi Akabe,作品採用 GPL-3.0+ 授權釋出,總之可以免費使用。您可到這一頁來下載:https://vbkaisetsu.sky- air.net/wordpress/2012/08/gtksourceview- 。
雪凡修改的版本也採相同授權釋出。和原版語法高亮檔案相比,差異在於增加了不少內建常數的高亮。請到這裡下載:https://www.openfoundry.org/tw/papers-and-teaching-materials/doc_download/1622-gtksourceview-renpytar
安裝方式為:
將附件壓縮檔 (gtksourceview-renpy.tar.bz2) 內的 "renpy.lang" 檔案,放到以下路徑下面(如果路徑原本不存在請自行新建)。
~/.local/share/gtksourceview-3.0/language-specs
上面的路徑是用在 Linux 下的。至於 Windows 下的對應路徑,還請各位自行嘗試一下。我沒在 windows 下裝過這個。
經過上面的調整後......
▲ 圖6:Gedit 中 options.rpy 加上語法高亮後的狀況,這樣整個就超好懂了啊。
這兩個程式能讓 Ren'Py 啟動器,直接支援 Gedit 與 GVim 編輯器。
特色在於,能讓啟動器的 "Navigate Script" 面板正確引導 Gedit 與 Gvim 編輯器,跳躍到目標程式碼的行數上,而且還能避免 一次開啟多個編輯器視窗。總之比預設的 system editor 選項好用多了!
兩程式均為雪凡原創,採用 MIT License 授權釋出,可在 Linux 和 Windows 版本上運作。因為太窮沒有 Mac OS,所以也無法撰寫 Mac OS 支援,真是抱歉了。歡迎有興趣者自行改寫。
如果您也想替自己喜歡的編輯器撰寫相應支援的話,請參看這份技術文件:https://www.renpy.org/doc/html/editor.html
本檔案請到此處下載:https://www.openfoundry.org/tw/papers-and-teaching-materials/doc_download/1621-geditedit、https://www.openfoundry.org/tw/papers-and-teaching-materials/doc_download/1623-gvimedit。
SDK資料夾/launcher
然後在啟動器的 preferences -> Text Editor 中,選擇您想用的編輯器。(如果沒看到新選項的話,請重開一次啟動器試試)
還記得之前執行的畫面嗎?
▲ 圖7:新遊戲專案執行畫面。主選單、遊戲選單、離開時跳出的訊息等等,這些介面元素目前全都是英文的。
要把他翻成中文,請在 game 資料夾下新增一個名叫 "translations.rpy" 的檔案。至於檔案內容,您可從官網 Wiki (https://renpy.org/wiki/renpy/doc/translations/English )複製一份貼入。記得要複製的是 "Game/Main Menu Translation" 的部份。
要複製的程式碼,大約長得像下面這樣:
init python: config.translations[u'Skip Mode'] = u'Skip Mode' config.translations[u'Fast Skip Mode'] = u'Fast Skip Mode'
等號左邊的中括號內放著原文,不需要改它;而等號右邊的則是譯文內容。
您可以看到,目前都還沒翻過,還是英文的。
然後就開始對照著翻譯吧。很簡單的啦,量也不多。如果您之前已經翻譯過一次了,翻譯檔當然可以沿用。至於實際實驗後,如果發現還有什麼東西沒翻譯到,可用同樣格式照描,自行新增新行來進行翻譯。
什麼,你不想自己翻?還嫌麻煩?這……算了,稍微照顧一下大家也是咱的責任,那就再失血大放送一次好了。請下載雪凡翻譯好的翻譯檔案 (https://www.openfoundry.org/tw/papers-and-teaching-materials/doc_download/1624-translations),本檔案採用 CC-BY 3.0 (https://creativecommons.org/licenses/by/3.0/tw/) 授權釋出。
將檔案處理好後,看看效果......
▲ 圖8:字哩?等等,這畫面是怎樣?字全變成方塊酥了!是翻譯失敗了嗎?
其實沒有,翻譯手續是正確的,只是因為 Ren'Py 沒有內建中文字型,所以顯示不出來。
中文字型有很多麻煩的地方,首先就是他太大了,其次是自由字型極少。再說外國語系用戶也用不到,Ren'Py 官方沒有內嵌也怪不得人家。
不過人家有理,我們的問題還是得解決。
首先,您得先去找一個中文字型,把這個字型扔進 game 資料夾下的 font 子資料夾中。
▲ 圖9:把一個字型檔扔進 game/font 資料夾下。當然囉,這個字型檔得要是有支援中文的才行。接著打開 options.rpy 檔案,找到有 "style.default.font" 這個關鍵詞的那一行:
# style.default.font = "DejaVuSans.ttf"
去掉前面的註解,改成您打算使用的中文字型檔的路徑。比方說下面這樣:
style.default.font = "font/DroidSansFallback.ttf" # 此處的路徑是相對於 game 資料夾的路徑。
重新執行一次看看:
▲ 圖10:中文字出現了,用力歡呼吧!
哪,就像這樣,中文問題就算解決了。是嗎?
......且慢,您最好考慮一下字型版權問題。
中文的自由授權字型非常稀有,而普通人常用的細明體、少女體、綜藝體之類的字型,其實全都是有版權的。著名的華康(現名威鋒)、文鼎等公司,他們的字型包一大包兩三千元就可以買到數百個字型,說來其實也不算貴,但無法用於需要複製 與轉散發的場合--換言之,透過這種方式購買的字型,無法用於遊戲當中!
您可以看看文鼎的使用合約與 (https://www.arphic.com/tw/products/retail_authority.htm) 與威鋒的使用授權合約 (https://www.dynacw.com.tw/license_agreement.html、https://www.dynacw.com.tw/ia_o.asp),如果您要在遊戲中使用字型,您多半得先去和他們另簽專有契約,才能成為魔法少......更正!才能使用它們。
我沒簽過不知道要多少錢啦,但想來就很麻煩。有人有這方面相關經驗的話,期待留言補充。
您可在網路上搜尋「自由中文字型」,看看有沒有順眼的可用。需注意的是,所謂的自由字型往往也有許多使用條件需要注意。舉例來說,網路上著名的文泉驛系列字型雖是自由字型,但它採用的是 GPL 授權;這表示如果您使用這些字型發佈您的遊戲,您整套遊戲程式都得要以 GPL 授權釋出--換句話說,您不能對玩家隱藏您的遊戲腳本。而在此一前提下,也較難以傳統方式營利。
如果您未來有把遊戲拿去賣錢,又或其他考量的話,這方面千萬不可大意。
目前咱在自己遊戲中使用的字型,是採用 Apache-2.0 授權釋出的 Droid Sans Fallback。其 Apache-2.0 License 的授權條件不像 GPL 系列那麼嚴格,而效果也還不壞,至少中規中矩的不礙眼。歡迎參考。
網路上有很多地方可以下載 Droid Sans Fallback 字型,比方說這裡:https://www.ffonts.net/Droid-Sans-Fallback.font
一路閱讀到這裡,字型檔與咱的翻譯檔,應該會是您最初的兩個第三方資源檔案。
當您決定使用任何第三方資源檔案的同時,您都應該用一個檔案,撰寫並保存相對應的資源授權記錄。
比方說在 base 資料夾下,另放一個名叫 "License.txt" 的檔案。
這份授權檔案中,必須記錄「每一份第三方資源」的幾項重要屬性,這應該儘量包括......
記錄授權訊息這件事確實相當麻煩,但非常非常重要。且如果不打從一開始就嚴謹地記錄,日後甚至無從挽救--你能記得某個小小圖示究竟是從哪裡來的嗎?這當然是做不到的!而日後您的遊戲發表時,說不定就會為此吃上官司。又或是發表前重新檢查資源時,才發現有授權衝突,卻改無可改,陷入窘境。勉強發表,又心裡毛毛......
無論如何,記錄授權是專家必須要有的基本素養。何況作者都讓您免費用他的資源了,這時盡一下義務也是理所當然的。
什麼?您說盜版最高……人客,請小聲點,這樣我會很為難的。
本回內容播放終了,敬請期待下回!
評論
permadi.com/.../...
用這裡:
www.renpy.org/.../Movies
...提到的以下指令來測試:
$ renpy.movie_cutscene( "檔名")
完全正常沒有問題(在 renpy 6.15 最新版底下)
我猜是你的檔案格式不正確,請確 認你的影片是 renpy 有支援的格式。(如果實在看不懂 那些格式說明,選用 .webm 就沒錯了!……就隨便找個轉檔軟 體來轉。)
我完成了第一步漢化,但是一直是 方框啊QAQ換了好幾個字體都不 可以(這裡用的是簡體字,在把r py文件放進去之前已經把繁體字 簡化了
blog.163.com/.../...
還有另一篇文章參考
再來,我是將 ttf 字型檔放到「遊戲專案資料夾的 game」子目錄下,而非「re npy 程式資料夾」下。而您給的那篇教 學則似乎是將字型放到了 renpy 程式資料夾下……先說哦,他那種 放法應該也是行得通的,不過我不 推荐,未免混淆請先忘了他聽我的 。
總之我建議您把字型檔放到「遊戲 專案資料夾的 game 資料夾下」
如果您將字型檔放在:
c:\LoveGameProj ect\game\xxx.ttf
這種位置,此時您在設定檔中就要 將字型指定為:
style.default.font = "xxx.ttf"
這樣。
關於檔名限制方面,我沒有遇過名 稱限制,不過也無法肯定就真的完 全沒有。反正請儘量使用安全的名 稱,也就是使用「全英文」、「不 要有空格」、「大小寫也要注意」 。
我此時想到的其他可能問題還有:
關於轉義字元的說明:
zh.wikipedia.org/.../...
如果您依然無法解決,也可直接將 您的專案打包寄給我看看。在這個 階段,您的專案應該還不包含商業 機密,或許我可以幫得上忙。或是 第3回有個可執行的專案可以下載,也 可供您參考看看 ^_^
一開始因爲聽説簡體繁體編碼不同 所以想多了QAQ
不過還是非常感謝!