因為東西挺多的,所以這里只講基本的構架,即怎么構成這個程序,具體的細節問題后面一個一個再實現
首先要聲明一點,我的代碼很丑的,因為自己以前沒有學習過什么GAL GAME引擎相關方面的知識,只是想著如何實現一般GAL GAME的功能就自己YY出這個引擎了。
這個引擎圖形方面使用Direct3D,音頻方面使用Fmod Sound System,IDE使用Visual Studio 2008,并使用了DirectX SDK中的DXUT
聲明:Fmod SoundSystem用于免費的程序是免費的
FMOD Sound System, copyright (c) Firelight Technologies Pty, Ltd., 1994-2007.
這一篇不會講任何細化的東西,只會解析程序的結構
1、流程
先說整個程序的流程。
(1).注冊窗體一類的最底層的事,DXUT已經幫你干掉了
(2).初始化Direct3D以及Fmod,載入標題界面
(3).根據不同的選擇,進入不同的模式,比如載入游戲、游戲設置、離開游戲、重新開始游戲等
(4).進入游戲后,讀取腳本,解析,然后做相應的事。
流程很好理解,除了界面外,最主要的就是腳本問題了。
2、腳本
GAL GAME的腳本解釋工作應該算是所有類型游戲中最簡單的之一,因為整個流程只會出現一個線程,不會存在多線程操作。
于是我們可以解釋運行這個腳本,于是將所有的問題歸總起來,就會想出這個結構:
用一個總管理器(后面我們叫做AManager)來管理所有的部分,包括腳本解釋器、對話框、立繪管理、場景管理、場景效果、音頻、變量、視頻等所有游戲主流程會用到的東西。
然后讀進腳本,交給腳本解釋器,腳本解釋器返回一個可執行命令,AManager根據這個命令來把任務下發給其他的東西。比如有一個立繪操作的命令,就交給立繪管理器,立繪管理器中自己處理。若有一個聲音操作,就交給音頻管理器,音頻管理器中就自己處理播放音頻的問題。其他的也都是這樣。
工作原理知道了,那么接下來就是確定有哪些需要的東西了。
3、各種管理器
這些管理器從AManager處獲得命令,并開始工作,那么我們需要哪些東西呢?
(1).對話框文字管理器
這個東西接受關于文字的命令,然后進行解析并演出。
(2).立繪管理器
這個東西接受關于立繪的命令,管理立繪的顯示與消失,還有立繪的動作等。
(3).場景/CG管理器
這個東西接受關于場景和CG的命令,因為CG往往是一張整個呈現在屏幕上,跟場景的出現一樣,于是可以一起處理。
(4).屏幕特效管理器
這個東西接受關于屏幕特效的命令,也就是例如整個屏幕淡入淡出、百葉窗等常用的切換場景的效果。還有就是屏幕震動、旋轉等特效。
(5).音頻管理器
這個東西接受關于音樂和音效的命令,具體還有系統音量設置等附加的東西,用來播放、停止音樂和音效。
(6).變量管理器
這個東西接受關于變量的操作,所謂的變量也就是用來記錄好感度、玩家選項的選擇等可變的東西,可以訪問變量、改變變量等。
(7).視頻管理器
這個東西接受關于視頻的命令,其實也就是OP、過場動畫、ED等,沒什么特別的。
(8).存檔管理器
這個東西跟腳本沒關系,但是放在這里是為了方便讀取各個需要存儲的東西并存儲以及讀取。
大概就是這些東西,當然,根據你的游戲的特殊的地方,可以自己加東西上去,比如小游戲什么的。
4、腳本命令
腳本命令可以自己設計,當然,總的前提是讓腳本演出更加方便以及流暢,也要考慮寫腳本的清晰度與復雜度。
當然有個考慮,就是在立繪、場景等名稱管理時,若用路徑名就犧牲多了,可以考慮用一個總的defines.script文件來記錄各種宏定義。比如define BGM01 music\hahahahhahahaheihehiehiehie.mp3后,在播放這個音樂時就只用BGM BGM01 ;就行了
以下節選Sumreen圣誕版DEMO,海邊演出的腳本。具體的命令可以自己琢磨,各種命令應該比較清晰,只是參數不同。
當然,我也提供了Sumreen腳本說明文檔,下載:/Files/CK985/SumreenScriptSDK.rar
從下篇開始大概會慢慢開始講各種管理器的實現方法吧。。恩。。工程量好龐大。。慢慢填坑吧。。
首先要聲明一點,我的代碼很丑的,因為自己以前沒有學習過什么GAL GAME引擎相關方面的知識,只是想著如何實現一般GAL GAME的功能就自己YY出這個引擎了。
這個引擎圖形方面使用Direct3D,音頻方面使用Fmod Sound System,IDE使用Visual Studio 2008,并使用了DirectX SDK中的DXUT
聲明:Fmod SoundSystem用于免費的程序是免費的
FMOD Sound System, copyright (c) Firelight Technologies Pty, Ltd., 1994-2007.
這一篇不會講任何細化的東西,只會解析程序的結構
1、流程
先說整個程序的流程。
(1).注冊窗體一類的最底層的事,DXUT已經幫你干掉了
(2).初始化Direct3D以及Fmod,載入標題界面
(3).根據不同的選擇,進入不同的模式,比如載入游戲、游戲設置、離開游戲、重新開始游戲等
(4).進入游戲后,讀取腳本,解析,然后做相應的事。
流程很好理解,除了界面外,最主要的就是腳本問題了。
2、腳本
GAL GAME的腳本解釋工作應該算是所有類型游戲中最簡單的之一,因為整個流程只會出現一個線程,不會存在多線程操作。
于是我們可以解釋運行這個腳本,于是將所有的問題歸總起來,就會想出這個結構:
用一個總管理器(后面我們叫做AManager)來管理所有的部分,包括腳本解釋器、對話框、立繪管理、場景管理、場景效果、音頻、變量、視頻等所有游戲主流程會用到的東西。
然后讀進腳本,交給腳本解釋器,腳本解釋器返回一個可執行命令,AManager根據這個命令來把任務下發給其他的東西。比如有一個立繪操作的命令,就交給立繪管理器,立繪管理器中自己處理。若有一個聲音操作,就交給音頻管理器,音頻管理器中就自己處理播放音頻的問題。其他的也都是這樣。
工作原理知道了,那么接下來就是確定有哪些需要的東西了。
3、各種管理器
這些管理器從AManager處獲得命令,并開始工作,那么我們需要哪些東西呢?
(1).對話框文字管理器
這個東西接受關于文字的命令,然后進行解析并演出。
(2).立繪管理器
這個東西接受關于立繪的命令,管理立繪的顯示與消失,還有立繪的動作等。
(3).場景/CG管理器
這個東西接受關于場景和CG的命令,因為CG往往是一張整個呈現在屏幕上,跟場景的出現一樣,于是可以一起處理。
(4).屏幕特效管理器
這個東西接受關于屏幕特效的命令,也就是例如整個屏幕淡入淡出、百葉窗等常用的切換場景的效果。還有就是屏幕震動、旋轉等特效。
(5).音頻管理器
這個東西接受關于音樂和音效的命令,具體還有系統音量設置等附加的東西,用來播放、停止音樂和音效。
(6).變量管理器
這個東西接受關于變量的操作,所謂的變量也就是用來記錄好感度、玩家選項的選擇等可變的東西,可以訪問變量、改變變量等。
(7).視頻管理器
這個東西接受關于視頻的命令,其實也就是OP、過場動畫、ED等,沒什么特別的。
(8).存檔管理器
這個東西跟腳本沒關系,但是放在這里是為了方便讀取各個需要存儲的東西并存儲以及讀取。
大概就是這些東西,當然,根據你的游戲的特殊的地方,可以自己加東西上去,比如小游戲什么的。
4、腳本命令
腳本命令可以自己設計,當然,總的前提是讓腳本演出更加方便以及流暢,也要考慮寫腳本的清晰度與復雜度。
當然有個考慮,就是在立繪、場景等名稱管理時,若用路徑名就犧牲多了,可以考慮用一個總的defines.script文件來記錄各種宏定義。比如define BGM01 music\hahahahhahahaheihehiehiehie.mp3后,在播放這個音樂時就只用BGM BGM01 ;就行了
以下節選Sumreen圣誕版DEMO,海邊演出的腳本。具體的命令可以自己琢磨,各種命令應該比較清晰,只是參數不同。
當然,我也提供了Sumreen腳本說明文檔,下載:/Files/CK985/SumreenScriptSDK.rar
從下篇開始大概會慢慢開始講各種管理器的實現方法吧。。恩。。工程量好龐大。。慢慢填坑吧。。
1
delay 100 ;
2
3
bgm BGM04 ;
4
unlockmusic BGM04 ;
5
6
text 夢中,\b\n我掉進了一個深不見底的洞穴。\b\c洞穴完全沒有底,\b\n我一直在下落,\b\n下落……\b\c我想抓住什么東西,\b\n但是四周只有黑暗。\b\c話說回來,\b\n既然只有黑暗,\b\n我怎么能判斷這是個洞穴呢?\b\c思考這些是沒有意義的,\b\n就在我不斷下落的時候……\b\c\e ;
7
8
alphain 圓開 10 ;
9
settalker 蘇儀 ;
10
screenmove 橫向抖動 20 0 0 0 0 ;
11
text 啊!\b\c\e ;
12
13
notalker ;
14
text 我醒了。\b\c\e ;
15
settalker 蘇儀 ;
16
text 呼……\b\c\e ;
17
18
notalker ;
19
text 怎么會做這種夢呢?\b\c我大口大口地喘氣,\b\n背后完全濕了。\b\c太陽已經下山了,\b\n夏日的暑氣被夜晚的涼爽取代了。\b\c從窗口能看到一片干凈的星空。\b\c天空并不是完全的黑,\b\n而是一種近似深藍色的背景上點綴著銀色的光點。\b\c看來明天又是晴天了。\b\c\e ;
20
settalker 蘇儀 ;
21
text 哈欠……\b\c\e ;
22
23
alphaout 純黑 10 ;
24
delay 26 ;
25
bg 客廳開燈 ;
26
delay 40 ;
27
alphain 橫板拉開 60 ;
28
delay 60 ;
29
30
notalker ;
31
text 伸了個懶腰之后,\b\n我走下了樓梯。\b\c白天沒什么感覺,\b\n但是到了晚上,\b\n立刻感覺到只有一個人的房子顯得尤其的大。\b\c讓人不免產生孤寂的感覺。\b\c\e ;
32
settalker 蘇儀 ;
33
text 好無聊啊……\b\c\e ;
34
notalker ;
35
text 對了,\b\n到海邊去看看吧。\b\c就在這里不遠,\b\n不就是沙灘嗎?\b\c\e ;
36
37
nobgm ;
38
39
alphaout 純黑 10 ;
40
delay 26 ;
41
bg 玄關開燈 ;
42
delay 40 ;
43
alphain 橫板拉開 30 ;
44
delay 30 ;
45
46
settalker 蘇儀 ;
47
text 鑰匙……\b鑰匙……\b\c\e ;
48
notalker ;
49
sound sound/SE_0007.wav ;
50
alphaout 純黑 10 ;
51
delay 26 ;
52
53
text 于是,\b\n我鎖好門,離開了家,前往海邊。\b\c\e ;
54
55
bgm BGM03 ;
56
unlockmusic BGM03 ;
57
58
bg 十字路口天黑 ;
59
delay 40 ;
60
alphain 開窗戶 30 ;
61
delay 180 ;
62
63
delay 30 ;
64
65
text 天空已經徹底暗了下來。\b\c從家到最近的海灘,需要走過一座新修的橋。\b\n海邊也有許多小吃店,\b\n不過晚上一般都會冷清許多。\b\c本來家這邊就沒多少車,\b\n到了晚上更是如此。\b\n路上除了路燈和紅綠燈之外沒有別的東西。\b\c\e ;
66
67
text 在涼爽的海風的催促下,我加快了腳步。\b\c\e ;
68
69
alphaout 橫板拉出 50 ;
70
delay 50 ;
71
bg 沙灘天黑 ;
72
bgsound sound/SE_0008.wav ;
73
delay 100 ;
74
screenmove 聚焦 1 200 150 400 300 ;
75
alphain 橫板拉開左 60 ;
76
delay 90 ;
77
screenmove 聚焦 60 0 0 800 600 ;
78
delay 70 ;
79
80
text 出現在面前的就是蔚藍的海。\b\c\e ;
81
settalker 蘇儀 ;
82
text 呼!\b\n真不錯……\b\c\e ;
83
84
notalker ;
85
text 晚上的海灘幾乎沒人。\b\c這一段海灘屬于私人用地,\b\n白天也只有負責清理海灘的工人,\b\n因此晚上更是安靜的很。\b\c我找了塊比較干的地方,\b\n一屁股坐了下去。\b\c海風吹在臉上,\b\n略帶咸濕的感覺。\b\c上大學以來,\b\n還是第一次單獨來海邊啊……\b\c\e ;
86
87
text 我開始享受著海灘上那種獨有的特別的舒適感。\b\n月光下,\b大海,\b沙灘,\b海風的觸感\b及潮汐的聲音\b構成了天然的協奏曲。\b\c\e ;
88
screenmove 縱向抖動 5 0 0 0 0 ;
89
90
text 等等,那邊的海灘上好像有人?\b\c\e ;
91
dim 琉璃好感度 ;
92
dim 琉璃登場 ;
93
change 琉璃登場 0 ;
94
95
#bgm BGM03 ;
96
#unlockmusic BGM03 ;
97
98
text 距離比較遠,\b\n看的不是很清楚。\b\c但是從身形來看,\b\n應該是一名女性。\b\c她似乎在找什么東西,\b\n低著頭用腳劃撥著沙子,\b\n神情專注的很。\b\c\e ;
99
100
101
text 要不要過去問問?\b\c\e ;
102
103
choice 是否過去問琉璃 2 過去問問 算了 ;
104
105
ife 是否過去問琉璃 = 1
106
add 琉璃好感度 1 ;
107
change 琉璃登場 1 ;
108
text 過去問問吧。\b\c\e ;
109
text 我起身向她走去。\b\c\e ;
110
settalker 蘇儀 ;
111
text 那個,有什么能幫你的嗎?\b\c\e ;
112
notalker ;
113
114
imgin 琉璃登場 0 0 10 ;
115
unlockcg 琉璃登場 ;
116
delay 26 ;
117
118
text 她抬起頭看我。\b\c\e ;
119
120
121
text 靠近了看,\b\n真是美麗啊!\b\c金色的長發披在身后,\b\n精致的五官配合白皙的皮膚,\b\n略帶紫色的眼眸尤其漂亮。\b\c渾身散發著和一般女性完全不同的高貴,\b\n是哪里的OL嗎?\b\c\e ;
122
123
settalker ??? ;
124
text \v<char04_00001>呵呵,我就是隨便轉轉。\b\c\e ;
125
notalker ;
126
127
text 她目不轉睛的盯著我,\b\n反倒是我有點不好意思了……\b\c\e ;
128
text 我看我還是先說點話來打破這尷尬的氣氛好了。\b\c\e ;
129
settalker 蘇儀 ;
130
screenmove 縱向抖動 5 0 0 0 0 ;
131
text 哦~那什么……\b\n轉轉很好……\b\c\e ;
132
imgout 琉璃登場 10 ;
133
delay 26 ;
134
setrgb 200 200 200 ;
135
imgin lx1 0 0 10 ;
136
delay 26 ;
137
138
settalker ??? ;
139
text \v<char04_00002>打擾到你了?\b\c\e ;
140
settalker 蘇儀 ;
141
screenmove 縱向抖動 5 0 0 0 0 ;
142
143
text 沒、\e ;
144
delay 20 ;
145
text 沒有!\e ;
146
delay 20 ;
147
text 完全沒有。\b\c\e ;
148
text 我看你低頭好像在找東西,\b\n就想問問能不能幫你……\b\c\e ;
149
150
settalker ??? ;
151
152
imgin lx2 0 0 10 ;
153
delay 26 ;
154
imgout lx1 255 ;
155
delay 1 ;
156
157
text \v<char04_00003>你真體貼啊!\b\c\e ;
158
notalker ;
159
screenmove 橫向抖動 5 0 0 0 0 ;
160
text 體貼體貼體貼……\b\c\e ;
161
text 這兩個字在我腦子里響了好久。\b\n頭腦一陣眩暈。\b\n我這下真的被擊中了。\b\c\e ;
162
163
settalker 蘇儀 ;
164
text 不、\e ;
165
delay 20 ;
166
text 不會啊……\b\n\e ;
167
text 我就是來問問。\b\c\e ;
168
notalker ;
169
170
imgout lx2 10 ;
171
imgin lx3 0 0 10 ;
172
delay 26 ;
173
174
text 她又笑了。\b\c\e ;
175
176
settalker ??? ;
177
text \v<char04_00004>你也是來散步的?\b\c\e ;
178
settalker 蘇儀 ;
179
text 恩!\b\c\e ;
180
settalker ??? ;
181
text \v<char04_00005>晚上的海很不錯吧!\b\c\e ;
182
183
imgin lx4 0 0 10 ;
184
delay 26 ;
185
imgout lx3 255 ;
186
delay 1 ;
187
188
text \v<char04_00006>我每天都來哦!\b\c\e ;
189
notalker ;
190
text 她看著大海,\b\n仿佛海里面才有她要找的東西。\b\c\e ;
191
192
text 我不知道這個時候該說什么好……\b\c\e ;
193
settalker 蘇儀 ;
194
text 你是住這里的嗎?\b\c\e ;
195
notalker ;
196
text 問出來我就后悔了,\b\n這個時候怎么能問這種問題呢……\b\c\e ;
197
198
settalker ??? ;
199
200
imgout lx4 10 ;
201
imgin lx2 0 0 10 ;
202
delay 26 ;
203
204
text \v<char04_00007>這算搭訕嗎?\b\n\v<char04_00008>如果是的話技術可不怎么樣哦!\b\c\e ;
205
notalker ;
206
screenmove 縱向抖動 5 0 0 0 0 ;
207
208
text 完了!\b\n被人家鄙視了!\b\c\e ;
209
settalker ??? ;
210
211
text \v<char04_00009>我不住這里,\b\n\v<char04_00010>不過晚上喜歡在這里走走,\n說不定能遇到有趣的東西呢。\b\c\e ;
212
notalker ;
213
214
text 和這個人說話,\b\n感覺總被她壓著啊……\b\c\e ;
215
text 這就是大人和小孩的區別?\b\n看來我還不夠成熟。\b\c\e ;
216
settalker ??? ;
217
218
imgin lx1 0 0 10 ;
219
delay 26 ;
220
imgout lx2 255 ;
221
delay 1 ;
222
223
text \v<char04_00011>今天就遇到有趣的東西了。\b\c\e ;
224
settalker 蘇儀 ;
225
text 是什么東西呢?\b\c\e ;
226
227
imgout lx1 10 ;
228
imgin lx4 0 0 10 ;
229
delay 26 ;
230
231
settalker ??? ;
232
text \v<char04_00012>就是你啊!\b\c\e ;
233
settalker 蘇儀 ;
234
text ……\b\c\e ;
235
notalker ;
236
text 伴隨著爽朗的笑聲,\b\n她張開雙臂,\b\n在原地轉了一個圈。\b\c我注意到她沒穿鞋子,\b\n優美的腳在在沙灘上特別好看。\b\c\e ;
237
settalker 蘇儀 ;
238
239
imgin lx3 0 0 10 ;
240
delay 26 ;
241
imgout lx4 255 ;
242
delay 1 ;
243
244
text 如果沒事情,我先走了。\b\c\e ;
245
settalker ??? ;
246
text \v<char04_00013>不愿意陪我聊聊?\b\c\e ;
247
notalker ;
248
text 好像完全被她牽著走了……\b\c\e ;
249
screenmove 縱向抖動 5 0 0 0 0 ;
250
settalker 蘇儀 ;
251
text 愿、愿意!\b\c\e ;
252
253
imgin lx4 0 0 10 ;
254
delay 26 ;
255
imgout lx3 255 ;
256
delay 1 ;
257
258
settalker ??? ;
259
text \v<char04_00014>呵呵,今天還是算了,\b\n\v<char04_00015>以后還有機會的見面的話再聊吧。\b\c\e ;
260
notalker ;
261
imgout lx4 3 ;
262
delay 85 ;
263
264
text 說完,她轉身揮揮手就走了。\b\c我呆呆的站在原地,\b\n看著她消失在夜色中。\b\c到頭來,連名字都沒問。\b\c\e ;
265
text 不過,成熟的魅力真強大啊,\b\n和以前見過的女性完全不一樣。\b\c給人的感覺就好像有很多秘密的人…\b\c\e ;
266
267
setrgb 255 255 255 ;
268
269
else
270
271
text 算了,\b\n說不定人家不希望我去打擾呢。\b\c還是在遠方看著吧。\b\c也許是沒發現我吧,\b\n她繼續用腳劃撥沙子。\b\c\e ;
272
273
alphaout 純黑 10 ;
274
delay 26 ;
275
bg 夜空 ;
276
delay 30 ;
277
alphain 圓開 50 ;
278
delay 60 ;
279
280
text 過了一會,\b\n抬起頭看著天空。\b\c月光下,一個人徜徉在沙灘上,\b\n不知道是什么感覺?\b\n相信一定是很棒的吧……\b\c我也抬頭看著天空,\b\n今天的月亮是滿月,\b\c深藍色的天空背景中,\b\n皎潔的月光和明亮的星星,\b\n真是美麗。\b\c那個人一定也是在享受這一切。\b\c\e ;
281
282
text …\b\c\e ;
283
text ……\b\c\e ;
284
text ………\b\c\e ;
285
286
alphaout 純黑 10 ;
287
bg 沙灘天黑 ;
288
alphain 圓開 50 ;
289
delay 60 ;
290
291
text 當我重新在沙灘上尋找她的身影時,\b\n卻發現她已經消失了。\b\c\e ;
292
text 剛才的一切不是我在做夢吧?\b\n感覺這么虛幻,\b\n卻又如此的真實。\b\c\e ;
293
294
295
endif
296
297
text 回家吧……我轉身沿著來時的路往家走去。\b\c\e ;
298
299
nobgm ;
300
bgsoundout ;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300
