The Game Creators Newsletter Issue 31Welcome to Issue 31 of The Game Creators newsletter. As another month of Summer goes by, we slink ever closer to the run-up to Autumn and that festive period. A time of the year traditionally reserved for the best hardware and game releases, this year looking to be no exception. But for those that can't wait 4 months we've got no less than 53 stonking new puzzle games here for you! Yes that's right, the Puzzle Game Compo deadline has been and gone, the games tested and verified and they're all presented here for you to play. So get downloading, get voting and we'll announce the winners next issue. In other news we've got a brand new FPS Creator Video available + a catch-up session with the head developer Lee Bamber. The front cover this month is the great shooter Alien Treasure. There are also tutorials for DBPro, PlayBasic and OmegaBasic, plus a guide from the PC Extreme team on getting old DOS games running again. Before I go I'd just like to give a mention to the Razer line of full-on gaming mice. Not because they sponsored this or anything, but just because I bought myself a new limited edition Razer Diamondback plasma mouse + an ExactMat mouse mat to run this baby on. I have to tell you - they are extremely cool devices indeed! The mat flips over for a control or speed mode. The mouse itself lets you alter the sensitivity on the fly (up to a staggering 1600 dpi), and it all glows a cool blue colour too. The mouse is shaped with especially elongated buttons that your fingers nestle into, and its ergonomically shaped for long-haul gaming sessions (or just straight Windows use). Pulling off those wild head shots in Battlefield 2 has never been slicker :) So if you're in the market for a new desktop critter, I'd heartily recommend them. And now, on with this issue! ContentsPuzzle Games Galore!It's Over! Before I list all the games I would just like to point out something - there is 380 MB worth of games in total. Now this is a lot, especially for those of you on 56k. Even if you DO download them all, it will still take you many hours to fairly test each game in turn. So the point I would like to make is - don't attempt to do this alphabetically! Otherwise some of the excellent titles towards the bottom of the list will never been seen, and you'll really miss out. Instead I urge you to read the game summaries that I have written and download games based on those alone - if they sound interesting to you, then do try them. Graphics, especially for puzzle games, shouldn't be a deciding factor either. If you can only test a handful of games then please only download those you truly like the sound of - hopefully this way the voting will be distributed, rather than clumped around the first 10 or so games on the list. Where are the games? How to vote?
PlayBasic - Types Inheriting the earthIn last months newsletter, we touched upon some sprite collision features under development, which are now a part of PB V1.08. These included Rotated, Vector Shape, Circular and of course Sliding Sprite Collision. While these collision features represent a vast leap forward over 'rectangular' sprite collision systems, my development effort is still focusing on improving the collision system beyond that. To do this means thinking not just about detecting intersections, but giving the user commands to handle things like Sticky Impacts (below), Los (line of sight), Nearest Colliders and Ray to Sprite intersections. Which are slated for inclusion in the next 1.08x. Which should be available in a few weeks time. In the mean time, lets dig a little deeper into Play Basic Types. Inherited Types One of the most tedious aspects of writing programs, often occurs when we need to write code that performs common tasks upon different typed arrays. This is particular evident in game programming, if we quickly examine the type of data most games use. In the most general (depended upon the genre) terms a game with have three, four or more lists/arrays (Players, Player Bullets, Aliens, Alien Bullets, Particles etc) of objects it's controlling. Since everything is stored within different arrays, then we inevitability end up writing some sections (often identical) to handle the base creation/deletion etc over and over and over again. To help solve this situation and allow you write more stream lined code, we introduced an inheritance feature into PlayBasic types. What this feature does is it lets you create base (parent) types, from which ,various child types can be created. Since the child types are descendants of the parent, they inherit the parent types fields. But more importantly, the descendant children type arrays can be passed into any function its parent can. Ok, that's a real mouthful. So lets dissect it little more with an example. Lets say were building a game and we want to have various typed arrays holding information about our Players, The Aliens and their Bullets. If you think about it, Now even though these arrays store information about four totally different groups of objects, some information is going to be common across the board. Like the objects Status (Alive, Dead, etc), Position, Score, Lives /HitPoints/ Sprite Index/Image Indexes etc. So these most common fields could be placed within a Parent type. So our Basic Parent Type could look something like this: Click here to view the source code Since each of our different objects will need their own collection of unique fields, we'll base them off the BasicObject parent type, which might look something like this: Click here to view the source code So far we've outlined some user defined types and created our arrays for our game, while we've already saved some effort, the real power comes through our ability to pass these types arrays into functions. To do this, we'd develop a centralized set our most common functions, so they can be used upon all these objects. Things like creation / deletion / positioning / animation / movement etc, whatever you like. These functions use the original parent type (BasicObject) as an input parameter. Now, since our games objects (the players/aliens) are all descendants of this parent type, PlayBasic will not only accept 'BasicObject' typed arrays as input, but it'll also accept it's children. So our Players, Aliens & Bullet arrays can be passed in an manipulated also. As an example, here's what a possible creation and position pair of functions might look like. Click here to view the source code So now we have our types and some basic functions we can set about creating and position the various objects like this. Click here to view the source code Ok, While this example doesn't really do anything whiz bang visually, it does show how you can build a set of base functions that can be used across various object arrays, not only that, but this approach could be used to build your own base layer of functions that can used across a various games. This approach will not only reduce the size of your programs dramatically, but make your programming experience easier in the long run. You can find another full example posted on our PB forums. Sticky Collision Demo PB1.081 This last second example shows one of the most recent collision modes called "sticky". What sticky collision does is calculate the first impact point of the sprite with the world. From this impact point you could simply destroy the object or even calc reflection angles to rebound sprites of the environment, rather than sliding them. The following tech demo shows Sticky collision being used to rebound some 250 sprites off their randomly generated environment. A bit like a pinball game without gravity. Download Rebound Balls (Sticky Collision) Demo with Source Code included. Play Basic is on sale now for $34.95 (€26.99, £18.99) Web Site: //www.thegamecreators.com FPS Creator NewsYou know that video we promised a while ago on the FPSC Forums? (sheepish grin) Well, it's finally here! FPSC Producer Rick Vanner sat down and recorded various gameplay sessions including demonstrations of physics, new AI and multiplayer and we've put them together into a short piece for you.
Here we have a catch-up Q & A session with Lee Bamber about the current development of FPS Creator: Q: What do you feel is the biggest new feature since EA? Q: Can you give a small example of how it can extend FPSC users level / game design? Q: And users can edit all of these physics properties directly from the Windows interface? Q: What other changes are regular EA users going to notice? Q: Can we expect more intelligent opponents then? Q: All without complex FPI script changing? Q: Talking of launch, I know it's the million-dollar question, but are we getting close now? Q: We know the new build supports multiplayer - but getting massive FPSC levels working in multiplayer would have been extremely difficult, so are there any considerations users should remember when building specifically for multiplayer? Q: What do you call your player in on-line FPSC frag fests? :) Q: Any final tidbits you'd like to share with the readers? More details: //www.thegamecreators.com/?m=view_product&id=2001 EZ_Serv 1.4EZ_Serv is designed to be a completely customizable TCP/IP Server, that can be used in a wide range of implementations from a simple chat server, to a complex game server, EZ_Serv can handle it all. The new version now incorporates client zoning. When zoning is enabled, current message marshaling rules are followed but under the context of a zoned hierarchy. This effectively reduces unecessary server traffic by marshaling TO_ALL and TO_ALL_OTHER message types to only those clients in the same zone (with the same zone value). Client zoning, as with most of EZS's features, is fully optional. More details: http://www.mod2software.com/ezs/ez_serv.htm PC Extreme - Play DOS games on a modern PCEach month the tech gurus over at PC Extreme magazine delve into a current or emerging PC technology, always with a gaming / development related theme. This month: Got a hankering for lo-fi arcade action? Tom Salisbury goes old skool to find some abandonware. It's difficult to believe that the PC's so old. The first PC was brought to life in 1981, so it's rapidly approaching its silver anniversary. In that time, thousands if not millions of pieces of software have been created for the PC. Some of them were sold, some were given away, but all of them proved useful for one task or another. Which leads us to ask the question: what happens to software when technology moves on? And more to the point, whatever happened to all those classic games we used to play back in the 80s and 90s? Old skoolA variety of things could have happened. The first, and most likely, possibility is that the company that produced the software went out of business. Often this means the software is floating in a legal limbo, seemingly unowned. However, some companies went out of business but had their assets purchased by another company. The software may therefore rest on a corporate database somewhere, listed as an asset' of the company but not one with which it can do very much. Why not? Well, these companies simply can't sell old games in our modern age. Apart from the fact that they'd be considered poor quality in comparison to modern titles, old games simply don't run well on modern PCs. Windows XP makes a valiant attempt to run old DOS/early Windows software but it's not always successful. In some instances a game will run but, because modern processors are so fast, the action will be speeded up or otherwise erratic. But there are ways around this, and that's exactly what we're going to look at in the steps below. It's entirely possible to get nearly all old DOS games up and running with just a little effort. To find old titles, simply search Google for 'abandonware'. This is the category under which old games reside online. You'll uncover several software archives of old games, all available for download. Believe us, it can be an emotional experience rediscovering the original version of Leisure Suit Larry or Arkanoid! The legality of downloading and running older games is questionable. Some titles may well be still be in copyright whilst others won't be. It's down to you to determine the status on a title-by-title basis.
PC Extreme magazine is available monthly: http://www.pcextrememag.co.uk PC Extreme - Special Subscription OfferOur friends over at Live Publishing have got a great offer on at the moment for new subscribers to their monthly PC Extreme magazine. Packed with all the latest news and features surrounding performance computing, modding, hacking, gaming, geek culture and more, you can get your monthly slice of action for a lot less dosh! UK Subscribers - 4 Issues for only £9.99 (inc. postage) UK Subscribers - 12 Issues for only £59.88 + FREE USB Flash Drive More Offers for non-UK Readers Subscribe now: http://www.livepublishing.co.uk/pcextreme/pcxsubs.shtml Cartography Shop Beta 5.10The betas of Cartography Shop v5 keep improving. 5.10 adds the following new features:
More details at: CShop Forum DBPro Tutorial - Application Timing and ControlA handful of Puzzle Competition Games suffered from the same problem - the use of "SYNC RATE 0" as the only timing control - causing games to run FAR too quickly on modern PCs (to the point of being unplayable). Take note of this tutorial to avoid this in the future. Time is of the Essence The first example included in the downloadable sample code is an illustration of how things can go wrong. It simply rotates 4 cubes around a point, which should be a nice, consistent animation. Because we can't show the same program running on different configurations, the example artificially injects an irregular program flow instead, simulating a heavy burden in the process. In a real situation, this may be a surge of action, or an explosion of special effects that increases the workload. The obvious answer to this issue is to set a SYNC RATE. This is ideal for smaller projects, but there are drawbacks:
So what can we do? The answer isn't as complicated as you may think, and the mathematics behind it is very simple. We simply check the actual time taken to perform one program cycle, and adjust our movement accordingly. Rather than solve this isolated issue, we'll create a self-contained code module that will serve many timing needs. It's possible to deal with this in the midst of our main code, but our solution will once again be scalable and portable. Open the sample code to see the implementation of our timers. We have the standard initialisation routine, which will set up the necessary Types and Arrays to hold an unlimited number of Timers. Looking at the timer Type, you will very quickly realise the functionality we will be including: type tTimer active start lastTime Interval lastTick# endtype
To support our timers, we will need various functions, to hide us from the complexities of the data. These are outlined below, and if you want to see exactly how they have been implemented, take a look at the source code. The methodology is identical to that used in the previous tutorials. timerInit(fps). Initialises the system. We can pass a desired frame rate value, to make calculations easier. So we can, for example, request that the system is synchronised to a frame rate of 40 frames per second. timerUpdateTime(). Called once every cycle, to maintain and synchronise the system. timerCreate(interval). Creates a new timer. We can set an interval rate for specific purposes. Passing a value of 2000 (milliseconds) will create a timer that is capable of recording 2-second intervals. The function returns the identifier (id) of the new timer. timerStart(id). Starts a timer. timerStop(id). Stops a timer! timerGetTime(id). Returns the absolute length of time the timer has been running. timerGetTimeDiff(id). Returns the difference in time between this request and the last. This is the principle behind controlling the frame rate and consistent movement, but we will actually implement this in more specific functions, to make our life easier still. timerGetTick(id). If an interval was specified when the timer was created, this returns the number of intervals (ticks) that have passed since the timer was created. An interval of 2000 (milliseconds) will return 30 ticks a minute, one every 2 seconds. 60000 millisecond intervals will allow you to monitor 1-minute ticks. This type of timer is useful for games that last for a specific period, or events that occur at particular points in a game. timerGetTickDiff(id). Returns the number of ticks since the last time the value was requested. timerGetFPS(id). Return the real Frames Per Second. timerGetFactor(id). This is the most useful function for calculating movement, and other calculations that are dependant on the frame rate. It returns the factor by which you need to multiply your "normal" value, in order to synchronise it with the desired frame rate. When we started the system, we had the option to set a frame rate. If this was set to 40 frames per second but we are actually running at 80 frames per second, the timerGetFactor() function will return a value of 0.5. Thus, we would then multiply all of our movement by 0.5 to ensure it occurs as if the frame rate was 40. This is the basis of creating a game that runs the same for all users, irrespective of their system specifications. As with all things, there is a downside. The price that must be paid for maintaining the action and being in control is that a very badly performing computer, or less careful programming can cause characters to "jump", rather like you would see in early 20th century films. The positioning will be perfect, but the perception on-screen will not be as good as you might like. The answer to this problem is still to code efficiently, and set minimum specifications, as with all professional publications. Run the sample code to see various timers in action, including one that is being used to control the wavy text effect. It utilises a 2 second ticker, ensuring the text undulates once every 2 seconds, consistently, no matter what else happens in our application. You will see how the functions are called and at which point in the program. Essentially, we have setup functions, called during the initialisation, and we have additional functions in the main loop to return the current status of the timers as and when required. To finish, I would like to publicise the fact that, despite my bad time keeping, I submitted this article 2 days before the deadline! Maybe I'm learning from my own tutorials. Note: This tutorial has been packaged up into a nice friendly installer that will load a full-length version of the tutorial, along with extended DBPro source code into your Start Menu (in The Game Creators program group). Each month this collection will build-up into a formidable free resource. Download this tutorial + code: DBPro_July_Tutorial.exe Smart ParticlesSmart Particles is an intuitive interface for creating particle based special effects. It utilises the power of The Game Creators Particles expansion pack, with the simplicity of a graphical interface for designing, creating and exporting fantastic effects. From vehicle explosions, to lemonade bubbles, the only limit is your imagination. Every feature in the Particles Expansion pack is available in Smart Particles! If you wondered what the official expansion pack is capable of, you can try out every feature of the particles in full, and see the results immediately. For owners of the pack, you can also export a particle emitter and unlimited effectors and colliders into your game. This forum thread has a tutorial on creating explosions, it's a fantastic way to get to grips with the functions and features of both Smart Particles and the expansion pack. There is a showcase available for download, with fireworks, The Matrix and more; and there is a tech demo created with Smart Particles in Program Announcements, showing rain applied to the standard terrain demo. Walk around the terrain and the rain never ends, it's like a weekend in The Lake District! More details: Smart Particles Forum Thread Alien Treasure Game ReviewAlien Treasure is a very frantic, fast paced, arcade scrolling action game. The basic objective is to pretty much blow-up everything in sight and it sure is good fun trying to do so. The first level starts with having to destroy alien ships and catch treasure, and only a few seconds into the game you're faced with countless waves of ships coming in your direction and it's hard going trying to take them out. Along the way there are power-ups to collect for things like better weapons and extra lives. There's an incredible amount of action going on and it's a real tough challenge trying to keep up with play and eliminate all the ships. As you progress the levels get much harder and many new enemies end up arriving on the scene for you to deal with. At the end of the level, or when you lose all your lives, you get to see statistics showing you how well you have done and if you got a good score you can enter your name on the high score table. One of the other things worth mentioning is how well presented the game is. It all looks great and everything is really easy to use and get into. To sum up if you're into games of this genre I'm sure you will have fun playing this. Certainly one of the best games created in DBPro that I've seen in recent months -- Review by TGC Developer Mike Johnson Alien Treasure is a zippy little shoot em up! The start is very atmospheric and moody (not to mention polished) and infact is quite different to the game itself - once you start its a frantic battle to stay alive. The graphics are small but detailed which allows for a lot to happen at once.. and it does! From the moment you start playing there is a seemingly endless onslaught from those pesky aliens that are trying to take over the universe. The action is fast - almost too fast at first but thankfully due to the control system (the trusty mouse) the action is fun and light hearted rather than pure panic. If anyone fancies a light hearted good old fashioned alien pounding - I would definately reccomend Alien Treasure. Now, where did I put the spare batteries for my mouse? -- Review by TGC Developer Dave "Ravey" Milton Download here: http://home.arcor.de/testaware/Alientreasure/ Omega Basic Tutorial - Building a Platform Game, Part 2Last month we started designing a platform game in Omega Basic that let you move the super hero left and right. There was also an enemy character which patrolled the right hand side of the level. This months tutorial will be more concerned with the overall program design for the finished game, as well as some possible enhancements we can perform in the future. Last months tutorial was designed to give you a tester of programming, and so we jumped straight in with some code. Learning a programming language is never an easy process, so attacking the problem from several angles should help you gain a solid understanding of Omega Basic. This month sees the launch of a new compiled help file containing all of the commands with examples, as well as the dynamic help system included in our new Synergy IDE. Important points to noteThe Omega Basic language is relatively strict when it comes to variable usage. Although variables are not case sensitive e.g. 'This' is treated the same as 'THIS', you must declare them before you can use them. You declare variables and arrays using the DIM keyword; for string variables append '$' at the end of the variable name e.g. Dim thisIsANumber Dim thisIsAString$ You can also give the variables values as you declare them; this is useful for providing starting positions or default values. Omega Basic is driven by functions, and everything except variables and GUI items should be written inside a function. For most basic game writing most code is written inside the MAIN function. The START function can be used to keep start up code such as image loading separate if you wish. When Omega Basic loads your program, the flow of execution is downwards until it reaches the end of the main function. Once it reaches this part, it is up to your program or user to control the execution path. The ACTION LOOP will be activated at the intervals specified, and the other ACTIONS may be called upon if the user or code calls them. If you are using a GUI then an action such as a button press will call FUNCTION ACTION, the name of the control calling the function is held in the variable c. For the game developed last month the flow will be something like so: 1) Create the variables As you can see most of the functions are not actually used, the main program logic is handled within one function. With this knowledge programming in Omega Basic should become less daunting, and it becomes much like programming in DarkBasic. However, Omega Basic is designed for a much different computer architecture than other flavours of Basic, and so the extra functions enable you to handle extra functionality that may affect your game. Back to designYou may have noticed that the characters in last weeks demo were animated (albeit simply). Animation in Omega Basic is performed by creating an image file that is equally divided into the frames that the animation is going to use. One point to remember when dealing with graphics in Omega Basic is that a PC is hundreds of times more powerful than a mobile phone. It is a challenging, yet rewarding experience to be able to develop games that look good, yet run smoothly. An animated sprite is treated the same as a static sprite, and so you are free to position it anywhere on the screen. The frames used to animate the hero Again, if you have a keen eye you will have noticed that the image that we used for the grass is not wide enough to cover the bottom of the screen. It was therefore necessary to use two separate, but identical copies of the image placed next to each other. Instead of having to load two separate images, Omega Basic provides a handy command call Sprite.Array which allows you to store a number of identical images under one name, but with different indexes. To ensure the grass looked like one long image we used a special seamless image which has specially designed edges which allow the image to fit together without any visible lines. The grass sprite Notice that when two copies of the sprite are placed together there is no seam! The AI in the game is incredibly simple, and probably not even worthy of being classified as AI, but it does a job. The idea for the simple game was to show you how simple it is to manipulate sprites. The code used a variable to determine the direction of the enemy, which then determined whether the sprite was moved left or right. Then when it reached a preset position on the screen the variable was 'reversed' so that the enemy could march the other way. This simple algorithm was all that was needed to add some polish to the game, and was much more interesting to look at than a stationary animated sprite. This tutorial wasn't very progressive in terms of coding, but hopefully it has helped explain the design behind the game we created last month. Next month I will return to a mainly code based tutorial to help you progress your understanding of the commands available, and program design used in Omega Basic. There are some particularly innovative individuals also contacting me regarding their developments, which include a phone OS, an RPG battle system and an example menu system, all of which should make their way into the example source code folder in a later release! Web Site: //www.thegamecreators.com Independent Games Festival AnnouncedThe CMP Game Group (producer of Game Developer magazine, Gamasutra.com, and the Game Developers Conference) established the Independent Games Festival in 1998 to encourage innovation in game development and to recognize the best independent game developers. The IGF, now in its 8th year, has given away hundreds of thousands of dollars in prizes and major recognition to innovative, independently created video games from all over the world, from early pioneering titles such as Tread Marks and Shattered Galaxy, through recent stand-outs such as Oasis, Alien Hominid, and Gish. There are now three sections of the Independent Games Festival event, for which the prizes will be awarded at GDC 2006, held from March 20th-24th 2006 at the San Jose Convention Center in San Jose, California: the main IGF Competition itself, the IGF Student Showcase, and the IGF Mod Competition. There are various categories including "the Grand Prize" ($20,000), "Innovation in Visual Art", "Best Web Browser Game" and more. Check out the web site for details. More Details: http://www.igf.com DB DreamerDB Dreamer is a DarkBASIC visual mapping tool. The program allows you to visually position, rotate, texture etc. all 3D components in DarkBASIC Pro. After mapping out these things, you can then export the source code which can then be run in DarkBASIC Pro. Mapping The program also supports the addition of: However DB Dreamer does much more than simple mapping. Users also gain access to other options, for example: Changing Light and Fog colours. To help users map out "invisible" things such as lights and sounds, spheres (for lights), cubes (for sounds & light point directions) can be assigned. Why do you want this? Demo site: http://www.ibse.r8.org New DarkBASIC Professional DLLsA number of new DLLs for DarkBASIC Professional have caught our eye this month. CDSDLL v.01This DLL contains only one function, but it's an important one! It will change the resolution and depth of color (bits/pixel) of the monitor even if the program runs in a window mode (including a full-screen window) Wait a minute - isn't that what "set display mode" does? Well - sort of, read on... You've probably noticed that in DBPro when a program is started in Window mode but the resolution is reduced in comparison with that which has been set on your monitor - objects, sprites and in general all contents become distorted. Another example is if you run your program in "full screen window mode" on a 1600x1200 Windows desktop, your graphics can easily become stretched and blocky. It's impossible to change the resolution in Window mode - you are at the mercy of the end-user. And in a fullscreen mode various bugs stop it from working either. This DLL solves that. Download from here: http://x3dgames.narod.ru/res/cdsdll.zip (only 5KB!) LUA Scripting in DBProDavid T has been working for a while on implementing the Lua scripting engine into DBPro. The result is the ability to load and execute scripts from your games, have scripts access your 3d darkbasic world and for your DBPro programs to access data held in the scripts. More details here: http://forum.thegamecreators.com/?m=forum_view&t=56351&b=8 From the ForumsOur forums are a diverse and interesting place to hang-out and here are a selection of hot topics this month.
Geo Defender Game
Vatan - Mappers Required
High Poly Character Modelling Tutorial
Ion Extension Pack
Easy Tank Combat
Chainmail - 2D RPG
Laser Sight + Raycasting Code You can find our forums at: http://forum.thegamecreators.com New gameSpace Course at no ChargeCaligari are pleased to announce the release of the first gameSpace Mini Course! These courses are kept short and to the point, at a running time of around 20 to 30 minutes, so they make an ideal and affordable way to brush up on your gameSpace skills! Best of all, this first course is being released to gameSpace owners at no charge. It provides a general overview of gameSpace and its features, but even experienced gameSpace users will find something new in here. The course author, Drew Clark, has plenty of experience in using gameSpace to make games, and he'll be passing on the benefits of that experience in this and future courses! Be sure to watch out for future gameSpace Mini Courses too - four more are in the works, and all will be kept short, sweet, and affordable! gameSpace owners - check your email for details of downloading the first course. For those interested in buying gameSpace you can get more details about it from the web site below. Web Site: //www.thegamecreators.com Synergy IDE - Open Beta TestA new multi-language IDE is on the horizon, called Synergy it's by the same developer as Omega Basic and uses a familiar Visual Studio layout. Beta testers are wanted (see the end of this article). Current features include:
Availability is slated for 1st August, beta testers are wanted. Beta Testers Contact: beta@digitalomega.net This months winner
Each month we award one lucky subscriber a free copy of DarkBASIC Professional. The winner this month is: ideweever@?????.com OutroNext month we'll have the Puzzle Game Competition Winners to announce. We will also be another month closer to the full release of FPS Creator, that and the DBPro Physics Extension Beta Group will have been playing away, so perhaps we'll have things to show you from that too! The new web site is also nearing completion (in time for next issue? possible.. but there's a lot to still finish), so quite frankly it's all go here at the moment. Share your product / project news with over 12,000 active games developers! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||