因为东西挺多的,所以这里只讲基本的构架,即怎么构成这个程序,具体的细节问题后面一个一个再实现

首先要声明一点,我的代码很丑的,因为自己以前没有学习过什么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 ;