Tuesday, December 30, 2008

Guitar Gear for Beginners - Part 7 - Time Effects

Time based effects are those that elongate, or repeat our sounds.  Here are 3 types of effects that fall into this category.

Delay

Delay is an echo effect. Depending on the unit we are using, we will set a delay time (how fast does it echo) and a regeneration factor (how quickly does it get quieter with each echo) and a count of how many echos we want. Some examples of delay effects are the Boss DD-3 which is a pretty simple delay pedal, or the Boss DD-7 which is the same pedal as the DD-3 but has a few more delay styles as well as the option for an external 'tap tempo' which will allow you to set your delay speed by clicking a separate pedal. One Delay pedal that I have not had the opportunity to play, but have heard great things about is the Line 6 DL4. This unit has 3 programmable presets (so you don't have to tweak settings while you are playing) and a dedicated tap tempo button.

Reverb

Reverb is an effect that lets a sound trail off as if it were in a room where the echo time was very short. Or as Wikipedia puts it "Reverbration, or "reverb", is the persistence of sound in a particular space after the original sound is removed. "  A lot of amps have an reverb unit built in. If you have ever moved an amp and gotten a loud sound come out of it that sounded like giant springs, that would be the spring reverb unit in the amp. There are some pedal based reverb units as well if you want more control of your reverb sounds. The Boss RV-5 is one example or the Line 6 Verbzilla which has 11 different types of reverb built it.

Looping

Loopers are a similar idea to delay except that they let you store more than 1 "sample" and then layer them on top of one another.  One major difference between a delay pedal and a looper is that most delay pedals will only let you take a sample of up to maybe 2 seconds, where a looper will provide much longer samples. Here is an example of a guy playing with a looper. Boss make a looper in simple pedal, the Boss RC-2 Loop Station as well as a more complex and larger unit, the Boss RC-20XL Loop Station, Line 6 and Digitech also have offerings in this area as well.

What do I use?

Personally, I use the built in reverb in my Crate V33-212 amp and a Boss DD-6 which from what I can tell has been discontinued in favor of the DD-7. One of these days I need to get my hands on a looper, but it is not really high on my priorities list right now. 

So what time based effects do you use? Sound off in the comments section. 

Monday, December 29, 2008

Guitar Gear for Beginners - Part 6 - Modulation Effects

Phaser, Flanger, Chorus are several of the more popular modulation effects.  The difference between them can be a little difficult to explain, but I'll give it a go. 

Chorus

Chorus works by playing a copy of the sound coming in again just slightly later than the original (like 100ms later) and lightly altering it's pitch. This makes it sound like 2 or more instruments are playing the same thing at the same time, a chorus of instruments if you will. The Boss CH-1 is a nice simple chorus pedal.

Flanger

A flanger works very much like a chorus, except that the delay is much shorter and a portion of the delayed signal is fed back into the delay. This creates a swooshing sound. The term flange actually comes from when in the reel to reel studio days they would have 2 synced up tape machines and press their finger on the 'flange' of the tape reel, slowing it down a little and the combined sound would give the same effect. This MXR Flanger pedal seems to be pretty popular although I have not played it myself.

Phaser

A phaser although it has a similar sound to a flanger works in a different way. The sound rather than being delayed has it's phase shifted and added back to itself based on a filter. This phase shifting creates the phaser sound


What Do I Use?

Right now the only one of these 3 pedals that I use is a Boss CH-1 Chorus pedal. I personally have never been a huge fan of flange/phase effects so I have not spent any money on them. But that is just a personal preference as there is certainly nothing 'wrong' with those effects. They can be used very nicely, but please, use in moderation :)

Do you have a modulation effect that you love? If so sound off below and let us all know what you have discovered!




Sunday, December 28, 2008

Guitar Gear for Beginners - Part 5 - Volume Effects

Compressor

The compressor is a tough effect to explain if you have not worked it it before.  The basic idea is this: As you play louder, it turns you down. So that way you can turn up the quiet stuff without blowing out the doors with the loud stuff. Depending on how fast your effect is set, it can create a very "punchy" tone due to the compressor kicking in. The MXR Dyna Comp is a popular compressor  as well as the Boss CS-3.

Tremolo

Tremolo is a volume effect were the volume is turned up and down within a set range at a set tempo. This effect is very popular in 'surf music' The Boss TR-2 or the Voodoo Lab Tremolo are example pedals. Generally the speed and depth are set with knobs on the unit. Some pedals have a "tap" feature, allowing the speed to be setting by tapping your foot on the unit.
 
