Q: What are the differences between a
regular tile based engine?
The main difference is that in a normal tile based engine the
screen consists of a grid of (normally) square tiles (movie clips)
and you often just change the frame number to update the appearance
of the tiles. By having one column and one row of tiles more than
what is visible at the same time and moving the movie clip containing
the tiles you can also get a smooth motion. It's a neat technique
that is fast and easy. The level data is very straight-forward,
it mainly consists of a two dimensional array where you store the
tiles (often just a tile number which corresponds to the frame
number in the tile movie clip).
The technique I use is a more object oriented approach (not in the sense of
object oriented programming, but how the world is defined). Updating the view
is a bit more complex than in a normal tile based engine because the super
tiles can be placed anywhere and have any size, they are not confined to a
grid pattern like in a normal tile based game. This requires that you create
new super tiles at run-time when needed, and remove those no longer visible.
You also need to have a data structure that allows you to check which super
tiles are visible at any given time without too much computation. Also, collision
detection is a bit more tricky because you don't have the grid pattern to rely
on. I have written a tutorial which
explains the method of placing and scrolling the super tiles more in detail.
Q: What are the pros and cons of using
such approach?
I think the pros outweighs the cons for games with huge levels
and where the level is not completely covered in tiles. Sylvaniah, Sonic, Super
Mario and pretty much any other jump'n run game are good examples.
But this is not something that will replace the traditional method,
they both have their uses. Role-Playing games like Luxregina's Two
Kingdoms which is a top view game where the world is completely
covered in tiles is a good example where good old tile based is
more suitable.
Pros:
- Faster scrolling for certain games
- You are not limited to placing tiles in a grid pattern, which gives you more
flexibility (and the ability to have the tiles overlapping each other.)
- The tiles can have any size
- It's very easy to create interactive elements like swinging ropes, falling
objects etc.
Cons:
- Creating a level editor is nowhere near as easy compared to a traditional
tile based level editor. But by using Flash itself to design the levels this
is not a huge problem.
Q: Did you develop the engine using a
strict OOP design?
No, it was written in Flash MX and OOP was not really introduced
until MX 2004. I will probably start to use ActionScript 2.0 in
the future though.
Q: During August 2004 you have presented
the great "Curse of Sylvaniah" preview. Can you tell us how did
it all start?
I had talked to Luxregina about possible collaboration. I had
just realeased the Sonic engine demo and I can't remember if it
was me or him that suggested that we make a game out of it. We
both fondly remember the arcade/platform game Ghouls'n Ghosts,
so that was an influence, at least visually, and we started from
there.
Q: What features can we expect in the
final version?
We haven't really talked about that in detail. There will be more
of the same I guess - more weapons, enemies and environments. I
remember Lux talked about having a level where you have to swim
under water for sections of it. I would also like to add new interactive
elements to make the game play more interesting and exciting. By
interactive elements I mean things like a bridge collapsing when
walking on it, a lever you have to pull to open something or push
an object into position and use it as a stepping stone to be able
to reach a new area. There are some examples of that in the demo,
most notably the ropes. If you've played Half Life 2 you know what
I mean, that game is full of small things like that, and many of
them utilizes the physics engine. I would also like to add more
physics to the game, but don't expect Half Life 2 physics. :-)
Q: Do you have a release date?
No, back in august we hoped we could have it finished before
the end of the year, but we haven't really worked on it that much
since. It's just a spare time project, which means other things
have come in the way. I hope we will finish it though.
Q: Can you name some of the games or
other sources that inspired you for "The Curse of Sylvaniah"?
As I mentioned before, Ghouls'n Ghosts was a big inspiration visually.
There's also a bit of Sonic in there as well, both in the level
design and in the player's movement. Another game or rather game
genre that has had an impact is the first person shooter. Most
notably the weapon aim using the mouse and the weapon selection
system with categories works very similar to games like Half Life.
Q: We'd like to know how did you proceed
in the creation of bitmap graphics. Did you start from sketches
on paper? What steps did you follow?
Luxregina did the graphics, so I can't really comment on that.
Whatever the process were, I'm very happy with the result. They
look not only good but also retro and true to the games of old
at the same time.
Q: What bitmap software was mainly
used?
Again, I'm not sure, since it was Luxregina's department. I think
he does a lot of his work in Photoshop though.
Q: How did you manage tilesets? Did you
keep everything in the library or did you externalize them?
The game uses external tileset files. I mentioned earlier that
every super tile belongs to a layer. Each layer can use its own
tileset file, which makes it very flexible. You could have one
tileset with trees, another containing ruins and a tileset with
ground tiles. This makes it very easy to reuse tiles over several
levels. Because the tiles are imported into the Flash library when
creating maps, and you can use several tilesets in the same level,
a tile much have a unique name not used by any other tile in any
other tileset file. But that's just a concern you need to think
about when creating a new tileset file, and we've solved it by
simply start all tile names in a tileset with a lower case letter
unique for that particular tileset.
Q: What about levels? How do you create
and manage them?
I started to write an editor for the engine, but it became more
and more complex and it started to look a bit like the Flash IDE.
This made me stop and realize that I don't actually have to make
an editor, we can just use Flash itself! The benefit is that you
can use all the tools in Flash like align, copy, paste, multiple
selection, layers etc. to design the level. A level starts with
a level template. A template is just a .fla file that contains
some default layers including a reference to an ActionScript file.
You then import some tilesets and start to place the tiles and
group them into super tiles (make them into a movie clip). A super
tile may not be placed in the root directly; it must be placed
in a layer movie clip, and you can only have tiles from the same
tileset in one layer. You can apply any colour transformation to
a super tile or a layer movie clip. There are two special components
- a layer property component and a super tile property component.
A layer property component lets you define a tileset for the layer.
You can drop a super tile property component into a super tile
and set the properties. That way event lists can be associated
with the super tile, friction can be defined etc.
When you export the movie, an ActionScript function is executed.
It loops through all the movie clips in the root (the layer movie
clips), and for every layer it extracts data describing the super
tiles; their position, depth, which tiles they consists of, the
color transformation etc. The data is stored as an xml structure,
which is then displayed in the output window. You then save the
xml as a map file and you are ready to go. In an early version
of the engine I sent the new map data to the game engine directly
using local connection as well. If the game was running when the
map was exported, the map in the game was updated and you did not
constantly have to save the xml in the output window to a file
and restart the game just to be able to test the level you were
working on. The only time I've found local connection useful :-)
It's not completely painless to design the levels in Flash though.
It can be a bit of a hazzle to work with really large levels because
you need to zoom in and scroll a lot, and when you have thousands
of tiles in the level it can take some time to generate the map
data - up to a minute sometimes.
Q: How did you solve the annoying problem
of bitmap distortion in Flash? Have you found a good solution?
That's a really embarrassing bug - it's been there God knows
how long. I set the width and height of the tiles to 0.05 less
than they are supposed to be. But this is really annoying because
it means that every time you place a tile on the screen you need
to set the width and height properties just to solve the bitmap
shifting bug, which slows things down ever so slightly. Another
solution is to place the bitmap with the lower right corner on
coordinate 0,0 in the tile movie clip.
Q: What version of Actionscript was used
for the engine? And which one do you use/prefer?
It was written using ActionScript 1. I have only begun to use
ActionScript 2.0 recently. In a way I prefer 2.0 because it's closer
to "real" programming languages like Java and C#, which is always
a plus. But there are some annoying things with it as well. I'm
not fond of the variable type declaration in 2.0, it feels backwards:
var myString:String;
I know it's just a personal preference to have the data type
before the variable name, so it is not a critique. I know there
are other languages with this syntax as well.
Q: Do you use an external AS editor?
If yes which one do you use/reccomend?
I like SciTE as a general text editor, and I've briefly tested
SciTE|Flash which seems like a good editor. But for some reason
I still use the internal editor. I manage the code on different
layers, and test the movie very often, that's probably why I still
write it in the internal editor.
Q: What are the system requirements for "The
Curse of Sylvaniah"?
My computer :-) Seriously. I was mainly concerned that it should
play reasonably well on my own computer. After all, what fun is
there in developing a game you can't fully play? Also, I happen
to have a computer that is average at best (1GHz AMD), so it seemed
like a good benchmark. I would probably recommend a slightly faster
computer than that for it to run really smoothly with all the options
turned on.
Q: Can you tell us about particular "tricks" or
optimizations you've done to the engine to squeeze bettere performance?
There's probably not one vector line in the whole game - we're
only using bitmaps. This speeds things up a lot, and you can set
quality to low without any difference in image quality. Also, making
the screen relatively small really helps a lot. Other than that
I just try to write the algorithms as efficient as I can, and use
local variables whenever possible.
Q: The Flash player speed has increased
significantly with version 7. Do you think its performance is
enough for games?
Yes and No. It's enough for many puzzle games. It's just barely
enough for action games if you plan the game carefully, know exactly
what you are doing and spend a lot of time on optimizing. And that's
the problem. You really have to know what you're doing if you want
to make games where a lot of things happen on the screen. I think
many beginners are discouraged because of this. They have neat
ideas and implement it in a basic way, more focused on getting
it to work rather than worrying about optimizations. And the game
runs at 4 frames per second. And the advice they usually get from
people is the drop the vector graphics and use bitmaps instead.
Q: Can you unveil some of your future
projects?
I don't really have a lot planned. Finishing Sylvaniah would be
one. Another project I'm working on is a Pinball game. It's an
attempt to create something similar to the old Pinball games by
Digital Illusions.
As I've mentioned earlier, I was a sucker for the good old "dungeon
crawler " games. They may have been a bit of an acquired taste,
but I loved Dungeon Master, Black Crypt and Eye
of the Beholder (If you are unfamiliar with them they can
best be described as role-playing games from a first person view
taking place in... you guessed it: dungeons and similar environments).
You would think that a game where you walk in huge mazes for the
entire time would become repetitive and monotonous quickly. But
even though the environment may have looked a bit monotonous they
really absorbed you (and when the stone walls finally did change
texture you got really excited!). They had an exploration aspect
to them combined with fighting, finding new items, equipping the
party members and solving puzzles. I especially remember Black
Crypt having great puzzles.
It would be fun to create a similar game in Flash. Either pre-rendered
graphics like in the games mentioned above or by using raycasting
if the new version of the Flash Player is significantly faster
(it looks like it may be, but I'm not counting on anything). A
game with puzzles, lots of items, enemies and ridiculously huge
mazes and levels, but with enough leads to prevent players from
getting too frustrated. Maybe add a multiplayer element to it,
i.e. you can meet other players in the maze, fight and/or trade
with them, leave helping/misleading messages on the walls etc.
It's still a single player game with an objective (which could
be as easy as finding your way out) but you share the game world
with other players. Oh no! It starts to sound like a MMORPG, and
I hate that acronym! If I had written one line of code evey time
I heard someone talk about doing one in Flash I would have my own
working MMORPG by now :-). It's not something I'm actually planning
to do, just something I'm thinking about from time to time.
Q: And now for the last, inevitable question:
what would you expect from the next version of Flash ? Any wishlist?
Faster rendering of graphics. I really wish the next version
is faster in this regard. Just moving bitmaps around and especially
the vector rendering. That's the main thing. There are a lot of
small things that would be nice, but aren't totally necessary for
me. Improved rendering has started to become very important because
now the main focus is always to make the damn thing run smoothly,
and it's not the ActionScript that's causing the slow downs most
of the time.
Here's a list of a couple of things I would like to have added
to the Flash format/Flash Player but I would trade all of these
for significantly improved rendering speed (in descending importance):
- Load a .swf into a movie clip and be able to dynamically duplicate
that movie clip!
- Dynamically load .png images and progressive .jpegs
- Gradient masks
- Event when the mouse leaves the Flash movie
- Fix the shifting bitmap bug. It's so old that I will probably miss it for
a while when it's finally gone. But it's got to go
- Create bitmaps dynamically (just a setPixel() method would be great for starters)
- Extract frequency bands from a sound at run-time (to make equalizers and
effects triggered by the sound)
- Fps property (a lot of people use a fps counter, would be nice with this
as a property)
When it comes to The Flash IDE itself, I would really like a better
internal ActionScript editor closer to Visual Studio's excellent
code hinting, collapsable functions and search and replace.
|