Subversion Repositories forest

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 daniel-mar 1
rem The Dark Night
2
rem by Daniel Marschall
3
 
4
rem ToDo:
5
rem   Nebel-Himmel-Problem (NHP)
6
 
7
rem Setup & Startbildschirm
8
if check display mode( 800, 600, screen depth() ) then set display mode 800, 600, screen depth()
9
rem if check display mode( 1024, 768, screen depth() ) then set display mode 1024, 768, screen depth()
10
hide mouse
11
Sync On
12
Sync Rate 30
13
 
14
rem gosub _startgame
15
 
16
load bitmap "bitmap\title.bmp"
17
 
18
rem Menü?
19
sleep 3000
20
load bitmap "bitmap\title2.bmp"
21
rem show mouse
22
 
23
set text font "times"
24
set text size 27
25
fade = 230
26
pos = 1
27
menu = 1
28
sound = 1
29
rem music = 1
30
do
31
   gosub _fademenu
32
   if ( downkey() = 1 and pos < 4 and menu = 1 ) or ( downkey() = 1 and pos < 3 and menu = 3 )
33
     inc pos
34
     while downkey() = 1
35
        gosub _fademenu
36
     endwhile
37
   endif
38
   if upkey() = 1 and pos > 1
39
     dec pos
40
     while upkey() = 1
41
        gosub _fademenu
42
     endwhile
43
   endif
44
   if returnkey() = 1
45
     if menu = 1
46
        if pos = 1 then gosub _startgame
47
        if pos = 2
48
          rem load bitmap "bitmap\Titel2.bmp"
49
          rem menu = 2
50
          rem pos = 1
51
        endif
52
        if pos = 3
53
          load bitmap "bitmap\title2.bmp"
54
          menu = 3
55
          pos = 1
56
        endif
57
        if pos = 4 then break
58
     else
59
       if menu = 3
60
          if pos = 1
61
            if sound = 1
62
              sound = 0
63
            else
64
              sound = 1
65
            endif
66
            load bitmap "bitmap\title2.bmp"
67
          endif
68
          if pos = 2
69
            if music = 1
70
              music = 0
71
            else
72
              music = 1
73
            endif
74
            load bitmap "bitmap\title2.bmp"
75
          endif
76
          if pos = 3
77
            load bitmap "bitmap\title2.bmp"
78
            menu = 1
79
            pos = 1
80
          endif
81
       endif
82
     endif
83
     while returnkey() = 1
84
        gosub _fademenu
85
     endwhile
86
   endif
87
loop
88
 
89
_startgame:
90
ink rgb(255, 230, 0), 0
91
load bitmap "bitmap\title.bmp"
92
text 50, 550, "Level wird geladen..."
93
rem hide mouse
94
 
95
sync
96
 
97
rem Setup
98
Backdrop on
99
Set camera range 1, 5000
100
Autocam off
101
 
102
rem Boden
103
Make matrix 1, 10000, 10000, 20, 20
104
Load image "bitmap\grass.bmp", 1
105
Prepare matrix texture 1, 1, 1, 1
106
Fill matrix 1, 0, 1
107
randomize matrix 1, 125
108
 
109
rem Himmel
110
load image "bitmap\sky.bmp", 2
111
make object sphere 2, (landsize * 2) - 500
112
set object collision off 2
113
rem scale object 2, 2000, 1800, 2000
114
rem scale object 2, 2000, 1000, 2000
115
rem scale object 2, 2000, 1300, 2000
116
scale object 2, 2000, 1200, 2000
117
set object 2, 1, 1, 0
118
texture object 2, 2
119
fade object 2, 0
120
backdrop off
121
 
122
rem Level einlesen - Bäume
123
rem open to read 1, "map\001-tree.map"
124
load image "bitmap\tree.bmp", 4
125
make object plain 52, 200, 400
126
make mesh from object 52, 52
127
add limb 52, 1, 52
128
rotate limb 52, 1, 0, 90, 0
129
make mesh from object 52, 52
130
delete object 52
131
make object 52, 52, 0
132
remstart
133
while file end(1) = 0
134
   inc t
135
   read string 1, rx$
136
   read string 1, rz$
137
   add limb 52, t, 52
138
   offset limb 52, t, val(rx$), get ground height(1, val(rx$), val(rz$)), val(rz$)
139
endwhile
140
remend
141
for t = 1 to 199
142
   rx = rnd(10000)
143
   rz = rnd(10000)
144
   add limb 52, t, 52
145
   offset limb 52, t, rx, get ground height(1, rx, rz), rz