Volume Pedal

A volume pedal is a rocking pedal that takes it's incoming signal and turns it down based on how far forward or back it is set. The Visual Visual Volume Pedal or the Boss FV-500H are good examples. 

What do I Use?

I have an old version of the Boss volume pedal on my pedal board. It is over 15 years old and still works great (another reason I love boss). I use the MXR Dyna Comp pedal and am currently in the market for a good tremolo pedal. 

If you have favorite pedal in these categories that I have not mentioned, let everyone know by commenting below!

Saturday, December 27, 2008

Guitar Gear for Beginners - Part 4 - Filter Effects

Filter effects are basically effects that take your sounds and either cut or boost certain frequecies. 

Equalizer

An EQ pedal does the exact same thing the EQ on a stereo does. It lets you pick a frequency and cut or boost it. Having it in a pedal means you can turn it on or off at a whim and it is within your reach if you need to make a change. The MXR M-108 or the Boss GE-7 are examples of EQ pedals.

Wah

Wah is basically an eq pedal with a small group of frequencies boosted and the others cut, then when you rock your foot on the pedal, it select what that range of frequencies is set at. A talented wah player can get very creative tones from a pedal.  There is also a series of pedals that simulate a wah effect based on how hard you play, these are called auto-wah or envelope filters. The Dunlop Crybaby is probably the most classic wah pedal.

What Do I use?

Well right now, I do not have an EQ or Wah pedal in my rig.


Got a favorite wah pedal? How about a great EQ pedal you use? Post a comment below!

Friday, December 26, 2008

Guitar Gear for Beginners - Part 3 - Distortion Effects

It seems like at the beginning of every gear based email that I write, I start with a disclaimer that xyz is a little complicated, and effects are no different. One of the things that makes effects such a wide subject is that there are so many different types that do drastically different things. 

There are really 2 ways to acquire effects (that can be combined), first is the "Stomp Box", the classic effect pedal and second is multi-effects, which can either be pedal based or rack based. We will first take a look at the various types of effects. With each effect, I'll mention a pedal version. If you are interested rather in multi-effects we will get to that later on.

Distortion Effects

Gain effects are any in a wide variety that effect the overall strength of the signal. The main type of effect in this group is distortion. When you increase the gain past the amount the circuit is designed to handle, it 'clips' this clipping is what causes the distorted sound we are so used to. When you are just on the edge of distortion, it is called overdrive which is very light clipping, adds a bit of 'dirt' to the sound. Usually only on louder notes or chords. Distortion is when your signal is always clipping, the level of distortion is based on how hard it is being pushed. There are dozens of pedals that can give you distortion. One of the classics is the Boss DS-1 this pedal will give you a reasonable range of distortions, although having a DS-1 modded by Keeley Electronics this upgrade takes your $40 Boss pedal and really adds some fullness to it. See this Youtube video for a comparison.  By the end of this series you will probably think I am a shill for Boss, but I have always liked their stuff and I have a bunch of it myself, it is built pretty tough. That being said, The Boss BD-2 is another great pedal. This overdrive pedal when set right can give your guitar that little bit of dirt that really makes it stand out. The Ibanez TS808 is another classic distortion pedal. If you are in to much heavier tones, you also might want to check out the Boss ML-2 Metal Core or the Boss MT-2 Metal Zone which give "high gain" style distortion found in the various forms of metal music.

One last type of distortion worth mentioning is Fuzz. As wikipedia puts it 

"Fuzz was originally intended to recreate the classic 1960's tone of an overdriven tube amp combined with torn speaker cones." 
It has a unique and cool sound. The Dunlop Jimi Hendrix Fuzzface is an example of a popular fuzz pedal.

What do I use?

At the time of this post, I own a DS-1 and a BD-2 for distortion. This gives me a decent range of distortion sounds. Although I do not play straight ahead metal, I am looking at the ML-2 for those times when I need that something extra. I do not currently have a fuzz pedal in my rig. 

There are so many talented folks out there with their own personal favorite, so for any players out there who may be reading this, What is your favorite distortion pedal and why? Chime in below in the comments. 

Wednesday, December 24, 2008

Christmas in IT

How do a group of a dozen IT people celebrate Christmas? With a day of food (really good food) and video games, namely Rock Band. If you have never heard your boss sing Alanis Morriset's "You Oughta Know" you haven't lived...or at least laughed really hard. Thanks Paul!




