RenPy快速上手筆記(1)
Renpy是一個使用Python編寫的AVG遊戲引擎。
自己在初中第一次接觸Python的時候就了解過這個引擎,當時熱衷於AVG遊戲,並一直想製作一個galgame,還寫好了企劃和一部分劇本。但是當時限於學業,並沒有時間去完成這個想法。
前一段時間發現了心跳文學俱樂部(心驚肉跳文學俱樂部)這個遊戲,雖然Metagame這種類型有所耳聞,但是這種讓你刪遊戲才能達到True end以及會讀取你管理員賬戶名稱的操作也是第一次見。
於是就猜想是不是RenPy引擎製作出來的。據我所知,這個引擎的功能十分之強大。藉助於它的Screen等模塊甚至可以自己寫一個RPG遊戲出來。
最後還是決定趁著最近事情不是很多,把當年的一個想法完成了。(於是我還買了數位板,打算磨練拙劣的畫工)
首先,RenPy的具體定義:
RenPy is a visual novel engine – used by thousands of creators from around the world – that helps you use words, images, and sounds to tell interactive stories that run on computers and mobile devices.These can be both visual novels and life simulation games. The easy to learn script language allows anyone to efficiently write large visual novels, while its Python scripting is enough for complex simulation games.
renpy
這是Renpy的官方網站從這裡我們可以下載到需要的SDK
https://www.renpy.org/
Github:
renpy/renpy
還有一個灣灣人寫的教程:
《雪凡與好朋友們的 RenPy 遊戲引擎初學心得提示》第一回:RenPy 是什麼?
(似乎是要翻牆,百度貼吧linux吧好像有搬運)
這個教程寫的非常不錯,但是可能因為一些版本原因存在一點點問題,想了想,還是決定自己寫一個東西出來,權當筆記作用。
下載好SDK後大概是這樣一個界面(順便一說,這個SDK本身也是RenPy完成的)下載好SDK後大概是這樣一個界面(順便一說,這個SDK本身也是RenPy完成的)
在設置裡面可以完成中文的設置,可以將,官方用遊戲完成了一個教程也包含在裡面,使用新建工程即可。
新工程的設置等暫時不贅述,因為在options.rpy文件裡面都可以改
(要使用的只有四個rpy文件)
我們建立好一個工程以後,暫時要自己寫的只有script.rpy(rpy是renpy自己定義的文件格式)
初始是這樣的:
# 遊戲的腳本可置於此文件中。# 聲明此遊戲使用的角色。顏色參數可使角色姓名著色。define e = Character("艾琳")# 遊戲在此開始。label start: # 顯示一個背景。此處默認顯示占點陣圖,但您也可以在圖片目錄添加一個文件 # (命名為「bg room.png」或「bg room.jpg」)來顯示。 scene bg room # 顯示角色立繪。此處使用了占點陣圖,但您也可以在圖片目錄添加命名為 # 「eileen happy.png」的文件來將其替換掉。 show eileen happy # 此處顯示各行對話。 e "您已創建一個新的 RenPy 遊戲。" e "當您完善了故事、圖片和音樂之後,您就可以向全世界發布了!" # 此處為遊戲結尾。 return
script文件的設計非常簡單,我們只需要在其上寫便好了。
首先,尋找一張人物立繪,當做人物,我就試著用ps摳了一張心愛出來
我們還需要一張背景圖(順便一說,圖片的大小需要符合工程創建時的解析度大小)
於是就找了一張rabbit house的圖:
將人物立繪改名外kokowa,背景改名為background
直接就可以開始在定義好的script.rpy文件上進行修改
# 遊戲的腳本可置於此文件中。# 聲明此遊戲使用的角色。顏色參數可使角色姓名著色。define e1 = Character("保登 心愛")define e2 = Character("香風 智乃")# 遊戲在此開始。label start: scene background#顯示背景 # 顯示角色立繪。此處使用了占點陣圖,但您也可以在圖片目錄添加命名為 show kokowa with dissolve #給人物增加進場特效 #可以添加at left或者at right 指定人物所處的位置。(還有其他位置) #可以添加behind操作 behind [另一個角色立繪] e1"智乃醬~聽我說聽我說。" hide kokowa #隱藏遊戲角色 #遊戲結束 return
其他畫面轉場效果:
- fade:畫面一黑然後轉場。這是會讓人感到印象深刻的強烈轉場,通常用在更換場景或時間流逝時。
- dissolve:用半透明效果,將新圖片顯示出來。
是最常見的轉場效果,幾乎在任何需要轉場的場合都能派上用場,效果也很好看。
- move:圖片將從舊位置,等速度移動到新位置。在變更圖片位置時可以用,能將圖片滑來滑去。但最好不要同時變更圖片的實際顯示內容(如同時變更表情),效果會稍微有些勉強。
- ease:等於 move,不過這是加速度運動,移動感覺更平滑。和 move 相同,不適合用在僅變更圖片內容的狀況下。
- pixellate:將畫面逐步馬賽克化,並在馬賽克達到最大時變更圖片,再逐步解除馬賽克恢復成新的圖片。同樣是印象強烈的轉場,效果不錯,就是使用時機稍微不好拿捏......
- vpunch、hpunch:讓畫面左右晃動或上下晃動,就像被人打了一拳或遭遇地震那樣。與其說是轉場,不如說是特效。不過相當實用,遊戲中能用上的地方很多。
出來的效果是這樣的:
我們也可以播放BGM或者音效或者給角色添加配音:
# 遊戲的腳本可置於此文件中。# 聲明此遊戲使用的角色。顏色參數可使角色姓名著色。define e1 = Character("保登 心愛")define e2 = Character("香風 智乃")# 遊戲在此開始。label start: scene background#顯示背景 # 顯示角色立繪。此處使用了占點陣圖,但您也可以在圖片目錄添加命名為 play music "testmusic.mp3" fadein 2.0#淡入淡出操作,時長為2s play sound "testsound.ogg" #播放音效 show kokowa with dissolve #給人物增加進場特效 #可以添加at left或者at right 指定人物所處的位置。(還有其他位置) #可以添加behind操作 behind [另一個角色立繪] voice "testvoice.ogg" e1"智乃醬~聽我說聽我說。" stop music fadeout 1.0 #停止音樂,淡出時間為1s hide kokowa #遊戲結束 return
如此一來,似乎一個AVG遊戲所需要的雛形(圖片和文字,音樂和配音)基本齊全了。但是還是缺少了一個AVG遊戲的靈魂存在:那就是選項劇情分支
選項劇情分支的操作也很簡單:就是在代碼塊label這一個所屬的代碼塊里添加menu操作(一個label指代的是一個代碼塊,也可以理解為一段劇情)
menu指的就是一個選項的菜單:
# 遊戲的腳本可置於此文件中。# 聲明此遊戲使用的角色。顏色參數可使角色姓名著色。define e1 = Character("保登 心愛")define e2 = Character("香風 智乃")# 遊戲在此開始。label start: scene background#顯示背景 # 顯示角色立繪。此處使用了占點陣圖,但您也可以在圖片目錄添加命名為 play music "testmusic.mp3" fadein 2.0#淡入淡出操作,時長為2s play sound "testsound.ogg" #播放音效 show kokowa with dissolve #給人物增加進場特效 #可以添加at left或者at right 指定人物所處的位置。(還有其他位置) #可以添加behind操作 behind [另一個角色立繪] voice "testvoice.ogg" e1"智乃醬~聽我說聽我說。" menu: e2 "心愛桑又想偷懶了吧~?" "才不是呢~": e2"真拿你沒辦法~" jump goodend "唉嘿嘿,被發現了~": jump badend stop music fadeout 1.0 #停止音樂,淡出時間為1s hide kokowa #遊戲結束 returnlabel goodend: e2"心愛姐姐~" e1"唉嘿嘿~" return #遊戲結束label badend: e2"心愛桑最討厭了!" e1"啊啊啊啊啊啊啊啊啊~~~~" #毫無邏輯的劇情啊......
這樣一來,做一個帶有劇情分支或者不同結局的AVG遊戲似乎完全沒有問題了。但是我們還想再添加一些更好玩的功能:比如好感度功能 或者是 小遊戲功能
先說好感度功能:
好感度功能的話自然是要用到變數了,renpy本身的設計來說也沒有用到這個設計,這時候你要做的,自然就是使用Python代碼了:
我們可以在變數前添加 $ 來表明它是python形式的變數
$ relation = 0
這時候,我們除了menu選單外,還可以隨時隨地使用if語句來進行劇情的分支演繹:
# 遊戲的腳本可置於此文件中。# 聲明此遊戲使用的角色。顏色參數可使角色姓名著色。define e1 = Character("保登 心愛")define e2 = Character("香風 智乃")# 遊戲在此開始。label start: $ relation = 0 #好感度 scene background#顯示背景 # 顯示角色立繪。此處使用了占點陣圖,但您也可以在圖片目錄添加命名為 #play music "testmusic.mp3" fadein 2.0#淡入淡出操作,時長為2s #play sound "testsound.ogg" #播放音效 show kokowa with dissolve #給人物增加進場特效 #可以添加at left或者at right 指定人物所處的位置。(還有其他位置) #可以添加behind操作 behind [另一個角色立繪] #voice "testvoice.ogg" e1"智乃醬~聽我說聽我說。" menu: e2 "心愛桑又想偷懶了吧~?" "才不是呢~": e2"真拿你沒辦法~" $ relation = relation + 1 "唉嘿嘿,被發現了~": $ relation = relation - 1 #stop music fadeout 1.0 #停止音樂,淡出時間為1s if relation == 1: jump goodend elif relation == -1: jump badend hide kokowa #遊戲結束 returnlabel goodend: e2"心愛姐姐~" e1"唉嘿嘿~"label badend: e2"心愛桑最討厭了!" e1"啊啊啊啊啊啊啊啊啊~~~~" #毫無邏輯的劇情啊......
此外,在renpy的script.rpy文件的開頭添加 init python模塊,也可以直接使用python代碼,我們可以在這裡定義好所需要的函數和類,在後來的腳本進程中都可以使用這些函數
還有一些東西下次再寫。
推薦閱讀: