You are on page 1of 56

TABLE OF CONTENTS

Issue 3 October 2010

Community
What's New.................................................................... pg. 4
Supercool Summer Screenshot Contest ........................ pg. 8

Feature
Magic Storm.................................................................. pg. 10

The Coder's Block


Managing Your Classes ............................................... pg. 14
FPC Compiler Directives ............................................ pg. 20
Basic Cipher Algorithms ............................................. pg. 22
Templates Made Easy.................................................. pg. 26

Project Highlights
Asphyre Sphinx........................................................... pg. 28

Special Reports
From PGD Annual to IGF: Tuberunner....................... pg. 32
Ludem Dare 17............................................................. pg. 36
Aesthetics of Music in Video Games .......................... pg. 40
My Experience of PGD Annual 2009.......................... pg. 42
Game Reviews............................................................. pg. 44
Page 1
Pascal Gamer Magazine
Editor's Message

H ello again! This is now our third issue of Pascal Gamer Magazine. It
has been a long time putting this last one together as my plate has
been super full lately. As many may know, I recently took back up, the
mantle of running the Pascal Game Development community website as well.
There has been a lot of changes there and I hope that everyone interested in
game development with the Pascal or Object Pascal language will register and
enjoy all that the newly redone site has to offer.
I would also like to mention again that if it were not for those who
graciously offered their time and effort writing these wonderful articles that
there would be no magazine at all. So thank you to our volunteering writers for
your submissions to this issue. Thanks to your collective works, this is the
biggest one to date. I hope that developers continue to offer such support in the Editor
future of these fun and exciting projects that make our community worth
partaking in. Jason "WILL" McMillen
I wanted to get back to focusing on those teams and individuals who made
and continue to make an impact on our community with their own
contributions, such as game releases and all the cool tools that we love to use.
This issue's feature takes a look at a team who has been around for a long time Contributing Writers
and has such a great amount of creative energy. They have managed to put at
least as many as five game releases and is soon to have two separate franchises Patryk "Brainer" Nusbaum
in the shareware market. Not too many people can say that they have done the Jason "WILL" McMillen
same. Magic Storm is an inspirational group of game developers who I hope Johannes "Stoney" Stein
inspire others to try their own hands at what they have done. Nathan "cronozphere" Schagen
On top of there being more pages than before, there is also more game
reviews than before. It meant more work to do as many, but I'm sure you'll all Matt "Daz" Shaffer
agree it was well worth it. Go check out these games and see how they stack up Eric "firlefans" Behm
for yourselves. Danielo "Ulf" Mattick
Finally, we managed to get an article on Asphyre Sphinx. I've been trying Oliver "Buffolli" Müller
to fit something in on the amazing project and finally I've managed to do so. I Iwicki "Super Vegeta" Artur
also am happy to be able to bring back the Project Highlights section for this
issue. It's important to look at some of the great resources we have available to Michal "mobilus" Bugala
us to use. Without them we wouldn't have the great and vibrant development Paul Nicholls
community we have today.
With that said, I'd like to thank everyone for reading one of the best game
development magazines on the internet. Have fun and keep coding!
Cover Design
Jason "WILL" McMillen
- Jason "WILL" McMillen
Editor, Pascal Gamer Magazine
Page Layout
Jason "WILL" McMillen

Copyright
All images depicted within this publication
are the property of their owners and are
subject to their local copyrights and laws
applied to them. Neither Pascal Gamer nor
any of it's contributing authors claim any
rights to these works. All articles that are
publish are of the opinions of their
respective authors and does not reflect the
opinions of other authors or Pascal Gamer
Page 2 magazine it's self.
Pascal Gamer Magazine
What's New
D age, the 3D adventure game
N oeska, who is known for his OpenAL header
COMMUNITY
engine and it's website both translations and even his own OpenGL
have gotten quite the large update headers, has come up with a new set of headers for
recently. The engine's author Pauli OpenGL ES for all of you Pascal-on-mobile
Suuraho has put a lot of effort into pioneers out there. Though he doesn't officially have
the new features of this game a page for this set of headers yet, you can find them
engine lately so much in fact he at PGD in the Forums. So far these headers support
couldn't list them all from dynamic and static linking, Delphi and Free Pascal
memory. Guess it wouldn't hurt to compilers, Windows and Linux and the OpenGL ES
write things down as you go along huh? 1.0 API. He is planning on including other versions
Either way he has given us a few highlights such as unicode for as his work becomes finished.
text and fonts, Newton Game Dynamics physics, a new TAnimation OpenGL ES, for those who are not aware of it
class for all 3D scene actions and a new set of tools called Coira to yet, are a stripped down slim version of the OpenGL
help design your Dage based games. library that supports 3D hardware on portable
You can check out the new devices that use 3D graphics. This is a growing trend
Dage 0.5.0 at www.dageport.com. for mobiles and could be a part of the future of
mobile gaming.
For those of you who can't be bothered to dig
through the PGD Forums we have provided them to

T eemu Valo also known as


User127 within the Object
Pascal development community has
you as bonus content for this issue on our website.

started his own game engine project


called Next3D. The game engine
started with a real-time strategy project where a user interface was
required. The engine includes features such as OpenGL graphics, UI
editor and renderer, math functions for 3D, a high level Synapse
network wrappings enabling simple classes for TCP and UDP server
and client communication. 3D model formats such as W3D, MS3D
and OBJ is implimented, but is still in development with missing
things like bones. Some vertex animation has been done however.
Direct3D support may be planned in the future.
J arrod Davis has a
new brand for his
game framework
There are other funcitons, but much is still in development as of engine. His new
this time, but the project does look very exciting to see come together. company is known as
Engine source and demos are available on the project's website at 'Hadron Games' and it's
next3d.webs.com. feature product is the
Hadron Game Engine.
Inheriting much of the functionality

2 D physics has been a keen interest


with Objectif Studio for the last
little while. Vincent Gsell has done
of it's predecessor, HGE currently at version 0.1.0
boasts it's 2D based, Direct3D enhanced graphics.
The intuitive procedural API's other features include
some work on a translation of the multiple programming language support, sprite and
Actionscript Physics Engine by Alec texture support, audio streaming, archive formats,
Cove, or APE for short, which has configuration files, swap chains and database
been converted to Object Pascal for support.
use with Delphi. Another one of his Pascal bindings for Delphi, Free Pascal and
most recent finds is another Object Pascal translation of the 2DBox Lazarus come standard along with support for C++.
open source physics engine originally written by Erin Catto and All you have to do is add the HGE.pas file to your
translated by Qianyuan Wang. uses clause and include the HGE.dll file with your
If you are interested in open source 2D physics engines and want program to dynamically load it's available functions.
one written on Object Pascal then you should check them out at There is also a thin object oriented layer for fast
www.objectifstudio.com. Should you want to check and efficient object management. It's features
out the original APE go to www.cove.org/ape or for include Actor and Actor Lists, Actor Scene, AI,
2DBox you can go to Entities and Game Management.
www.box2d.org. You can get HGE at www.hadrongames.com.

Page 4
Pascal Gamer Magazine
K otai, the one who brought us previous faithful remakes of Bubble
Bobble Online and Nemesis Online is now enthusiastic to bring us
Castlevania Online. Look out Castlevania fans, it looks like we might be
getting our most wished for feature yet; multiplayer! Yes from the few

K ambi VRML
game engine has
received a lot of development
screenshots already posted on the Kotai remakes site it would appear that
our Konami and Taito remake artist is developing a multiplayer version of
this loved game with up to eight players online at a time.
attention lately. Michalis This will be a wonderful piece of news for those who loved all those
Kamburelis' game engine is early arcade and 8 to 16 bit console versions, but never got to do what
written in clean Object Pascal they really wanted after finishing each. Grab a buddy to go out with
code and has excellent support for VRML and X3D yoyur whips, swords, stakes and daggers and beat down some nasty
data specs. There is also a scripting engine called vampire minions. Well now you can!
KambiScript which will serve as the main tool for The current version is v0.3 beta and you can go get it at
editing your 3D scenes and scheduled in-game tasks. www.remakesonline.com/castlevania.
The engine was originally built as a
infrastructure for Michalis' entry into the
2006 PGD Annual Game Developer's
Competition, The Castle. You'll find that
most 3D modelling software will export to
the VRML and X3D format including
Blender and Kambi even has it's own
customized tool.
You can take a look at the open source
engine or get a copy yourself at
vrmlengine.sourceforge.net.

D achinko will be a new casual game from


Gamecask coming out soon. It is inspired by
the culture of ancient Asia and Pachinko machines
C ubageddon is the name of XProger's
entry into the Russian IGDC contest
"Cubassacre". The IGDC is one of
from 1970s and earlier. It will have three game the Russian game development
modes, one of them being 'Classic mode' which will community's large events which
have fifty-five unique machines. Each machine you holds other such themes often.
must place up to a maximum of one hundred small You'll find many known Object
balls into a green pot, which as it may ssound Pascal developers such as XProger,
simple, will be quite the challenge. Darthman and various other known
Be sure to keep an eye out for it soon at names in these wonderful events. It's
www.gamecask.com. just too bad it's not in English for us
as well.
Check out all the
Cubageddon entries posted at
www.tinyurl.com/33qmxxf.

Page 5
Pascal Gamer Magazine
What's New
Y oYo Games has finally released their popular Game Maker, easy game creation design
tool, for the Mac OS X platform. A version of Game Maker 7 to be ported over had been
in development for a couple of years now. However you can finally get a working copy of it
for your Apple system. Most existing GM7 games should work for the Mac version as it
supports most features of GM7.
For many of you who like making games, but sometimes wish that you could just take a
break and didn't have to code everything, this could be a nice alternative to play with for a
while. It's actually developed using Delphi and now with this port obviously has moved over to
Free Pascal.
Check out Game Maker 7 for Mac OS X at store.yoyogames.com/games/2-game-maker-
for-mac or if you would rather have Game Maker 8 for your Windows machine go to
www.yoyogames.com/gamemaker.

E mbarcadero's just had a new set of development tools come out recently. The new
'Delphi XE' and 'Delphi Prism EX' feature an innovative built-in software revisioning
system, enhanced code organizing and the ability to visualize your code in a new and nifty
diagram mode, showing off your code in relation to all your program's in-application objects.
David I., Chris Bensen and the whole host of others are out there promoting them now with
events like Code Rage 5 which just passed and other various live events.
Nothing new yet on their exciting Project X mission to port over Delphi to both Linux
and Mac OS X, but evidence that work has been progressing sporadically has shown up on
Eli Boling's company blog. He seems to be the front man for the endeavour. Lets wish him
luck in something that Delphi fans have been begging for for years.
In the mean time, you can get Delphi XE and Delphi Prism XE at www.embarcadero.com.

G LScene is finally back in the swing of things it seems. Not only have they managed to
get their site back up and working with support forums at SourceForge, but they have
also released version 1.1 this past summer. Best of all it now fully supports Lazarus!
You can get all the latest and up to date news at their new website at
glscene.sourceforge.net.

F or those RemObjects Software or Oxygene


compiler fans out there, the company has not too
long ago started up a Podcast and Video streaming
section on their website called RemObjects Radio and
RemObjects TV respectively. Though their podcast has
been around for a bit longer, their video service is
relatively new and both feature their own products
features and topics that relate to them and
programming concepts in general.
Their last Radio episode was about their Winder
2010 Roadmap and their last video released was an
introduction by Jim McKeith to their .NET assembly
obfuscator that integrates in Visual Studio IDE for use
with Delphi Prism's Oxygene compiler.
You can check out the RemObjects Radio podcast
at www.remobjects.com/radio or RemObjects TV at
www.remobjects.com/tv.

Page 7
Pascal Gamer Magazine
Supercool Summer Screenshot Contest

H ey PGM fans! A couple of months ago we announced on our website and on several
community forums that we would be having our first ever screenshot contest. Well
here it is the results. The winner was chosen by the editor based on a balance of
technical prowess and visual like-ability. In other words, he thought it was really cool.
Picking the best ones out of these screenshots was really tuff as there were some really
good of screenshots submitted, but unfortunately not everyone could be on top. We have
however listed the top ten for your viewing pleasure and give thanks to their hard work in
making and emailing them to us, along with everyone else who sent in a screenshot. Here

1st
they are, enjoy!

O ne of the things that made me pick this one was not only
the clean and polished quality of the scene graphics, but
also the small attention to details in the interface. Looking at this
game I get a sense that I'm actually watching a sporting event on
TV. You get that a lot with most large budget productions from
big companies, but not usually from small independent game
projects, so this spoke volumes to me.
Other than this the scene is highly detailed and none of the
sprites or scene objects seem to stick out like a sore thumb. It's
also rich in color and looks interesting with what's going on on-
screen. Good overall in-game gameplay action shot! The
statistics and leader board is also a very nice touch to the game's
interface as well.
You've earned a copy of this issue for sure!

2nd 3rd 4th

5th 6th 7th

8th 9th 10th

Page 8
Pascal Gamer Magazine
Magic Storm
FEATURE

M agic Storm brought us a few great games in the past, among them
were Tomb Climber, Bouldermouse and of course the Xenidis
series; Xenidis and Commando Xenidis. Now they are back
with their latest instalment in the Xenidis universe which will be a direct
sequel to the first one, Xenidis 2.
The next big development project for the team is TombClimber II. In
this new title they will be taking the 2D platformer 3D. The team is excited
about moving on to a new project, but unfortunately they will miss on of their
teammates as he moves on to do other things. Please read on about this fun
team of people and their projects.

Who is Magic Storm?


The team comprises of the following people...

Danielo "Ulf" Mattick Oliver "Buffolli" Müller


Graphics. He has not been with the 3D model artist and founder. He is
team for very long, he joined the Eric's best friend and partner in
team to work on Xenidis 2, but he gaming crime. They have been
enjoys working with everyone so far playing and making games since
and is making his mark on their latest game and plans to they were kids. He does a lot of the
continue with more work on their next and hopefully other graphics and much of the musical details in all their games.
future game titles under the Magic Storm label. Nothing makes him happier then when he can see his
creations being put to good use by Eric's very handy coding.

Juergen Oppermann Eric Behme


Musician. He has been with the team The leader of the team, founder and
composing music tracks for programmer. He is the guy who puts
approximately the past seven years everything together in software
over the production of three form. He relies heavily on his other
different games. His responsibilities were both sound effects team mates for their various artistic
and other music tracks throughout the game titles. He skills in the making of their games. He is involved in almost
unfortunately had to leave the team shortly after the every creative aspect of the games they make and enjoys
completion of Xenidis 2 due to his busy schedule. He is sad the fellowship of a team behind his and Oliver's creative
to leave and will be sorely missed by the whole team. vision.

Page 10
Pascal Gamer Magazine
We wanted to hear a little bit about these guys and how they
did business, so we wrote a short list of questions and let
them send us back their responses. Here is what they had to
say to us.

PGM: When did you first join or start working with


Magic Storm?

Eric Behme: I was the founder together with Oliver Muller


who lives in my own town. We have always been best
friends. We started back in the old DOS times. I don’t
remember exactly when, but I'm sure it was around the year
2000 or so.

Oliver "Buffolli" Müller: Together with Eric. I was a


founder of Magic Storm, which was named originally as
'Magic Wings' but this goes back to 1996 when we finished Magic Storm's Bouldermouse remake
our, I guess third game called 'Bouldermouse'. I have been
in this team for oh, lets say for about twenty years now. PGM: What game development skills do you have?

Danielo Mattick: Ever since September of 2008 if I Oliver: I figure, that I am best at artwork such as 2D sprite
remember right. design, painting backgrounds, 3D modelling and animating.
Also I develop some of the soundtracks for the games too.
PGM: How do you enjoy working with the team?
Danielo: I think I have staying power and the wish to create
Eric: A lot, of course. Making games is our Hobby. In the new and better worlds where the player has a chance to
beginning of course we dreamed of earning lots of money change everything.
and fame with our own games, but it never worked out that
way and turned out not to be quite as much. We are very Eric: I have worked on all the Magic Storm titles. Before
happy to be doing this for fun. 2002 all our games were created with Turbo Pascal 6, the
DOS compiler. After that time I moved on to using Delphi
Oliver: I always wanted to develop computer games on my 5, Borland Developer Studio 2006 and now I have Delphi
own and tell these little sprites what to do up until I was 2010.
twelve and then I finally got my first computer. It was a
Schneider/Amstrad CPC464 with a data-tape. A floppy disc PGM: What are your favourite creative tools?
drive was added a year later as Eric gets his own Amstrad
CPC with an enormous capacity of 128 kilobytes of RAM! Danielo: I like Photoshop and I love Inkscape. I also use
This was huge back then. Anyway, it is very much a Hexagon and Carrara for 3D modeling but for creative ideas
pleasure to see a project growing by adding a lot of little I'm using Alchemy have been using it for a very long time.
items from each of all the members of the team which all
form the final game. You can provide your full creativity Oliver: Hmm... I usually use Hexagon 2 for modelling,
because in a computer game there is nothing that is Ultimate Unwrap 3D Pro for UV mapping, Shader Map Pro
impossible, no limitations as in real life need to be for shader mapping, and quite often Corel PhotoPaint 10 for
considered. some of the texturing issues I encounter. As for gathering
and animating and exporting all the objects, I use trueSpace
Danielo: Yes, very much so. 7, it has the most exact .X exporter I know of. All music is
composed on Korg M1 and recorded with Audacity with a
little help of some other instruments I use.

Page 11
Pascal Gamer Magazine
Magic Storm

Eric: Delphi 2010 for developing code. Right now we are


using “Gen2” components from Dan for graphics which
uses DirectX. Before that we used DanJetX also from Dan.
We are also using Squallsound for playback of OGG music
files and other sound effects. Sometimes we work a little bit
with sound effects or record them using Audacity and if I
need a 3D texture or a picture I use Gimp.

PGM: What was your contribution in the making of


Xenidis 2?

Eric: Me and Oliver have always liked Spaceshooters. We


used to play on the Commadore 64 and Amstrad CPC with
games like 'Nemesis' or later on 'Xenon.' This is also how
the name Xendis came to be I guess, it's a combination of
the two. This is our third space shooter but I think it will be
our last. Magic Storm's first TombClimber

Oliver: I was there and had the time to work on it, so I just
did what I could to help. I would help to improve our skills PGM: What is your favourite moment while making the
in 3D modelling, UV mapping and working together with game?
the other guys in the team. I have created the main
background music track that you can hear in the menu and I Eric: Getting the 3D cinematics working like they should I
did the modeling of the bigger ships like the carrier and the guess. To be honest there were plenty of "little favourite
medic ship as well as the player's ship. Besides that, I was moments." I really can't list them all.
responsible for the buildings in space and the brown
coloured objects and other spacecraft in game as well. I also Danielo: It made me happy every time I finished a new
did the animated pictures of the players, the interface, main texutre for a model.
menu design, loading screens, and the list goes on...
Oliver: There are a lot. I liked seeing that my objects were
Danielo: I have done some of the 3D models for the making a part of the game or a specific sequence more
enemies, two faces of enemy aliens for the communication interesing than it was before as they were added.
screen and some additional textures here and there.
PGM: What was your last project before starting X2?

Oliver: We finished a 3D version of our old game


'Bouldermouse,' which is quite an amusing game based on a
really old game called 'Boulder Dash.'

Eric: It was 'Bouldermouse.' This one was and still is one of


my favourites. My daughter is only six years old. The
games she likes most are 'Horseland' and 'Bouldermouse.'
She really loves playing it and even creates levels for
herself to play.

Danielo: Playing with a MMO PRG game called 'Planeshift'


and some of my own concepts and other game ideas.

Eric, Juergen and Oliver (from left to right)

Page 12
Pascal Gamer Magazine
PGM: What is your next project now that this one is Danielo: Yes, please come visit my personal site, www.dum-
done? planet.com. It has some of my older art work and my own
portfolio. It is all in German though.
Eric: We have already begun to work on TombClimber 2
and it is already playable in 3D. The release will be
sometime next year. After that we've got a pretty new game PGM: Thank you for participating. Is there anything
idea that we are currently working the kinks out of. that you'd like to say to our readers?

Oliver: We are working right now on TombClimber II which Eric: I like developing games, and I like doing that using
will be much like the original 'TombClimber' but all in 3D. Delphi/Pascal. It is very good and sometimes very helpful
to have others around with the same interest and a place to
PGM: Is there any project or site of yours that you meet them at like the Pascal Game Development
would like to share? community or Dan's or my websites. Thank you everyone
for your interest!
Eric: I would like to inform you that Dan is making a new
set of components for both 2D and 3D game development. Danielo: I hope I did all right because I have never done an
They currently have a place on the old DanJetX website interview in English before.
located at www.ericbehme.de/phpBB2DAN. I am already
using them for 'TombClimber 2' and they are really really Oliver: If you feel the artist inside of you and have a few
nice. skills in developing, sketching, 3D modelling, animating,
recording noises or music, having good ideas for new
I would of course like to invite everyone to our own projects, just contact us in our site's forums.
homepage www.magicstorm.de. There you will find
playable shareware versions of all our games, the old ones
and new ones. Except for all the DOS games we first did in I hope you enjoyed a small look at the Magic Storm team,
the beginning. Those are not availible. be sure to look out for their new title TombClimber 2 and
this other new secret project they are working on in silence.
Oliver: Yes, visit our webside www.magicstorm.de and
check out our games. - Jason McMillen
Pascal Gamer Magazine

Tools of the Trade


W ant to use the same development tools that Magic
Storm does? Here is a list of some of the tools
they told us about and where to get them...
Carrara - www.daz3d.com/i/software/carrara8
3D figure posing, modeling, landscape design and
animation tools.

Gen2 - www.ericbehme.de/phpBB2DAN Alchemy - al.chemy.org


New DirectX graphics components for Delphi by the Creative tool for sketching and drawing new ideas.
creator of DanJetX.
Ultimate Unwap 3D - www.unwrap3d.com
GIMP - www.gimp.org Specialty Windows UV mapping tool for 3D models.
Graphics editing tools with importable filter effects.
Audacity - audacity.sourceforge.net
Inkscape - www.inkscape.org Open source recording and editing sound tool.
Open source vector graphics editor. Supports SVG format.
Squalsound - www.afterwarp.net/resources/soundlib
Hexagon - www.daz3d.com/i/software/hexagon Free playback library for MP3, OGG and WAV audio
3D modeling, texturing, mapping and rendering tools. formats.

Page 13
Pascal Gamer Magazine
Managing Your Classes

T his article is about class management techniques in complex application


THE CODER'S BLOCK

development. Many games these days can end up with some very complicated
and elaborate code structures depending on the size and depth of the
development. Hopefully Patrick can provide you some assistance with his method of
organizing your classes into a class hierarchy for large Object Pascal applications.
This lesson is broken down into parts with code to explain different aspects of the
class management method being explained. If you have further questions about the
topics discussed here, Patrick offers his email at the end. So feel free to write.

Introduction Implementation

H ello there! Do you happen to be in the middle of


building a complex application, where you want to
write several classes, and wonder how to manage
them in a convenient way? If so, this article is just perfect
for you! On these few pages I'm going to show you how
Let's say we have the following classes:
• TBaseClass - the origin of all evil
• TChildClass - the very first descendant, contains its own
field
• TFinalClass - the last descendant, also has its own field
easy it is to build a class hierarchy and manage multiple
instances of them in one place. TBaseClass derives from TInterfacedObject, which means
The code presented here can be compiled only in the there are interfaces likely to be involved in the overall
latest versions of Delphi - I suppose Delphi 2009 is the structure. That's right - there are even two of them:
needed minimum. Of course you don't have to compile it - • IStreamableObject - introduces two methods for saving
you can simply take these snippets as an inspiration and and loading a class to stream
adapt them to your very own needs. I used the new • IPersistentObject - consists of only one method which
language syntax just to emphasize that your classes can be allows for assigning the object to another one of the same
really complex and still managing them is an easy task. type
During the tests of the code I used the great memory
manager unit - FastMM - to ensure that there are no The second interface is a generic interface, which means the
memory leaks. The ideas written here were tested assignment routine can be adapted to any (class) type we
thoroughly. I can easily say these are ones you can fully can think of. Let's take a look at their declarations:
rely on.
Ok, let's get started!

Snippet I – Declarations of interfaces


{ .: IStreamableObject :. }
IStreamableObject = interface(IInterface)
procedure SaveToStream(const S: TStream);
procedure LoadFromStream(const S: TStream);
end;

{ .: IPersistentObject :. }
IPersistentObject<T> = interface(IInterface)
procedure Assign(const Source: TStream);
end;

Nothing complicated, right? The fundamental assumption on screen. It contains some fields, properties, and methods
was that every class we use in our design derives from some which are essential to define an object in space. (i.e.
base class. It's a very common practice in many position, rotation, etc.)
applications I've seen before. For an example, you can In our case, the one in charge of this is TBaseClass.
think of a game engine. Let's say there's a class called Let's have a deeper look at its design:
TEntity which is the foundation of every object displayed

Page 14
Pascal Gamer Magazine
Snippet II – The TBaseClass declaration
{ .: TBaseClass :. }
TBaseClass = class(TInterfacedObject, IStreamableObject,
IPersistentObject<TBaseClass>)
SL: TStringList;

constructor Create();
destructor Destroy(); override;

procedure OutputStrings(); virtual;

procedure Assign(const Source: TBaseClass); virtual;


procedure SaveToStream(const S: TStream); virtual;
procedure LoadFromStream(const S: TStream); virtual;
end;

Whoa, this one surely looks more complex! text lines. Then there're the two well-known methods - a
First of all, it derives from two interfaces we declared before. constructor and a destructor. Their role is straight-forward, isn’t
You may wonder why those interfaces weren't implemented. it? At last, OutputStrings is in charge of displaying the string list's
Basically, interfaces are just abstract classes, so they only play the content in a console window.
containers part. We need to have a class which implements Let's consider the Assign method (derived from
methods of an interface, thus the need of the TBaseClass class. IPersistentObject):
The base class has one field - SL. It's a string list which holds

Snippet III – An example implementation of the Assign method


procedure TBaseClass.Assign(const Source: TBaseClass);
begin
if not Assigned(Source) then
exit;

SL.AddStrings(Source.SL);
end;