Guitar Gear for Beginners - Part 2 - The Amp

Nothing strikes fear into the guitar students parent when they realize that little Timmy is gonna need an amplifier to go along with that electric guitar. They have visions of the first scene in "Back to the Future" with a 6 foot speaker mounted into the wall. Amplifiers can be a tricky deal and can really make or break your sound.

Practice Amps

For starters, there is what we call the practice amp. This is a small amplifier that can be used at low to moderate volumes and maintain a simple good tone.  Practice amps are usually what we call "combo amps" where the amp and the speaker are in one unit (as opposed to a head and cab, where they are separate) They are low powered ( < class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">Crate FlexWave FW15R 15W 1x12  , the Roland Cube or a Line 6 Spider III, Now do not expect a lot from these amps. They may have built-in effects or amp models, but don't expect much. These amps run around $100. If you move up just a little to something like a Fender Frontman I used this particular amp live for about a year and got decent sound out of it ( mic'd up ). It is basically a slightly larger practice amp.

The Big One

The next step for amps is almost as hard as the next step for guitars. There are so many options and price ranges. You can easily spend $300-$1000 on a amp to play out on. Here are some things to keep in mind and to look for.

Tube Vs Solid State

This is a big debate about which one is better. Personally, I tend to like the sound of a nice tube amp, but unless you find a smoking deal, they are generally very pricey.  A rule of thumb that I have heard is that a tube amp of the same wattage as a solid state is about 3 times louder. I'm not sure how true that is, but anecdotally , it seems to be true. Tube amps need more special care than a solid state. But there are a few things that solid state can offer that tube amps usually do not. 

Combo Vs Head/Cab

Unless you are looking to blow out a large venue, a head with a cab may be a bit excessive. Most students will do fine with a well sized combo amp.

Wattage

For a garage band musician a 25-50 watt tube amp or up to a 100 watt solid state should more than get the job done. 

Speakers

Amps generally have an indication like 1x10 or 2x12 to indicate how many of what size speakers they have. So a 2x12 has 2 twelve inch speakers in it. For fullness of sound, a 1x12 or a 2x12 will do very well for you. There are a few amps that have smaller and sound good, but generally a 12 feels a bit more full to me. If you want a 4x12 you generally need to move to a head/cabinet setup as a 2x12 is about as big as a combo gets. 

Built in Effects / # of Channels 

A growing trend in amps is built in effects. If you look at the Line 6 Spider III amps, you will see their low end models have a few effects to their upper end amps that are fully programmable.  A lot of non-built-in effects amps have reverb built in. It will quite possibly be  a spring reverb unit in the back of the amp. 

Some amps also have more than one "channel",  a clean channel and one or more "drive" channels. The clean channel is the amplified sound of the guitar, clean and clear, The drive channel is a 'distortion' effect. If there is more than one drive channel, it is generally set up for varying levels of distortion. Depending on how the drive channel sounds on the amp, most players will always leave their amp on the clean channel and add distortion or other effects through an effects pedal or unit of some kind. If their amp has a really good sounding drive channel they may opt to use it.

Now most amps are content to sound like themselves, where another newer trend in amps is what is called "amp modelling" where an amp tries to emulate the sound of other amps. Line 6's higher end amps do this pretty well, where they also have an effects unit that does it VERY well. We will talk about that in the post on effects. 

Now when it comes to amps, I am of a very minimalist mindset. Give me an amp that produces a great full clean tone and let me tweak my sound before it gets there with my guitar and my effects. Currently I use a Crate V33-212. It is a 33 watt tube amp and it is very nice, especially for the price it was gotten at. Some folks live and die by their amp choice.  My advice, try lots of them. If you go to a place like Guitar Center, be sure to ask to use a guitar similar to what you own when trying out amps, that way you will have a good idea what it will sound like when you get it home.

Are you a guitarist? What was your starter amp? What is your favorite amp and why? Post your thoughts below! For those looking for advice, was this information helpful, do you need more info on a given part in this overview? Let me know!

Tuesday, December 23, 2008

Guitar Gear for Beginners - Part 1 - The Guitar

I have been teaching guitar lessons for about 10 years. I have had students ranging in age from 7 to mid 40's. But usually, most of the kids are 10 to 18. Generally speaking they have a hand-me-down guitar or something that was picked up at a yard sale. Occasionally they have a nicer used instrument or something that a parent went out and picked up so their kid could check it out. It has generally been the exception to the rule that one of these instruments is quality. I have seen my share of 'walmart' instruments or things that I would put more in a 'toy' category rather than an 'instrument' category. Over the past few years with the popularity of games like Guitar Hero and Rock Band, I have certainly seen a surge in interest in guitar lessons. Also with that I have seen parents who are a lot more interested in getting their kids a quality instrument to play on, or at least something that is not junk, but at the same time they want to minimize their investment in case their kid figures out that playing a real guitar takes more effort than beating Slash on Expert on Guitar Hero. So after helping several folks figure out what their next move for their kids are this Christmas, I decided that a post might be in order.

The Guitar

Undoubtably the centerpoint of new gear for a kid when doffing the plastic virtual guitar is the axe itself. There are certainly many tiers of guitars covering a wide variety of prices. I have been asked many times if acoustic is a better way to start guitar, well personally, I don't think so. I'll probably write another whole post on that later. So these suggestions will all be electric.

The Starter Guitar $100-$180

The Squier by Fender - This is a staple starter guitar. The bare bones essential starter. There are 2 types the Bullet which is around $100 and the Affinity which is about $170. The affinity has a slightly better hardware on it. There is also the Squier Mini which is a 3/4 size guitar. If your child is  a younger starter or has overly small hands a 3/4 size might be a good idea. Otherwise your average 9-10 year old should be able to handle a full size.

The Epiphone Specials - The other big player here in starter guitars is the Epiphone "specials" The SG Special and the Les Paul Special II. These guitars run about $170 - $180. They are solid "no frills" versions of the higher level Epiphone SGs and LPs, or if you like, very low versions of the original Gibson versions of these instruments.  

For most kids the difference between the Affinity Strat, The LP Special II and the SG Special are looks and there are several colors available in each. I would recommend trying to get an idea which style and color your beginner likes best as they will be more likely to want to play an instrument that has a personal feel to it. As for quality, these 3 instruments are pretty close. 

The Next Step $300+

Once a player has shown that they are committed to playing and devoting the time needed to 'stick with it', it is a good idea to move them up to the next level. If their starter is still in good condition, you can probably get a fair amount out of it, or hold on to it so they can always have "Their first guitar" (I wish a shelf hadn't fallen over on my first guitar and cracked the neck). 

Now this next step is different for every student. A big part of the next step is dependent on a couple factors.
  • Seriousness of the student
  • What are they wanting to do with it?
  • Financial Considerations
If your student has been playing for a couple years and couldn't care one way or another if they continue, it might not be a wise investment to upgrade them. Now I know this seems like common sense, but I put this in the same category with folks who by a $600 guitar for a student who has never picked one up before and plays it for 2 months. 

Next is what they want to do with it. Are they wanting something to strum on every once and a while to get away, or have they already started their own band in the garage and are in the process of recording a CD? It goes hand in hand with how serious they are. But if they plan on playing "out" a higher quality instrument may serve them better. 

Finally there are financial considerations.  If you are like most parents, you do not have a limitless supply of cash. If you are reading this than you probably have a child in lessons at $15-$25 a week, plus who knows what else.  You want the most "bang for your buck" and you want something that will last. Let me make a few suggestions. When I was at this point myself, I was 14, I had been playing for a couple years and was in need of a guitar (see note on starter guitar). My father told me that he would not buy me a guitar outright. He had purchased my starter guitar and amp, but this time it would be a little different. He set up a matching program. He would match me dollar for dollar on a new guitar. Little did he know that I had a pretty cleaning job lined up for that summer and was able to put together about $500. So armed with $1k he and I went down to Daddy's Junky Music Store in Portland, ME and I picked out my guitar, an Ibanez 540S LTD. This was a major step up for me and it was my full time guitar for about 17 years.  So this step can be a big one, but having the student invested in it as well can make a world of difference.

 If you go with a oddly shaped guitar (not a standard strat,lp,sg,tele, etc style, not necessarily the brand name ones mind you) you may be getting something that will be 'dated' in 10 years. If this is a 10-20 year investment, then getting something a little more timeless might be in order. That is not to say that funky shapes and such don't have thier place, I'm just saying that a 14 year old picking a $1000 guitar can be scary. 

Also what style of music does your student ENJOY playing? When I give lessons my students understand that although I am teaching them to read music, they are free to explore whatever styles of music intrest them. What types of guitars are their favorite artists playing? And please realize that it is ok for them to like xyz type of music (lyrics aside, that is a whole different conversation). Even though it may not be your thing, allowing them to explore while being as open (musically) as possible is a good thing. So I say ALL this to point out that the 2nd guitar is a lot more personal for a student and may last them a long time. When the time, interest level, and finances all line up then you are ready to make that purchase that will inspire your musician for years to come.

Next time we will talk about the next part in getting set up for the beginner...the amp.

If you have advice for the beginner, please feel free to comment!

Monday, December 22, 2008

Quick Note - Gear Reviews and Such Coming

I have a series of installments coming up that hopefully will be helpful to those of you looking to buy some musical gear, as well as some thoughts on good gear for beginners. So stay tuned! P.S. If you are checking out  my blog for XNA stuff only, here is a great suggestion, when you are not coding you should pick up a guitar and play!

Monday, December 01, 2008

Guitar Article Index

Music / Guitar Articles

While there has been a rise in popularity in games like Guitar Hero and Rock Band, there has been a secondary effect of having a renewed interest in music as a whole. The past year has a marked a dramatic increase in the amount of people either asking for guitar lessons or for advice on what new guitar gear they should get for themselves or their child. So in response to that, interest, I have started writing a series of articles to help explain some gear as well as give a little advice into this area. In the future, I'll also be writing some gear reviews as well as some more advanced gear articles. 

Starting Gear Articles
Choosing a Guitar
Choosing an Amp
Effects - Distortion
Effects - Filter
Effects - Volume
Effects - Modulation
Effects - Time Based
Effects - Pitch
Coming Soon...
Effects - Multi Effects
Other Accessories


Advanced Gear Articles
Coming Soon
Gear Reviews
Coming Soon

Monday, November 24, 2008

XNA Series - 3d textures from Blender

A quick note, if you are exporting an object with uv images, you need to add the images to a subfolder of your Content folder called fbx (under the folder you are putting your fbx files) This is where the fbx exporter for blender is saying that the image files related to your object are. Now you don't actually have to create this folder in your solution explorer, just in your directory tree, or you can do it in the solution explorer, but you will need to then right click on the image and say "exclude from project". This is because the fbx import process in XNA does the texture loading behind the scenes. If you leave the file in the content pipeline, it will try to import the image 2 times and you will get unneeded warnings.

Saturday, November 22, 2008

XNA Series - Begining 3D - Part 1

I have been wanting to get some posts on here about 3D. But since it is a much more complex subject than 2D, I have been holding off as I am still getting my head around it. Perhaps we can work through this together and see what we come up with.

To start drawing in 3D, we need a model. I recommend something like Blender3D, since it has all the tools you need to create a working 3d model that you can import into XNA. This is not a tutorial about modeling in blender, perhaps I'll do that later. But once you have a model created in Blender, you want to export it in Autodesk FBX format. You can load that into your content pipeline in the same way you import a sprite. The difference is in the type of C# object we create to load it into. Rather than a texture2d object, we load in this model as a Model object. We will also create a Vector3 object to set it's position rather than a Vector2, since we need to put this model in 3d space.


Project Files


Model tower;
Vector3 pos = Vector3.Zero;
The next 4 objects in our game class declarations are a little more complex.

Vector3 camPos = new Vector3(0.0f, 60.0f, 160.0f);
Vector3 camLookAt = new Vector3(0.0f, 50.0f, 0.0f);
Matrix camProj;
Matrix camView;

Vector3 camPos will store the location of our 3d camera. Our 3d camera can be thought of as a video camera placed into the 3d world at a given location.

camLookAt is a point at which our camera will be pointed in 3d space.

the 2 Matrices camProj and camView are somewhat more complicated and we will set them up later.

To load in our Model's data, in LoadContent we will do this

tower = Content.Load<model>("tower");

that should look familiar, since it is the same way we loaded in images. Except we make sure to tell the Load function it is dealing with Model objects rather than Texture2D.

Next we initialize the camView matrix

camView = Matrix.CreateLookAt(camPos, camLookAt, Vector3.Up);

We create a 4x4 matrix from the position of the camera and the point it is looking at. This matrix gives us a way to alter the way we see the model so that it looks like we are seeing it from the camera. Then we set up the projection matrix

camProj = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f),
graphics.GraphicsDevice.Viewport.AspectRatio,
1.0f,
10000.0f);

