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}
|