Like I said earlier, this method "synchronizes" our local message is always obscure)
field with the one taken from Source. Before we do the Ok, let's move further. We're in need of creating
assignment though, we need to ensure that the object we another class which will have its own unique features, but
want to synchronize our class with was created, so that we also will have the same ones our base class has. An
can avoid the popular "Access Violation" exception. (whose example may be the TChildClass class, declared as follows:

Snippet IV – The TChildClass declaration


{ .: TChildClass :. }
TChildClass = class(TBaseClass)
TimeEntries: TList<TTestRecord>;

constructor Create();
destructor Destroy(); override;

procedure OutputStrings(); override;

procedure Assign(const Source: TBaseClass); override;


procedure SaveToStream(const S: TStream); override;
procedure LoadFromStream(const S: TStream); override;
end;
Page 15
Pascal Gamer Magazine
Managing Your Classes
It looks familiar, doesn't it? In fact it's almost identical to list (declared in Generics.Collections) which takes the
our base class, the only difference is that it overrides its TTestRecord type as its fields. What is the record like?
methods (i.e. introduces new functionality) and adds Nothing fancy:
another field to the overall structure. The field is a generic

Snippet V – The TTestRecord type introduced


{ .: TTestRecord :. }
TTestRecord = packed record
CurrentDate: TDate;
CurrentTime: TTime;
class operator Add(A: TTestRecord; B: Integer): TTestRecord;
end;

The only “hard thing” is that it overrides an operator. Too then. It seems a little illogical to me, but it's because the
bad that only records are capable of doing so in Delphi. As Delphi compiler was made to be compatible with .NET.
you can see, the new syntax allows for adding methods to To some readers overriding an operator might be a new
records. I wonder why objects were marked as deprecated task, so here's how it's implemented:

Snippet VI – Overriding an operator


class operator TTestRecord.Add(A: TTestRecord; B: Integer): TTestRecord;
begin
A.CurrentTime := IncHour(A.CurrentTime, B);
Result := A;
end;

Let's get back to describing TChildClass. As I mentioned just want to expand it. So for instance, the OutputStrings
before, all of the base class' methods are overriden inside method now, except displaying the contents of the SL field,
the TChildClass. What does that mean? Well, we don't may also display the records of TimeEntries:
want to leave out the code we have in our base class - we

Snippet VII – Overriding a method


procedure TChildClass.OutputStrings;
var
i: Integer;
begin
inherited OutputStrings();

for i := 0 to TimeEntries.Count - 1 do
Writeln(' ', Format('Current date: %s, Current time: %s',
[DateToStr(TimeEntries[i].CurrentDate),
TimeToStr(TimeEntries[i].CurrentTime)]));
end;

The key thing is to keep the first line - we can't forget about
it if we want to maintain the functionality of our base class!
The last class in our design - TFinalClass - shows that
there may even be different constructors (its constructor
takes one parameter) and it's still okay.

Page 16
Pascal Gamer Magazine
Snippet VIII – The TFinalClass design
{ .: TFinalClass :. }
TFinalClass = class sealed(TChildClass)
SomeString: String;

constructor Create(const S: String);


procedure OutputStrings(); override;
end;

What is that mysterious word sealed? It means that no class


can derive from this class (hence the class name). Because
the whole class isn't big, here's its full implementation:

Snippet IX – Full implementation of TFinalClass


constructor TFinalClass.Create(const S: String);
begin
inherited Create();

SomeString := S;
end;

procedure TFinalClass.OutputStrings;
begin
inherited OutputStrings();

Writeln(' ', 'Some string: ', SomeString);


end;

Important note: as you can see, there are no Assign, necessity.


LoadFromStream, and SaveToStream methods. How is that We have our design done. Now how do we manage
possible? When a class derives from an interface, it has to those classes without the need to create many instances and
implement all of its methods, so why are they missing here? playing with lots of variables? We can use a class which
The answer is simple - TBaseObject does the work of will hold them all, let us to read/write to their fields, and
implementing all of them. Because of the fact that they're assign methods! What's more, it'll even take care of freeing
marked as "virtual methods", they may be overridden in the memory they allocated! Sounds impossible? Well, you
another class (of course, in a descending one), but it's not a probably couldn't imagine anything simpler than that:

Snippet X – Declaration of a container class


var
ClassContainer: TObjectList<TBaseClass>;

Is that all? Basically, yes! We just need to create it now:

Snippet XI – Creation of the container class


begin
ClassContainer := TObjectList<TBaseClass>.Create(True);

Page 17
Pascal Gamer Magazine
Managing Your Classes
The parameter it takes in its constructor tells the class
whether it should be responsible for cleaning up the
memory. Of course it should!
Now, how do we add a class? This snippet explains it:

Snippet XII – Adding a class to the container


with ClassContainer do
begin
Add(TBaseClass.Create());
Items[0].SL.Add('test string');
Items[0].OutputStrings();
{ ... }

Because by default all items are of TBaseClass type, we


don't need to use typecasting. But what if we wanted to add
a TChildClass instance? Nothing simpler:

Snippet XIII – Adding a descending class to the container


Add(TChildClass.Create());
TChildClass(Items[1]).TimeEntries.Add(TimeEntry());
TChildClass(Items[1]).OutputStrings();

Summary you wish to discuss with me, don't hesitate and write me an
email at patrick.nusbaum@gmail.com.
And finally here we are at the end of this article on how to
manage your classes. I hope you can adapt this technique to - Patrick Nusbaum
some of your projects and successfully use the ideas
presented here. If there's anything further on the topic that

Further Reading
B elow I have provided you with some suggested sites that you might want to consider for further reading:

• Generics with Delphi 2009 Win32


http://sjrd.developpez.com/delphi/tutoriel/generics/

• New Delphi language features since Delphi 7


http://edn.embarcadero.com/article/34324

• DN4DP#5: Redefining the operators


http://hallvards.blogspot.com/2007/03/dn4dp5-redefining-operators.html

Page 18
Pascal Gamer Magazine
Pascal Compiler Directives

C ompiler directives are a very powerful tool. These little things come in handy when
you want to suppress annoying errors that you are aware of and that do not need
fixing. When you want to make cross-platform code, compiler directives are extremely
important. Curious? Just read on.

What are compiler directives? People often add a period right before the dollar sign, to un-
define the symbol.
Compiler directives are special “words” in your code that
can be used to control the compiling process. They are //The period will make sure that the
always in the {$SOMETHING} form. They can be used to compiler doesn't define this symbol
achieve the following: {.$DEFINE LETS_MAKE_NOISE}

• Conditional compilation As you see, it works the same as an if-statement. That


• Enabling/Disabling compiler options means you can also do this.
• Including new sourcecode into your unit
• Setting the compatibility modes * //Here we check if some symbol was defined
• Pushing/Popping compiler options from the stack * {$IFDEF LETS_MAKE_NOISE}
* Freepascal only beep;
{$ELSE}
Generally, there are two kinds of compiler directives: Local //be quiet
directives and Global directives. Local directives are sleep(1000);
effective anywhere in your source, while global directives {$ENDIF}
should only be defined once at the top of the unit, before the
interface-section. If you fail to place them there, freepascal You can put IFDEF and ENDIF around big chunks of code.
will give you a warning. Keep an eye on these warnings, It doesn't matter where you put them. For example, you
because the can lead you to ineffective compiler directives, don't need to put them inside a function or method.
which may cause problems. Finally, you can use IFNDEF to compile code when a
Allthough most of the mentioned techniques will work symbol has not been defined.
in Delphi, some of them are FPC-only. I must admit that I
have limited experience with compiler directives so I can't Compiler options
tell exactly which one work on which compiler.
There is a whole range of options that can be switched on or
Conditional compilation off. These are called switches.
Switches used like this:
With conditional compilation, you can make the compiler
skip entire chunks of code. This can be handy when your {$OPTION+} //enables the option
project contains code that is only used when you want to {$OPTION-} //disable the option
debug. Also, code that can only be used on one platform can
be conditionally compiled. It works as follows: To name a few:

//This symbol will cause the code to be {$H+} or {$LONGSTRINGS+}: This will enable the use
compiled of AnsiStrings in FreePascal. Delphi uses AnsiStrings by
{$DEFINE LETS_MAKE_NOISE} default, so you might need this switch now and then. Do
note that if you are in delphi-mode, AnsiStrings are
//Here we check if some symbol was defined automaticly enabled.
{$IFDEF LETS_MAKE_NOISE}
beep; {$B+} or {$BOOLEVAL+}: Enabling this will make sure
{$ENDIF} that all part of a boolean expression will be evaluated, even
though the outcome may be allready known.

Page 20
Pascal Gamer Magazine
{$C+} or {$ASSERTIONS+}: This will enable assertions.
These can be used to check if the state of the program is still Pushing and popping states
valid. Assertions are only used in the development-version
of a program. Quickly disabling them for release can be I have recently discovered this option, but I never have used
done by using this switch. it myself. It seems handy in some cases and I just wanted to
point out that it exists.
{$Q+} or {$OVERFLOWCHECKS+}: Like the name
says, this switch will enable checking of overflows. This //Set some compiler directives here
means that extra code is inserted to check if a variable {$PUSH} //Will save all compiler settings
overflows.
//More code and directives
{$R+} or {$RANGECHECKS+}: This adds range- {$POP} //restore the old settings again
checking code for array indices, enumerations and subrange
types. The compiler doesn't do this by default. The stack can hold up to 20 sets of compiler-settings. Do
note that the pushed settings will be remembered across
These are just a few commonly used switches. More can be different units.
found in the Freepascal documentation.
Conclusion
Including new source into your unit
I hope that you found this tutorial usefull. Some knowledge
This option is very handy when you have a whole load of of this subject is very usefull when you are working on big
compiler directives that you need to include in every unit of projects. One bit of advice I can give you; Make sure you
your project. It can also be used to add new source into your keep the number of compiler directives at a minimum. Code
unit, but this isn't very usefull, because sourcecode isn't that is soaked with compiler directives is not pleasant to
ment to be included. It should just be there. work with. If you really need a lot of compiler directives
you should put them into an include file (*.inc) and include
Here's how you do it: that at the start of your unit. or program source.

{$I yourfile.inc}
- Nathan "chronozphere" Schagen
Easy isn't it? It's a good habbit to give these files the *.inc
extension, because everyone does that.

The compatibility mode


The compatibility mode is crucial if you want to make
Delphi-code work in FPC. I've mentioned it explicitly here
because it's one of the first and most important directives
that you will learn.
It can have different modes. The most important ones
are shown below:

{$MODE DELPHI}: Ensures that the code is compiled in


the way Delphi does it. Very usefull if you quickly want to
port Delphi code to other platforms. This switch also
enables {H} (for AnsiStrings, which are used in delphi by
default).

{$MODE FPC}: The FreePascal-dialect is used to read the


code.

Do note that this is a global directive. It should be defined at


the top of the unit, before the interface-section.

Page 21
Pascal Gamer Magazine
Basic Cipher Algorithms

T he problem of keeping one’s data safe dates back to ancient times. Keeping your data in a safe place
which only you can access can work, provided it’s only you who needs to access the data or you can
meet the addressee face-to-face. The issue gets complicated when you need to somehow deliver the
message – there is a risk the data might fall into the wrong hands – or worse, you have to keep it in a publicly
accessible place. This is where ciphers come in. In this article I’ll try to introduce some basic ciphers. They
may not be able to stop the most determined, but consider it a start, secondly – they’ll probably be enough to
prevent just anyone someone trying to ‘hack’ their save-game in your new PascalAssKicker 2.0.

Glossary of Terms Used Implementation


• Plaintext – the text we want to cipher. function caesar(plain: string; key:
shortint): string;
• Ciphertext – the same text, after it has been enciphered. var
pos: byte;
• Key – a value that affects the ciphering algo. Using a calc: smallint;
different key with the same plaintext will produce different ret: string;
ciphertext. begin
ret := '';
• Substitution cipher – an algo which creates ciphertext by for pos := 1 to length(plain) do
replacing parts of the plaintext with some other data. begin
(Caesar, Gaderypoluki, Vigenere) calc := (ord(plain[pos]) + key) mod
256;
• Transposition cipher – an algo which does not affect the if (calc < 0) then
data itself, but only changes its order. calc := 256 + calc;
(Scytale) ret := ret + chr(calc);
end;
Notice that substitution ciphers can be used “on-the- caesar := ret;
fly”, ciphering every character individually, while end;
transposition ciphers need the whole message to operate.
This can be both a disadvantage - because you need to wait Mod can return below-zero values, that’s because the ASCII
for the message transmission to end; and an advantage, code is written to a variable and then passed though ‘if’,
because if someone intercepts only part of the data, it will instead of putting everything straight into ret+=. In order to
be of no use to him – while using a substitution cipher, he decipher the message, we simply need to pass the cipher
can decipher every possessed fragment. text through the algo once again, only changing the key’s
sign – e.g. +2 instead of -2.
Caesar cipher
Scytale
One of the simplest ciphers, this one has been in use since
the Roman times. Basically, take every letter in the plaintext Scytale was a cipher used by the ancient Greeks – most
and replace with the key-th letter to the right in the alphabet. notably, the Spartans. The idea was to use a strip of paper
As such, when key=1, A becomes B, B becomes C, C (or leather, so it can be stealth-ed as, say, a belt), wrap it
becomes D et cetera. around a rod of certain diameter, and then write the
message horizontally. Unwrapped, the letters appeared in
vertical sequence.

Page 22
Pascal Gamer Magazine
You might wonder why
there aren’t separate
functions for ciphering and
deciphering. When we
cipher, we insert plaintext
row-by-row and read it
column-by-column.
Deciphering would mean
inserting the ciphertext
Scytale can be easily represented using a table – column-by-column and
consider this one as a rod which circumference allows to reading it row-by-row – we
write four characters, and is six characters long. Take the can achieve the same effect by “rotating” the table; for the
plaintext and put it into the board row-by-row. If there are example above, that would mean using a 4x6 table, instead
empty spaces left, fill them in with, let’s say, dots. Now all of 6x4.
you need to do is to read the text from the board column-by-
column. As such, our ciphertext is:
“P**iaGMnsaaecmg.aea.lrz.”.
Gaderypoluki
Another simple cipher, this one is mostly used by scouts to
Implementation cipher short messages. Its name comes from the fact that
“gaderypoluki” is the most often used key for this algorithm.
function scytale(plain: string; rows:
byte): string; The key must be even-length and no letter can appear more
var than once. The key is easy to remember if it consists of
arr: array of char; consonant-vowel syllables – that would be why
cols, pos, x, y: byte; “gaderypoluki” is the most often used one. Take the key
begin and break it into bigrams. Using “gaderypoluki”, we will
cols := 1; get: GA-DE-RY-PO-LU-KI. In order to cipher the message,
while (rows * cols < length(plain)) do replace every paired letter with its partner – G becomes A,
cols := cols + 1; while A becomes G; P becomes O, while O becomes P, et
setlength(arr, cols, rows); cetera. Letters that are not paired remain unchanged.
pos := 1;
for y := 0 to rows - 1 do
begin
Implementation
for x := 0 to cols - 1 do
function gaderypoluki_validkey(key:
begin
string): boolean;
if (pos <= length(plain)) then
var
begin
present: array[0 .. 255] of boolean;
arr[x][y] := plain[pos];
pos: byte;
pos := pos + 1;
begin
end
if (length(key) mod 2 = 1) then
else
exit(false);
arr[x][y] := '.';
for pos := 0 to 255 do
end;
present[pos] := false;
end;
for pos := 0 to length(key) do
plain := '';
begin
for x := 0 to cols - 1 do
if (present[ord(key[pos])]) then
begin
exit(false)
for y := 0 to rows - 1 do
else
begin
present[ord(key[pos])] := true;
plain := plain + arr[x][y];
end;
end;
exit(true);
end;
end;
scytale := plain;
end;

Page 23
Pascal Gamer Magazine
Basic Cipher Algorithms

function gaderypoluki(plain, key: string): Implementation


string;
var type
replace: array[0 .. 255] of char; chrarr: array[0 .. 255, 0 .. 255] of
pos: byte; char;
begin
if (not gaderypoluki_validkey(key)) then procedure vigenere_maketable(var alph:
exit(plain); chrarr; sshi, rshi: shortint);
for pos := 0 to 255 do var
replace[pos] := chr(pos); x, y: byte;
pos := 1; let: smallint;
while (pos < length(key)) do begin
begin for y := 0 to 255 do
replace[ord(key[pos])] := key[pos + 1]; begin
replace[ord(key[pos + 1])] := key[pos]; for x := 0 to 255 do
pos := pos + 2; begin
end; let := (sshi + y * rshi + x) mod
for pos := 1 to length(plain) do 256;
plain[pos] := replace[ord(plain[pos])]; if (let < 0) then
gaderypoluki := plain; let := 256 + let;
end; alph[x][y] := chr(let);
end;
To decipher the message, pass the ciphertext though the end;
algo, using the same key. end;

Vigenère cipher procedure vigenere_checkkey(var plain,


key: string);
This one is actually a transformation of the Caesar cipher var
and, put as short as possible, operates on the idea of using temp: string;
multiple Caesar ciphers (that is, ciphers with different key begin
values). if (length(key) >= length(plain)) then
exit;
To the left is a stump of the table of alphabets used for this temp := key;
cipher. We start with an alphabet with no shift, and then while (length(key) < length(plain)) do
shift every next alphabet +1. Possessing a hand-made table, key := key + temp;
this one can be done by hand – but since we can use end;
computers now, let’s put a little innovation into this one –
and apart from using a keyword, we’ll add the option to
define the beginning shift and the row shift.

To cipher the message, take the key – if it’s shorter than the
message, simply repeat it. Then, look at the row in the table
with the label of the keyword’s first letter. The letter in the
column which label is the plaintext’s first letter becomes the
ciphertext. This probably sounds confusing, so a simple
example: if the first letter of the keyword is C, and the first
letter of the plaintext is B, our ciphered letter is located in
row C, column B – in this case, “D”.

Of course, instead of letters, we will be using ordinal values


corresponding to ASCII lettercodes.

Page 24
Pascal Gamer Magazine
As you can see, this time we got separate functions for
ciphering and deciphering.

Summing up
All of the ciphers presented above are, first: the most
known; second: pretty easy to do by hand – and as such,
they shouldn’t be treated as anywhere around secure.
Scytale can be recognized by the fact that text length must
be a result of multiplication; also, if the text does not fill the
table completely, you can notice that the additional dots
appear in a repetitive manner, hinting not only that Scytale
was used, but also the “rod size”. Caesar cipher can be
broken by frequency analysis – if the most common letter in
a language is, say, ‘A’, and the most common letter in the
function vigenere_cipher(plain, key: ciphertext is ‘E’ – then most probably the shift is +4.
string; sshi, rshi: shortint): string; Gaderypoluki can be broken by this method too – this time,
var instead of shifting the whole frequency diagram left or
alph: chrarr; right, particular bars will be swapped. Vigenère is the most
pos: byte; secure one, but it should be noted that due to the repeating
res: string; nature of the key, longer keywords provide more security.
begin
res := ''; Still, I think these few algorithms presented above can serve
vigenere_maketable(alph, sshi, rshi); as a nice start for those of you who’d like to learn
vigenere_checkkey(plain, key); something about encryption algorithms on their own.
for pos := 1 to length(plain) do Besides – as long as you want only to protect the save files
res := res + in your games, basically any cipher will do – mainly due to
alph[ord(plain[pos])][ord(key[pos])]; security by obscurity (that is, the attacker does not know
vigenere_cipher := res; which cipher was used).
end;

function vigenere_decipher(ciph, key:


- Iwicki "Super Vegeta" Artur
string; sshi, rshi: shortint): string;
var
alph: chrarr;
pos, x: byte;
let: smallint;
res: string;
begin
res := '';
vigenere_maketable(alph, sshi, rshi);
vigenere_checkkey(ciph, key);
for pos := 1 to length(ciph) do
begin
for x := 0 to 255 do
if (alph[x][ord(key[pos])] =
ciph[pos]) then
break;
res := res + chr(x);
end;
vigenere_decipher := res;
end;

Page 25
Pascal Gamer Magazine
Templates Made Easy

R ecently, I discovered a technique that allows you to make templates in pascal. Templates are useful if you want a class to work with
multiple datatypes. This technique makes use of compiler directives, so if you don't know what they are, please read my article about
them. Read on to see what this is all about.

Templates: Why You Need Them TSomeList = class


private
FList: array of TSomeType;
Often, while programming, you imaging that it would be
neat if your class would be able to handle multiple data-
function GetItem(aIndex: Integer): TSomeType;
types. Good examples are lists, maps, sets and other kinds
procedure SetItem(aIndex: Integer; Item:
of generic data structures. People often use TList or similar
TSomeType);
classes to manage their data. The downside of this, is that
function GetCount(): Integer;
every time you get a pointer from the list, you have to cast it
procedure SetCount(aCount: Integer);
to get the actual type that was stored there. Like this:
public
constructor Create(aInitialCount: Integer);
TSomeCoolObject( MyList[3] ).DoSomethingSweet();

property Items[I: Integer]: TSomeType


PInteger( MyList[2] )^ := 10;
read GetItem write SetItem;
property Count: Integer
All these typecasts clutter your code. To solve this, you
read GetCount write SetCount;
need to write a list-class for every kind of data that you
end;
want to store in a list. This is just too much work and many
programmers just accept that their code looks ugly with
Implementation
typecasts all over the place. Templates (a.k.a Generics)
solve this problem. They allow you to write your code once,
constructor TSomeList.Create(aInitialCount:
and reuse it for all the data-types that you want to support.
Integer);
begin
How about real templates? //..
end;
Templates are supported by the newer versions of Delphi,
such as Delphi 2006 and up. Free Pascal also supports them.
//etc etc...
However, I think this technique is the best one to use
because:
This is nothing too special. Just a very simple list class that
stores objects or records of type TSomeType. First of all,
• It works in both Delphi and Free Pascal.
we need to make sure that this code is put in a separate file.
• It works in old versions of Delphi, including 7.
The file must only contain the class and the
• It's fairly easy to use.
implementation. The other keywords like unit, interface,
uses and implementation are left out. We can use any file-
There are also downsides:
extension we like. A *.tpl extension is good for templates.
You can also use *.pas to get nice syntax highlighting. I
• Code completion does not work for the template classes.
saved it as “list.pas”.
• It's a hack, so the real templates probably look nicer in code.

I think that keeping code portable is more important than


code-aesthetics. Also, code-completion is a sacrifice I'm
willing to make.

How does it work?


Lets start off with a class that we want to turn into a
template. I have made a basic list class for this article:

Page 26
Pascal Gamer Magazine
So list.pas consists of two parts. The interface part and the type
// We set the constant TEMPLATE_TYPE to the
implementation part. The next step is to turn it into this
// type we want.
format:
TEMPLATE_TYPE = Boolean;

// If TEMPLATE_IMPLEMENTATION is not defined,


// Include base class now. TEMPLATE_TYPE will
// include the interface
// be replaced by the type we selected
{$IFNDEF TEMPLATE_IMPLEMENTATION}
// previously
{$INCLUDE 'list.pas' }
TList_Template = class
//Same stuff here as in TSomeList...
// Define descendant class with a proper name
//However, replace TSomeType by TEMPLATE_TYPE;
TBooleanList = class(TList_Template)
end;
private
public
// Make sure that the next time the file is
end;
// included, the implementation part is included
{$DEFINE TEMPLATE_IMPLEMENTATION}
implementation

{$ELSE}
// Include implementation now
// Apparently, TEMPLATE_IMPLEMENTATION was
{$INCLUDE 'list.pas' }
// defined, so we should include the
// implementation
end.

constructor TList_Template.Create(aInitialCount:
First of all, we include the units that we need, because
Integer);
list.pas has no uses-clause (it is not a real pascal-unit).
begin
Next, we set the datatype we want to work with. Now it's
//..
time to include “list.pas”.
end;

When it's first included, it will check whether


//All the other methods here...
TEMPLATE_IMPLEMENTATION is not defined. It is not,
{$ENDIF}
so the interface part of the class is included. Then,
TEMPLATE_IMPLEMENTATION is defined, so that the
As you see, the interface part is placed inside the IF-block
next time we include the unit, the implementation part will
and the implementation part is placed inside the ELSE-
be included.
block.
Make sure that you make a new unit for every type you
Okay, It's time explain what we did. “List.pas” contains a
want to support. Multiple templates in a single unit does not
base class that describes how our list works. We will derive
work. We're finished. You can now use the TbooleanList
multiple classes from this base class. Each of these will
class, like you would normally.
offer support for a specific type. We make a new unit for
every class. In every unit, the base class will be re-defined
I have to say thanks to Luuk van Venrooij, who gave me the
for a specific type. The descendant class is just a way to
idea to use this technique. He used a slightly more complex
rename the base class and to make sure that delphi “sees” it.
technique in his sources. When I looked into it, I figured
I will show you how to make a TBooleanList. :
that it could be simplified and that I could write this article
about it.
unit booleanlist;

So that's it. Hope you have found this article useful. If you
interface
need a full source example. Please contact me. I may post it
on the PGD forums.
// Include units that are needed by the code in
// “list.pas”
uses SysUtils; - Nathan Schagan

Page 27
Pascal Gamer Magazine
Asphyre Sphinx

A
PROJECT HIGHLIGHTS
sphyre has a long running history dating all the way back to the days when the DelphiX components
for Delphi were the primary way to use third party libraries to make games. Starting out as a simple
add-on library for DelphiX, using the name PowerDraw, it has then since been renamed to 'Asphyre'
which has come a long long way since then.
Having been used by commercial games and other indie developers the library has made a name for it's
self among many Pascal game developers. Asphyre Sphinx is the latest version of this powerhouse game
library and we are going to have a look at what it can do.

Library Functionality

A sphyre was originally designed to be a DelphiX alternative that used Direct 3D's hardware acceleration capabilities,
eventually it's functionality grew to include other such features as a sprite engine, collision detection, advanced content
packaging, advanced math functions and of course 3D graphics. The option of using either Direct Draw or Direct 3D
existed before, but the new Sphinx now boasts added benefit of using OpenGL as an extra option. The implementation of these
three options allows for the developer to set a specific one for use or allow the player to choose themselves.
The game library has grown much since it's original creation and comes with many tools and functions. It available with
support for both Delphi and Lazarus. Here are some of the main features of Asphyre Sphinx...

2D Graphics Features
• Image transformation including rotation, skew, mirroring and so on.
• Alpha-blending with multiple effects such as add, subtract, multiply, shadow among others.
• Buffered drawing calls deliver extremely high rendering performance in real-time.
• Many different drawing primitives such as rectangles, ellipses, arcs, ribbons and holes.
• Multiple image pixel formats to maximize quality and minimize video memory consumption.
• Images can be loaded from compressed ASDb archives, external files and streams.
• Patterns (small sub-images) can be distributed among different textures to reduce memory footprint.
• Dynamic textures allow fast pixel access for effects such as plasma and destructible terrain.
• Rendering targets allow dazzling visual effects such as motion blur, glows and other effects.
• Proper handling of lost devices, surviving Alt+Tab, Win+L and other rare events.
• Bitmap text drawing with Unicode support, color gradient tags and alignment options.
• Integration with Vampyre Imaging Library for loading many different image formats.

3D Graphics Features
• Easy to use 3D mesh drawing even for inexperienced developers.
• Mesh instancing for improved performance when many small meshes are drawn.
• Optimized 3D pipeline with hidden surface removal and triangle sorting.
• Transparent support for DirectX 7, DirectX 9 and OpenGL providers.
• Billboard rendering for particle effects, explosions and smoke.
• Load meshes from 3D Studio Max using the conversion tool, which can read 3DS and ASE formats.
• Mesh generation code for 3D planes, spheres, round boxes, torus, torus knots and super ellipsoids.
• Illumination models including Phong, Blinn-Phong, Minneart, Cook-Torrance, Oren-Nayer, Isotropic and
Anisotropic Ward.

Other Features
• Capture the state of all keyboard keys, read multiple joysticks and mouse displacement.
• Store all images, sounds and other files using LZ77 compression in a single ASDb archive for easier deployment.
• Set password for ASDb archive to encrypt the contents using XTEA 128-bit cipher so nobody else can open your media files.
• Complete set of mathematical types with operator overloading for 2D and 3D vectors and matrices.
• High-precision timer for independent graphics rendering and object movement.

Page 28
Pascal Gamer Magazine
Asphyre Success Stories
Along with it's many years of development the Asphyre
game library has also been quite a success in many past
titles. These games have used it in the game engine's core,
but mostly for it's versatile graphics capabilities. Past
versions of Asphyre have shown up in commercial titles
along with gaming competitions, including the winning
entry to the 2006 PGD Annual "Big Boss" Game
Developer's Competition, 'Tanx' by Dirk Nordhusen. He
created his entry using Asphyre Extreme, which allowed
him to add some incredible visual effects all done with pre-
rendered 2D graphics. You are a tank commander driving
around blasting other enemy vehicles and aircraft. The game
was later remade into an enhanced version called 'Iron
Strike: Stormfront' which was submitted to the Independent Abra Academy (left) & Abra Academy Sequel (right)
Game Festival in 2007. The game featured more special
effects, new enemy units and more weapons and special Probably some of the more exciting game releases are
pick-ups. Though it didn't win any awards, is stands as those made by the very same developers of the Asphyre
testament to what you could do visually with the older library and tools themselves. The group Ixchel Studios
versions of the Asphyre game library. consists of both Afterwarp developers and others and their
first release was a game called Wicked Defense in
September of 2007. The game is a visually dazzling special
effects heavy version of 'Tower Defence,' where you have
to purchase new defensive structures to prevent an
onslaught of incoming enemy units. For each unit you kill
you get points that go toward the purchasing of new
defensive structures. The game was released for Windows
and was enough of a success and gained enough market
attention that the group wen on to make more games,
including a sequel of their first game, Wicked Defense 2.
Other titles included both the Aztlan Dreams and Aztlan
Dreams 2 games.
- Jason McMillen
Pascal Game Development

Tanx (left) & Iron Strike: Stormfront (right)


Another series of successes were the Abra Academy
games created by Cezar Wagenheimer and published by Big
Fish Games. Though not the only Pascal developers
working with Big Fish, they have been very successful with
not one, but two releases of the Abra Academy games. In
these game you play the character Wanda who is a witch at
the Abra Academy and the goal is to find ingredients and
put them into your brew. How this is done is by solving
puzzles and finding hidden objects in an elaborately drawn
and organized scenery. This casual game normally sells for
$9.99 US Dollars, but with a Big Fish Games membership
"Game Club," it goes for only $6.99 for the more serious
gamers. A good solid series of casual games made for
Windows. Wicked Defense (top) & Aztlan Dreams (bottom)

Page 29
Pascal Gamer Magazine
Asphyre Sphinx

Delphi Installation Lazarus Installation


NOTE: Turbo Delphi and Delphi 2006 are the official NOTE: Lazarus, unlike Delphi, is a project-based development tool.
versions the library supports, however Turbo Delphi is This means that compiler-specific settings and library paths will have
no longer available. Also as of Delphi 2009 and up to be set for each individual project rather than sharing a single
there are some issues with installation. There is configuration for all of your projects. Each new project using
however an unofficial version that installation on Asphyre Shpinx will require you to input the path in it's included
Delphi 2010 by a member of the Afterwarp web libraries which it will use.
forums. Look for it in this issue's Bonus Content or at
the Afterwarp website. A new version of Sphinx is
pending that will fix these issues with Delphi.
1 Start by downloading the installer at
www.afterwarp.net. Once the download is
complete, uncompress the archive on your local

1 Start by downloading the installer at harddrive. You should ensure that all the folders within
www.afterwarp.net or the Delphi 2010 unofficial the archive are properly extracted or there may be
port from the downloadable Bonus Content some issues upon installation. License, Source and
section. Once the download is complete, uncompress Tools should all be present along with Examples if you
the archive on your local harddrive. You should ensure downloaded the complete package. Copy these files to
that all the folders within the archive are properly where you want to keep them for use by your Lazarus
extracted or there may be some issues upon projects.
installation. License, Source and Tools should all be
present along with Examples if you downloaded the
complete package. Copy these files to where you want
to keep them. 2 Once everything is properly extracted and
copied, you will need to add the Source folder's
location to the search
path so that Lazarus can

2 Once everything is tell Free Pascal where to


properly extracted find it. An easy way to do
and copied, you will this is to include the path in
need to add it's location to the Compiler Options
the library path for Delphi's window for each individual
compiler to use. Start up Delphi and select the project you wish to use it
following options from it's main menu. Under 'Tools' in. Start Lazarus and create or open an existing project
choose 'Options' then go into the tree view on the left and from the main menu select 'Project' then 'Compiler
hand side and look for and expand 'Environment Options.' The Compiler Options window will then
Options' then under it 'Delphi Options' and finally popup and you will be able to add the file path to your
select 'Library - Win32' which should bring up your Source folder to 'Other Unit Files', 'Include Files',
'Directories' panel. You will want to add the path of 'Other Sources', and 'Libraries' as shown.
your Asphyre installation's Source folder to the existing
'Library path' value. Don't forget to make sure you use
a semi-colon delimiter to prevent errors.
3 Provided that you have properly completed the
steps above, you should be able to compile the
project or open an existing project from the

3 Provided that you have followed these steps Examples folder and successfully compile it. Some of
properly, you should have a ready installation of the project in the Examples folder may have been
Ashpyre Sphinx. It's important to note that there written for Delphi and as such may have to be ported
aren't any VCL in this framework and you will not see over to Lazarus to function properly. Asphyre
anything on the component palette in case you want to originally supported only Delphi and Lazarus support
look for it there. If you installed a version with the is still relatively new. If you wish to write examples for
Examples folder it's recommended that you try to open Lazarus feel free to post them on the forums at
the Basic or Basic3D examples and try to recompile www.afterwarp.net.
them to verify proper installation. If there aren't any
errors, you are now ready to start using Asphyre
Sphinx.

Page 30
Pascal Gamer Magazine
From PGD Annual to IGF: Tuberunner

A
SPECIAL REPORT
t the end of 2009 the PGD Annual Game Developer's Competition came to
a close with it's winner and their chance to win it big at the Independent
Games Festival. We here at Pascal Gamer decided to keep an eye on
Nathan Schagan as he takes his game on a journey from the PGD Annual to the IGF.
Read from Nathan's own words how it has been going so far!

2009 PGD Annual: Then there was a big gap because I started at
university. It took me three weeks to get started and
adjusted there. If I had made a schedule with deadlines,

Tuberunner Post Mortem this definitely would have knocked it off the table. Believe
me, don't go to university when you're in the midst of a
game project. Of course I'm just kidding, but it wasn't easy
Summary to do.
When I had things up and running in Amsterdam, I
It's been a while since the competition results were shifted my focus towards the game project again. During
announced. I was very happy to learn that I had won October, I was still working on technical features like text
with my entry: “TubeRunner”. Now is a good time to input and an XML parser. I also had a lot of problems
look back on what happened during those preceeding fighting floating-point errors here. These were an absolute
months of hard work. It wasn't all easy and fun. To be pain in the butt and made the game unplayable. However,
honest, a lot of things went wrong. Here I'll share with good things were still happening as well. I had even wrote
you my success, failure, fun and the things I learned, a neat menu system for the game too.
during development. Suddenly I found myself halfway through November
and then the stress of the competition really kicked in. I
In June, I was very excited to hear that a PGD Annual had made some wonderfull race tracks with power-ups and
2009 competition was being organized. I always wanted to working collision detection. There was a menu in the game
make a race-game so I started making a design document. now, but still there was no gameplay yet. I worked really
The game I had in mind was actually a race-game with a bit hard to squeeze in some proper gameplay in there before
of combat gameplay in it. Unfortunately I didn't have the final deadline. Often, I found myself staring at buggy
enough time to add the actual combat part. collision detection code at 4:00 AM, of which I thought
The racetrack-concept was something I found essential, would never work properly.
so I've put a lot of time in it. I thought that my idea of
racing up the walls and ceilings would make it a bit more
innovative. Also there should be obsticles to dodge.
Actually, making such a race-track would be really hard, so
I wrote two DeleD plug-ins that helped me with this. They
allowed me to make prefabs and copy/stretch/bend them to
form a new track. Bending those prefabs into place was
especially mathy. Still, I pulled it off.
Development didn't go as quick as I'd hoped for. This
was because I was working on many different things at the
same time. There was the engine, the game and then two
different DeleD plugins that needed to be programmed. I
started working on the engine in July, according to my SVN
log. Strangely, the development of the engine went rather
quick at first. It took me two weeks to get an OpenGL
renderer working. Then I went on a holiday or two and I
was suddenly in August. During the holiday, I did a bit of
work on the game too because I decided to bring my laptop
with me.
In August, I started working on the race track building
plug-ins. It took a few weeks to get them working right.
This should've gone a bit faster.

Page 32
Pascal Gamer Magazine
What went right.
One thing I was really satisfied with, was my menu system.
I wrote a game-state class that described a state of my
application (gameplay, loading, main menu etc..). After
adding a few derived classes and a lot of menu-controls like
buttons, selectors, edit-fields and such, I had a really
flexible system. With a few lines of code, I could set up a
new menu and attach a few event-handlers to it's controls.
Making the content (aside from the racetracks) didn't cost
me much time. I have a whole collection of sound effects
and I picked a few of them for my game. Also, I did the
voice-over sounds in Goldwave. Those required some extra
attention, but the result was quite nice.
I've also put quite some effort in the appearance of the
What went wrong. powerups. Making the models was easy, but rendering them
in the right way was not. Fortunately, I ended up with some
First of all, I put way too much time in the racetrack code. I very arcade-ish semi-transparent powerups on my track.
figured that I could do the collision detection myself, so I I used DeleD for this project. Allthough I was having
defined a few complex coordinate systems to do the math problems here and there, DeleD proved to be quite usefull.
in. A lot of code depended on this math. I foud out that It allowed me to customize the appearance of the racetrack.
floating-point errors were ruining my plans. It was I did this with the “Pipe of pipes” track and it looked
neccesary to rewrite this code a couple of times to make it awesome. Also the built-in lightmapper was great. The
more reliable. In the end, I managed fix most problems, but lightmaps with the coloured lights really added atmosphere
the time that went into this was forever lost. to my game.
At first, I didn't properly define the conventions for my
track format. It's important that you think about this because
otherwise the different parts of your program will interpret
your data in different ways. It wasn't that hard to fix though. Despite the fact that I've won the competition, I feel that I
I decided to program the game-engine by myself. This was made a lot of mistakes during the project. Most importantly,
challenging and fun. The only downside was that it I was focusing too much on the racetrack instead of the
distracted me during the development of the actual game. gameplay. Also, I wanted to re-invent the wheel all over the
For example: In August I was still working on loading TGA place. I should have used a physics engine and I should
Images, lightmaps and rendering particle systems. have aimed for simpler racetracks. These things soaked up a
I used DeleD's XML-based format to load the tracks into the lot of my time. I didn't manage to add the combat part of
game. This caused a lot of overhead because the file of an my gameplay.
average track was huge and it took a lot of time to parse all Also, there were some unavoidable things that delayed my
the XML when loading it. From now on, I will be using development, like university and a holiday. They consumed
simple binary model formats because they load a lot quicker. at least one month from the five months I had for this
Halfway the project, I realized that DeleD didn't have local- project.
coordinate systems for their objects. Everything was defined Still, I'm very pleased with the overall result. People said
in world-space. This turned out to be a real problem. It nice things about the graphical detail, the clear menus and
appeared that I really needed this feature, to make sure that the sound effects I used. Also, the IGF offers me a second
the track pieces are properly aligned. I kinda solved it with a chance. I really hope that development of the new
dirty and unreliable hack. This had some implications on TubeRunner will go smoother. So far, I'm quite confident
how I should model the track pieces. It made designing that I will get there.
good race tracks a lot harder.
Finally, I didn't properly use the design document I wrote - Nathan Schagan
before starting the competition. I feel a developer should 1st Place, 2009 PGD Annual
often read his design documents to keep an eye on his
progress. I occupied myself with a bunch of technical
challenges while neglecting my goals in the document.

Page 33
Pascal Gamer Magazine
From PGD Annual to IGF: Tuberunner

That said, I'm not really happy with the development


speed. Right now, I'm two weeks behind on schedule. I feel
that I was being too optimistic when I first made my
planning for the project. The final deadline for my engine is
20 june. I do have time during June, but I'm not sure if it's
enough to actually finish. If I throw alot of juice at it, I may
be able to pull it off.
Also, I started working together with Paul Nicholls on
Path-functionality in DeleD. At the moment of writing this,
we are well under way. Still, there are very important things
that need to be done, and I forsee that there will be a
number of bugs waiting for me when I'm done.

28 May 2010
May is almost over now. I should have started this
journal earlier, but I real life distracted me.
I started working on the new TubeRunner in April. The
new engine was first on my list. My aim was to make the
engine cross-platform, using SDL and OpenGL. I allready
had a working OpenAL module, that just needed to be
refactored a bit. Also, Input wouldn't be too difficult with
SDL.
I made a plan for my engine-project and then I started.
The first thing on my list was input. This wasn't a
problem at all, and it was done within a week. I also made a
small test project for the input part. It seemed like a good
way to test my functionality and see if my own API works
and looks nice in code. I decided to make a test project for
every part of the engine.
Next, I started working on the graphics part. Progress
9 July 2010
slowed down considerably, because I had some exams
During the passed month, I have made quite some
coming up. Fortunately Luuk van Venrooi helped me a lot
progress, but still not as much as I had hoped for. I'll give
by sharing the sourcecode of his shader-driven. I took a
you a quick summary of what happened:
close look at his code and used the things I liked in my own
First of all, I was unable to finish the engine before 20
engine. Somehow it felt awkward because there wasn't a lot
June. Infact, it's still not finished. I was too busy with a
of room for improvement. I could aswell just use his engine
JAVA program I had to write for a homework assignment. It
for my game. The thing that kept me from doing this, was
seems that my planning was not realistic. However, I still
my learning goal. From my perspective, reinventing the
finished some important features.
wheel can be justified when you're goal is to learn how
I've managed to load wavefront OBJ models into my
something works.
engine. This was a big breakthrough and it made me more
Thanks to his help, I quickly got GLSL shaders
confident that I could pull it off. Also, I've got texture
working. The game will be totally shader driven, so this is
support up and running.
definitely a relief.
First of all, I wanted to use my own TGA code
I have some doubts about how to look at this project.
(actually I stole it from sulaco.co.za haha). But I realized
First of all, I want it to be finished on time, but secondly, I
that it contained a piece of assembly which could not be
want to learn some things that I feel are important. For
compiled by FreePascal. So, I decided to use the vampyre
example: Learning how those matrices work and learning
imaging library instead. Luuk van venrooij pointed out that
how to program shaders.
it was easy to configure an *.inc file, to cut down the
The best way to learn matrices is by reading articles
number of Vampyre units that were needed. I ended up only
and taking a close look at the matrix routines that you use. I
needing 9 units. Given the great quality of the code and the
found this to be very interesting, but also very time
documentation of the library, I was confident that this was a
consuming. That last part worries me because time is my
good choice.
main enemy in this project.

Page 34
Pascal Gamer Magazine
Before June ended, I managed to squeeze in Fonts as
well.
I noticed that one feature to the engine usually takes me
an afternoon to implement. After that, I still need time to
test and improve things. Knowing this, It's quite clear that
my initial planning schedule was unrealistic. I planned
about three features a week, while I was still doing school
work and other projects as well.
Implementing paths into DeleD came to a grinding halt.
Paul was very busy with real life, and I was not motivated
enough to take the next step. Still, we are both determined
to finish the things we started.
This week, I solved some major problems on linux that
were preventing me from running my engine demo's. First
of all, there was the “Invalid launching application” error.
This was caused by the fact that I stored my code on an 9 October 2010
NTFS drive that was shared between windows and linux.
Because of an error in a configuration file, the files on the A lot of time has passed since I wrote
drive were owned by the root-user and could not be my last journal. Unfortunatly I didn't make a lot of
executed by Lazarus. progress. The main reason was that I had other projects to
After fixing that, I ran into an “X11 driver was not work on, which are progressing nicely now.
configured with OpenGL” error. This was because I during During the last three months, I started to realize that it
the compile-process of SDL, it could not find an openGL would be impossible to finish the game before November
header file, thus skipping all OpenGL related code. Making 2010, which was the deadline for the IGF competition. To
the file available and rebuilding SDL solved the problem. I cut myself some slack, I have decided to aim for IGF 2012,
feel that making the game run on linux is possible now. giving me an extra year. Also, to make sure that I won't
Finally, I'm working on a rendertarget-support. This is make the same mistake again, I have made a little schedule
essential if you want some good visual effects in your for this project.
games. Luuk van Venrooij also helped me here by sharing Each month I will try to implement some features in
his sources and by giving valueable advice. I don't have it my engine or game. At the end of each month, I will look
working yet, but it won't take long. back and see what worked and what did not (and possibly
It's time to reassess the whole project. Hopefully I can write a journal about that, to keep you guys updated). I will
finish the engine quickly and move on to the actual game. also discuss things with Christina a.k.a AthenaOfDelphi, to
My hope is that the last three months were well spent and make sure I don't focus on the wrong things.
that I will have a reliable engine that doesn't distract me So, what's in store for October?
from working on my game. I'll mainly work on my engine this month. First of all, I
want to move the whole project to the GIT version system.
I've learned how to work with that during the last months
and I can use it in both windows and linux, which makes it
perfect if I ever want to go cross-platform, which is quite
likely.
Also, I will make a scene graph. This will be a really
simple thing, which only contains the stuff I need.
Finally, I need to do some refactoring, as I have
discovered that I'm using the wrong approach here and
there in my code.
No spectacular goals for this month, but they ARE
realistic!

- Nathan Schagan

Nathan Schagan's Tuberunner development journal will


continue in the next issue of Pascal Gamer!

Page 35
Pascal Gamer Magazine
Ludum Dare 17

T he Ludum Dare #17 competition was held from April 23rd to April 25th, 2010 and having 204 total entries submitted by
the deadline. The theme of the 17th competition was Islands. A total of three Pascal entries were submitted before the
deadline. The competitions are plot-based challenges to make a game that fits the chosen theme. Development timeframe
usually takes place over a weekend, giving entries only a couple of days, 48-hours to be exact, to create and submit their games.
Entries can be submitted only by individuals, no teams or group development is permitted as per the Ludum Dare rules.
The Ludum Dare community was founded by Geoff Howland, and held it's first competition in April of 2002.

A Practical Survival Guide for Robots Still, this is the most finished LD game I made yet, you
Post-Mortem by Johannes Stein actually have around 20 minutes of gameplay. Well,
allright, that depends if you are exploring the world,
Personally I didn’t like the theme that much. First of all, building stuff or just focusing on the goal.
because I used islands in my LD #16 game, in several other
prototypes and couldn’t really find an idea that would be The Good
different from them. I had several ideas in my head, such as • Graphics & Music: Of course it could be better and the
“You are the island”, some kind of Project Nomads game in graphics are not 3D, but for the time invested it’s fairly good
which you have a floating island, build towers on your • Luck: I had so much luck during development. I had to
island and battle other islands, a RPG-like game where you modify some core parts of my framework and was getting a
go from island to island solving different quests and finally lot of Access Violations and cryptic messages. If I hadn’t
the survivor idea. found the error in time, the game probably wouldn’t have
I went with the latter because I thought I can pull that been submitted
off in 48 hours. The plan was to make kind of parody game, • Technical design: I designed classes and the gameplay
I don’t know if you can already tell in the status the game is elements very early in the developmen process, so it was
now in. I planned a nice little intro, where you definitely get more or less loading an displaying the graphics accordingly
the idea that the game doesn’t take itself too seriously, but it and seeing if it really works like expected
got cut due to lack of time.
The Bad
• Motivation: I don’t know why but I was not that
motivated this time, only in the last couple of hours the
motivation to finish the game was back
• Humor: I was planning to add more humoristic elements,
but the time wasn’t enough
• Scripting: I was planning to script an intro, instructions
and credits screen, but again not enough time; so there isn’t
actually any scripting in the game

What I’m planning to do for next time?


• Extend my base code/framework: I especially need a
camera class and something to manages maps that are
bigger than just one screen
• Integrate a level editor into the base code or write one
myself

All in all, it was fun as always :) and I can’t wait to play all
those games.
I nearly spent the complete first day on graphics and I
could have been more productive. The most productive time
for me was the last nine hours before the deadline. The
actual gameplay got finished the hour before the deadline,
so there wasn’t a a lot of time left for playtesting.

Page 36
Pascal Gamer Magazine
Isolated Empire current version of the game lies: it is a hard task to achieve
Post-Mortem by Matt Shaffer within the short time frame. Currently, I have the time
capped to maximum of 1 hour, after which the game will
end. This is not enough time to complete the goal.
But unfortunately, giving the player more time to
complete the task won't help much. What I need to do in the
future is create different difficulty modes, preferably
lowering the costs of the raft as well as lengthening the time.

Does all of this gameplay sound complex yet? The


villagers are the main driving force behind the gameplay.
Without villagers, you cannot collect any more resources,
Joining a Ludum Dare is always an exhilarating experience and will lose the game over time (because villagers are
that will drive any sane man to his breaking point. Creating constantly consuming, even when not working).
a game from scratch in 48 hours is more than daunting. It all I now want to tie in this complexity with a reminder of
begins with the theme and an idea for a game. the competition: one man, 48 hours, creating everything
Ludum Dare #17's theme was islands. While I did from scratch. On Saturday I spent most of my time creating
initially vote for this theme, when it was chosen I had no the actual drawing and procedural island generation
idea what I was going to create for a game. First things first: engines. I made it extensible (thankfully), but it took way
start doodling or writing out ideas. There is no need to write too much time for this competition.
a fully-fledged design document for a game with such a When developing in such a short amount of time, it's a
limited time frame. After I had a few ideas down on paper, I better idea to create at least some kind of placeholder art
decided on a game concept based on an old game I had while the core gameplay mechanics are fleshed out. I
played as a child. In this game (which I sadly cannot recall skipped this and went directly to final art (which is still
the name of), you are stranded on an island and must collect nowhere near “good”), which ate up even more of my time.
resources to build a raft and escape. But we can't just leave this at programming and
Now I had a basic idea, but I wanted to expand upon it creating art. Entrants still have to create all of their own
a bit more than what I could recall of the original game. In sound effects and music to go along with the game. Luckily,
the original game, everything was turn based. The player DrPetter (from Ludum Dare) has created a simple program
was just one man, collecting everything by himself. Here's to generate simple sound effects. Yet even with a handful of
one of the key points I used in twisting the gameplay every sound effects, it can be hard to tie them all into the game –
so slightly. Instead of just one man, I incorporated elements something noticeable in the current iteration of Isolated
seen in other real time strategy games, including villagers, Empire.
housing, and cities. Creating music can be even more challenging. Luckily
What's important to note is how added a slight bit of for me, I can pick out tunes, chords, and notes that I think
management to the villagers. Every villager will consume a sound good together. The downside is that it takes me a
small bit of water and food after a certain period of time, very long time to get a finished product I am satisfied with.
and it is up to the player to make sure the supplies are high For my entry, Isolated Empire, I created a single track that
enough to support the population. As the islands (they are was 24 seconds long and looped rather seamlessly, as well
procedurally generated) contain no natural food sources, the as utilizing only 2 instruments. This in itself took an hour to
player must quickly create farms and send off villagers to an hour and a half of my time. It's OK to prioritize and
harvest them. decide music should go in last. I used Anvil Studio to create
The end goal of the game is to gather enough resources the base MIDI music, but it didn't seem too fitting. I
to afford building a raft to leave the island with your proceeded to run the output through another program
villagers. Unfortunately, here's where one flaw with the named GXSCC which converted the MIDI into an 8bit
wonderland.