which will alter the way we see the model in perspective. We pass this method the width of our view field (45 degrees). the aspect ratio of our graphics device and the near and far limits to what we can see (clipping planes). If you don't fully understand these matrix operations, its ok, just press on for now.


We are almost there, we need to create a method that applies all these things to our model. Since we will want to draw more than one model in the future, we will make a generic function. We call it DrawModel and will pass it a model to be drawn, it's position and a scale (to make it bigger or smaller). In a model object we can have many meshes. So we need to loop through them all. Then each mesh has a list of "BasicEffects" which control how that mesh will be drawn, so we loop through those too. For each basic effect we will do the following
  • enable lighting
  • set lighting preferences
  • set the World, Projection and View transformation matrices for the effect
Then for each mesh, we draw the mesh

void DrawModel(Model model, Vector3 modelPosition,float scale)
{
foreach(ModelMesh mesh in model.Meshes){
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;

effect.World =
Matrix.CreateTranslation(modelPosition)*
Matrix.CreateScale(scale)
;

effect.Projection = camProj;
effect.View = camView;
}
mesh.Draw();
}
}

All that is left at this point is to call DrawMesh from our Draw method with appropriate parameters.

DrawModel(tower, pos,10f);

I've added a couple extra calls to DrawModel in the project file so you can see a little "scene"


