File: moagg.tex

package info (click to toggle)
moagg 0.18-6
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 1,924 kB
  • ctags: 4,059
  • sloc: cpp: 23,814; sh: 2,652; makefile: 283
file content (595 lines) | stat: -rw-r--r-- 22,403 bytes parent folder | download | duplicates (3)
1
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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
\documentclass[12pt]{article}

\usepackage{a4wide}

\begin{document}

\begin{abstract}
  This is the first brainstorming document that was written,
  before the first line of code was written for MOAGG.
  Most features described here are planned to be implemented in MOAGG.
  However, only some of them currently are.
\end{abstract}

%=============================================================================
\section{Introduction}

%-----------------------------------------------------------------------------
\subsection{Existing Gravity Games}

There are already many gravity games out there.
MOAGG, the Mother Of All Gravity Games
is indented to be a mixture of all these great games,
combining the different game modes into one game.
Lets take a look at some of the most popular games here.

%-----------------------------------------------------------------------------
\subsubsection{Thrust -- The Game}

Pick up a crystal sphere, destroy the reactor
and flee to the top before the reactor explodes.
When picking up the sphere, it will hang on a wire
and thus has influence on the inertia of the ship.
The ship can be maneuvered by rotating and thrusting.

Most levels have turrets firing at you.
The ship is equipped with a shield to protect from the bullets.
However, activating the shield costs rather much fuel.
Further, if the shield is activated, the ship isn't able to fire.

The fuel is limited.
So it's a good idea to pick up all fuel-crates distributed across every level.
However, these crates can be destroyed, when shooting at them.

Some levels also have doors, which must be opened by firing on a switch.
But the door will close after some time, so one has to be quick.

%-----------------------------------------------------------------------------
\subsubsection{Space Taxi}

Pick up passengers from different platforms
and to bring them to other platforms.
The ship can be maneuvered by thrusting in all four directions.
Landing can just be done by lowering the landing gear.
But as long as it is lowered, thrusting to the left and right is disabled.
If the fuel is low, you must land on a special platform and buy some fuel.

\begin{description}
\item[Black Hole:]
  One level contains a black hole in the middle,
  which has heavy influence on the gravity field.
\item[Inverse Gravity:]
  In one level, the ship will fall upwards rather than downwards due magnets.
\item[Rotated Thrusters:]
  In one level the thrusters are rotated,
  which makes navigation quite hard.
\item[Mega Thrust:]
  In one level, the thrusters are much stronger than on all other levels.
\item[Flying Objects:]
  In some levels, misc. objects are flying through the air,
  which must be avoided.
\item[Teleporters:]
\item[Doors:]
  One level contains many doors and switches.
  When flying over a switch, particular doors will open and close.
  After a given time, doors will close again.
\end{description}

%-----------------------------------------------------------------------------
\subsubsection{Gravity Force}

Pick up crates and bring them back to the home platform.
The more crates the ship has loaded
(max. three small crates or one big and one small crate),
the heavier the ship will be.
This has a direct influence on the maneuverability and inertia of the ship.

\begin{description}
\item[Enemy Ships:]
  Enemy ships are flying around and firing at you.
  Each ship type needs another count of hits until it is destroyed.
  The exception is one ship type that doesn't fire and cannot be destroyed.
\item[Tanks:]
  Tanks moving on platforms are firing at you.
  If you shoot at them, they try to do evasive maneuvers to the left or right.
\item[Turrets:]
  There are misc. turret types, each firing in different directions.
  Some of them are capable to fire in multiple directions simultaneously.
  The bullets of one turret type even have different velocities
  depending on the direction.
\item[Magnets:]
  Magnets will attract the ship and thus makes maneuvering a bit tricky.
\end{description}

\paragraph{Special Pick-Ups}
\begin{description}
\item[Fuel:]
  Fill up the ship with 50 units. The ship can carry at most 99 units.
\item[Mega Blaster:]
  The bullets of the blaster will fly faster.
\item[Back Shot:]
  Shoot forward and to the back simultaneously.
\item[Double Shot:]
  Shoot two bullets for each press of the fire button.
\end{description}

%-----------------------------------------------------------------------------
\subsubsection{Bump Racer}

Fly to a target area as fast as possible,
while avoiding "dangerous" fields, that will destroy the ship.
Multiple ship types can be selected.
Each ship has some special capabilities in maneuvering, speed, etc.
Some levels contain a cannon firing stars around,
which must be avoided by the ship.


