>> Ben Lower: My name is Ben Lower and... XAPfest if this is your first time, it's an internal...

advertisement
>> Ben Lower: My name is Ben Lower and I'm the host for XAPfest. And
XAPfest if this is your first time, it's an internal Microsoft focused event, although
we are starting to go external. So this recording, this is being live streamed on
on RESNET and it will be recorded and posted for people to view later, as well as
people externally to view.
But XAPfest is really focused on people building apps and how do they make
great apps, how do they make their apps better? And so we really have a focus
on getting interesting speakers from across the company and sometimes even
external partners to come and talk about how you can make your app better, how
you can monetize. In this case, the Coding4Fun guys are going to talk about
some of the great work they've done if providing tools and open source code that
we can use to get started with, learn from, build on top of.
So tonight we're going to hear from Clint Rutkas, who is right here, and then
Larry Larsen as well. And so with that, I'm going to turn it over to these guys. So
please welcome Clint and Larry.
[applause].
>> Clint Rutkas: Okay. So just so you guys know, I have lots and lots of Power
Point. So be ready to be bored. About us, we are actually on the Channel 9
team. There's our aliases. Crutkas and Larryla. So if you do have questions,
you can e-mail us.
Does anyone know what Channel 9 is?
>>: Yes.
>> Clint Rutkas: Okay. So I won't go into that then. I run Coding4fun, and now
we're just going to go straight into code. And you can see one of the crazy
projects I'm working on.
Okay. So I had -- I built out about 10 apps right during -- right before launch to
give code examples and whatever. And I realized I was reusing a lot of the same
controls. So in doing so, being the good little developer I was, I refactored all of
these into a common control set that would make people's lives easier. And the
goal here was to make your apps look cool, clean, and consistent with metro
guidelines to the best of my ability.
Some of these controls are things that I found were lacking. Other -- in the
current kit. And other ones were I just hated how the current item worked,
namely the slider.
So first off, prompts. There is no input dialog. Is everyone in Mango? You know
how there's a message box. Is there an input dialog?
>>: I don't know.
>> Clint Rutkas: Okay. So let's just assume there's no input dialog. So you click
it, and it looks very metro like. It may not be perfect guidelines, but it still fits that.
So I can type in, you know, whatever. Click okay. And you get your response
back. It's very that driven, it's exactly how as a developer you would expect it to
work.
Back in the day, you had to use about prompts and give information, so I created
-- basically here's the -- here is a more stylized version. There's actually a water
mark Coding4fun had there. So you can do lots of cool things and make your
app look very powerful just by adding in a couple lines of code.
>>: Is that actually your URL?
>> Clint Rutkas: Better than everyone? Yeah. I have a small ego issue.
[laughter]. So really quick I'm going to go stop this and just show you like how to
actually make that control. So prompts. Okay. So here's the input prompt code.
And I need to make this bigger because people probably can't see it. Can
everyone see that? Yes?
>>: Yes.
>> Clint Rutkas: I hope so. Okay. Good. Because that's going to get really
awkward then because it's very small already. So once you reference
Coding4fun library you go input prompt, give it a title, message, put in an event
dot show, you're good to show. Is that easy enough?
>>: Yes.
>> Clint Rutkas: Yay. And then you get a response back. You get a popup
result of okay, cancelled, and there's also a user dismissed because you can do
things like the back button. So that basically says, hey, that person clicked okay,
here is the result, what have they got back? If you notice here, I had the popup
event args, and that's because I inherit off of a template that gives the base class
here a lot more power so I can do string, I can give back a location, if you will,
and the event that -- I'm sorry, the result is that object.
So the about prompt -- rely, that's actually ironically perfect. So all you do is you
put in your name, your Twitter handler, e-mail and then the URL you want, and it
just shows it. Yes?
>>: The reason you chose even driven is because you were thinking of ->> Clint Rutkas: Event driven?
>>: Yeah.
>> Clint Rutkas: It's because that's .NET. It's a .NET paradigms, and that's what
I opted for.
>>: So typically if you checked for the message what was for instance some sort
of dialogs not necessarily [inaudible] do they expect a show or show model then
okay or not okay then you keep going in the same method?
>> Clint Rutkas: Why couldn't I do that? Because I think I couldn't figure out
how it actually locked. I asked the question. I think technical DPE or -- and even
WP7 and no one could tell me how that worked.
So I just assumed it was magic and stepped away and did it the way I knew how
to do it. I'd love to do it like that. I just don't know how.
And being, you know, a typical developer, I just figured out a different way and
moved on that was close enough. Do you know how? Oh. [laughter]. I'd love to
know how honestly. That is something I really kind of want to know how to do.
Going back to this. So another big problem is how to test this. So you see, I
have these two testing objects here. The gesture library within the Silverlight
toolkit posed a problem. And that was the -- it detects, even if something's over it
and you click it, it goes through. And that made me very upset. Because now I
had to take a direct dependency on the Silverlight toolkit to prevent this from
happening.
So I'm actually clicking now. And it's not bubbling through. So what do you have
do is on the -- whatever object that overlays it, also wire up gestures and then
capture it and then cancel it. And you look very upset because I was also very
upset when I figured that out.
I'm not sure that -- I know Mango has a bunch of the stuff built in now. To what
degree, I don't know. So I still -- you may still have to do something kind of
hackish like that. What else?
Okay. How many people like push notifications? How many people hate how
you actually have to use them in your app? Yay. So what I did was, I just built a
control. So you can do basically whatever you want to it, and you can swipe it. It
would help if I actually let go. And that was that user dismissed and they're
based on a timer, so they act just like a real dialog.
All that is, once again, you know, toast.show and you're good. I'm kind of like the
Dell guy, it's like good to go.
There's also a message box, password prompt. Password prompt is kind of
interesting. So, you know, how when you're typing on the phone you see the last
digit. So like you go GH, that you can't actually do with the normal input prompt
so actually had to kind of hack it so it works like it. But these are like, to me, the
little things that make the differences, given that end user the full experience of
what they expect.
So if they're typing in their password, it should act like the system app on here.
>>: [inaudible].
>> Clint Rutkas: No. The password box, what that does -- I'm aware with that.
But it -- so you see how my H shows right now?
>>: [inaudible].
>> Clint Rutkas: If you use a password box, the H would be the dot. So you
don't know what the last thing you typed is.
>>: Well, I think it gives you like a two or three second view.
>>: It gives you a very brief view of the H, but then it becomes a dot I think is
what you were saying.
>> Clint Rutkas: No. And I will challenge that assumption right now. Because
I'm -- because that would be very embarrassing on my part.
>>: Well, no, I don't think the password box does what yours did there, which is
persist the H.
>> Clint Rutkas: Well, we'll find out right now. See that is new behavior.
[laughter]. Because this is Mango. This is Mango too. Oh, okay. So in 7.0 land,
it was not like that. And, crap, my phone's running Mango right now too. So I
have no way of verifying my claim now.
So now that I see that, I will go back and change my control. Okay. So let's go
talk about. How many app people in here have controls that need color, color
dialog? One person. Two people. So do you you wanted a slider, a picker or
kind of like what's in Microsoft Word? Let's show Microsoft Word, because that's
a cool one.
Okay. So Microsoft Word has this hexagon control. And it lets you pick on what
color you want. But let's say you want more. So you can go pick out your color,
however you want the end user can pick it. You can set the sizes, the gray
steps, the brightness steps. And either you can do it via binding or via events.
So let's say if I don't want any dark colors, it's going to go to brightness.
So if you ever used -- have to find a color in Microsoft Word that kind of had this
hexagon control and this was my way of making it metro like, for a color picker,
this is -- once again, this is a testing app. It's for me to verify my controls work.
So if I pick my color and go up, change it, everything works via binding and -- so
if you need color.
And then lastly the slider, same concept. Do you guys like that? No?
>>: [inaudible].
>> Clint Rutkas: One big thing is I'm a firm believer in using the controls from my
kit in the kit. So this is actually my super slider control that I built as well as
powering that. So then what I create, I'm also dog-fooding in the actual item.
And speaking of the super slider. So I have this hatred for the built-in .NET slider
because it didn't act as I think it should. When you start off like a media player
and you want to jump time, when you click like, you know, four minutes in, what
do you expect to it to do?
>>: Jump.
>> Clint Rutkas: Jump to the four minutes. And now, if I did that if a slider
control, a built-in slider control, what does it do?
>>: [inaudible].
>> Clint Rutkas: It increments. And I hate that. So much so, I built my own
control. So I click and it jumps directly to where I clicked it. That's how I think
and end user was want it to work. Do you guys think that?
>>: [inaudible].
>> Clint Rutkas: Thank you. Time well spent. It can do stuff like steps. You can
have -- I don't know why that says with a thumb because it doesn't have a thumb.
Here's one with a thumb. So it's heavily customizable. You can do vertical,
horizontal. It just works.
>>: How many pieces of [inaudible].
>> Clint Rutkas: No. That's actually a gradient brush.
>>: [inaudible] minimum pieces of ->> Clint Rutkas: It does not have 19 pieces of flair.
Another big one is round buttons. So you know how you have the app bar.
>>: [inaudible].
>> Clint Rutkas: Yeah. Well, it -- so what I did was I created app bar buttons
that act just like the real app bar because people -- like I had many times where I
wanted a round button to make it look like the app bar. I didn't want the square.
So I created a full borne control. This actually works very much like the -- it's
actually a real button. But, you know, how when you had the app bar and you
put in an image into it, that basically ->>: [inaudible].
>> Clint Rutkas: Yeah, it basically makes it into one color. This uses an opacity
mask. So it acts just like that. So if I do something like crazy like that, it works
just like the real buttons. So you see like this button, the text turns black. You
click these buttons. It turns black. So like I said, it's the small little things, the
extra polish, the annoyance so like, hey, this is two pixels off that other
companies have. Like I'm a firm believer that those things should have them.
You also have rounded buttons. And this is something for you guys I just added
in is piles. So you can do animations, crazy stuff. So all these controls, this is
basically a button. One cool thing also I added that is not in Silverlight but it's in
WPF is called ClipToBounds. Do you know what ClipToBounds does in WPF?
>>: [inaudible].
>> Clint Rutkas: Okay. Now I get to use the white board. So you have an
image. And that image bleeds out. ClipToBounds would basically go like that.
So now everything is in there. So this image right here is actually ClipToBounds.
The background image would actually bleed through on the top and the bottom if
I didn't have that property set. But it's a very useful item so then you can do
crazy positioning, kind of like that head right there, where it's all the way up to the
right. But you ClipToBounds it and because it's a rectangle clipping, you know,
Silverlight likes it, and it's not going to be angry with perf. So then ->>: [inaudible].
>> Clint Rutkas: Pardon?
>>: The case of that animated button right there ->> Clint Rutkas: Yeah.
>>: Is there a special way [inaudible].
>> Clint Rutkas: No. Click me just says hey click tile. The reason why I have
roar is because A, it's T-REX. So you see the 99 there? That's a control I put in
there as well. But the cool thing with that is if you overflow it and made it so it
pops outward and then what you can do is even more advanced stuff is that -- is
that this control just more stylized. Yes?
>>: [inaudible].
>> Clint Rutkas: I just added this in, but this is -- there's no -- I don't see any
reason why they wouldn't allow that.
>>: [inaudible].
>> Clint Rutkas: Having a control that looks like a system level control?
>>: [inaudible].
>> Clint Rutkas: This is me -- this is a test version. I'm not saying do this. But I
can't -- so you're telling me I can't have an app.
>>: [inaudible].
>> Clint Rutkas: I'm looking at you on this.
>>: Don't look at me. If -- we can ->> Clint Rutkas: Okay. Take this offline then. I don't know. I'm not [inaudible].
>>: [inaudible] official rule is. I think it is discouraged for sure that you would try
to mimic the home screen in your app. It's just sort of confusing to users many
I've actually reviewed apps where the app itself had a bunch of tiles and I was
like, wait a second, am I at the home screen or am I in this app?
But I think to your point, you're not saying to do this, you're showing some ->> Clint Rutkas: I'm just -- this is a proof of concept to prove that I can do stuff
like shrink the button, I can do stuff like make the button longer and do stuff that
looks like it, which is ironic because I have a fake co-app that pass market place
which does exactly what you guys are saying not to do.
>>: I'm not sure -- I'm not sure if it's an official guideline or not, so we can take
that offline.
>>: But I mean you could have one tile on your app, and that's not going to
confuse people that it's your start screen. So if you have one or two or three,
whatever it's the -- but if you have two by four grid ->> Clint Rutkas: Yeah. Like you said.
>>: [inaudible].
>> Clint Rutkas: This entire -- this simple app that I have here is all about me
stress testing the stuff. So then when you guys consume it, it works. And works
hopefully how you think it would. So how many people have gotten rejected for
memory issues? Me. Okay.
So I have this really kind of cool control that does naughty things. It uses
reflection. So up in the upper right you can see the left is current, right is peak
memory usage. This control only wires up if the debugger is attached. And
because it uses reflection it doesn't kit Marketplace issues.
So what I can do now is add. And you'll see it goes up to 32. I have remove the
memory from it, and it's going to drop back down. Because if the only way a
debugger is going to get attached, the control is if you're running it on your own
computer, because it uses reflection it never gets wired up when it passes
through Marketplace. So then you don't need that fly enabled, and you don't get
hit for identity, the seminal identity flag.
I think now with the profiler, I don't think this is even needed anymore.
>>: This control?
>> Clint Rutkas: This control. Am I correct on that? Profiler can do memory.
>>: We can trace it [inaudible].
>>: [inaudible].
>>: It seems like what you're doing is you're adding memory to see if you crash
the app.
>> Clint Rutkas: No, I'm adding memory to prove that the current memory works.
So all I'm doing is just adding to -- that's a good question. How am I doing that?
This has been a while since I actually wrote this one. So I have a list of bytes
and I'm just adding them. So it's kind of ghetto, but it's very effective to show that
off.
And then the slider, overlays. And time spent. Okay. So time spent. So we
have the date picker and we have the time picker. But at no point did we build a
time span picker, which for me is a very important control for like saying I want in
thing to run for five minutes or 30 seconds.
So you click that. Hey looks just like the time span picker. But you have hours,
minutes, seconds. And you can set all these things, and it works just like the real
one because it's based on the exact real one with the time span picker.
>>: [inaudible].
>> Clint Rutkas: But -- I don't know why we did that. That's a good question.
>>: [inaudible].
>> Clint Rutkas: I don't know. Does the time span picker -- I'm sorry, does the
date or the time, does that use plural? I don't know I didn't -- another Microsoft
person picked that out. And this control is actually culturally aware as a well.
Because it does use normal text. So if I click German, it adjusts it appropriately.
So now we've talked about how to build out controls and a bunch of other ones.
Do you guys want to find out how to actually make a control? Yay. Sweet.
Because I was going to tell you anyways.
Okay. So I have this blank app here. I just went file, new. Solution. Now, some
of this will look like black magic because it kind of is. So you need a theme's
directory, and in that theme's directory you need generic.xaml, okay?
So what you do is first you create a new control. I named it my awesome control.
And then in that control you can inherit off of control button, whatever you
choose. Then you type in the -- a credit constructor, and you say default style
key equals type of my awesome constructor. This then will allow you to wire up.
The system knows where in this it is and then will start applying the templating.
Now, if you need to do additional work on here over ride on apply template. If
you need to grab stuff out of the tree, call that, and this is -- having has already
been initialized, you can start grabbing stuff and then hooking in events.
Because a lot of the stuff you just have pure xaml but you can't actually wire up
events in it. You have to do the wiring up in this apply template.
So then you go to your generic xaml. And you need to type some resource
dictionary. And then you do the base, name spaces. And you put in -- let's say
you're local. So this is my name space. It's the test zapathon. And because my
control is in that name space, you have to type, you know, local: My awesome
control. You don't actually need this.
But what you do need is setter property equals template. And you set the value
and you have your control template and you target that control. It's very
redundant, I know. But then what you can do is you can type in whatever you
want here. So then I can say, you know, text block equals hello zapathon. Cool.
Okay?
Now, on my home page I'm going to go -- you can see I already have that
control. Because I haven't compiled that control doesn't show up here. If I
compile it, it's going to say hello zapathon. Now, that's cool, but that's very static.
And I don't know about you guys, but I hate static stuff.
So how do we go to the next step forward? Are you guys aware of dependency
properties? How many people aren't aware of what a dependency property is?
Okay. Cool. Because I was going to tell you once again, no matter what.
So what a dependency property is something when it updates you can point to it
in your control and it magically updates it. Like on a text block, the text field is a
dependency property. So guess what we're going to wire up? The text. So I'm
going to go in here. And I'm going to type prop DP. And what this is, if you -- is a
snippet. Everyone know what a snippet is. Snippet makes your life so much
easier. Because what I -- all I have to do now is hit tab, and it wires everything
up. I can just type string. I'm going to type in text. And my owner class is my
awesome control.
>>: [inaudible].
>> Clint Rutkas: Yes. That snippet is built into Visual Studio. Okay. Now, that
property -- that snippet, though, is meant for WPF. To make it work in Silverlight,
just remove UI. Okay? Enter and it wires up. Now, would you rather have to
remember all this or just prop DP? I like prop DP. Okay.
So now -- now that we have this control buck -- or this string bucket, how do we
put this into the xaml? So I already have my text block here. So I'm going to
remove that. And I'm just going to type in text. And then we're going to do
binding. Because this a template, we pick template binding. And I'm going to
type text. I'm going to save it. And because I am compiled, it gets angry at me.
I'm going to compile again. And it's happy with me now. Yay. And you can see I
put in that default value in the prop DP and it says default. But now what I can
do is type in text equals [inaudible]. So that is how to build a control very, very,
very quickly. Now, you can do a lot more. Let me go show you like -- so here's
some of the, you know, more of the crazy controls. Whoops. Where did we go?
I opened up the wrong solution.
So what you can do here is also set, you know, your border brush, padding,
verticals, template, did you animations built into it just to make your control look
more realistic, whatever. And it just makes it a lot more reusable. And I was
talking about -- let me go pick and put prompt. The on template. And the reason
why -- the reason why you can't do things like events and stuff is because that is
just xaml. What you can do is you can get the template child and you put -- grab
the name of it. And then you can you verify is it not null because someone can
restyle your app and remove that. And if they restyle it and remove it, you want
your app to still work.
And then you can do the binding and everything from within that on template.
Does that make sense? With that, I have two minutes to answer questions and
then afterwards I can answer questions as well. Yay. Okay. Larry, you're up.
>> Larry Larsen: All right. Can I move your machine so I can -- or just push it
back just a little bit here.
>> Clint Rutkas: Yeah.
>> Larry Larsen: All right. So here we go. All right. So I'm going to show you a
little demo and how to make a tower defense game without programming. I am
not a programmer. I watch Clint. I don't know what he's doing. I've only spent -until we did this game, I had only spent maybe a couple hours in Visual Studio,
and that was not to do anything program related, it was to try to figure something
out.
So I'm more of a designer than a programmer. But I really like tower defense
games. I like all of them. GeoDefense, Pirates Love Daisies. I love them all.
And I always wanted to make a tower defense game. And may first thought was
maybe I can hook up with a programmer and I can do some of the graphics and
figure out the game and they can design it. But we came up with a little bit better
of an idea. And that was to pull all of the hard core programming away from XML
files so that I can go in and create my own tower defense game just by changing
some of the properties in the XML. And all the hard core programming stuff is
just completely separate and I don't have to worry about that.
And so that's how we started doing tower defense. And I know Clint is very
excited that it's finally launched. It too a very long time for us to get this thing
ready. And here it is now. And I'm going to show you here -- I'm just going to
right click on our CodePlex project and I'm going to export a brand-new version
of this to my machine. We'll stick it right on my desktop and call it Pirates TD
demo. And we'll just save it there.
Now, everybody loves Pirates. And I'm going to actually go in here and open up
the solution.
>>: [inaudible].
>> Larry Larsen: What's that?
>>: [inaudible] Ninjas.
>> Larry Larsen: You know, you could use Ninjas, of course, but I don't want to
take your game. I'll show you this game instead.
So first thing I'm going to do is I'm just going to run this. And this will show you
the sample game that we have that ships with the code. As Clint mentioned
before, we've included all the graphics. We have a PSD file so people can go in
this and see how we did things like design the maps, lay out the controls for the
game. And we also have sounds which were very well will made sounds done
internally at Microsoft.
>>: [inaudible] use Microsoft game studios.
>> Larry Larsen: Yeah. That was one of the big problems we had. I was just
going to do like, you know, bust and a move on a microphone making this
sounds just to be kind of funny. And Clint didn't laugh. So we end up having to
use ->> Clint Rutkas: So the real reason why -- so we were going to buy sounds. But
then whenever you try to buy sounds they don't want you to -- you can't
redistribute it. So now we had the chicken or the egg problem. I can't create
sounds very well. Larry can kind of. But then we wanted to create a decent
high-quality game that could go in Marketplace and people can download and
actually in a couple case a thousand people have already downloaded the game.
So we had the problem of how do we do this. So because it is an internal
Microsoft project we were allowed to use Microsoft Game Studios. We are not
making money on this. This is a code sample. You guys can then download the
code from scripttd.codeplex.com. You reuse all our assets. We don't care. But
we -- Microsoft owns the sounds, assets, so we can't get in trouble now for
redistributing them. That was our big problem was how do we redistribute the
audio without getting in trouble.
>> Larry Larsen: And there are places where you can buy sounds to use in your
game that you sell on Marketplace.
>> Clint Rutkas: Yes.
>> Larry Larsen: But it gets a little bit more difficult when you're giving those
sounds back away to other people to sell. So ->> Clint Rutkas: That was our problem.
>> Larry Larsen: That was the problem there. So don't fret. There are places
where you can -- you can buy sounds inexpensively --
>> Clint Rutkas: And they're quite cheap too.
>> Larry Larsen: And you can use them in your app, and no problem. And of
course you can use our sounds as well.
So I'm going to go ahead and start this. We'll do a new game. If you've ever
seen a power defense game, it's pretty simple thing. You have the enemies
which are called creeps. They come in one side. They try to leave through
another side. That site might be the top, might be the bottom, could be very near
to each other. But for this game, we're just going to go ahead. I'll pick a map
here with a couple different kinds of towers on it. And you just drag your towers
out. And I'm actually going to hit pause here because I'm not ready for all these
creeps to come out yet. And I'm going to drag this one.
We'll make kind of a little bit of a maze. One have the tricks that a lot of people
do when they're playing tower defense games is just to try to make a maze that
these things have to go through.
And as these creeps come out, the idea is you want to kill as many as you
possibly can. And hopefully all of them. Because if 10 of them make it off the
other side of the map through this exit, I'm going to lose the game. There's a
series of waves so you could have 10 waves, 20 waves, however many you want
in your game.
Now, because a lot of tower defense games are very similar, the only thing that
we really need to do is change out the graphics to make this game look
completely different. And I'm going to back out of here and.
>>: Is this Silverlight or is this XMA.
>> Clint Rutkas: This is XMA.
>> Larry Larsen: All right. So I've got a directory here of audio and textures.
And I'm just going to show you real quick what I did here. I've got some new
background. So back where I had, you know, the other background, now I have
kind of a Pirates' theme background.
I made some new creeps. The flying creeps are now seagulls and pelicans. And
the walking -- the ones that used to be walking creeps are now boats. I -- you
know, these are graphics that I used from various places. So this isn't the kind of
thing that I would put out on Marketplace. So caveat emptor on that.
I created new maps which are the top-down views of the areas. And before we
had like some wood land areas, a desert. And because I'm doing a seafaring
game here, I've just taken some top-down views off of bing maps. And so I've
got Clear Water Beach -- actually this is Treasure Island Beach in Florida,
because it's Pirate game. I've got the Bellagio in Las Vegas because I would
love to see that get infested with Pirates. And a couple other different beaches
from around the world.
And then for my towers, I only made one tower just for this example. You see
you can see it's the skull with, you know, a couple of cannons pointing out.
In our game we have several versions of the same tower. Because you can
upgrade your tower. So you can click on a tower, you can upgrade it once,
upgrade it twice. You can have in our code sample we've got little dots that
denote upgraded towers. But you can have your towers look radically different.
So you could have like a puny little tower. But when you upgrade it, it gets really
big and wild and, you know, outlandish.
And then I've done through and changed out some of the sound effects. So
where we used to have little blurps and sounds like that, now we have Pirate
sounds. [laughter]. And so I just you kind of switched these out. I'm using the
same names that I used before. So we've got like a cannon. This used to be a
machine gun sound. Now it's a cannon sound.
And so I'm going to take this Pirate TV directory here that I've made. And I'm
going to go to my demo and open up the content directory. You can see there is
an audio and a textures directory in there. I'm just going to drag this over. Copy
into it that. Yes, I want to overwrite all these different files. Come in here. I'll hit
play. So if you're an extremely lazy designer or person who is thought a very
good coder, this is all you really have to do. I mean, you're going to see we have
a radically different game here from what we had before, just by switching out
some of the graphics and sounds. Deploying. Deploying. Deploying. All right.
So now you'll see that we've got our Pirate defense which, you know, you want to
move your title so you don't have resume over it. We're going to do new game.
And I'm going to pick the Bellagio and I'm going to go ahead and pause this and
I've got my towers here. I'm going to put my towers down. You can see it only
has one cannon. Because this is going to be the first tower that I'm laying down.
And it's not been upgraded yet.
And then I'm going to go ahead and play this. And you can see as the creeps
come out, I've got a sound that plays. And I might need one more down here,
just to get the stragglers as they come out. I'm actually even going to upgrade
that.
So seriously this took me like 15 minutes. I mean, I did this in no time
whatsoever. So anyone who's really invested some time in this game can make
a high quality game that they can put out on zoom Marketplace and hopefully
make a little bit of lunch money off of it.
And I'm going to show you some of the things that you can do to extend this and
to change the game play on it. So there's two significant files. I'm going to open
up the map that we just played, and I'm going to open up file called in game. So
these are two of the types of files. The maps you'll have them numbered one
through however many maps you have. And then in game sets what that game
actually looks like when you're playing it.
These are two of the files. Once you set in game, that's the kind of thing where
you'll go in, you'll set it up once. The actual map, XML files you spend a lot of
time in, because when you're play testing, and it takes a lot of play testing to get
a tower defense game right, you're constantly in there tweaking it to make it a
little bit harder, a little bit easier. One of the things I noticed when we put this out
on Marketplace, people had a pretty big problem with my second level. They
thought it was impossible, which it wasn't really impossible, but it was very
difficult.
>> Clint Rutkas: It was impossible.
>> Larry Larsen: Oh, okay. It might have been a little bit impossible. But, so,
yeah, you want to go through and keep testing these.
So let's look at the in game right here. So the first thing we're going to do is look
at the visual aspect of it. The visual element here, you can see we have our play
screen background. And if I go in here, I'm just going to -- let me launch this
again here. I'm going to show you this while we're playing. But the play screen
is the wooden border that was across the top. You can see that it has the text
labels or for things like cache, lives, points. And then the labels that actually fill
the numbers in, the values for that.
You can see I've got some elements on the screen. We've got some elements
on the screen like the options button which of course, you know, you can switch
out the options button very easily. And you can change where its location is by
just, you know, changing what size and the location right here. We've got ours all
the way over on the right towards the top. Resume that game that we were just
in. And I'll pause that. So you can see we've got our options button here.
Options lets you turn the grid off, turn the sound up or down. We had another
button in there was for main menu that I've got commented out. But, you know,
you can always have that. We have a hardware back button so we don't really
need it but it's there if anyone desires it.
There's some other buttons here like force wave. And you can see that's our
button that just makes creeps come out no matter what. So if you don't want to
wait for them, you think you've got enough towers to handle whatever you can
throw in it, you can sit and hit that plus button and just make them come out a lot
faster. We've got an enter and exit button.
This is kind of an interesting hack that I did. So when with we first did this game,
I didn't have these caves that the creeps came out of and left through. And I
didn't like that because I didn't really know where these guys were going to come
out from. And I could have taken the map into Photoshop and drawn an arrow or
something on the ground to show where they're going to come out. But I also
didn't like that they just came off the map and they walked over some of the rocks
that I had on the left. So I did this trick. I mean, it's so simple to just drop a new
button in there. So I just added this code here that says, you know, button name,
enter, exit. I put their locations and they don't really do anything. They just
reference a transparent P and G file. The transparencies got a little bit of
shading so as the creeps come out there's kind of a shadow across them as they
come out.
For this game I don't even need this though. So I'm just going to go in here and
take my caves and remove them. It's that simple. So we've got a pause button,
a play button, and three speed buttons down here. The three speed buttons are
all in one place. You can change your speed, you know, one time, two times
normal speed, three times normal speed. So if you don't want to wait for things
to come out, you don't have to sit and wait. Love the Pirates.
These are our tower construction buttons. You can -- you'll -- I'll show you when
I show you a map, XML file, that you can define how many of the towers that you
have. You might have five towers in a game. But on your first map, you don't
want to just spoil it by giving them all the towers, you just want to give them one
or two towers. But if there are five towers in here, this is where you'll define them
in your in game XML. And they're just laid out in a row. I've got my locations, my
sizes. I tell it what graphic to use for the tower that's down there. And I also say
what graphic to use if that tower is unavailable.
So if there was -- if this tower wasn't available, there's another graphic that would
show there instead. And that's it for in game XML. And you can see this is just
the layout of the game play screen. So next I want to show you the -- a map.
So this is one of the maps. You can see here we've got a map ID, which we'll
use in some other XML files. And by the way, I don't have enough time to walk
through all these XML files. There's a couple other ones that are very short, very
simple to use. They're so simple that as developers you will probably open that
up and know exactly what you're looking at just from looking at them. If that's not
the case, though, I have a very long video on Channel 9 where I walk through all
the different XML files and tell people, you know, here's the things that you can
do to tweak these.
So first here we've got a friendly -- a friendly name, mission two. And let me
show you where that comes from. If I click new game, you'll see our maps right
here. So I've got mission one, mission two. The titles that lay on top of these
pictures, that comes from our friendly name. So I've got mission two, and I could
change that to anything. I'm going to call this the Bellagio.
You've got your starting cache. I'm going to give you $100 to start this map.
You've got the background texture, which is just pulling from that map image that
I have. The number of lives, focus color, the victory sound if you win the map,
the defeat sound if you lose the map, a sound to play when the wave starts,
when the next wave comes out, in case you're over building a tower and you
didn't notice that you've got creeps coming out again. There's a little sound you
can have it play when you start a wave. And the map start sound. So when a
map loads for the first time and it starts playing, you can -- you can have that
play.
And let me click on this audio directory. You'll see these are just pulling the
names for wave files that we have in here. So all you have to do is just drop your
other sound in there and reference that name. Very simple.
There is a function here called special cells. And special cells are just cells that
are on this map that have some kind of special function. Mainly you'll have an
entrance and an exit. And this is where the creeps are going to come in from
and where they're going to exit through. And you can see I use the grid
coordinates for the play grid. So it starts all the way over on the left five columns
down, comes out there. It's going to try to leave all the way over on the right, five
columns down. So it just tries to go right across the page. I'm going to add one
extra entrance right here, just to show you what that would look like. And I'm
going to call this one spawn two right there.
>>: You lost me.
>> Larry Larsen: Is it too difficult? Is it too difficult? Yeah, it is very difficult. I'm
going to put in spawn two. That one's going to come out at the top of the screen.
And I'm going to put in spawn three, which is going to come out at the bottom of
the screen. And what we can do here -- we'll put this away say eight. What you
can do here is you can have creeps that come in from different locations around
the map. So if they think they're really slick and they're going to build some kind
of maze that starts in one place, you completely destroy them by just mixing it up
and throwing out creeps from other areas.
So we'll look at the next one here. This is the allowed towers. And of course this
is where we have the towers defined for this map. We specifically say we want
people to be able to use the gun tower, and we want them to be able to upgrade
it three times. And I'll show you where we have the upgrades for that gun tower.
We want to be able to use a rocket tower. And the rocket of course will hit the
flying things, so we want to be able to upgrade that three times.
The next thing that we have here is the waives. And the waives, you see that I've
got comments here? Just to make it really simple because when you're play
testing you might get destroyed and you're like, awe, level 6 just completely
wiped me out. That's where I have my big problem. And if you have comments
telling you which wave you're o makes it much easier to jump down to it.
So we've got five different types of creeps in this code simple. Land basic, land
slow, and I think we have a land medium. And then we have two flying ones, a
fast one and a slow one.
So this creep is going to be a land basic. It's going to be a simple normal type of
walking creep that's going to come in through the entrance spawn. And I'm
actually going to change that to come in through spawn two. And it's going to try
to leave through this exit. And of course that's the exit that I've got defined up
here. And you can put in as many exits as you have room for.
The number of creeps that we're going to come in, I'm just going to do -- let's just
do two. And we want one second in between those two.
Now, let's say, you know, two creeps on the first wave. That's not difficult
enough. I wanted to have more creeps. So I'm just going to copy this, hit enter.
Put in a new one. This is going to be land slow type of creeps, which is just a
different type of ship. I want that to come in through the bottom. We're going to
have two of them again. And that's fine.
>> Clint Rutkas: Hey Larry?
>> Larry Larsen: Yes.
>> Clint Rutkas: On one line up at the end you have an extra slash.
>> Larry Larsen: Sorry about that.
So they're we've got two different types of creeps that are going to come through.
And the other thing that I want to mention here is as you go on, people are going
to be building more towers. They're going to be upgrading it. They're going to
make their maze a lot more difficult for these creeps. And the creeps have a
specific amount of health assigned to them. So one of the things that we've
added here is a health modifier. And the health modifier takes the creep. So
we'll say this land basic has 150 hit points. And let's say on wave four or five or
six it's just too simple now because that I upgraded a lot of towers, they've built
more mazes and things like that. So one of the things that you can do is go if
here and say, you know, health modifier five. So now you have the health of that
creep times five.
You can put in, you know, 4.32 or you can use all kinds of different values,
whatever you need, to make your game play good.
And so now we'll go ahead and run this one.
>>: [inaudible].
>> Larry Larsen: Yeah?
>>: Is there a [inaudible] XML file [inaudible].
>>: [inaudible].
>>: Is there a schema for those XML files so that you can [inaudible] or verify
them?
>> Clint Rutkas: Probably not right now.
>>: Okay.
>> Larry Larsen: Send me an e-mail though, Larryla, and I'm collecting things for
any kind of V2 that ->> Clint Rutkas: Yeah. And we have this on scripttd.codeplex.com if you want to
file bugs and give us useful feedback.
>>: [inaudible] send you a copy.
>> Larry Larsen: That would be awesome.
>> Clint Rutkas: That would be awesome. And because you're internal it makes
our lives a lot easier as well.
>> Larry Larsen: All right. So I'm going to play mission two. I'm going to stick a
couple of random towers in a couple of different places here. I know I've got
creeps coming out now at the top end, the bottom. Which it's not coming out at
the top and the bottom. Of course.
>>: [inaudible] mission two.
>> Larry Larsen: Yeah, this is mission two. And we should know if it's going to
work. Because this should say Bellagio right here, too, instead of mission two.
>> Clint Rutkas: Larry?
>> Larry Larsen: Yeah?
>> Clint Rutkas: When you altered those files.
>> Larry Larsen: Yes.
>> Clint Rutkas: What directory were they in?
>> Larry Larsen: Well, that's a good question here.
>> Clint Rutkas: Because you want file open. So hover over XML 2.
>> Larry Larsen: Yes.
>> Clint Rutkas: So that's why.
>> Larry Larsen: Yes. You open up the right project here. All right.
>> Clint Rutkas: It always pays to have a developer in the room. [laughter].
>> Larry Larsen: Does make life faster, for me anyway. Any questions while
we're waiting for this to run?
>>: If you had like typed in an invalid [inaudible] do you get? [inaudible].
>>: Yeah. [inaudible] down at the bottom.
>>: It will [inaudible] what you did wrong.
>> Larry Larsen: All right. Let's try new game. [inaudible] that's not a good sign.
>>: [inaudible]. When you reloaded the solution, it may have just [inaudible].
>>: Aye, aye, captain.
>> Larry Larsen: Let me close these down here. I'm actually going to ->> Clint Rutkas: Hey, Larry?
>> Larry Larsen: Yeah?
>> Clint Rutkas: We're going to verify a hundred percent we're in the right
directory. And was it data?
>> Larry Larsen: Data, yeah, that's what I want. GUI. Make sure in game is the
right one.
>> Clint Rutkas: It was in the wrong directory, sorry.
>> Larry Larsen: So I wanted to take this out and save that. I also want to open,
make sure this is the right one. Hit exit out of here.
>> Clint Rutkas: Okay. Go to the hit alt tab. Yeah.
>> Larry Larsen: Okay. So I'm going to go to data, my maps, get my -- two.
Just drag it here, correct?
>> Clint Rutkas: Yeah. Higher.
>> Larry Larsen: Higher?
>> Clint Rutkas: Yeah.
>> Larry Larsen: You can tell how much I've spent -- how much time I've actually
spent in here.
All right. So now I'm going to make my new entrance real quick. Boom, boom.
Got spawn two, spawn three. Comes out at the top. Comes out at the bottom.
>>: [inaudible].
>> Clint Rutkas: [inaudible].
>> Larry Larsen: Let me show you here. So I'm going to put in here -- I'll have
one creep come out of each entrance. They're all going to leave through the
same exit. You can see here I define where they come out. So this is the
entrance. And this is where that creep's going to come out from.
>> Clint Rutkas: So the give the perception of randomness you'd alter the time
between them.
>> Larry Larsen: And because the creeps move at different speeds, too, that's
going to make a little bit of a difference there, so. All right.
>> Clint Rutkas: So it wouldn't be fun if there wasn't some demo issues.
[laughter].
>> Larry Larsen: Fun for you.
>> Clint Rutkas: I mean, what do you -- he rebuilt the entire sample really quickly
in under a minute.
>> Larry Larsen: I'm going to go back two because I still have this name. But I'm
going to call it Bellagio.
>> Clint Rutkas: As it just launched.
>> Larry Larsen: Yeah, it's fine. You'll be able to see here that we should have
one creep that comes out top, middle and bottom.
>>: Aye, aye captain.
>> Larry Larsen: Yay.
[applause].
>> Larry Larsen: And you can see there that I also got rid of my caves that they
came out of. And you can add whatever other types of buttons that you want to
on there.
So I'm going to show you two other XML files here that are very simple to work
with. I'm going to show you one that is going to be our gun tower, and I'm going
to show you another one that's going to be one of our creeps, one of our enemies
that comes out. So I'll grab that land basic that we used before.
So this is a typical creep. And actually let's look at the tower first. So this is the
tower. You can see that the ID that I give it here, gun, the type of weapon. We
have five different types of weapons. So there's a laser that you can use, there's
rockets. There's missiles which one is for the ground, one can be used for the
air. We have an earthquake tower that radiates around it with -- as a weapon.
And then you can see the variables that we set here. And this is one of the
places where the game play balancing comes into effect.
So you can see that I have a cost associated with this weapon, I have how long it
takes to build. It takes three seconds to build. So you'll notice that, you know,
when I was playing the towers don't automatically start firing as soon as you drop
them on the screen. You have to wait a little bit which makes it kind of difficult
because if you see that you're losing, you can't just quickly drag towers there.
You might want to set that to zero though.
I have the time to sell set to zero so that you get all your money back if you need
to dump a tower really quick. And then you've got the damage. This is how
many hit points that this tower or this particular tower is going to take away from
a creep as it goes. You've got the amount of time it takes to reload. So you can
set it up as a full auto machine gun or you can set it up as an artillery that takes a
while for it to load. You've got min range, max range. And that just sets how far
away, how many squares away that weapon can fire. And you're minimum range
you might have like, you know, how a cannon can't lower its gun far enough to hit
someone standing the right in front of it? It's that kind of thing.
So you might have a weapon where you want it to launch things a lot ways away.
It's better at hitting far away things than it is as hitting close things. So you can
say, you know, I can't hit it if something's right up on that tower.
We've got a texture that we set. And everything in this level element here is for
just a standard tower that you drag out there. And you'll see here that we have
another level right after it. This is going to be what the upgrade is. And we'll go
over that in just a second.
So we've got our shot speed. This is how fast something can shoot, how fast a
projectile comes out. And you want to make sure that in your balancing you
make sure that if you have a critical weapon that needs a hit -- a creep, that the
weapon can shoot as fast as the creep runs. So that's something that takes a
little bit of testing, make sure you get it right.
I can set up that cannon so that it can shoot flying objects or it can't shoot flying
objects. That's kind of an interesting one. Because you can really kind of throw
people when they're playing. They might use all of one type of tower and then
they have some flying element come out and they're like it's not shooting at any
of them.
You can also set in your upgrade that, you know, this cannon when it's upgraded
it can hit a flying object. You've got your build sound which again is just a name
of a wave file that's in your audio directory, your cell sound same thing. If I cell
this thing it's going to do a ka-ching sound. And your upgrade sound so when
you hit the upgrade button you get a little notifier there that's a good sound. And
you're shot sound. I mean, this is the sound that it makes at various levels.
Again, if you have a cannon that starts out as a small cannon you might want one
sound, and if you upgrade that thing three or four times now it sounds like a
Howitzer.
>>: Do you have -- do you specify different textures or sounds for when it's in its
unbuilt stage and it's built stage like [inaudible].
>> Larry Larsen: Well, this first element that I'm looking at here is kind of its
unbuilt state. It's the state that it's in when you first drag a tower off the bottom
and drop it on to the play screen. So you can define all of these different
elements for that. And then the first time that I click the upgrade button and you
can see here it costs a little bit more money to upgrade ->> Clint Rutkas: So I think you're asking for an animation.
>>: Well, not necessarily an animation, just like when you first drag it on and it
has no stats at all, can't fire at all.
>> Clint Rutkas: So we have a [inaudible] bar right now that [inaudible] a create
state?
>> Larry Larsen: Yeah. I mean, when you first drop it on, you might have a
loading bar. Of course you can set that by the time to build. But if you have your
time to build set to zero, when you drag it out there, it's ready to go.
>> Clint Rutkas: That's a good idea. That's a good idea. Yeah.
>>: [inaudible].
>> Clint Rutkas: So like a building image. So [inaudible] versus the [inaudible]
bar has a different image?
>>: Yeah.
>> Larry Larsen: Interesting. Yeah. I mean, send it on to me, and we'll put it on
the list. So this is our level two. You can see that I've increased the amount of
money that it costs. I've increased the damage that it causes to the creeps. I've
taken down the time to build because an upgrade in my opinion shouldn't take as
long to build as a brand new tower. I've extended the range a little bit so
upgrading this is going to extend the range. I've changed the texture so that
someone will know just by looking at it that this tower is a little bit more powerful
than the stock one.
You can change your shot speed, flying, land. You can see now that we've
upgraded this it can hit flying objects. And of course you can have all different
sounds. You can have as many different levels as you want in here. So you can
of it just keep upgrading. I only have three in the gun XML but, you know, you
can just go in and put three, four, five, however many you need.
This is our creep ID. So this is a typical land basic. And let me fan the land
base. I'm going to grab flier fast. All right. So flier fast you say can it fly? Is this
a flying object? The difference -- the main difference between the flying creeps
and the land-based creeps, the land-based ones have to go through your maze.
The flying ones go from A to B. So they're going to go right over anything you've
built. So you need to account for that as a player.
You tell it how fast it goes. This is our faster one, so it goes at a two speed. You
tell it how many hit points you have. Of course this is going to change,
depending on your health modifier at the beginning of each wave. This is the
worth. So if I kill this creep, I'm going to get one dollar. I've got the texture that I
used for this, and I've got the death sound and the spawn sound for it.
So very simple. And the developer for this project, Michael Quant [phonetic],
wrote a comprehensive article on if you want to change the parameters of a
tower, if you want to add new towers, it's very simple to do. You can just kind of
copy from what we've got in there.
>>: [inaudible] damage of sorts [inaudible] only you're [inaudible].
>> Clint Rutkas: Yeah. So like the core goal of the engine was, there's two
types of power defense games, path following and then I'll go A to B would be -or like here's your entrance, here's your exit. And then it figures out the route.
So we tried to design the engine to do both. Doing the path finding, there's one
issue we have to resolve. But it's -- this was our first wave. And I -- I mean, I'm
pretty proud of it for what we've -- what we produced. So -- and the fact that
Larry was able to do -- Larry built all the maps for it, and that, to me, was like
someone can do this that doesn't know how -- you know, tons of programming
background.
>> Larry Larsen: It was -- I mean, I'm pretty good with Photoshop, and it was
extremely simple to go through and make a bunch of new maps. So one of the
things that I want to mention here are special cells. There's a third special cell
that don't actually use here. But I want to talk about the type of tower defense
game that he's talking about. Some of the tower defense games, all the creeps
pour in, and they go wherever they need to go to get through the map, get to the
other side.
There's other games like creeps HD on the iPad or geoDefense on Windows
Phone. And a those follow a specific path. We have a special cell. The type is
called obstacle. And this means that you can set up a wall. And so on your
Photoshop file you might have like, you know, a pile of bricks in the middle of the
screen or a pile of rocks or a mountain or something like that.
You can set up obstacles on the map that you don't actually see but the creeps
will have to go around that like there's something there.
One of the things that you can do with those obstacles is you can create your
own path that the creeps have to follow. And then they have to go in between
those obstacles all the way from A to B. And this makes what I call an on-rails
type of tower defense game, so all the creeps have to follow this specific path.
The problem that we have with that is right now we've got it where you can't drop
a tower on top of one of those obstacles. So I've asked them to make a property
that says you can or you can't actually build on those obstacles. Question?
>>: Can you have a square which is -- creeps can walk there but you can't build
them?
>> Larry Larsen: Well, that would be one of the properties of the obstacle. Of
course you would need to be able to set that there where you say, you know, you
can't build a tower he or you can build a tower here. Creeps can [inaudible].
>> Clint Rutkas: Yeah. Instead of just saying can build it would be had two
properties for that maybe.
>> Larry Larsen: Yeah.
>> Clint Rutkas: Or an [inaudible].
>> Larry Larsen: Yeah. Can build, can walk, can creep. That kind of thing.
Other questions? I'm already over. Yes?
>> Clint Rutkas: We're in Q and A now. No, no, sorry.
>>: [inaudible] a version of this on the Marketplace?
>> Larry Larsen: Yes.
>>: [inaudible] called?
>> Larry Larsen: Script TV.
>>: Oh, it's just Script TV. I thought it had a different name.
>> Larry Larsen: Yeah if you ->> Clint Rutkas: We're clever.
>> Larry Larsen: If you go to -- and I call it scripted or script TV, whichever you
prefer. But if you go to scripttd.codeplex.com you'll find there's a -- yes?
>> Clint Rutkas: Pull it up.
>> Larry Larsen: Yes.
>>: So before they end the broadcast, Clint, there were a few questions that we
had online for you. Some people remotely.
>> Clint Rutkas: Okay.
>>: Did somebody say that they downloaded the kit and they tried doing it with
the 7.1 project on the phone.
>> Clint Rutkas: Yes.
>>: And they tried the message prompt but it doesn't work.
>> Clint Rutkas: Are they using beta 2? I don't know.
>>: As far as you know message prompt should work?
>> Clint Rutkas: As far as I know. See, I'm finding more and more people are
trying to do more clever things like with MBVM they'll have something in regards
of I have my page, I navigate away but there is an async call on page 2 that then
the new page takes, and it's -- they're doing stuff that I never accounted for, such
as that. I would attest to my knowledge that works.
>>: [inaudible] in beta 2?
>> Clint Rutkas: This is beta -- I believe this is -- so that is beta 2 tooling I
believe. I believe.
>>: Actually they just clarified he's using beta 1 tools.
>> Clint Rutkas: I would tell him -- he's what version? Is this like he just got the
latest? I know I'm projecting all my questions towards you.
>>: Yeah, well ->> Clint Rutkas: So the viewer ->>: Beta 1 is not [inaudible] beta 2. So you mean today we ruled out beta 3.
>> Clint Rutkas: Yeah. So -- so my -- since my screen is up -- whoops. E-mail
Crutkas and I will -- and give me as much tail. Because this emulator is -- the
emulator in the back is running I believe beta 2 tooling, and it should work. So if
there is a bug, I want to get it squashed as fast as possible. And actually one
thing I am doing right now is overhauling the prompt system. So this is actually
my -- one of my test apps to prove that it works is -- so this is using the built-in
popup. The reason why my system right now doesn't use the popup is because
in Windows Phone 7.0, the popup is not GPU accelerated, so that image back
there would not show up. If you dynamically -- if your parent page did not have it
in, it would not show up, which made a very bad user experience. And because
it wasn't GPU accelerated, can do cool stuff with it, so now Mango that's fixed, so
now I have to redo one have the core objects in my prompt library to leverage
that. And that's something I am looking for. But why that does not work, I do not
know.
One question. Does they have the Silverlight toolkit installed?
>>: Yes.
>> Clint Rutkas: Then I don't know.
>>: Okay.
>> Clint Rutkas: I would say if he could send me a repo.
>>: He could just e-mail you with that.
>> Clint Rutkas: Yeah.
>>: There was another question around is there a popup menu available?
>> Clint Rutkas: Menu? No. Because that's not metro. I would say use the
Silverlight toolkit has a -- the dropdown control that's in the settings dialog. So
there's two different types of menu systems. You have the one that kind of like a
combo box, but it pushes everything down. But if there's too many objects, then
it goes into the kind of like long list and you select it. So like time zones does
that.
Those -- that to me is kind of how that works. I don't -- metro styling, I don't see
a need for in the phone to have a menu system.
>>: Okay.
>> Clint Rutkas: Is -- would be my argument. Because I'm afraid of the
designers coming down to my office. So I kind of view it as system level controls
is kind of what I'm doing my best to build at.
>>: Okay. There's a request for version 2 of the script TD, support for global
leader boards.
>> Clint Rutkas: See, the problem with that is that requires infrastructure.
>>: [inaudible].
>> Clint Rutkas: Can I talk about the thing that we're ruling out on 9, or no?
>> Larry Larsen: I have no problem ->> Clint Rutkas: You know, so now we have to go to mobster talk here.
>>: [inaudible] this isn't going to be [inaudible].
>> Clint Rutkas: Yeah, I know, we can't. Okay. Sorry.
>>: So one question might be for -- since I'm sure you know the Hawaii team, if
they have anything in their roadmap around leader boards or anything like that
for Hawaii. That would be something ->> Clint Rutkas: So when this gets turned off, yeah.
>>: [inaudible].
>> Larry Larsen: I do want to show you one other quick thing too. This is the
mission select maps here. One really quick thing here because I just show one
map per screen. You might want to have four maps on the screen, five maps.
It's extremely simple here. You have a button. This is in the level select XML.
I'm going to put a second one in here. All you have to do is tell it, you know, I
want a second level here, and I want to have its location. I'm going to put this
one X, Y -- I'm going to put this one at five percent down. I'm going to put this
one at 75 percent down. And I want them to be 25 percent of the size that they
are normally instead of 50.
And I'm going to stop this and just restart it. And let me show you what this does.
The level select screen here works like a template. And no matter how many
levels you have, they'll always flow into that. And it will create as many right and
left buttons as you need to go through all the different screens of your map. So
when I go in here now there should be two -- two maps shown on that screen.
>>: [inaudible] not available to [inaudible].
>> Larry Larsen: Yes. Yes. And I'll show that you while this loads here too real
quick. There's level select. I don't remember where that is off the top of my
head. But in your -- in your main screen when you say this is how many maps I
have total in the game, there's a value called prerequisite. And you say this is
the map that's the prerequisite for the map before it. And it's a very simple way.
I've got it in the video that you can watch.
And so the placement isn't great, the size can't great, but you can see here I still
have these five maps that come with this game. But I've changed how many
show occupy this screen.
So again, not a programmer, extremely simple to do. And you can have a lot of
variation what the game looks like.
Any other questions? Yeah?
>>: So people can take the code, XML [inaudible] service code too, right?
>> Larry Larsen: Yes. Everything's full source.
>>: All right.
>> Clint Rutkas: Now, if there is a bug or something, please tell us because we
want it -- our goal is to make it so there's like eight bajillion apps in Marketplace.
So this is like -- so just like the current [inaudible] toolkit is all about like Silverlight
controls, this is all about tower defense engines and just trying to do the best we
could.
>>: I noticed when you download from this site that it also has windows projects.
>> Clint Rutkas: That is due to how XMA has to be loaded on the phone. At
least to my knowledge. I'm more of a Silverlight guy. But yeah, even -- I asked
the XMA team, and they said that is correct how it is. You have to have -- I think
it's to built the content correct you need a Windows project. There is some
reason why you feed that.
>>: The content pipeline is actually ->> Clint Rutkas: The content pipeline. There we go. Yeah. Yeah. We need
that to be able to build the project. There is a couple bugs in it that codewise that
I want resolved. Like we almost had the content and the content pipeline fully
broken so you can alter stuff and not have to go through a long build process.
It's not a hundred percent there yet. So it was either launch or don't launch. And
I opted for launching. Cool. Any other questions?
>> Ben Lower: All right. Thanks, guys.
[applause]
Download