Friday, November 21, 2008

Trying Tubes in a Crate V33-212

I like to tinker. So it should be no suprise that now that I have a tube amp I want to do a little testing to see what it is capable of.  I emailed Crate to see about the best way to get into the amp and they provided me with the Final Assembly Schematics for the amp, which showed that removing 2 screws allowed the amp assembly to pivot down.



So what you see here is the transformer, the 4 EL84 tubes and the 3 12AX7 tubes.  I borrowed a 12AU7 tube from a friend to see what that would do inserted into the V3 position (the leftmost tube in the front row of this picture). Being that the 12AU7 has a substationally lower gain than a 12AX7 it cleared up the clean channel which when it was on 0 volume had a slight low hiss, but since now the power tubes were getting a lot less power from the inverter tube, it was much quieter. I did have to turn the amp up much louder to get the same volume and it started to break up the clean channel at a lower volume then before. But there was a bit of fullness that I seemed to lose. Not sure I am ready to make this change. I need to test some more first. My friend also recommended rather than a 12AU7 a 12AT7 which has a gain level somewhere in between the U and the X. All I know is that either way the amp sounds really good, I'm just not sure which way sounds better yet.






Free Chord and Scale Diagram Paper

In teaching guitar I spend a lot of time teaching my students chords and scales. I have several pages that I have made up with chords and scales on them, but they are a bit much for the beginner. Too many chords or too many scales that it is hard to focus. So I generally like to write out the couple of scales or chords that I want them to practice for that week on a sheet of paper. But again if I make them too small they are hard to read from. So I created some nice sheets you can print off with 9, 4 fret chord blocks and 6, 8 fret scale blocks. So I hope there are helpful to you.