%=============================================================================
\section{The Player's Ship}

%-----------------------------------------------------------------------------
\subsection{Steering}

The steering of the ship shall consist of rotating and thrusting.

%-----------------------------------------------------------------------------
\subsection{Weapons}

The player's ship shall contain a weapon and an auxilliary system.
Exceptions may be some multi-player game types,
where each player can select an auxilliary system at game begin.

\subsubsection{Weapon System}

The ship's initial weapon is a blaster.
During the game, the following power-ups can be attached to the ship.
Also a combination of these power-ups shall be possible.
However, if the ship is destroyed, all power-ups are lost.

\begin{description}
\item[Fast Shot:]
  The bullets will be moving faster.
\item[Back Shot:]
  Fire forward and to the back simultaneously.
\item[Triple Shot:]
  Each shot fires a fan of three bullets.
\item[Joker:]
  If the ship is destroyed, all power-ups are kept once.
\end{description}

The ship may also be equipped with alternative weapons,
to destroy targets faster or to destroy targets,
that cannot be destroyed by the blaster.
However, the number of shots shall be limited
and the ship must return to the home base to reload.

\begin{description}
\item[Mines:]
  Mines can be dropped and will stay in place using a small thruster.
  If the mine's fuel is consumed, it will fall down, until it hits the ground.
\item[Bombs:]
  Bombs can be released and will fly on a parabolic trajectory,
  formed by gravity.
  Some levels may be designed, so the main target can only be hit by bombs,
  flying through a small channel too small for a ship.
\item[Rockets:]
  Rockets will fly straight forward and won't be attracted by gravity.
\end{description}


\subsubsection{Auxilliary System}

The auxilliary system can be a choice of the following items:

\begin{description}
\item[Shield:]
  Be protected from enemy fire.
  Firing and maneuvring while the shields are up is impossible.
  Further, when the shields are up,
  it shall not matter, if the ship is hit by something or not.
\item[Armor:]
  An armor behaves like an enabled shield,
  except that the armor doesn't need any fuel
  and the ship remains fully functional.
  But the armor only can resist a few hits, before it is lost.
\item[Booster:]
  The booster will enhance the force of the thruster.
  Some levels may be designed such way,
  that the gravity of a black hole or a magnet
  can be exceeded easily when using the booster.
\item[Emergency Transporter:]
  When in danger, the emergency transporter can be used
  to escape to a safe place.
  Each activation will cost much fuel.
\end{description}

Depending on the item, an activation of it shall cost more or less fuel,
so the player cannot enable the shields (for example) all the time.

%=============================================================================
\section{Enemies and Obstacles}

Enemies will make the life of the player a bit harder.
Most of them can be destroyed.
But for successful completion of one level, this is not necessary.
Some enemies even cannot be destroyed by the player.

%-----------------------------------------------------------------------------
\subsection{Turrets}

Turrets may be attached at the top, bottom, left or right of a wall.
Each turret shall have a particular strategy,
of how it fires at the player.
Further, the interval between two shots shall be configurable,
by setting a constant or a random interval.

\begin{description}
\item[Fixed Angle:]
  Always fire in a fixed direction.
\item[Random:]
  Fire in a random direction.
\item[Sweep Shot:]
  Sweep the angle from left to right and back again while shooting.
\item[Guided:]
  Fire at the position of the nearest player ship.
\item[Intelligent:]
  Fire at the position of the nearest player ship,
  while considering the velocity vector of the ship
  for calculating the shooting direction.
\end{description}

Optionally, the turret shall only start to fire,
if a player's ship comes near.
Further, when the player's ship leaves the turret's region,
it shall stop firing.

Special turrets shall exist, that fire in multiple directions simultaneously.
In some cases (e.g. multi-player game modes),
it shall be possible to make a turret indestructible,
so there's always a third-party fire to all players/teams.

%-----------------------------------------------------------------------------
\subsection{Tanks}

Tanks can be considered as mobile turrets with the same properties as turrets.
In addition, tanks may avoid the player's fire by moving aside.

%-----------------------------------------------------------------------------
\subsection{Drones}

Drones are automatically controlled ships equipped with different
primary (and even secondary) weapons.
The firing strategy can be the same like that of a turret.

For easier implementation it may be useful,
that drones are not attracted by gravity
and need not to rotate to fire in the right direction.

%-----------------------------------------------------------------------------
\subsection{Magnetic Walls}

Magnetic walls can be embedded in the ceiling, in the floor or in walls.
A ship will be attracted to such magnets,
dependend on how near the ship is to the magnet.
The strength, the range and the on/off intervall shall be configurable.

%-----------------------------------------------------------------------------
\subsection{Black Holes}

A black hole can be compared to a magnetic wall.
But instead of a linear attraction,
ships will be attracted into the central point of the black hole.
Further, black holes shall have a stronger gravity field, than magnetic walls.

%-----------------------------------------------------------------------------
\subsection{Thorns}

Thorns may rise and lower out of the floor, the ceiling or walls.
Since they cannot be destroyed,
the player's ship must wait until the thorn has retracted,
before it can pass.

%-----------------------------------------------------------------------------
\subsection{Particle Fountains}

Particle fountains will thrust particles through the air,
which must be avoided by the player's ship.
Like magnets, they can be attached to the floor,
to the ceiling or to a wall.
Gravity shall take effect on these particles.
Further, the average life-time, the initial velocity
and an on/off interval shall be configurable.

%-----------------------------------------------------------------------------
\subsection{Teleporters}

Teleporters always come in pairs.
When the player's ship flies into one teleporter,
it shall apper at the second one and vice versa.

%-----------------------------------------------------------------------------
\subsection{Doors}

Doors are indestructible walls,
that may be opened by shooting at a switch near the door.
After some time, the door shall close again.
To make it interesting, some levels may not have a switch
at the other side of the door.
So the player has to be quick, flying out a crate for example.

%=============================================================================
\section{Single Player Game Types}

This section shall describe the available game types for single player mode.
The player shall be able to practice a single game type.
The "real" single player game (playing through level by level)
shall be a combination of all these game types.

%-----------------------------------------------------------------------------
\subsection{Race}

Fly to a target platform and land on it in a given time.
The remaining time will be added to the score.
A variation of this game type may be
flying multiple laps through a "racing track"
and land on the starting platform again.
Another variation may be landing on multiple platforms one by one
in a given order.

%-----------------------------------------------------------------------------
\subsection{Escort}

A cargo ship will launch some time after game begins
and will fly a given route to a destination platform.
Your goal is to keep sure, the cargo ship reaches its destination without harm.
That means, the player must destroy all turrets and drones,
that will shoot on the cargo ship.

%-----------------------------------------------------------------------------
\subsection{Search \& Rescue}

Search and pick up crates and bring them back to the base.
Depending on the size of the crate,
multiple crates can be picked up simultaneously.
Three crate sizes shall exist
and the player's ship shall be capable of carrying
either three small crates, one middle and one small crate, or one big crate.
Optionally, all crates must be returned within a given time limit.

%-----------------------------------------------------------------------------
\subsection{Cargo Transport}

Multiple platforms exist on the playfield.
During the game, crates will apper on one platform,
which must be brought to another platform.
The source and destination shall be computed in such way,
that the player must land on each platform at least once.


%=============================================================================
\subsection{Multi-Player Game Types}

MOAGG shall be able to serve as a multi-player platform over a network.

%-----------------------------------------------------------------------------
\subsection{Deathmatch}

Two or more teams are fighting against each other.
Each kill of an enemy ship will increase the team score by one.
Each kill of an own ship (friendly fire, turret/drone fire,
or a crash into a wall) decreases the team score by one.
The game is over, when a maximum team score is reached
and/or a given time has elapsed.
If all teams have the same score after timeout,
the game shall continue sudden death.

The playfield doesn't need to be symmetric,
since every destroyed ship will reappear on a random platform.
When using symmetric maps (two teams only),
each destroyed ship shall reappear on a platform in the team's region.
To avoid collisions on reappearing,
a ship shall not reappear on a platform,
which has a ship in its immediate environment.
If all platforms are "occupied", the player must wait until one becomes free.

%-----------------------------------------------------------------------------
\subsection{Race}

Fly multiple laps on a "racing track".
The first one reaching the goal platform wins.
When a ship collides with another ship, both ships shall not explode.
Instead, the ships shall be deflected like billiard balls.
Optionally, the ships shall also be deflected from walls,
which means, the player's ships are indestructible.

To make it more interesting,
this game type shall be played without any weapons for the player's ships.
A variation may be, that shots at another ship will deflect it,
like it was rammed.

%-----------------------------------------------------------------------------
\subsection{Capture The Flag}

Each team has a home base containing a flag and some defensive systems
(tanks, turrets, etc.).
The goal for a team is to capture the flag of the enemy base
and bring it to the home base.
A point is only made, if the own flag is located at the home base.
If a ship holding the enemy flag is destroyed,
the flag will reappear at the enemy's base.

%-----------------------------------------------------------------------------
\subsection{Third Flag}

This is a variation of the Capture The Flag game type.
A third (neutral) flag must be picked up in the middle of the playfield
and brought home to the base.
Again, a point is only made, if the own flag is located at the home base.
But bringing the enemy flag home to the own flag won't result in a point.

%-----------------------------------------------------------------------------
\subsection{Overload}

Each team must fire at a reactor located in the enemy base.
The reactor shall take a lot of hits, before it is destroyed.
Each player shall have the possibility to equip his ship with rockets
(to destroy the enemy reactor faster)
or with a blaster (to defent the own reactor against enemy ships).
A Kamikaze-hit of the reactor also shall weaken or even destroy the reactor.

%-----------------------------------------------------------------------------
\subsection{Harvester}

Each kill of an enemy ship will increase a kill-counter of the player's ship.
But these kill-counts will only be added to the team score,
if they are brought back to the home base.
If the ship is destroyed before it can reach the home base,
its kill-counts are lost.


%=============================================================================
\section{MOAGG Game Platform}

There are several libraries out there,
that can be used for game development.
A library capable of doing everything needed (sprites, clipping,
collision detection, GUI elements, etc.) would be nice to use, of course.
However, since MOAGG-like games already existed on the C64 and Amiga,
MOAGG must run on an old Pentium or even an i486,
without using special hardware (e.g. an OpenGL-capable graphics card).

Before a decision will be made, write test programs,
that move some sprites or vector graphics over a screen.
The best candidate for the "winner" will be the library,
that uses the least CPU time to achieve this.

%-----------------------------------------------------------------------------
\subsection{libSDL}

A C-library

\subsubsection{Advantages}
\begin{itemize}
\item There are many different games out there using SDL.
\item A rather simple API for blitting surfaces to other surfaces.
\item Joystick and keyboard events can be queried via the SDL event system.
\end{itemize}

\subsubsection{Disadvantages}
\begin{itemize}
\item SDL is a low-level library.
  To be usable for applications, wrappers have to be defined.
  Check out sdl-mm, if it can be used.
\end{itemize}

%-----------------------------------------------------------------------------
\subsection{ClanLib}

A C++-library.

\subsubsection{Advantages}

\begin{itemize}
\item A nice object oriented library, defining classes for nearly every needs.
\item The network system seems to be optimized for game servers and clients.
  Logical channels can be transparently used over one single connection.
\end{itemize}

\subsubsection{Disadvantages}

\begin{itemize}
\item Currently, it only supports OpenGL as display target.
  This makes it rather unusable for MOAGG.
\end{itemize}

%-----------------------------------------------------------------------------
\subsection{Java2D}

\subsubsection{Advantages}

\begin{itemize}
\item The Java2D library contains nearly everything
  related to vector operations, transformations, etc.
\end{itemize}

\subsubsection{Disadvantages}

\begin{itemize}
\item The Java2D demo program is rather slow, even without anti-aliasing.
  Maybe a JIT compiler (or even gcj) can produce faster code.
\end{itemize}


%=============================================================================
\section{Level Design}

The most important part of MOAGG besides the game engine itself,
is a simple framework for creating levels.
There should also be a graphical level editor,
which can be used to design levels quick and easy.

A seperation shall be made between the playground
and the location of enemies, power-ups, etc.
This way, playgrounds can be reused in multiple levels.

%-----------------------------------------------------------------------------
\subsection{Maps}

A map shall be divided into tiles with the size of 16x16 pixels.
Different kinds of tiles shall exist (such as bricks, steel, stone, etc.).
This way, the map can be defined as matrix of indices,
representing particular tiles.

Some tiles will have a planar top.
Power-ups and crates must be located on such tiles,
so the player's ship can land on them.
Further, a tank may also move only inside the range of such tiles.
If planar tiles are indexed in some way,
it should be easy to compute, where a ship may land
or in which range a tank can move.
Maybe it is even possible to automatically compute the planarity
out of the tile's pixel data.

With the help of the computed data, where planar tiles are located,
different consistency checks should be performed,
to prevent errors in the level design.
For example, the initial position of a tank, a crate or the player's ship
must be on top of a planar tile.
Further, the path of a drone must lead through empty tiles.

%-----------------------------------------------------------------------------
\subsection{Playground}

A playground shall be a second file,
which describes different decorations (magnets, platforms, etc.)
for a particular map:

\begin{description}
\item[Magnets:]
  First, the position and orientation is needed.
  Second, the strength, range and on/off interval of the magnetic field
  can be defined.
\item[Platforms:]
  The position and an id is needed for platforms.
  Optionally, the border elements of a platform
  can be overridden by different decorations.
\item[Turrets:]
  The position, orientation and firing strategy
  is all that needs to be defined.
\item[Tanks:]
  Tanks 
\item[Drones:]
  Drones need a pre-defined path, where they should fly.
  A polygon of tile-positions might be the simpliest way to define a path.
\end{description}

Further, the initial values for gravity and friction
will be defined in the playground.
This way, the same map can be used for different playgrounds
with different gravity settings for example.

%-----------------------------------------------------------------------------
\subsection{Enemies}


\end{document}