Page 37
Pascal Gamer Magazine
Ludum Dare 17

To participate in a Ludum Dare, you really must have • Read and comment on others' progress, as well as chatting
the right frame of mind. You will undergo massive amounts in IRC. It really is a motivator for people.
of stress and frustration with programming alone, which is • Don't spend too much time on music, or any one resource.
why many entries are lacking sound effects and music. • Focus first on gameplay, and secondly on graphics, music,
When I enter a Ludum Dare, the only motivational force I and sound.
have is the desire to complete the original game I had • Know your libraries ahead of time, and do not attempt to
created in my mind's eye. Whether the game is a simple 2 use any new library.
hour quickie before you leave to go somewhere, or a full 48 • Playtest like crazy. You don't want a buggy product.
hour mess, you must plan accordingly. You certainly can't fit • Take time to post screenshots and progress updates, but
in all of the gampelay elements you would have desired. It's not actual builds. Creating alpha builds of a game you have
OK to save updates for later. After the competition, it can be to make in 48hrs is too much of a waste of time.
refreshing to come back to your project and fix it up to Screenshots and some info is good enough. Also, this
cover all of your extended goals – and this is exactly what I applies to creating videos of your alpha game. Save your
plan to do. desire to create a video for a final gameplay video or
Motivation is key. Without motivation, you have timelapse.
nothing. You'll end up hating your game idea or not being • Comment your code. It's hard remembering what that
able to work on your game, and you will scarp the project. mess of horrendously named variables is supposed to do.
This is always a saddening experience, and something I • Don't focus on pretty code. You have 48 hours. It doesn't
hope I will remain avoiding. With only 2 days to create a matter how ugly it is, if it compiles.
game, it's in no way a long term commitment. For
motivation, I browsed the website at ludumdare.com and
idled in the IRC channel. Even though these activities may
have ranged from 5-15 minutes in length at a time, it really
helped boost my motivation to finish my game. But beware:
unless you are careful, this can easily turn into a large
timesink. With 48 hours, you will often find all too late that
you needed most of that time to create the dream game you
had first envisioned, instead of having the luxury of
squandering it.

One final note for entering in Ludum Dare is that your


game will NOT work on all systems. You shouldn't expect it
to. For instance, some people have trouble with my game
not loading or otherwise not starting. I'm fairly sure this is
either due to Andorra's collision system or perhaps these
people were running a 64 bit OS that didn't like my 32 bit
executable. The only other problem people seemed to
experience was an access violation when they tried to start
the game. To be fair, this was a bug and I have fixed it in
my post-competition version of the game... This error
General Ludum Dare Tips: occurs when users try to send any input to the game while it
is loading.
• Don't let yourself become distracted too much.
• Plan breaks of half an hour or more.
• Clear the weekend of obligations ahead of time. You can visit the personal website of Matt Shaffer at
• Decide how long you expect the game to take, and make www.matt-shaffer.com.
that as a goal.

Page 38
Pascal Gamer Magazine
Other Stuff from the Competition His original game idea looked to be more of a RTS game
where you chose to be on the side of killer robots or
Alexander Rosendal aka Traveler made an attempt for an powerful lizard men. A much cooler concept if you ask us!
entry into the competition having gotten as far as It's a shame that time and planning was not on his side, but
implementing a river scene with some objects, logs and a alas at least he did get an entry in before the deadline.
speed boat, and some graphical effects. He did not submit Maybe we still have a chance to see his original idea come
what he had done to the competition as he felt it was to fruition? We can only hope.
incomplete, however he did post a couple of screenshots on
the PGD website. Here is what he shared.