These links are fixed now. Sorry for the previous inconvenience.

Chord Blocks
Scale Blocks

Monday, November 17, 2008

Blog Posts, Christmas Music and Sweet Tracks

Well I got off to a pretty good start there on the XNA series, but unfortunately my lack of free time has caught up with me. I'll be posting again in the XNA series soon, I'm just not sure how soon. So for those of you who are coming here for XNA, I apologize for my lack of material. For those of you who come here for other reasons...I'm not really sure why you are coming here :)

For those of you in the St Louis area and want to come see a program of instrumental Christmas music ranging from Rock to Jazz to Classical. Come on out to the Greenville First Christian Church on Sunday, November 30th at 7:00pm. Admission is free with the donation of a canned good for the local food pantry. I'll be playing guitar along with half a dozen other very talented musicians. including Luke DeJaynes, the drummer from a great band out of St. Louis, MO, Fundamental Elements. Seriously, if you have not heard FE, check out their website, it has some of their tunes on it you can stream. Take a listen. I absolutely recommend their new album, you can get it on iTunes, it's called "The Cycle We're Livin' In".

Anyway, if you are interested in the Christmas show and you want to know where that is, it's here, we would all love for you to come out:

Friday, November 07, 2008

A Simple but Good Game Creation Article

I came across a good article on a path to Game development. It seems the original site is now non responsive, but the web archive of it still exists. This short article was a recommendation from an indie game developer about a series of game clones to try to complete in an effort to learn by doing. The article is from 1999, but I think it has some good suggestions. The idea is that you create these clones from your knowledge of the games listed and to make a complete game out of each. The games he suggests are

