Hello, Fellow game creators.

Welcome to the Game Creator store's first newsletter. This is a new direction for the store (often referred to as GCS.) and will not only feature exciting news about new store content but will also showcase the work of our community, offer tutorials, general tips on game development and maybe the odd interview. In keeping with all things legal, you are receiving this update as you have previously used the store in the past, if you don't wish to receive any more news from the GCS, you can unsubscribe by clicking on the link at the base of this email.

There have been quite a few  major changes to the store in recent months, including an expansion of the number of engines we support, which now covers many different platforms and model formats, We've moved forward to include support for many 2D engines, as well as the larger development platforms such as Unity and Unreal. In short, if it's a development platform, we'd like to be able to support it. Of course, that doesn't mean that we will stop providing media for GameGuru and AGK, and will be working hard to continue to bring you affordable, quality content for these platforms as we've always done.

Another change that some of our longer term users may have missed is the support for code snippets.  We'll accept code for any engine, platform or language, all you need to do is submit it in a workable format, and if we think it'll be useful to our users, and of course, it's original work, we'll approve it.

The biggest news we have to share with you, however, is something we consider really special. We now support the upload and sale of games and applications. There are some rules of course and all games are subject to approval, but we know how talented you lot are and we look forward to hosting your creations and helping you to reach new audiences. If you've any questions at all about any of these changes or just want to comment, you can contact us at [email protected]

Now, that's the introduction out of the way, so, it's on with the show.

Using the cube mapping shaders in Game Guru by Pirate Myke


Store artist and all round nice guy Myke has taken time away from his busy model making schedule to share some of his insights and experiences with the new cube mapping features including in GameGuru. For this tutorial, you'll need a copy of GameGuru and a copy of GIMP.

Let's talk about the shaders.

Note: _i and _Cubecannot exist together. Erase the _i texture to use cube mapping if you used the _i for illumination.

The main guts of the shaders are now in the Entity_Basic.fx shader. These shaders are called in your FPE file to point to a technique to render in the main shader.

Alpha settings for Cubemapping

  • cube_basic.fx orentity_cube.fx , will mix in evenly diffuse and cube reflection. Transparency is supported, so this one will be great for floors with little reflections.
  • cube2_basic.fx orentity_cubealpha.fx , will mix in cube reflection based on alpha. Lower alpha means more cube reflection, this one will work out of the box on default media that have glass/windows and mix this in using the same texture, so your windows will get reflection but not areas with no alpha. This also supports transparency. So you could lay a transparent plane above your “road” to simulate a puddle, and it would look like water.
  • cube3_basic.fx orentity_cubeambience.fx , will allow you to make really reflecting object like metal/mirrors … it also supports cube reflection using the alpha as a reflection mask, so if you put 255 in the alpha you get a mirror only cube reflection is displayed, if you put 0 in alpha only diffuse is displayed. Using 128 in alpha will mix evenly. This could be used to make a “wet” look, if you have a road texture you could set the alpha to around 80 and your road will get some cube reflection and the surface will look wet. This one doesn't allow transparency as the alpha is used as a cube reflection mask.


Figure1 Alpha shown in light purple. (The brighter the purple the less reflection the object will have.)


Examples of what the alpha looks like in GIMP.


Figure2 Alpha as it looks in the channel dialog in GIMP



Figure3 Alpha as it looks in the channel dialog in GIMP




Figure4 What the texture looks like without alpha.

Now to see this all in action.


Cube Ambience



Cubemapping in action.


We hope that this small insight into the world of GameGuru cubemaps has helped, and more importantly inspired you to have a go yourself. We at the store look forward to seeing some of your new items uploaded for sale and as always, we have great expectations from you all.

WHAT'S NEW IN THE STORE



Let's take a look at some of the media first. The store has gone from strength to strength recently, we now have more than 10,000 items available and we've seen a lot of new and very talented artists arrive over the last few months, and it's a pleasure to be able to share their work with you.  Don't forget that just because media is provided for a particular engine, they are easy to convert into other formats and many free applications and programs are available for free to help with the conversion.



M Stockton Heavy machines - and matching junkyard stuff for GameGuru are ideal for a post-apocalyptic and modern day games.



 This mad science equipment from new artist Mad Lobster Workshops will make a great addition to anyone's collection. The models are very high quality, offer something new, and are all ideal for gothic, steampunk and alternative future games.



Team wolf media is another new artist and is already prolific. They've uploaded a host of new media, across a range of genres, including modern day,
near future and medieval. Check out all of the models here.

While we're on the subject of store media, this is the time to remind you all once again, that we encourage uploads in many different formats and it's in the interest of artists to upload images that really showcase their media. So if you're an artist and you provide media in .x and .fbx format, take screenshots in an engine that best represents the highest quality possible. This will help generate sales as well as show your media in the light.


Want to become a store seller?


