>> Jeremy Foster: All right, so go ahead and... you, Arun.

advertisement
>> Jeremy Foster: All right, so go ahead and give a round of applause to Arun. Thank
you, Arun.
[applause]
>> Arun Babu Nagarajan: Thank you. Hello everyone and welcome to the session. I'm
Arun and I'm a dev in the Windows team. Specifically I work for the printing and imaging
technologies, and today we'll be discussing about developing a casual game for
Windows 8. And this is for beginners like you and me, and hopefully experts in here will
find something interesting about today.
So sometime last year I got interested in developing casual games during the RTM
phase of Windows 8, and I started exploring the options on what other tools which are
available for writing games for Windows. And this is what I found.
So if you venturing into game development for the first time, be prepared to be
overwhelmed with the number of choices you will be facing. So I spent some time
looking over the choices and figuring out what exactly is my skill level and which is going
to fit my timeframe. So I want to have a quick ramp for learning it so that I can start
working on the game as fast as I can. So I'll give you a quite summary of what I found
doing my investigations.
So as you know Windows 8 supports C plus plus, C sharp and HTML 5 Java Script. So if
you want to do something like a fairly highly professional game like Halo which has
some 3D effects and you should be able to control the camera position and angle and
lighting and shading and all that then you should be doing DirectX or use engines like
Unreal. If you comfortable with C sharp then there is a very popular framework called
Unity which is the most popular cross-platform development framework out there. And if
you are okay with casual games where you want the user to just play for a few minutes
or a few hours, like Angry Birds -- Yeah?
>>: I was going to ask like can you mention for each of these how much it costs or if it's
free? If you know.
>> Arun Babu Nagarajan: Sure. I think Unreal and Unity are paid, and I don't know the
exact cost structures but I think we should be able to look it up fairly quickly. But I'm
currently going to focus on this particular tool called Construct 2. So HTML 5 Java Script
is fairly new to the game development space, but the game developers are quickly
erupting it with respect to the fact that it's pretty much [inaudible].
So theoretically speaking you can write an HTML 5 Java Script game with just Notepad
and access to a browser, but you don't really want to do that because there are some
rich tools available; although, there are some popular games which are built from
scratch. For example, if you have heard about Cut the Rope and cuttherope.ie is the
website, so they have completely redone the game for Java Script and HTML 5. And
there's this other game called [inaudible]. I don't know if you've heard about it but it's
also a very cool game. It's [inaudible].ie is the website and you should be able to take a
look at the games. So those two games are written from scratch using the HTML 5 Java
Script's canvas element.
And there are some mid-level tools like Create JS and Impact JS. I think those are free.
They give you a set of helper libraries which help you start your coding pretty fast. But
still you need to have a pretty good understanding of how to do Java Script programs.
The one we are going to talk about today is called Construct 2 which is a very easy way
to write a game or even mark up a game if you want to do a professional game or 3D
game. And this one does not require you to have an understanding of Java Script. You
don't need to know Java Script at all. So that's what we are going to focus on today.
So I've structured this talk into two major areas. The first half we will take a look at the
introduction to the Construct 2 tool itself and give you a taste of how easy it is to develop
a game, a prototype game. And the second part I will focus a particular plugin which I
authored for Construct 2 which helps to bring all the rich Windows 8 features to
Construct 2.
So that's all with my slides, and let's start off with developing a game. I'm going to try
developing the game from scratch and let's see how far I can proceed. All right, so let
me launch --. I bought the software; I don't know why I get that.
Okay, so let's launch Construct 2. This is not a free edition; I have a license. Okay. And
let's do the most natural thing that we do which is file, new project. Okay. So as you can
see Construct 2 comes with a bunch of built-in templates ranging from -- I don't know.
You can type whatever you want. Let's say jump. I will find a jumping game template.
Let's say I want a card game. Sure.
Anything else?
>>: Bird.
>> Arun Babu Nagarajan: What?
>>: Bird.
>> Arun Babu Nagarajan: Bird. I don't know.
>>: Angry Bird.
>> Arun Babu Nagarajan: So bird is, I don't know, a scrolling game, right. So you can
type scroll and you should be able to get the scrolling game area. Anyway, that's not fun.
And let's do a simple blank project so that we can understand the basics. So I'm going to
create a blank project, and this is a fairly simple ID. Let me just close this. And what you
have here is there is a project view over here. And you have all the items which are
listed here which is currently part of your project.
And when you select an item over here, your properties window would show the
corresponding properties for the items that are there. This is fairly basic. So the one
interesting thing over here is the layout. Let's talk about that. So layout: you can think of
a layout as [inaudible] preconfigured set of objects which are going to appear on the
screen. A layout can be one layout per level or one layout per, you know, the title screen
for you app or one layout for your menu, etcetera.
So let me make this layout as level one. So we are going to start designing the level one
for my game. Right? So we are going to do a platform style game, for example a Mariostyle jumping game where the main character jumps around on platforms and collects
stuff and jumps on enemies. So I'm going to change the layout size to something big.
I'll just zoom out to show you that this is the whole layout size here. And as we said, this
is a horizontal scrolling platform so you will have more space for the player to jump. And
the thing you should note here is that there is this little dotted line over here which
represents the window which is currently visible to the user. Right? So for a Mario-style
game you have a long strip of layout and your window would be one part of it. So that's
what we are trying to design here.
All right. Okay, so now that we have the layout set up let's add some background to this
layout. So the way you do it is you can either write, like, insert new object or you can go
to object types, insert new object or you can double click. So I'm going to do double click
for now. Right? So we want to add a background to this layout. So there is this object
called tile background; I'm going to select that, and I'm going to just place it over here,
anywhere.
This opens up an image editor, and I'm going to open up an image which I already have
prepared for. So here is a background for our game, and the background shows up here.
Cool? I'll close this. And you can see that this object is resizable, so I'm going resize it to
fit the whole screen. So from the name you can understand that this is a tile background
which is a very common technique used in games where you take one small image and
then kind of tile it over there. And if you smart enough to design the tile then it would look
as if it's a whole new image. Right? So in this case I'm going to position it at the top left.
And I know the layout size so I'm going to fill it in. However you can do it, you know, with
the mouse.
Okay so we have the background set up nicely. Okay. So we are going to add more and
more objects to this layout like the player and enemy and the land on which he will jump
and that. So by mistake I will drag this and then it will spoil my careful positioning. So
what I'm going to do is I'll create layers, so let's introduce the concept of layers to you.
So every layout can have layers. If you have worked with photo shop or [inaudible] then
you would know layers, but for the benefit of those who are not introduced to it let me try
to explain that. So you can think of layers as transparent sheets laid out on top of them.
And the bottommost transparent sheet, think of it as having the background. And the
next transparent sheet you can add the player, and the next one you can add enemies
and all that. So in this case our bottommost layer is going to be the background. I'm
going to rename it to "Background" and I'm going to lock it in place.
So this means that I cannot select this background any more, and it's locked in position
which is nice. And I'm going to add another layer and name it as "Main" into which I'll
drop all my main players and enemies and everyone else. So let's have that main layer
selected, and let's add the central character to this game. So I'm going to just double
click and add a sprite.
If you are not familiar with sprite, sprite simply means an animated object in the gaming
world. So I'm just adding a sprite. And notice how the crosshairs has a tool tip which
says, "Main," which means that we are going to drop whatever object we are trying to
add into the main layer. And again we get the similar image editor view here, but this is a
little bit different this time because we chose the sprite. So let's import the sprite. I'm just
tri-clicking here and import sprite. And I'm going to import the player, sprite. Let's start off
with the idle animation.
So Construct 2 gave me 11 frames for this particular idle animation, and this is one is
just empty. I'm going to delete it. And as you can see there is some empty area around
this player which might take some space, so I'm going to just remove it by cropping it.
Shift-crop will remove it from all the frames. I'm just going to do that. All right. So now we
have the player over here.
And there is this concept of hotspots which means what is the place of contact for this
particular object. So this is a platform game and this player will be jumping on solids,
right? So the hotspot is going to be the bottom. I'm going to do a bottom here and then
make it available to the whole animation. And that's pretty much it. So I'm just going to
set the animation to loop and preview it.
So he's nicely idling there. So I'm going to change his name to "Idle Animation" and set
the speed to a little bit faster. Cool? So I'll just drag him here and let's just run the game.
So you have created the game which runs on ie and your player is idling there. Right?
He is waiting for your commands.
All right, so now let's add some platform for him to jump on. I'll add more sprites here
and, again, on the main layer I'll do the same thing. Import sprites [inaudible], and I'll get
some more tiles. I just happen to know that this sprite sheet is made up of 144 frames,
so I'll just say it over here and let Construct 2 take care of splitting it up. So it's actually
doing some work splitting up the huge sprite sheet into 144 images. And we got it now.
So the first one is empty; I'm just going to delete it.
>>: So you have one big image that you're telling the thing that this is actually...
>> Arun Babu Nagarajan: Yeah, that's a standard way in the gaming world where they
have a concept called sprite sheet where they layout everything. And you can spread
them out whatever way you want. So that's how they distribute the assets. So if you go
to professional websites, they will sell sprite sheets for theme. For example like an
aircraft-based theme, they will sell a sprite sheet where you have, you know, all kinds of
aircrafts and everything so you can split it up.
Okay so this one I'm going to use it as just a place holder so I don't want it to animate at
all. So I'm going to set the speed to zero and then zoom in a bit and then show you what
I'm trying to achieve here.
Okay, so I'm trying to create floating land on which the player is able to jump on. So I
happen to know the frame numbers one and a few other frames are interesting to me.
I'm going to control-drag to create a copy of this. And control-drag. And I'm going to
make one-four is another frame I want. And fourteen is another frame -- Not fourteen,
thirteen I think. Yeah. So I'm going do some snap to grid and then try to align these guys
so that it actually looks like land.
All right, so [inaudible] this there is a floating piece of land. So now is the most
interesting part for this demo. I'm going to do some trick and add a placeholder here just
like the usual way, what we have been doing, and set the origin to bottom. I'll explain
what this is all about. So I have created a -- Let me turn off the snap to grid. So I have
created a little square which is going to be the bounding box for this player. So let me
make the opacity 50 so that I can see through it, and I'm going to create it as a bounding
box for this player.
Right? Okay. So I don't want the, you know, props which he has and other things getting
in the way. So at this point we have everything set up for the player to jump on the solid.
This is where Construct 2 comes in and saves us a lot of time. So if you look at the
properties there is something called behaviors which comes built in with Construct 2 for
all the projects which help you assign a kind of behavior to each object.
So I'm going assign a platform-style behavior to this object, and let's see what that
means. So I have selected this box which I will call "Player Box" and I'll this as "Player."
So I have added this platform behavior to this player box, right, and I'm going to declare
this as a solid behavior, make it as a solid. All right. So that's what I did. I haven't written
any code. So let's see what happens.
So I'm using my keyboard to jump. If you look at the bounding box, it's jumping around.
So we did not write any code and we already got the platform behavior for free. Right?
So all we need to do is bind this player to the bounding box and hide the bounding box.
So I'm going to hide the box by saying initial visibility to invisible, and I'm going to go to
the event sheet. Okay, so this is another little new concept. So event sheet is the way
you program with Construct 2, and whatever you have in here would be executed 60
times a second and it would be rendered on your screen. Right?
So what I'm going to do is I'm going to ask for a retake, position the player to the player
box. Okay, so a retake: we are asking the system to position the player to the player
box. So now we have hidden the player box and now let's see what happens. So that's
it. So your player is jumping now.
So there is some more scope of influence here, for example if you want, you know,
mirroring the player. If you click on the left key, you want the player to face the correct
direction, right? So let's do that by adding a keyboard object. It's going to take five
seconds to have it available. That's it. And I'm going to add on key pressed. When the
right key is pressed what do I want? I want the player to mirror, not mirror. And when the
left key is going to be pressed I'll say I want the player to be mirror. Okay. So let's run.
So he's mirrored. Right? Okay, so we have a basic set up over here. And as you can see
I can add more animations to this particular player. So in the interest of time I'm just
jumping on to one of the checkpoints I have where I have added, you know, the jump
animations and jump to run animations and all that to this particular player to help me
with getting on to the next part.
Okay. So I'll show you animations, what we did. So last time we saw here there was only
one animation, and now we have added a bunch of animations. So that's it. And we
need to have some logic tied in as well. So all it does is if the platform is moving then set
the animation to idle to run and when the animation idle to run is done, go for run. This is
just a simple [inaudible] which you can figure out.
And if you run this, you will have those nice -- you know, the run animations and jump
animations and all that. Okay.
Another interesting thing which we should do for the player -- I already added it. So there
is behavior called Scroll To behavior which means that the screen will follow the player.
Let's remove it and see the difference. So without Scroll To behavior if the player jumps
off he is not shown in the screen, right? So let's add a Scroll To behavior and now let's
see what happens. So let him jump off the cliff. So it follows him. Right? Okay.
So now that we have the player let's add some enemies over here, so I'm going to make
a copy of the floating land by control drag. One more and one more. Okay. And I would
like to add an enemy to it. But before that let me add just the window size; 640 x 480
sounds 1995. Now we can see that the dotted lines are, you know, expanded so that you
have a bigger window.
So I'm going to add a sprite for the enemy, and I have a few enemies. Oh, that's not
what I wanted to do. I wanted to import sprite sheet. I'll delete this. And I do the shift crop
to remove extra space around it, and I'll set the origin to bottom and apply to whole
animation. And I'm going to set the loop to yes. And snail is a snail so it can be slow.
Okay? And snail is also like the player actually, right? He's also a platform-style object,
and he wants to move around the platform and jump off the platform and all that. So let's
give him the platform behavior as well. And if we run this, we'll note something funny.
So the control is applied is applied for both the platform objects, so we don't want that.
So we will remove this guy as being controlled. Nope, I don't want to control you. And
now they're independent so you can jump. That's nice.
Okay, now we have added the snail and the player is ready. And the next thing,
obviously, is to make a way for letting the player kill the snail and the enemy kill the
player. So how do we do that?
Let's do the player on collision with another object; the other object being -- Oh, I should
rename it. Let's do it again. Player on collision with another object, the other object being
enemy. Okay. So this is going to execute whenever the system detects a collision with
the snail enemy. So we want to do a couple of things here. One is if the player jumps on
th snail, obviously the player wins. And if he is coming into contact with the snail on the
sides, the snail wins. Right? So let's do the first case, and I'm going to add a sub-event.
And here I'm going to say is falling. So if he is falling and he is colliding with the snail
enemy then we know that the snail should be killed. That's it. And the next case means - Ah. The next case means the snail wins, right? In that case we would want to destroy
the player. Let's not destroy the player but we'll, you know, flash the player saying that,
"Okay, he's under trouble." So for that we have a behavior called flash which we will add.
Okay, we have the flash available and we can make the player flash. So it's going to
flash for one second, so let's try that. So the snail is killed and when we come into
contact -- Oh. [laughter] And when you come into contact with -- Oh. [laughter] Okay.
Oh, no. Okay, fine. So you're supposed to be a little bit out. [laughter]
It's fun, right? You can delete your game. Yeah, now he's flashing so that's what we
want, [inaudible]. And you can some little bit, you know, realism here by, you know,
having the platform jump a bit when you jump on the snail. That you can achieve by
setting some offset several hundred pixels. So this will give you that nice jump effect.
You see that jump effect? So that's what we got.
Okay. So what else do we need to do? Okay, now the obvious thing next to do is to add
some scoring capabilities to your game. So let's add some scores to the game. Now is a
good point to talk about parallax. I don't know if you guys know this: so if you go to start
screen and you scroll around, the background -- You know, the stars in the back? -- they
scroll a bit slower than the foreground which gives you a nice depth effect. And this is
the same technique used in all the popular games like Angry Birds and all that. When
the bird flies, the background scrolls smoothly which gives you that nice depth effect.
The more layers you add, the more depth you will get. So let's add some depth to our
game by setting the background to move a little bit slower than the foreground. You have
a parallax and you can say move 50 percent slower than the foreground.
And we were talking about scores, so I'm going to add a layer for scores and call it
heads-up display. And it's always going to be on the top. And obviously you want to
always see the score, right? I mean, your score should be always in the fixed position
either top left or somewhere so we'll make the parallax zero which means it's going to be
fixed. Right? So I'm going to add a text box and notice how we are placing it on the HUD
layer.
And I'm going to call it score, start off with zero, and we'll make something like light color
and we'll make it big and visible, highlight and an impact font. And I'll make it something
big. Okay? So now you can see that we are going to have score up here at the top left,
and it won't scroll away. It will just stay there. Because we have set the parallax to zero,
it will just stay there which is good.
So how do we keep track of the score? Obviously we declare a variable. And initial value
is obviously zero. And you can see that applies over here saying that the global number
is a score of zero. And I'm sure you can guess the next step, so I'm going to add ten to
the score.
That's it. So whenever you kill a snail you get ten points. And one more thing we have to
do is update the text. I'm going to say score, colon, concatenation with score. So if did all
this then we should get ten points when I jump on the snail.
Okay. So we got ten points. Cool. So that's pretty much what I wanted to show to give
you a taste on how to, you know, developing games with Construct 2. And let's move on
to the next section where we wanted to talk about the plugin enables bringing in some of
the rich Windows 8 features into Construct 2. So for that I will -- I think this is going to
crash. Don't say it.
Okay. So I'm going to have a final -- not final but better version here to show some more
things which could be done here. So I'm going to play it a bit to show you. You can see
that I have made the snail move around a bit. There are some points to be collected with
this fruit things which are rotating and some coins to be collected. And your level is
complete. So that's what we have as the game right now.
And let's try to export this to Windows 8. So you can go to file and export project, and it'll
give you a bunch of options. Notice how Windows Phone 8 is also present there. So you
can export to Windows 8 and that's it.
What Construct 2 is now doing is it's creating a Visual Studio 2012 HTML 5 Java Script
project and backing up all of your resources which you are using in this game and
creating a project file for you. So once it's ready we should be able to hit a file and it
should just work.
So I'm going to open the destination folder and locate my project, open it in Visual
Studio. And I just need to do one thing to choose this test certificate. Okay, and it's ready
to run. So you have your Windows 8 game which is, you know, pretty much ready to
submit to your store. So it's just exactly the one which we played in IE, and it's just there.
So at this point I realize that the Construct 2 gaming environment is missing out on super
cool features which we introduced in Windows 8, for example like the settings charm,
integration with settings charm, roaming settings, sensor support and, you know, the
snap view, all these things.
So if you think about the target audience, they are so used to programming in Construct
2 with drag and drop and the way I showed you for the last 30 minutes which is a very
simplified form of game development. So I thought that if we fill in the gap by bringing in
the rich features from Windows 8 made available to Construct 2 IDE then more people
would start using the Windows 8 features.
So I went ahead and wrote a plugin called Metro, which I don't know why I named it that
way; it was cool at the time. And let's see how it helps us. All right, so I showed you that
you can export the game, and it's already available. I'm going to show the value adds
which this particular plugin provides when you use the plugin. So it's just like any other
object for this project, Construct 2 project. So I'm going to right-click on insert new
object, and this is the plugin which I wrote which I talked about. And I'm going to insert it.
And just like any other object it will be available soon-ish and we have the [inaudible]
available. Right? So you can see that I have a bunch of features over here which we will
talk about in a while. And if we export this now, let's see what features we get for free.
So now Construct 2 is composing a project but it's also adding some features which I
wrote as a part of the Metro plugin and compiling everything into Java Script. So in fact
we should be able to open up the generator Java Script and look at whatever code there
is. It's all readable.
So we go back here and show reload, and I'll do this again. And now let's run this. So at
the first look it doesn't look any different, obviously. I'm not going to add special graphics
for you just because you added the plugin. So the first thing you would notice is that if
you go to the settings charm I have added the preferences, help and about by default.
All right? So you get this for free. So you ge the audio and sound effects switches and
everything added for you for free. And you can have your help page in your settings
charm for free, and you can have your about page in your settings charm for free. This is
all just adding the plugin. And once you export it, you get all this for free. It saves a lot of
time for you, right? You don't want to redo the whole thing and, "Oh, I want to do an
about page then how do I --" you have to start learning Java Script. And, "How do I
integrate it with Construct 2?" It's all done for you.
You just export it with it and you got it. And we know that Windows 8 supports snap
view. And most of the games are designed for screen playing, so this is my default
screen where I can say, "Press full screen to continue playing." And of course the
markers here, you can replace it with whatever you want. Right? So once I click this,
you'll be taken back to the full screen. So these are some little conveniences which you
get for free if you do that plugin, and your app would feel more natural with Windows 8
paradigms.
So that's what you get for free. So what else can you do with some more effort? One of
my most favorite features in Windows Store Apps is the roaming storage, roaming
settings. I don't know how many of you are familiar with it? So it's the concept where if
you have your app installed in a computer with a Microsoft account connected and you
store something on that PC, Windows will take care of roaming those settings to every
other PC for that user.
Which means, for example, in a game environment it's very easy to store the high scores
in one PC. For example you are playing on Surface and you want to store the high score
in Surface, and when I launch it in the laptop or some other PC then it should show the
high score, right, because they all roam magically and you don't have to do anything
special.
So when I wrote this plugin I started realizing that in order to demonstrate all of the
features that this plugin supports I needed to have a sample app so that people can look
at what's possible and to [inaudible] that this is actually a, you know, working plugin and
you can actually use it for a production environment.
So I kind of wrote this breakout clone. This is an app in the store which I kind of call a
sample for my plugin. And I installed this app in this machine for the first time. I haven't
played on this. And if I go to these levels, you can see that all my high scores and stars
and the level unlocks are all populated here. So if I had played it, it would be, you know,
the lock buttons all the way. But because I am using the roaming settings, I get all this
for free. I'm just storing it locally and it just roams, and it's available on all my PCs.
So I'll get back to this app a bit later when we talk about particular features. So I'll show
you how to do the roaming settings here. So this is very similar to the one which we did
earlier; it just has some more bells and whistles. I have created some groups for nicely
organizing the events. So let's say you want to store these scores in the roaming
storage, how do you do that?
It's as simple as search for roaming, set roaming value, and you can specify the key as
high score, and you can save the score as the high score. Right? So what this does is
behind the scenes when you generate a Windows 8 project, this will put in the necessary
WinJS API which calls into the roaming API of Windows 8 and then stores your score
into the store which means that this will be available in all your PCs.
And let's say for example you have stored it here and you are launching it on a fresh PC,
right, so you want to retrieve whatever you stored. So how do you retrieve that? What
you can do is you can say -- So during this start of the game, what you can do is -- Let's
say I want to populate the score from previous session which you played on Surface,
what I can do is I can do systems, set value, Metro dot, roaming value, high score.
So this would retrieve the value you stored somewhere else and make it available to the
other instance. So that's very convenient. This is how I wrote this particular app so that
whenever you play -- I doesn't matter if I, for example, get a couple stars in this and if I
go back home, my level will be unlocked and my high score will be available. So that's
how you do the roaming storage.
And the next thing I wanted to talk about was -- So as a part of the app you also get, for
example, resetting the data you store. So let's see: go to preferences. And so this one
we'll clear off all the settings you have stayed in roaming storage or local storage. So
you can click reset and then, do you really want to clear the storage? So this will clear off
all the unlocked levels and your high scores and all that. So you get all this for free with
this particular plugin.
And of course Live Tiles. So you want to add support for Live Tiles from your game. For
example, whenever you detect that the player has crossed a high score or unlocked a
level you want to publish a shout out saying that, "Hey, you have cleared a new level!
Congratulations!" or whatever. Right? So how do you do that?
You can do Metro, update Live Tile. So that's it. So once you do that we'll take care of
the magic how to create the XML 4 publishing layers and make it available for the wide
tile and all that. So this is how you get this particular message from my app. So that's
how I publish this particular message.
And another important thing with Windows 8 which Construct 2 doesn't have a way to
tap in is the [inaudible] model. So we have the concept of trial app, we have the concept
of in-app purchases, we have the concept of advertisements, right? So you can do
something Metro is in trial mode and you can expose certain levels and not expose
certain levels. You can have mode kind of enemies, you can have super powers. You
can have the shooting special bullets and all that based on whether you are in a trial
mode or not. And you can also have in-app purchases, so you can check whether the
user has purchased something special. So you can check the in-app purchases, no ad.
You have to configure this in a special way. I have all the details in my blog.
But this is how it works: you can check whether the current running system has
purchased or made a purchase for this in-app then you don't show the ad. So that's what
I did for this app. So if you go to charms, settings, purchase. So it's actually contacting
the Windows Store and then retrieving the, you know, "If you wanted to remove the
advertisements, please go ahead and upgrade it" for whatever dollars there. And if you
click upgrade, this will actually go ahead and invoke the purchase dialogue and
complete your purchase. And once you go ahead and buy it, when you come back you
can check again and then you will know that, "Oh, this guy has purchased no-ad
experience" and you can remove the ad. So that's one way to structure your game.
And I have written this blog about these trials and in-app purchases in quite decent
detail, and if you want you can take a look at that. And I also wrote a -- Yeah, this one.
So this one is a summary on -- Somebody was asking a question today on what is the
good way to monetize your game. Like, do you want a free app? Do you want a fullyfeatured paid app? Time-limited trial app or a feature-limited trail app? Or in-app
purchases or whatever? Or in-app advertisements? And everything else. So this is kind
of a summary on what are the various options available for you and how you can go
about doing that.
So apart from that, I am from the team which exposed the sensors API in Windows 8.
My managers wrote, you know, the [inaudible] API. So I also exposed those sensors
API. Not this. Yeah. So you can see here that you can, say, use the accelerometer,
[inaudible], gyrometer and inclinometer and lights sensors and everything. And you can
read whatever values are provided by the sensors and make it, you know, like all the
cool games which use sensors to position the gamer and all that. So that's also available
as a part of this plugin.
So apart from that, if you have played around with trial apps and purchasing in-app
experiences then you would know that you need to stage before submitting to the store.
So when you deliver the app, you cannot rely on -- Because your app is already not in
the store, when you issue a request it would fail. So you cannot complete the testing for
your app. So that's why they have an elaborate scheme for making the app testable with
the local setup. So I have taken care of that as well. And when you, say, purchase test
mode, we'll take care of doing the magic, saying that "Oh, okay." So this is testing mode
and we will do the fake messages saying that "Okay, your app purchase is completed
successfully or failed," and all that. And whenever you really want to submit to the store,
you can turn this to false and then you're all set.
So that's it from my side for today. So this is my blog and I kind of spent, I don't know, a
few weeks over there. And I released ten releases of this plugin every two weeks or
something and tried to cover all the various Windows 8 features available out there. So
that's pretty much from my side today. And hopefully you would feel...
[applause]
Yep, that's what I thought and hopefully you feel the same. Okay. Questions?
>>: Yeah, how did you handle suspend and resume?
>> Arun Babu Nagarajan: How do you handle suspend and resume? So I have the
plugin as a model for pause. So you can detect the call back for suspend and it will
pause your game.
>>: Does Construct 2 handle [inaudible]?
>> Arun Babu Nagarajan: Yeah, by default they just freeze the game. So for example in
the game which I wrote, right? So let's say I'm here. And if I switch away, the game is
already frozen. So whenever I switch away from the game -- Let's say I'm playing the
game, and whenever I switch away from the game like pressing the start button and
when I go back to the game, it's already in the paused state because I handled that by
saying that, "Hey, we received a suspend event, just pause." Yeah. Yeah?
>>: How is the performance of the framework?
>> Arun Babu Nagarajan: How is the performance of the framework? Good question.
So I have tested with Surface, and for a simple game it is just fine. But when you add a
lot of sprites, unless you are doing some optimizations, it can become a little bit sluggish.
>>: What's a lot?
>> Arun Babu Nagarajan: What's a lot?
>>: [inaudible]...
>>: 20, 30, 40?
>>: [inaudible].
>>: [inaudible] you said a lot of sprites.
>> Arun Babu Nagarajan: Sprites, yeah. So this game was having some issues on
Surface, whatever I'm showing here because -- No this one had a lot of sprites because I
developed out all the -- This is my first game so I was not optimizing it properly so there
may be too many sprites involved here.
>>: What was the optimization like [inaudible] across sprites or what?
>> Arun Babu Nagarajan: Yeah, so like we talked about sprite sheet, I did use sprite
sheets. I used single image for every [inaudible]. So that concept I was not aware of
when I was starting out this. So that might help a bit.
>>: [inaudible] choosing a specific size?
>> Arun Babu Nagarajan: Yeah. Good question. I should have shown that. So you
remember we changed the layout size to -- not this -- the window size to 1366 x 768? So
if you make it 1366 x 768 and set this property full screen in browser to any other
letterbox scale or letterbox integer scale, Construct 2 takes care of magnifying it to that
particular resolution or particular 16:9 resolution. So even if you have, you know, like a
bigger resolution then your game would be nicely fitting in.
>>: So you're saying like if that is 16:9 then you just ask it to [inaudible]...?
>> Arun Babu Nagarajan: Exactly. That's why I always say just design for 1366 x 768
and you should get everything else for free. And you will get the black box for every
other viewer resolution. Yeah?
>>: Is this is a part of like the touch thing like pinch to zoom and swipe and all that kind
of thing?
>> Arun Babu Nagarajan: I haven't tried pinch to zoom but you get touch for free just like
anything else. So I actually have a touch screen, and I can touch this and everything
works fine. So I haven't played around with the pinch to zoom and all that.
>>: What about multi-touch?
>> Arun Babu Nagarajan: Multi-touch I have not played. But in fact...
>>: There's a plugin for multi-touch.
>> Arun Babu Nagarajan: Oh yeah? Okay. Yeah?
>>: So Construct 2 supports other platforms as well, right?
>> Arun Babu Nagarajan: Yeah.
>>: So you tried submitting it there and the performance, and how did that experience
go?
>> Arun Babu Nagarajan: So I haven't submitted to any other platform yet. So I don't
know the answer to that question. But from looking at their forums and support aliases,
it's a hugely active community and they are very responsive. So they release an update
every two weeks and they're very responsive. Yeah. Yeah?
>>: Where'd you get your art work?
>> Arun Babu Nagarajan: Can you repeat that?
>>: Where did you get your art work?
>> Arun Babu Nagarajan: I did it myself.
>>: Did you? Now did you have to get audio files also?
>> Arun Babu Nagarajan: Yes. Actually I have audio files but it's not connected. Yeah.
>>: But you don't know -- Do you know if there's like for -- What is it? -- Elance, you
know if they do audio files, people do audio files or are there other ways of getting audio
files?
>> Arun Babu Nagarajan: So for the audio which I used for this project when I
purchased the Construct 2 license it came with a bunch of music files. So I chose
background music and, you know, the ball-hitting-bat music and all that from their
collection. That what was enough for me. But there are a lot of creative commons
libraries out there where you can get free music or you can purchase.
>>: Sound effects [inaudible]...?
>> Arun Babu Nagarajan: Yeah, sound effects.
>>: Construct 2, also I think on the website you can buy sets.
>> Arun Babu Nagarajan: Yeah, they also sell packs.
>>: On which website?
>>: On the same website, the Construct 2 website.
>>: Oh, okay. I like your artwork.
>> Arun Babu Nagarajan: Thank you.
>>: Custom fonts, do they allow you to import fonts?
>> Arun Babu Nagarajan: Sorry, I'm not getting you.
>>: Fonts.
>> Arun Babu Nagarajan: Custom fonts.
>>: Yeah.
>> Arun Babu Nagarajan: Custom fonts. So you can choose whatever fonts are
installed on that particular machine, that's it. As far as I know....
>>: [inaudible] in with your game, though. Right?
>> Arun Babu Nagarajan: I am not familiar how to do that. I haven't figured that out. So I
just stick to Impact because it looked decent enough. Yeah, but I see where you are
going with that but I don't know how to do that. Yeah?
>>: You can add any custom CSS properties that you want and so then you could go
ahead and package your font like you do with a web platform.
>> Arun Babu Nagarajan: Yeah?
>>: When you were setting up your events and sub-events, etcetera?
>> Arun Babu Nagarajan: Yeah?
>>: When you had multiple actions per event and per sub-event, is there a limit to
those? I mean can you set it up [inaudible] person falls off and is destroyed. Is there
upper limit on what you can do with that?
>> Arun Babu Nagarajan: No. So for the free edition, I think they have an upper limit of
number of total events to be a hundred I think. And for, you know, licensed version you
don't have any limits.
>>: So it's complicated.
>> Arun Babu Nagarajan: Yeah, you go whatever complications you want.
>>: But I think with the free version they don't want you to publish games anyways.
>> Arun Babu Nagarajan: Sure. You can publish games if you are making it as a free
game. You cannot have ads and sell it. Yeah?
>>: What software did you use to create your artwork?
>> Arun Babu Nagarajan: So I came across this website, 2D game art for developers,
and InkScape is the website. InkScape is great because you can do vector graphics so
you can scale it to whatever size you want. And the interesting thing to note here is that - So for, you know, these tiles and splash screen and all that, for Windows 8 you have to
supply, you know, a variety of versions for these images: one scaled for a hundred and
another one for a hundred and eighty and two hundred and something else. So that's
very easy if you have a program like InkScape which works with non-[inaudible] formats
so that you can scale it and then easily export it, and you're done.
>>: [inaudible]?
>> Arun Babu Nagarajan: InkScape. Yeah. That's [inaudible]; it's free?
>>: Have you ever tried to use Expression...?
>> Arun Babu Nagarajan: I'm sorry?
>>: Have you ever tried to use Expression Design?
>> Arun Babu Nagarajan: Expression [inaudible]?
>>: Expression Design?
>> Arun Babu Nagarajan: No.
>>: Does it export formats [inaudible]?
>>: Nothing you can actually send to a graphic artist [inaudible] 3D Photoshop or
InkScape [inaudible] any success with it.
>>: Yeah, [inaudible].
>> Arun Babu Nagarajan: Yeah?
>>: Can you debug the content to? [inaudible]?
>> Arun Babu Nagarajan: So because I -- Yeah, so debugging through Construct 2 is
not very straight forward I think but I haven't had a problem which was actually worth
debugging through Construct 2. But while developing the plugin, I had to obviously
debug the generated Java Script to make sure that I'm [inaudible] but not the APN and
all that. So I definitely did debug with Visual Studio, yeah. Yeah?
>>: Does Construct 2 provide any kind of physics? [inaudible] like physics...
>> Arun Babu Nagarajan: Physics? Yeah. So they have a physics behavior. I think I can
maybe quickly show a --. So yeah that's a template. You have the physics over there. So
it basically uses Box2D. Yeah?
>>: So in order to actually change the code, you have to export to Visual Studio. Did
you find yourself ever having to do that? Or are the tools they provide so good that you
actually write the entire thing in there and just export it in?
>> Arun Babu Nagarajan: That's right. They have everything which you need pretty
much. And in fact, I mean, because I wrote a plugin you can also write a plugin if you
find something lacking. Right?
>>: Can it do multi-page projects? Like, you know, I understand that you can do one
layout. How do you do multiple [inaudible]? [inaudible] or is it like make them
[inaudible]...
>> Arun Babu Nagarajan: Yeah, so there is -- so this one, right, this is one layout. This
is one layout. So I transition from this one to the next layout by calling a system dot go to
layout. So they provide this. Yeah, so you can transition between layouts, and you can
have your own [inaudible] on which layout you are. And based on some numbering
scheme you can say, "Oh, he's in layout 1-7." And then when I click next, you know, skip
a level then I would know that I have to go to 1-8.
>>: So they alert on [inaudible]...
>> Arun Babu Nagarajan: That's all taken care of.
>>: Okay.
>> Arun Babu Nagarajan: Yeah?
>>: Does you plugin provide for ad support or someway to add ads to your game?
>> Arun Babu Nagarajan: Yes. Advertisement support, right?
>>: Right.
>> Arun Babu Nagarajan: Yeah, so I do have a way to add the advertisements. I kind of
detailed it in this -- Let me see if I have a post on it. Yeah, so I have a post on it and this
will take you through how to actually add ads to your game. So that's how I did this for
this game. Yeah.
>> Jeremy Foster: Okay. Let's give Arun a round of applause.
[applause]
Download