A Tetris type game
A Breakout type game
A Pac-Man type game
A Platformer (Super Mario type game)

He gives reasons for each and this seems like a good path. He really stresses the importance of making each of these into a finished working game, so that you have the experience of FINISHING a game rather than starting one, over and over.

The original article is here on the web archive.

Wednesday, November 05, 2008

XNA Series - Game Components

Ok, I know I said the next article would be about steering, but the next article for that topic is not ready yet, so I thought I would talk about a pretty cool class in XNA called GameComponent and its child Class DrawableGameComponent. These classes are made to add components to your game in a modular way. A component is something that needs to update with your game. DrawableGameComponent inherits GameComponent and adds functionality so that the component is also drawn at proper times as well. You could actually re-design our GameObject class as a DrawableGameComponent or at least inherit a class from DrawableGameComponent to give us the added functionality. Now from my reading, it seems that a lot of people think GameComponents are are really aimed at single game objects like a tank, but to add a TankManager class that would deal with the updating and drawing of all the tank objects in our game. But it certainly doesn't hurt to learn the type in an easy way.

We will create a UserTank class that is derived from DrawableGameObject. We just need to implement the basic constructor which takes a Game Object. So our UserTank will get all the functions (except private ones) of the DrawableGameObject class.


public class UserTank : DrawableGameObject
{
public UserTank(Game g)
: base(g)
{
}
}


To begin this is actually all we need to add this tank to our game. In our game class we would add


UserTank hero;


and in our constructor we would initialize it in the same old way


hero = new UserTank();


but we do something a little different after that


Components.Add(hero);


Since the hero tank is a UserTank which is derived from DrawableGameObject which is Derived from GameComponent, we can put it in the GameClasses list of GameComponents. These GameComponents all get called on updates and if they are drawable, they get their draw methods called.

So now even though there is nothing "in" our UserTank class, it is being updated with our game. Lets add a couple bits of info to the UserTank class that will help us out. To save time and space, I will implement the fields of the component as public rather than making them Properties. This is lazy, don't follow my lead in this.


public Vector2 location = Vector2.zero;
public Texture2D sprite;
SpriteBatch spriteBatch;


So we can store our location, sprite and a spritebatch to draw to. Then we simply override LoadContent, Update and Draw.


protected override void LoadContent()
{
spriteBatch = new SpriteBatch(this.GraphicsDevice);
sprite = this.Game.Content.Load("tank");
base.LoadContent();
}

public override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
spriteBatch.Draw(sprite, location, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}

public override void Update(GameTime gameTime)
{
KeyboardState ks = Keyboard.GetState();
if (ks.IsKeyDown(Keys.Up))
{
location.Y -= 1;
} else if (ks.IsKeyDown(Keys.Down))
{
location.Y += 1;
}

if (ks.IsKeyDown(Keys.Left))
{
location.X -= 1;
} else if (ks.IsKeyDown(Keys.Right))
{
location.X += 1;
}
base.Update(gameTime);
}


So as you see we initialize the spritebatch and load it's sprite. Then we call the base classes LoadContent method. In the Draw method we Begin our spritebatch, make a Draw call and End the SpriteBatch and then call the base classes Draw method. Then finally in the Update method we look at the KeyboardState and make some updates to the location and once again call the base classes Update method. So now that you have this component we could add it and it's logic in a very simple manner.



Here are the files for this project.

Tuesday, November 04, 2008

Stop Reading This Post

If you are a US Citizen of voting age and are still reading this, stop immediately and go vote. I won't tell you who or what to vote for, that is up to you. I am just telling you to go VOTE!

That is all. For the rest of my visitor's, enjoy watching the spectacle of the American political process.

Monday, November 03, 2008

XNA Series - AI - Better Steering - Part 1

I have been reading Steering Behaviors For Autonomous Characters by Craig Reynolds and after several reads I have decided to try to implement it in my own code and I think I am ready to explain it to you my loyal reader.

