因為東西挺多的,所以這里只講基本的構架,即怎么構成這個程序,具體的細節問題后面一個一個再實現

首先要聲明一點,我的代碼很丑的,因為自己以前沒有學習過什么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
      從下篇開始大概會慢慢開始講各種管理器的實現方法吧。。恩。。工程量好龐大。。慢慢填坑吧。。

  1delay 100 ;
  2
  3bgm BGM04 ;
  4unlockmusic BGM04 ;
  5
  6text 夢中,\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
  8alphain 圓開 10 ;
  9settalker 蘇儀 ;
 10screenmove 橫向抖動 20 0 0 0 0 ;
 11text 啊!\b\c\e ;
 12
 13notalker ;
 14text 我醒了。\b\c\e ;
 15settalker 蘇儀 ;
 16text 呼……\b\c\e ;
 17
 18notalker ;
 19text 怎么會做這種夢呢?\b\c我大口大口地喘氣,\b\n背后完全濕了。\b\c太陽已經下山了,\b\n夏日的暑氣被夜晚的涼爽取代了。\b\c從窗口能看到一片干凈的星空。\b\c天空并不是完全的黑,\b\n而是一種近似深藍色的背景上點綴著銀色的光點。\b\c看來明天又是晴天了。\b\c\e ;
 20settalker 蘇儀 ;
 21text 哈欠……\b\c\e ;
 22
 23alphaout 純黑 10 ;
 24delay 26 ;
 25bg 客廳開燈 ;
 26delay 40 ;
 27alphain 橫板拉開 60 ;
 28delay 60 ;
 29
 30notalker ;
 31text 伸了個懶腰之后,\b\n我走下了樓梯。\b\c白天沒什么感覺,\b\n但是到了晚上,\b\n立刻感覺到只有一個人的房子顯得尤其的大。\b\c讓人不免產生孤寂的感覺。\b\c\e ;
 32settalker 蘇儀 ;
 33text 好無聊啊……\b\c\e ;
 34notalker ;
 35text 對了,\b\n到海邊去看看吧。\b\c就在這里不遠,\b\n不就是沙灘嗎?\b\c\e ;
 36
 37nobgm ;
 38
 39alphaout 純黑 10 ;
 40delay 26 ;
 41bg 玄關開燈 ;
 42delay 40 ;
 43alphain 橫板拉開 30 ;
 44delay 30 ;
 45
 46settalker 蘇儀 ;
 47text 鑰匙……\b鑰匙……\b\c\e ;
 48notalker ;
 49sound sound/SE_0007.wav ;
 50alphaout 純黑 10 ;
 51delay 26 ;
 52
 53text 于是,\b\n我鎖好門,離開了家,前往海邊。\b\c\e ;
 54
 55bgm BGM03 ;
 56unlockmusic BGM03 ;
 57
 58bg 十字路口天黑 ;
 59delay 40 ;
 60alphain 開窗戶 30 ;
 61delay 180 ;
 62
 63delay 30 ;
 64
 65text 天空已經徹底暗了下來。\b\c從家到最近的海灘,需要走過一座新修的橋。\b\n海邊也有許多小吃店,\b\n不過晚上一般都會冷清許多。\b\c本來家這邊就沒多少車,\b\n到了晚上更是如此。\b\n路上除了路燈和紅綠燈之外沒有別的東西。\b\c\e ;
 66
 67text 在涼爽的海風的催促下,我加快了腳步。\b\c\e ;
 68
 69alphaout 橫板拉出 50 ;
 70delay 50 ;
 71bg 沙灘天黑 ;
 72bgsound sound/SE_0008.wav ;
 73delay 100 ;
 74screenmove 聚焦 1 200 150 400 300 ;
 75alphain 橫板拉開左 60 ;
 76delay 90 ;
 77screenmove 聚焦 60 0 0 800 600 ;
 78delay 70 ;
 79
 80text 出現在面前的就是蔚藍的海。\b\c\e ;
 81settalker 蘇儀 ;
 82text 呼!\b\n真不錯……\b\c\e ;
 83
 84notalker ;
 85text 晚上的海灘幾乎沒人。\b\c這一段海灘屬于私人用地,\b\n白天也只有負責清理海灘的工人,\b\n因此晚上更是安靜的很。\b\c我找了塊比較干的地方,\b\n一屁股坐了下去。\b\c海風吹在臉上,\b\n略帶咸濕的感覺。\b\c上大學以來,\b\n還是第一次單獨來海邊啊……\b\c\e ;
 86
 87text 我開始享受著海灘上那種獨有的特別的舒適感。\b\n月光下,\b大海,\b沙灘,\b海風的觸感\b及潮汐的聲音\b構成了天然的協奏曲。\b\c\e ;
 88screenmove 縱向抖動 5 0 0 0 0 ;
 89
 90text 等等,那邊的海灘上好像有人?\b\c\e ;
 91dim 琉璃好感度 ;
 92dim 琉璃登場 ;
 93change 琉璃登場 0 ;
 94
 95#bgm BGM03 ;
 96#unlockmusic BGM03 ;
 97
 98text 距離比較遠,\b\n看的不是很清楚。\b\c但是從身形來看,\b\n應該是一名女性。\b\c她似乎在找什么東西,\b\n低著頭用腳劃撥著沙子,\b\n神情專注的很。\b\c\e ;
 99