There were others that wanted to jump into the Ludum Dare
as it seems to be growing in popularity. Paul Nicholls
JSoftware aka Laksen made his entry but it was not the wanted to make this his first dive-in to the Lundum Dare
game he originally intended to do. Instead he opted for a but he just didn't have the time. A few others were in the
simple platformer, however it seems that his plans were same boat we can easily assume. These types of twenty-
made too late as it turned out to lack a true gameplay goal four hours, forty-eight hours and one or two week
and the overall polish you'd expect from even an indie game. competitions, if you can make the time for them, are neat
and push the gameplay and design more so than content,
which is kinda nice because it gives you some innovative
ideas. The other nice thing about this one is that it allows a
hosting place for your game's source. So if someone liked
your game and wanted to tweak it or learn from your code,
it's easily down. Just download, gather the libraries and
tools needed and you're off!

- Jason "WILL" McMillen


Pascal Gamer Magazine

Competition #17's Results


To see the full LD#17 results or look at past competitions Isolated Empire
visit www.ludumdare.com! http://tiny.cc/kvxv4

A Practical Survival Guide for Robots Overall: 22nd Place


http://tiny.cc/pmlir Coolness: 3rd Place (19-way Tie)

Overall: 54th Place (8-way Tie) Ferry Catcher


Audio: 14th Place http://tiny.cc/8x5fo
Community: 12th Place (Tie)
Coolness: 2nd Place (5-way Tie) Overall: 112th Place

Page 39
Pascal Gamer Magazine
Aesthetics of Music in Video Games

M ichal is a programmer, musician and owner for his company, Gamecask. He does his
own music for all of his games instead of contracting music from other artists. He
finds that it allows him to have greater control over the effect that the music in his
games than if he offered out this job to others. Read what he has to say about the aesthetics of
music in games.

M usic is a subject that is rarely discussed in the As for music in video games, I am an advocate of
articles about game development, although is minimalism. It is a good solution, especially in dynamic
very important. Music is of particular games with a large number of sound effects. For example,
importance in the case of casual games, because we need to in my last game Dachinko, I prepared about 150 sound
create a pleasant mood and we need to be stick to the theme effects that can be played by the collisions of 10 balls with
of the game. I do not want to write, in this article, about the all elements of the game machine. It really generates a lot
techniques of creating music or software used, but to talk of sounds and they could be in conflict with the music with
about the aesthetics of music in video games. a large group of instruments. Therefore, I try not to use a
Listen... if music is compared to the shape, the more we large number of instruments and I do not compose a
like this track, which had not previously seen. Our brains complex melodies. What's more, music in the Asian culture
want to meet with new musical shapes, new solutions and have the characteristics of minimalism and this culture has
new impressions. been my inspiration for this game.
I urge all, especially to creative developers to try to
start making music for their games. It's great fun and gives
"The impression is the beginning great satisfaction. I could write more, but like Bruce Lee
and the first condition for aesthetic said:

satisfaction. It creates the basis for


"Knowing is not enough, you
this feeling." ~Eduard Hanslick
must apply. Willing is not
You must be noted that all good movies start with the best
soundtrack, and this is the beginning for good feeling. We
enough, you must do."
must do this same in our games!
- Michal "mobilus" Bugala
Programming and music composing are very similar - Company Owner, Gamecask
every mistake has huge implications. If the graphics can
commit an error and could no one notice, so in music it is
recognizable immediately - the listener understands music
in real time and does not need time to think about it, as is
the case for example in poetry. What's more, each of us is
the best judge in matters of music and can pick up any
discordant note from any bad music track. We're all
musicians, but not everyone from us knows that. Therefore,
I think that good music and well-written program is the
most important elements of the game... more important than
graphics.
I am not educated in music, but I think nobody will
give us an algorithm to compose beautiful music and
nobody will teach as the musical sensitivity. However, it's
worth talking about music and read about music, because
when you sit down and begin create, you will not have a
vacuum in the head.
I think that sensibility, life experiences and knowledge
are the key to becoming a good composer, and if we talk
about knowledge, I highly recommend reading the book by
Eduard Hanslick called "On the Beautiful in Music". It's a
great read for everyone, not only for music students.

Page 40
Pascal Gamer Magazine
2009 PGD Annual, My Experience

P aul Nicholls wrote us an email at Pascal Gamer


Magazine sometime after the completion of the 2009
PGD Annual Game Developer's Competition to let us know
how his experience went. After coming in second place in the
competition he has gone on to other projects, but anxiously
awaits the next competition. Here is what he had to say about
his Arcadia entry and what he thought about the competition.

so I think this was a good thing. Seeing the progress of


other competitors did help a lot in keeping me motivated
though, so yay! There were other times where I was coding
furiously without taking many breaks (in what little spare
time I had around work + family LOL). Luckily, I had
already some helper classes/units like a basic SDL +
OpenGL application framework I could use as the base, and
some other things like texture loading, and state machine
classes (which I hadn’t used for anything up till this point).
Sites like http://www.pascalgamedevelopment.com,
http://nehe.gamedev.net, http://www.gamedev.net, and a
whole bunch of others really helped me figure out how to
get different things working with my coding.

I’m not sure what I would do differently next time, but I

W hen I saw last year’s PGD Annual theme was to guess, better time and priority management for one! It was
write an arcade game, I was thrilled, I love lots of fun, rewarding, and I won some really neat prizes to
arcade games! Luckily, a few months prior to boot! LOL
the start of the competition, I had come up with a game
idea, but as with lots of my ideas, I hadn’t started the - Paul Nicholls
project. So I figured this would be a perfect excuse to get 2009 PGD Annual Competition Winner
off my butt and get into it. The idea was to have the Earth
in the center of the screen, with asteroids coming towards it
which you had to destroy (and thus “Day Of Destruction!”
was born!).

When the competition came around, I got stuck into the


design document first as stipulated by the stage 1
competition rules. This was quite a new experience for me
as I usually don’t do design documents for games, or any
programming project, I am one of those “get stuck in and
start programming” kind of guys LOL. I’m glad I did
though as it did help me stick to my game idea (which was
mostly unchanged by the end of the competition), and even
stay motivated to an extent.

During stage 2 of the competition (creating the actual


game), I did at times find it hard to stay motivated…at one
stage, there was a period of almost 2 weeks where I hadn’t
done ANY coding for it (bad boy Paul!). Maybe this was
because of the long time frame of the competition, but if it
wasn’t this long, then I wouldn’t have completed it anyway,

Page 42
Pascal Gamer Magazine
Game Reviews

W e will be looking at a few new games along with a scored game and not highlight it's distinct strengths compaired
few hidden gems alike in this issue. You should to the other game.
know that all of these games have been played It is our hope that you enjoy these reviews and find them to
through thoroughly, reviewed and scored by randomly selected be informative, but most of all entertaining. A url is provided
people and not by all one author. Our goal is to provide a for each game where it can be downloaded or more information
totally unbiased and fair assessment of all games covered in our can be read about it.
reviews.
Pascal Gamer Magazine's rating system is used as a criteria If you have your own completed game or wish to
to score areas of the game along with the game as a whole. Not submit a url to a released game which you know to be made
all games are equal and so it would not be fair to simply just using either Pascal or Object Pascal, please drop us a line
throw up a single one-to-ten scale score and have an equally at: contact@pascalgamer.com. We would love to hear about
it!

Pascal Gamer Rating System


Graphics Game Controls
(Visuals & Special Effects) (Easy of Use & Dependability)
9 - 10 Great
Sound Replay Value
7 - 8 Good
(Sound Effects & Musical Score) (Addiction & Varied Gameplay)
5 - 6 Fair
Fun Factor Overall Score
3 - 4 Poor
(Overall Enjoyable Experience) (Overall Impressions) 1 - 2 Bad
Wicked Defense 2 nice feature. There is some on-screen
http://www.ixchels.net/ assistance at the beginning of each map,
but a small tutorial on the tower types
Price: $9.99
Genre: Real Time Strategy
and basic strategy would help
Developer: Ixchel Games newcomers to the game get started
Platform: Windows easier. Overall a solid release worthy of
the 2.0 label. Try the free demo for sure,
Another trip into the wonderful visual it's a wonder to see.
effects latent world of Wicked Defense.
The object of the game is to prevent as that regenerate slowly. This is one of
many monsters from crossing for their those games that has a level of
entrance to the exit. You have a life complexity that has a lot to learn and
meter that goes down when each one makes it hard to master, which is great
makes it to the exit, until it reaches zero for those that like strategy games that
and your game is over. Score as high as give you a challenge. The key to winning
you can and build up your defence each scenario is balancing your tower
towers to fend off as many of the abilities with the monsters that will be
monsters as you can. You can even cast passing by next. Graphics and special

9 7
magic attacks using your mana points effects are stunning and the ambient
music is nice too. Lots of polish and
shine to the interface which drives this

7 8
title. Controls are pretty good leaving
only a few things that I'd like tweaked.
There is lots of content that can be

7 7
unlocked by completing future scenarios
which greatly adds to 'come back and
play' value. Online highscores are also a

Page 44
Pascal Gamer Magazine
Sultan's Labyrinth: A objects and use them in specific scenes
Royal Sacrifice to continue on in the story. The graphics
http://tinyurl.com/2dbqr7a are very nicely drawn and details with
beautiful special effects that add the right
Price: $6.99 touch to each scene. Music is nicely
Genre: Hidden Object Game
Developer: BrutoMemo Entertainment
themed and pleasant to take in. Controls
Platform: Windows are rather simple, but effective in the
gameplay. A very smart feature that takes
your cursor away and shakes it when you
try the old rapid click cheat to find
objects your looking for. Cutscene story
to the gameplay nicely. The hint option
panels in between the game stages are
with it's slowly replenishing gauge is
great and have a wonderful in-depth
also a welcomed relief when you are
story to tell. Being able to switch
struggling. An overall very nice
between a selection of scenes at each
adventure with a great story and cool
stage and use objects between them adds
gameplay features.

In this arabian sequel the son of the