Are you a talented 2D, 3D artist or a game or app developer and are looking to release media for almost any engine or PC games? You can easily sign up as a store seller at GCS here. We offer excellent rates, and promote all of the best games and media through our facebook page.

Of course, if you need any further information, please feel free to contact us via email : [email protected] and we'll answer any questions you may have.

LET'S TALK ABOUT GAMES


It's big news time! We here at the store have been preparing the way for several months now to provide a platform for indie developers to help publish their games or apps. We support all engines and our only real requirements are that your developments are a lot of fun and something we think our customers will enjoy. All games are subject to approval and as with media, a contract and a seller account is required, but apart from that we aim to help bring your game to the public and will help you promote your software through our channels. Registration submission and approval is FREE with the usual commissions that apply to media applying to software.  You can find full details of game and app requirements in our updated upload guide.

JimJams games (and you can read a little more about them below), have already uploaded a couple of games, and have many more in the pipeline. Check out Firebird, a retro-inspired space invasion style game.

You can check out the gameplay in this little teaser:



Games from our community

Now let's take a look at a couple of very different games that need your support. Firstly, let's take a look at Medieval Steve from JForth Designs, some of you may also know this developer as Unfamilla, a very talented store artist who's been an active part of our community for several years.



Here's what they have to say about the game:

"Medieval Steve is a 3D side scrolling, puzzle platformer. It's akin to the games of old, but, with a modern twist. You must battle your way through various enemies, collect gems to progress and solve puzzles to find secret areas and power-ups.

The better you do in the game, the better rating you get at the end, which means more upgrade points, to improve Steve!"

Steve is being developed using Unreal 4.0, and although it's a work in progress, it is already progressing well, and even now is a very playable and worthy game.  They need your help and support by their first Steam Greenlight, so why not click now, it doesn't cost you anything to help out and encourages and supports other game developers like you.


http://steamcommunity.com/sharedfiles/filedetails/?id=883405186

Also looking for your support this month is a very retro game from JimJamsGames who specialise in retro inspired games. They already have a few games available for Android and are now aiming to bring some old school mayhem to the PC via Steam Greenlight with Fungoids. The small team develop fun, classicly inspired games aimed solely at those who love retro. As developers, the core team behind JimJamsGames have been in the industry for over 30 years in one form or another, and this love of classic gaming is reflected in the choices they make and the focus of their developments. 

We've already approved Fungoids for sale on GCS, and hope to see it brought to the Steam market as well.

Take a look at the videos below to see what we mean.



For those of you who don't remember the original,  (and we imagine there are a lot of you)  Fungoids is heavily based on a classic Fungaloids from 1981 developed for the ZX81, an amazingly fun game at the time and a true classic. Check out the original gameplay!



Please help JimJams games bring some old fashioned fun to Steam by voting to support them below.

http://steamcommunity.com/sharedfiles/filedetails/?id=834484411

AGK 2 - Invaders tutorial part 1


Welcome to the first of our coding tutorials. Over the months we aim to bring you tutorials for code based engine as well as snippets of code in various languages for all of the engines the store supports. We generally are aiming at the beginner to start with, and most tutorials will cover a few newsletters.We'll simply present these as code blocks which will be well documented and in a cut and paste format where possible.

For this month and in keeping with our support for AGK 2 as a product we are looking at writing a 'Space Invaders type' game in Tier 1 (BASIC).  This is a fairly straightforward project but it does cover a lot of important elements for game writing in general. Through the tutorial, we'll cover sprite movement and animation, collision, reading input and some basic game maths.

To set this all up, open your AGK IDE and create a new project called Galaxy.

You need a little media, and you can download the media folder for this stage of the project here You'll need to place this (unzipped) folder in your AGK Galaxy project folder and rename it media
media
Now, all that remains is too copy and paste the code below into your AGK IDE, and click compile. If all has gone well, you should see something very similar to this:



Ok, let's take a look at the code:

// Project: galaxy 
// Created: 2017-03-08

// show all errors
SetErrorMode(2)