100
101text 要不要過去問問?\b\c\e ;
102
103choice 是否過去問琉璃 2 過去問問 算了 ;
104
105ife 是否過去問琉璃 = 1
106add 琉璃好感度 1 ;
107change 琉璃登場 1 ;
108text 過去問問吧。\b\c\e ;
109text 我起身向她走去。\b\c\e ;
110settalker 蘇儀 ;
111text 那個,有什么能幫你的嗎?\b\c\e ;
112notalker ;
113
114imgin 琉璃登場 0 0 10 ;
115unlockcg 琉璃登場 ;
116delay 26 ;
117
118text 她抬起頭看我。\b\c\e ;
119
120
121text 靠近了看,\b\n真是美麗啊!\b\c金色的長發披在身后,\b\n精致的五官配合白皙的皮膚,\b\n略帶紫色的眼眸尤其漂亮。\b\c渾身散發著和一般女性完全不同的高貴,\b\n是哪里的OL嗎?\b\c\e ;
122
123settalker ??? ;
124text \v<char04_00001>呵呵,我就是隨便轉轉。\b\c\e ;
125notalker ;
126
127text 她目不轉睛的盯著我,\b\n反倒是我有點不好意思了……\b\c\e ;
128text 我看我還是先說點話來打破這尷尬的氣氛好了。\b\c\e ;
129settalker 蘇儀 ;
130screenmove 縱向抖動 5 0 0 0 0 ;
131text 哦~那什么……\b\n轉轉很好……\b\c\e ;
132imgout 琉璃登場 10 ;
133delay 26 ;
134setrgb 200 200 200 ;
135imgin lx1 0 0 10 ;
136delay 26 ;
137
138settalker ??? ;
139text \v<char04_00002>打擾到你了?\b\c\e ;
140settalker 蘇儀 ;
141screenmove 縱向抖動 5 0 0 0 0 ;
142
143text 沒、\e ;
144delay 20 ;
145text 沒有!\e ;
146delay 20 ;
147text 完全沒有。\b\c\e ;
148text 我看你低頭好像在找東西,\b\n就想問問能不能幫你……\b\c\e ;
149
150settalker ??? ;
151
152imgin lx2 0 0 10 ;
153delay 26 ;
154imgout lx1 255 ;
155delay 1 ;
156
157text \v<char04_00003>你真體貼啊!\b\c\e ;
158notalker ;
159screenmove 橫向抖動 5 0 0 0 0 ;
160text 體貼體貼體貼……\b\c\e ;
161text 這兩個字在我腦子里響了好久。\b\n頭腦一陣眩暈。\b\n我這下真的被擊中了。\b\c\e ;
162
163settalker 蘇儀 ;
164text 不、\e ;
165delay 20 ;
166text 不會啊……\b\n\e ;
167text 我就是來問問。\b\c\e ;
168notalker ;
169
170imgout lx2 10 ;
171imgin lx3 0 0 10 ;
172delay 26 ;
173
174text 她又笑了。\b\c\e ;
175
176settalker ??? ;
177text \v<char04_00004>你也是來散步的?\b\c\e ;
178settalker 蘇儀 ;
179text 恩!\b\c\e ;
180settalker ??? ;
181text \v<char04_00005>晚上的海很不錯吧!\b\c\e ;
182
183imgin lx4 0 0 10 ;
184delay 26 ;
185imgout lx3 255 ;
186delay 1 ;
187
188text \v<char04_00006>我每天都來哦!\b\c\e ;
189notalker ;
190text 她看著大海,\b\n仿佛海里面才有她要找的東西。\b\c\e ;
191
192text 我不知道這個時候該說什么好……\b\c\e ;
193settalker 蘇儀 ;
194text 你是住這里的嗎?\b\c\e ;
195notalker ;
196text 問出來我就后悔了,\b\n這個時候怎么能問這種問題呢……\b\c\e ;
197
198settalker ??? ;
199
200imgout lx4 10 ;
201imgin lx2 0 0 10 ;
202delay 26 ;
203
204text \v<char04_00007>這算搭訕嗎?\b\n\v<char04_00008>如果是的話技術可不怎么樣哦!\b\c\e ;
205notalker ;
206screenmove 縱向抖動 5 0 0 0 0 ;
207
208text 完了!\b\n被人家鄙視了!\b\c\e ;
209settalker ??? ;
210
211text \v<char04_00009>我不住這里,\b\n\v<char04_00010>不過晚上喜歡在這里走走,\n說不定能遇到有趣的東西呢。\b\c\e ;
212notalker ;
213
214text 和這個人說話,\b\n感覺總被她壓著啊……\b\c\e ;
215text 這就是大人和小孩的區別?\b\n看來我還不夠成熟。\b\c\e ;
216settalker ??? ;
217
218imgin lx1 0 0 10 ;
219delay 26 ;
220imgout lx2 255 ;
221delay 1 ;
222
223text \v<char04_00011>今天就遇到有趣的東西了。\b\c\e ;
224settalker 蘇儀 ;
225text 是什么東西呢?\b\c\e ;
226
227imgout lx1 10 ;
228imgin lx4 0 0 10 ;
229delay 26 ;
230
231settalker ??? ;
232text \v<char04_00012>就是你啊!\b\c\e ;
233settalker 蘇儀 ;
234text ……\b\c\e ;
235notalker ;
236text 伴隨著爽朗的笑聲,\b\n她張開雙臂,\b\n在原地轉了一個圈。\b\c我注意到她沒穿鞋子,\b\n優美的腳在在沙灘上特別好看。\b\c\e ;
237settalker 蘇儀 ;
238
239imgin lx3 0 0 10 ;
240delay 26 ;
241imgout lx4 255 ;
242delay 1 ;
243
244text 如果沒事情,我先走了。\b\c\e ;
245settalker ??? ;
246text \v<char04_00013>不愿意陪我聊聊?\b\c\e ;
247notalker ;
248text 好像完全被她牽著走了……\b\c\e ;
249screenmove 縱向抖動 5 0 0 0 0 ;
250settalker 蘇儀 ;
251text 愿、愿意!\b\c\e ;
252
253imgin lx4 0 0 10 ;
254delay 26 ;
255imgout lx3 255 ;
256delay 1 ;
257
258settalker ??? ;
259text \v<char04_00014>呵呵,今天還是算了,\b\n\v<char04_00015>以后還有機會的見面的話再聊吧。\b\c\e ;
260notalker ;
261imgout lx4 3 ;
262delay 85 ;
263
264text 說完,她轉身揮揮手就走了。\b\c我呆呆的站在原地,\b\n看著她消失在夜色中。\b\c到頭來,連名字都沒問。\b\c\e ;
265text 不過,成熟的魅力真強大啊,\b\n和以前見過的女性完全不一樣。\b\c給人的感覺就好像有很多秘密的人…\b\c\e ;
266
267setrgb 255 255 255 ;
268
269else
270
271text 算了,\b\n說不定人家不希望我去打擾呢。\b\c還是在遠方看著吧。\b\c也許是沒發現我吧,\b\n她繼續用腳劃撥沙子。\b\c\e ;
272
273alphaout 純黑 10 ;
274delay 26 ;
275bg 夜空 ;
276delay 30 ;
277alphain 圓開 50 ;
278delay 60 ;
279
280text 過了一會,\b\n抬起頭看著天空。\b\c月光下,一個人徜徉在沙灘上,\b\n不知道是什么感覺?\b\n相信一定是很棒的吧……\b\c我也抬頭看著天空,\b\n今天的月亮是滿月,\b\c深藍色的天空背景中,\b\n皎潔的月光和明亮的星星,\b\n真是美麗。\b\c那個人一定也是在享受這一切。\b\c\e ;
281
282text …\b\c\e ;
283text ……\b\c\e ;
284text ………\b\c\e ;
285
286alphaout 純黑 10 ;
287bg 沙灘天黑 ;
288alphain 圓開 50 ;
289delay 60 ;
290
291text 當我重新在沙灘上尋找她的身影時,\b\n卻發現她已經消失了。\b\c\e ;
292text 剛才的一切不是我在做夢吧?\b\n感覺這么虛幻,\b\n卻又如此的真實。\b\c\e ;
293
294
295endif
296
297text 回家吧……我轉身沿著來時的路往家走去。\b\c\e ;
298
299nobgm ;
300bgsoundout ;