In his paper Mr Reynolds take a different approach that we have been taking thus far. Rather than having our steering be a simple rotation and moving forward at a set speed. He takes several other aspects into consideration, making a much more detailed simulation. To start we think about it in these terms: First we decide what direction and "magnitude" we need to move in that direction to steer us toward our goal. This is called our "Steering Vector". If we applied the steering vector all at once, we would immediately be put on the right path, but that would make for a very non-realistic simulation. Instead, rather, in the application of the steering vector, we take into consideration our current velocity, direction, mass and maximum force we can exert. We then factor these items against our steering vector to get an acceleration in a new direction to be added to our current velocity, we truncate this new velocity to our maximum speed and in that timestep we take a step towards steering to our goal.

The benefit of this method really lies in the Steering Vector. Since vectors can be scaled, added, subtracted, etc. We could apply several steering vectors. Say an object was following waypoints, we could say if an enemy is within a given distance, add the Flee steering vector times 50% and the Waypoint vector times 50%. We would then apply this new steering vector rather than just Waypoint or Flee, so that the object is still trying to do the waypoints, while evading.

In my next post, I will start looking at how we can adapt this method into our GameObject class.

The paper to which I am referring.

Saturday, November 01, 2008

XNA Series - A Simple Particle System

Sometimes you need to create a an effect like smoke or an explosion. This is when you can turn to a particle system. You can think of a particle system as an emitter. It emits points on given velocities, and each of those points has a lifetime. Once that lifetime is over they are no longer updated or drawn. This example will be a simple "fountain"

First, we will create a class to represent each particle. We will call it Particle

public class Particle
{
public bool alive = false;
public Vector2 position = Vector2.Zero;
public Vector2 velocity = Vector2.Zero;
public int lifeTime = 0;
}

So each particle has a field that shows if it is to be drawn an updated. A current position and velocity as well as a counter for how many updates it has been alive.


public class ParticleSystem
{
public int totalParticles = 500;
public Vector2 position = Vector2.Zero;
public Texture2D sprite;
public Particle[] parts;
public int current = 0;
public int end = 60;
public bool started = false;


In our particle system class we keep track of how many particles are in the system, the position of the emitter, the texture of the particles, an array of particles, a counter of how many updates the system has been through and if the system is running.


public void Init(){
Random r = new Random();
parts = new Particle[totalParticles];
for (int i = 0; i < totalParticles; i++)
{
parts[i] = new Particle();
parts[i].velocity = new Vector2(0 +(float)r.Next(-100,100)/100f,
-3 + (float)r.Next(-100,100)/100f);
}
}


Here is an init function. This will instantiate the particle array and set each member to new particle. I was also lazy here and set the initial velocity to [0,-3] with each component getting a number between -1 and 1 added to it for some randomness.


public void Start()
{
started = true;
}


This method simply starts the system

public void Update(GameTime gameTime)
{
if (started)
{
current++;
if (current < totalParticles)
{
parts[current].alive = true;
parts[current].position = position;
}
for (int i = 0; i < totalParticles; i++)
{
if (parts[i].alive)
{
parts[i].lifeTime++;
if (parts[i].lifeTime > end)
{
parts[i].alive = false;
} else
{
parts[i].velocity.Y += 9.8f/50f;
parts[i].position = parts[i].position + parts[i].velocity;

}
}
}
}
}


The update method first checks to see if the system is started. If so, it increments the total updates for the system and if we still have particles left, we set the next one to alive and set it's position to that of the emitter. Then for each alive particle, we increment it's life, if its been alive too long we kill it, if not, we add some gravity to it's velocity (taking into account elapsed time, and then add it's velocity to it's position.




public void Draw(SpriteBatch sb)
{
for (int i = 0; i < totalParticles; i++)
{
if (parts[i].alive)
{
Color c = Color.White;
c.A = (byte)((1-(parts[i].lifeTime / (float)end))*255f);
sb.Draw( sprite,
parts[i].position,
null,
c,
0f,
new Vector2(12, 12),
parts[i].lifeTime / (float)end,
SpriteEffects.None,
0
);
}
}
}
}


The draw method is very simple. I have added a couple extra things in it to make it more interesting. First we simply iterate over the particles and if they are alive, we draw them to the spritebatch. Now to make it more interesting I divide the life of that particle by it's total time to live. Then use that as a percentage to alter the alpha value of the drawing color and also to alter the scale of the object. I just to them in reverse so that the scale goes from 0 to 1 and the then the alpha goes from 1 to 0 (then I multiply it by 255 to convert it to a byte).

So yes, this is a VERY simple particle system, In the project files you will see that I update the position of the system based on keyboard controls, so you can move the emitter around.



The Project Files