// set window properties
SetWindowTitle( "galaxy" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window

// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 60, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts

//we'll set up a TYPE for the 'invaders'
// x and y are the aliens position and are both floats (allowing decimals)
// active holds a flag to say if the alien is active (still alive)
// sprite will hold the sprite number
type aliens
x as float
y as float
active as integer
sprite as integer
speed as integer
endtype

//we will use a single variable to indicate the direction the invader 'mob' moves.
//If a single invader reaches the edge all invaders will change direction.
global aliendirection=1

//load the alien image into image 1 (This image should have been placed in your media folder
loadimage(1,"alien.png")


//set up an array for the aliens called invaders
//we are allowing 60 which is 12x5
//arrays are always global and can be referenced from any function
dim invaders[60] as aliens

//let's make some aliens.
//first we'll set up some tempoary varible to hold the invaders position on screen and a value for the start of the sprites we'll use.

x=32
y=64
tsprite=100

//run though all 60 invaders and give them a screen position and a sprite
for setupinvaders=1 to 60

//we'll assign some values to some varibles, defining position, activity, speed and the all important sprite number
invaders[setupinvaders].x=x
invaders[setupinvaders].y=y
invaders[setupinvaders].active=1
invaders[setupinvaders].speed=2
invaders[setupinvaders].sprite=tsprite
//create the sprite
createsprite(tsprite,1)
//the sample sprite is animation, so let's set that up
SetSpriteAnimation(tsprite,64,64,4)
//now the sprite has some animation data, we can simply play it.
PlaySprite(tsprite)
//Ok, no real need to set the sprite po
SetSpritePosition(tsprite,invaders[setupinvaders].x,invaders[setupinvaders].y)

inc tsprite,1

inc x,64

if x>786
  x=32
  inc y,64
endif

next setupinvaders
// play is a new type which will hold the player information. As above x and y are the players postion and sprite will hold the sprite number.
type play
x as float
y as float
sprite as integer
endtype

//we'll now set up a global and link it to the play type. Note that this is a global, so that it can be referenced by every part of the code.
global player as play
//now let's define some start values.

player.x=512
player.y=700

//and we'll use sprite 2 and image 2 for the player ship.

player.sprite=2

loadimage(player.sprite,"playership.png")
createsprite(player.sprite,player.sprite)
SetSpritePosition(player.sprite,player.x,player.y)

//currenttime will hold the time in milliseconds for the current frame. Calling GetMilliSeconds() is processor intensive and this will aid performance
//by only calling the function once is a frame

global currenttime as integer
global frameadjust as float

do

//find out how fast we should move to ensure that 60fps is replicated.
frameadjust = 60*GetFrameTime()
//store current milliseconds for performance.
currenttime=GetMilliseconds()
//move those invaders!
moveinvaders()
//draw them again
drawinvaders()
//let's move the player around a bit
controlplayer()
//and draw the players ship again.
drawplayer()

Sync()
loop

//this function will move the invaders and control movement up and down the screen.

function moveinvaders()

//let's set up a couple of variables to decide when to change the movement direction
changedirection=0
movedown=0

//we'll run through the invaders one at a time

for moveinvaders=1 to 60
  //but only if they are active, at first they all will be but if they are destroyed they'll become inactive.
  if invaders[moveinvaders].active=1

//move the invaders in the movement direction, at the correct speed adjusted for slower systems.
inc invaders[moveinvaders].x,aliendirection*(invaders[moveinvaders].speed*frameadjust)

//if any invader is at the right of the screen reverse direction for them all
if invaders[moveinvaders].x>960
changedirection=-1
endif

//if any invader is at the left of the screen reverse direction for them all
if invaders[moveinvaders].x<1
movedown=1
changedirection=1
endif

  endif

//move onto the next invader
next moveinvaders

//are the invaders changing direction, if they are reset the movement direction variable
if changedirection<>0
  aliendirection=changedirection
endif

//if they are at the far left of the screen they will also move down
if movedown<>0
  for down=1 to 60
if invaders[down].active=1
inc invaders[down].y,12
endif
  next down
endif

endfunction

//a very simple routine which just update the invaders position, we are using a seperate function for ease of use
//and to aid the addition of features in the future.

function drawinvaders()
//loop through them all
for draw=1 to 60
  //only bother drawing them if they are active to save performance
  if invaders[draw].active=1
SetSpritePosition(invaders[draw].sprite,invaders[draw].x,invaders[draw].y)
  endif
  //move on to the next
next draw

endfunction

//ok, this is where we scan for input to see if the player is trying something exciting.

function controlplayer()

//this is where all player actions take place, as this is an invaders type game, that will be
//moving left and right and later on, firing.
//let's read the keyboard, for this demo, we'll use the arrows to move

//You can find all of the codes for the keys here: https://www.appgamekit.com/documentation/guides/scancodes.htm

//The scancode for left is 37, so let's see if left is pressed

if GetRawKeyState(37)
  //if left is pressed we adjust the player.x value by a negative amount,remembering to adjust for frame rate
  player.x=player.x-4*frameadjust
endif

//The scancode for left is 39, so let's see if right is pressed
if GetRawKeyState(39)
  //if right is pressed we adjust the player.x value by a positive amount,remembering to adjust for frame rate
  player.x=player.x+4*frameadjust
endif

endfunction

function drawplayer()

//make sure the player can't leave the screen

//first left hand side,
if player.x<1 then player.x=1
//then right hand side
if player.x>960 then player.x=960

//ok, job done, let's update the sprite position
SetSpritePosition(player.sprite,player.x,player.y)

endfunction

Signing off

Well, that's it for our very first newsletter. We hope that we've informed, entertained and given you all a great insight into our community and our store. We'll be back next month with more news, and some more tutorials. Until then, good developing.

The GCS Team.