146
next t
147
make mesh from object 52, 52
148
delete object 52
149
make object 52, 52, 4
150
rem position object 52, xxx, 190, xxx
151
position object 52, 0, 190, 0
152
set object 52, 1, 0, 0
153
rem close file 1
154
 
155
rem load object "Morningside.x",95
156
rem position object 95, 2000, get ground height(1, 2000, 2000), 2000
157
 
158
rem Karte
159
load image "map\zone001.bmp", 5
160
make object plain 51, 256, 256
161
lock object on 51
162
position object 51, -490, -340, 800
163
ghost object on 51
164
texture object 51, 5
165
 
166
rem Bildschirm neu aufbauen
167
cls
168
sync
169
 
170
Rem Musik
171
if music = 1
172
  load music "music\music.mid", 1
173
  loop music 1
174
endif
175
 
176
rem Radar vorbereiten
177
radarpointcolor = 150
178
 
179
rem Scorpion
180
remstart
181
Load object "obj\idle.x", 50
182
rem append object "obj\walk.x",50,100
183
Loop object 50
184
position object 50, 500, Get Ground Height(1, 500, 500) + 265, 500
185
fix object pivot 50
186
loop object 50, 0, 20
187
rem Stachel verstecken
188
hide limb 50, 1
189
set object collision on 50
190
remend
191
 
192
rem Hauptschleife
193
Do
194
 
195
   rem Wetter
196
   set ambient light 40
197
   if fog available() = 1
198
      fog on
199
      rem fog distance 7500
200
      fog distance 4500
201
      fog color rgb(135, 119, 99)
202
   endif
203
 
204
   set cursor 0, 0
205
   oldcAY# = cAY#
206
   oldcAX# = cAX#
207
 
208
   cAY# = WrapValue(cAY# + MousemoveX() * 0.2)
209
   cAX# = WrapValue(cAX# - MousemoveY() * 0.2)
210
   caZ# = Camera angle Z()
211
 
212
   rem Sprungroutine
213
   if sprungdelay > 0 then dec sprungdelay
214
   if MouseClick() = 2 and sprung = 0 and sprungrev = 0 and sprungdelay = 0 then inc sprung, 4
215
   if sprung > 0
216
     if sprungrev = 0
217
       inc sprung, 4
218
       if sprung = 60 then sprungrev = 1
219
     else
220
       if sprungrev = 1
221
         dec sprung, 5
222
         if sprung = 0
223
           sprungrev = 0
224
           sprungdelay = 15
225
         endif
226
       endif
227
     endif
228
   endif
229
 
230
   rem Laufen
231
   rem Spiellogik (Geschwindigkeit): Vor = +2 / Zurück = -2
232
   if Upkey() = 1
233
      XTest# = Newxvalue(X#, cAY#, 7)
234
      ZTest# = Newzvalue(Z#, cAY#, 7)
235
      if XTest# > 0 and XTest# < 10000 and ZTest# > 0 and ZTest# < 10000
236
         X# = XTest#
237
         Z# = ZTest#
238
      endif
239
   endif
240
   if Downkey() = 1
241
      XTest# = Newxvalue(X#, Wrapvalue(cAY# - 180), 3)
242
      ZTest# = Newzvalue(Z#, Wrapvalue(cAY# - 180), 5)
243
      if XTest# > 0 and XTest# < 10000 and ZTest# > 0 and ZTest# < 10000
244
         X# = XTest#
245
         Z# = ZTest#
246
      endif
247
   endif
248
   if Leftkey() = 1
249
      XTest# = Newxvalue(X#, Wrapvalue(cAY# - 90), 5)
250
      ZTest# = Newzvalue(Z#, Wrapvalue(cAY# - 90), 5)
251
      if XTest# > 0 and XTest# < 10000 and ZTest# > 0 and ZTest# < 10000
252
         X# = XTest#
253
         Z# = ZTest#
254
      endif
255
   endif
256
   if Rightkey() = 1
257
      XTest# = Newxvalue(X#, Wrapvalue(cAY# + 90), 5)
258
      ZTest# = Newzvalue(Z#, Wrapvalue(cAY# + 90), 5)
259
      if XTest# > 0 and XTest# < 10000 and ZTest# > 0 and ZTest# < 10000
260
         X# = XTest#
261
         Z# = ZTest#
262
      endif
263
   endif
264
 
265
   Rem Rotate camera
266
   cTestX# = WrapValue(cAX# - 180)
267
   if cTestX# > 225 then cAX# = 45
268
   if cTestX# < 135 then cAX# = 315