sultan who has been trapped in a
8 8
8 6
labyrinth by a powerful genie owned by
his father. You must now pass his trials
to get out alive for offences caused by

7 8
your father. This game is a mix between
a hidden object game and a classic
adventure game where you must find

Jawbreakers Return! you eat the Jawbreakers too, but if you easy to use, however configurations
http://www.fingerspoil.com/ can't get to one of those you have a options are limited to only changing the
selection of attacks that you can use to direction arrows. A fun game overall that
Price: $14.95
Genre: Maze
take them out as well, such as your green could be picked up again and again for
Developer: Fingerspoil Games chili breath. You try to collect fruits and it's modernized take on the classic maze
Platform: Windows other special pickups as well to increase genre.
your speed, get extra weapons, save a
A very polished and feature packed checkpoint, unlock gates and block or
release with a cute theme. Graphics are slow down the Jawbreakers, but be
clean and the special effects are really careful not to run into those trick pickups
good. The game is very much like the which will either make you drunk, slow
classic maze games of the 80s. You are you down or get you stuck on the spot in
one of the Jaw invading the Jawbreaker a nasty oil slick. The Jawbreakers are
planet trying to eat everything up. In cute enemies that come in a variety of
doing so you must collect all the green different shapes and even parachute
dots around the map without running down into the maze to add more danger
into a jawbreaker. Bigger red dots let to your task at hand. Music is fairly
decent, but there is mostly only the one

7 6
track you hear while playing. Level
progression is pretty nice offering new
challenges as you go along. There are

6 8
two modes, Story and Arcade modes
which offer varied gameplay for
whatever mood your in. In story mode

8 7
there are some pretty neat bonus games
such as catching fruit shot out of a
volcano. Controls are responsive and

Page 45
Pascal Gamer Magazine
Game Reviews
UltraStar Deluxe glitches and some added initial startup
http://www.ultrastardeluxe.org/ options for the microphone would be
nice too. The game overall is very
Price: Free
Genre: Party
polished and has many themes to choose
Developer: UltraStar Deluxe Team from allowing you to personalize. The
Platform: Windows, Linux, Mac OS X voice detection is pretty neat too and it
even allows you to see your voice
Music games can be a hit or miss visually displayed with an onscreen you have done. Overall a nice well
depending on the execution and the
polished and put together game engine
ability to get contracts and the rights to
which has a potential to become a hit at
known popular music. However this in
parties. Graphics and animations are
mind, this one stands out as a great base
beautiful and suit the atmosphere for a
for building up to that with a good solid
fun time. More music bundled or song
karaoke and voice detection engine
downloading options right from the
inside. Menus and options are very
game it's self could be an excellent next
impressive leave only a few minor visual
feature. Nice job keep up the good work!

oscillator you can toggle on and off.

8 7
There are two modes of play Single
player sing or Party mode which adds
more people to the mix. As you go along

8 9
and sing it gives you little indications of
how well you did on that last portion of
the song. When you or you and your

8 8
friends have finished the song and your
singing session, you are greeted with a
results screen which shows how well

Soldat while also maintaining a very high Capture the Flag, Infiltration, Hold the
http://www.soldat.pl/en/ quality in environmental effect. Sound flag and Rambomatch each with their
effects are fairly accurate to actual own set of rules and winning conditions.
Price: Free
Genre: Adventure
weapons fire and are of rather good Soldat is great online shoot-em-up fun
Developer: Michał Marcinkowski quality. Network play is smooth and is with and recommended for anyone
Platform: Windows very stable. Your controls are the mouse feeling a little trigger happy.
to aim and fire and use a jet pack to fly
and the 'wasd' keys will let you run,
crouch and jump. You can choose from
several different default weapons at
respawn, but there is other weapons you
can pickup and ammo drops you can
pickup to restock on the run as well. Plus
you can throw grenades, fun! There are
quite a few game modes such as
Deathmatch, Pointmatch, Teammatch,

8 9
This is a game of mass side scrolling
slaughter addiction. Made with the same
flavour and gameplay style of the first

7 9
person shooter deathmatch genre, this
side scrolling shoot 'em up is all about
the deathmatch. You can take on players

8 8
from all around the world in teams or in
a full free-for-all cabal. The graphics and
animation take on both an indie charm

Page 46
Pascal Gamer Magazine
LambdaRogue: The Book main map screen. The inventory screen
of Stars is very intuitive and allows you to
http://www.lambdarogue.net/ perform many useful actions. A well
structured dungeon crawler for gamers
Price: Free who love old school RPGs and good
Genre: RPG / Roguelike
Developer: Mario Donick
storytelling.
Platform: Windows, Linux

This was quite the enchanting RPG


engine with an old school gaming feel.
The story is rich, well written and quite
in depth. Though simpler than most RPG do much of anymore. Graphics were not
games of today's standards, it keeps the overly spectacular, but they served their
player's interest through it's story telling purpose and were not all that bad really.
and verbose interaction options, which is Some special effects also helped to tell
something that not too many RPGs today what was going on when specific
reactions took place with the player's
own actions. Music was very good and

6 7
of a professional quality and it helped to
keep you in the right frame of mind and
mood while playing. Sound effects were

6 6
also endearing of the classic RPGs years
ago. Controls were simple and were
without problems. The interface is well

8 7
designed and has all the vital
information needed to let the player
know how his character is doing on the

Demonic Saga the game and the instructions are after all would have gone into it should it have
http://markuss13.narod.ru/ds/ in Russian so some English translation been completed. Would that it have been
wouldn't hurt. Controls aren't completed, it would have been a pretty
Price: Free
Genre: Platform
documented well and are a little hard to neat game with a very cool theme.
Developer: Markus_13 work with. Too much scrunching down Perhaps this game engine will spawn a
Platform: Windows on the left half of the keyboard and not new game project.
configurable at all. Dual mode game
Sadly this game was not completed and play is pretty neat, but the AI lacks in the
polished up more. Graphics are simple, ability to chase or follow the player and
yet clean and some places small, but often ends is the same face-off at the
they're well themed and quite well done. bottom of one of the maps. Being able to
Music is fantastic and adds a lot of select different dual maps is also a nice
excellent feeling to the game. Special feature. Some story would have been
effects are pretty cool too. The goal of nice to read as I played along. The game
the story mode portion of the game is to unfortunately is only a discontinued beta
collect all the gems as far as we can tell, and lacks much of the gameplay that

6 5
8 2
4 4
Page 47
Pascal Gamer Magazine
Game Reviews
Alexland game modes or some other goal than a
http://www.svgames.pl/ high score, which was nice to have
though. With bigger game sprites this
Price: Free
Genre: Top Down Shooter
game would be a great start to a game
Developer: Super Vegeta that could have been picked up and
Platform: Windows played over and over. Good engine!

A decent top down shooter game using


familiar graphics. Interface is attractive,
clean and easy to use. The game is fun
however due to some difficulties with
fullscreen mode on bigger screens, display well regardless, they just really
mouse controls and being able to see the small. Music suited the game and added
characters well enough can be a some excitement to the game. Sound
problem. Some minor glitches on large effects were pretty good, but some of
screen displays, however graphics did them were a bit odd and seemed out of
place. There were some neat features in
the game such as the different weapons

6 5
and power-ups you could pickup
dropped by dead monsters you shot. A
kills counter and ammo until reload

6 4
display were really helpful to have along
with the obvious need for a life meter.
Gameplay though really simple has an

6 5
addictive quality which has been proven
by other titles of this genre. It would
have been nice however to have different

Last Dawn ammo, but at night the zombie hordes responsive and accurate, however when
http://www.csse.uwa.edu.au/awesome/prese come to try to take out your base. You a lot is going on on-screen it gets a little
ntation.php?id=44 start with a hand gun, but are able to find choppy on slower systems. A well
Price: Free
other weapons to help fend off the thought out and designed art piece in the
Genre: Platform / Shooter hoarding attacks at night. You can also form of a zombie platform shooter.
Developer: Scott Kerr find survivors who will help head back Worth a few play-throughs on all modes.
Platform: Windows to the base to help defend it when
attacked. There is unfortunately no
music for this game, however the cool
zombie moans and weapon sound effects
make up for this, especially at night
when things start to get exciting in the
intense rush of running and jumping
zombies coming in waves. Who would
have thought stickmen zombies could be
so intimidating. Controls are fairly

This game has a great visual quality to it,


though it's very simple by design, thats a 7 6
part of it's beauty. The goal of this game
is to survive until the helicopter comes to
rescue you and all the people you find 7 6
stranded out in the zombie infested city
scape. During the day you can explore
the city and look for weapons and 7 7
Page 48
Pascal Gamer Magazine
Drawn: Dark Flight Puzzles are very challenging, but there is
http://tinyurl.com/238m9k5 a handy hint system that will help you if
you get stuck and can't remember what
Price: $9.99
Genre: Hidden Object Game / Adventure
task you have to do next. Also should
Developer: Big Fish Games you get stuck on a puzzle, you can skip it
Platform: Windows, Mac OS X after you spend at least a little bit of time

A great sequel that continues excellent


use of colour and visual effects, all
wonderfully well drawn. Use of the
concept of drawings that come alive and
you can jump into them is really creative for someone who enjoys a good puzzler
and the back story plot is really exciting and creative fantasy adventure with
too. Amazing cinematics in between beautiful visuals. Highly recommended
major sections of the game and great to try the free demo which will give you
music to set the right mood for the game. a basic taste of the full game. Awesome
release, great game.
on it which a little meter above will

9 8
indicate. Game controls are easy to use,
except for the odd occasion when trying
to close a popup view of a specific

9 7
zoomed in spot in the scene. The game
takes place after the end of the first game
where the tower has collapsed and you

8 9
now have to go into the town to save the
little girl and help her become queen.
Gameplay is very addictive and is great

Spelunky rope and all kind of other neat items that neat. You sort of play it like you do
http://www.spelunkyworld.com/ can come in handy. Lets of course not inside the game. Climb out of the cave to
forget your trusty whip to take out those quit or go inside a door to start your
Price: Free
Genre: Scrolling Platform
nasty snakes, bats and large spiders. A game. The tutorial is very handy which
Developer: Mossmouth neat feature is the shops you can teaches you the basic moves and
Platform: Windows purchase bonus items from, just don't try gameplay. A great game for platform
to attack him or he'll shoot you dead. lovers. Highly recommended.
This small unassuming game is quite the Now for some odd reason there are
fun underground adventure. The story is women trapped down here too. Save
simple, you are an explorer searching them and get extra points, just the same.
caves for treasure and excitement. In this Graphics are simple yet charming and
game you get both, plus a whole bunch the music and sound effects are just as
of monsters and traps. Decent down nice with a good. Controls are pretty
multiple levels finding treasure and good and kept simple, you can even
items to help you explore and get out of customize them as well which is a nice
tricky situations. You can collect bombs, capability. The menu system is really

7 9
7 9
8 8
Page 49
Pascal Gamer Magazine
Game Reviews
Knight Lore atmosphere to the game. If you were a
http://retrospec.sgn.net/game/kl/ fan of the original this one may be for
you, but the game mechanics might be a
Price: Free
Genre: Isometric Platform / Puzzle
bit too simple for more hardcore gamers.
Developer: Peter Hanratty Lots of polish make this a nice
Platform: Windows showpiece with potential for more.

This is a remake of the 1984 original


which was one of the first isometric
games made. This very well polished
high-end graphics version is pretty fun,
but pretty tricky. You spend time and ghosts or other baddies that glow.
exploring a randomly generated maze of The main challenge is your ability to aim
rooms where each has deadly obstacles your jumps in the isometric perspective
that if touched will take away a life. and often time then when they place a
Some of the rooms have moving knights platform piece on top of the head of one
of these moving enemy characters. You
can pickup scattered objects placed in

7 6
specific rooms to use as platforms to
help you overcome specific obstacles.
The game's controls are fairly responsive

4
and responsive however the skewed
perspective of the isometric game space
can sometimes make determining the 6
5 6
exact location of where a platform sits in
relation to the room challenging. Special
effects are very nice and add some

Did You Know?

D elphiX was the first Object


Pascal game library available
for Windows. As history turns out, it
the current Pascal game development
community that exists today. In true
to form, pioneering fashion other
wasn't until this set of DirectX-based motivated developers eventually
visual components for Delphi, created their own game libraries to
written by Hiroyuki Hori, was improve upon DelphiX. Many were
released and posted on the internet quite successful and more have been
that making games with Object released since, but DelphiX started
Pascal or Delphi specifically became the ball rolling and helped make
as popular as it is today. In fact the what our community is today.
initial move to Windows and away DelphiX's last official release
from both DOS and Borland's Turbo was way back in 2000 and has long Hori's Book on DelphiX
Pascal compiler practically killed any since been officially abandoned. The
form of game development with the fans of the DelphiX project however, the last unofficial site for the
Pascal language at the time. just won't let go as it's been kept components on his page at
You could say that it was Hori alive through various unofficial www.micrel.cz/Dx. The original
and his innovative components from updates and installation fixes, the DelphiX components can still be
the years 1998 to 2000 that fathered UnDelphiX project and the latest of downloaded from Mr. Hiroyuki's site
the updates by Jaro Barnes who hosts at www.yks.ne.jp/~hori/.

Page 51
Pascal Gamer Magazine

You might also like