269
   YRotate camera CurveAngle(cAY#, oldcAY#, 24)
270
   XRotate camera CurveAngle(cAX#, oldcAX#, 24)
271
 
272
   Rem Position Camera
273
   Y# = Get ground height(1, X#, Z#) + 85 + sprung
274
   Position Camera X#, Y#, Z#
275
 
276
   Rem Position Listener
277
   Position Listener X#, Y#, Z#
278
   Rotate Listener 0, cAY#, 0
279
 
280
   rem Himmel bewegt sich...
281
   rem zu schnell: 0.0005
282
   scroll object texture 2, 0.0004, 0
283
   fade object 2, 0
284
   position object 2, x#, 0, z#
285
 
286
   rem Radar
287
   xx = X# / 62.5
288
   zz = Z# / 62.5
289
   z = zz * -1
290
   if radarpointrev = 0
291
     inc radarpointcolor, 3
292
   else
293
     dec radarpointcolor, 3
294
   endif
295
   if radarpointcolor > 255
296
     radarpointrev = 1
297
     radarpointcolor = 254
298
   endif
299
   if radarpointcolor < 150
300
     radarpointrev = 0
301
     radarpointcolor = 149
302
   endif
303
   ink rgb(radarpointcolor, 0, 0), 0
304
   circle xx + 15, z + 592, 1
305
   circle xx + 15, z + 592, 0
306
 
307
   rem Scorpion bewegen
308
   rem Position Object 50, Object Position X(50), Object Position Y(50), Object Position Z(50)
309
 
310
   Rem Bild erneuern
311
   Sync
312
Loop
313
 
314
function lcd(rich$, x, y, r, g, b)
315
  a = len(rich$) + 1
316
  i = 0
317
  s = 16
318
  set text font "Courier"
319
  repeat
320
    sprite 1, s, y, 1
321
    set cursor x * 8, y
322
    x$ = mid$(rich$, x)
323
    repeat
324
      if r = 1 then ink rgb(i, 0, 0), 0
325
      if g = 1 then ink rgb(0, i, 0), 0
326
      if b = 1 then ink rgb(0, 0, i), 0
327
      if r = 1 and g = 1 then ink rgb(i, i, 0), 0
328
      if r = 1 and b = 1 then ink rgb(i, 0, i), 0
329
      if g = 1 and b = 1 then ink rgb(0, i, i), 0
330
      if b = 1 and g = 1 and b = 1 then ink rgb(i, i, i), 0
331
      text x * 8, y, x$
332
      inc i, 35
333
      sync
334
    until i => 255
335
    inc x
336
    inc s, 8
337
    i = 0
338
    play sound 1
339
  until x = a
340
endfunction
341
 
342
_fademenu:
343
   if fade > 200 then fadedir = 0
344
   if fade < 100 then fadedir = 1
345
   if fadedir = 1
346
      inc fade, 5
347
   else
348
      dec fade, 5
349
   endif
350
   rem Beleuchtet
351
   ink rgb(255, fade, 0), 0
352
   if menu = 1
353
     if pos = 1 then text 260, 255, "Neues Spiel starten"
354
     if pos = 2 then text 260, 285, "Spiel laden"
355
     if pos = 3 then text 260, 315, "Einstellungen"
356
     if pos = 4 then text 260, 345, "Spiel beenden"
357
   endif
358
   if menu = 3
359
     if pos = 1
360
        if sound = 1 then text 260, 255, "Ton: An"
361
        if sound = 0 then text 260, 255, "Ton: Aus"
362
     endif
363
     if pos = 2
364
        if music = 1 then text 260, 285, "Musik: An"
365
        if music = 0 then text 260, 285, "Musik: Aus"
366
     endif
367
     if pos = 3 then text 260, 315, "Hauptmenü"
368
   endif
369
   rem Normal
370
   ink rgb(255, 230, 0), 0
371
   if menu = 1
372
     if pos <> 1 then text 260, 255, "Neues Spiel starten"
373
     if pos <> 2 then text 260, 285, "Spiel laden"
374
     if pos <> 3 then text 260, 315, "Einstellungen"
375
     if pos <> 4 then text 260, 345, "Spiel beenden"
376
   endif
377
   if menu = 3
378
     if pos <> 1
379
        if sound = 1 then text 260, 255, "Ton: An"
380
        if sound = 0 then text 260, 255, "Ton: Aus"
381
     endif
382
     if pos <> 2
383
        if music = 1 then text 260, 285, "Musik: An"
384
        if music = 0 then text 260, 285, "Musik: Aus"
385
     endif
386
     if pos <> 3 then text 260, 315, "Hauptmenü"
387
   endif
388
   sync
389
return