Friday, September 27, 2013

New New Website!


Two posts in one day after a five month dry spell?  Hold me back!

Yes I have just completed my newest new rendition of my website.  It's much more friendly in that it is not a Flash website (except the Flash games, because they're Flash games).

Hop on over and check it out.  And thanks for playing.  www.FLOYDIAN THEORY.com

Welcome Back, Me!


Wow, it's been a long time since I've posted. But I'm a married man now and will probably have even less time to post than normal. But real quick I'm going to talk a little bit about a game I haven't played in a long time. It's called Commander Keen and it is amazing.


I used to play these games all the time when I was back in middle school, maybe even when I was in grade school.  It's hard to remember anything nowadays.

Command Keen is a tile based platformer which luckily allows you to save your progress (remember, I'm married now, so I have very little free time, thus saves make gaming easy).  I'm not sure if I love this game because I'm in a nostalgic high or if this is actually just a fun game.  I think it's fun.  I mean, in how many other games does the hero travel around on a pogo stick?

None.

Well, I'm sure there are more, but that's not the point.  Pogo sticks are cool!

So I just finished beating the first episode.  While playing it I started to remember the game bit by bit.  The wolf creature was always frightening when I was younger because it jumped at seemingly random heights.  So even if you were on a high ledge it could still jump and get you.  This time around, umpteen years older, I saw the beast and immediately ran away, as memories flooded back into my mind.  Then I remembered that young Billy (Commander Keen) has a raygun.  I turned and zapped.  Four times.  Wolf monster no more!

The first episode is short, providing a good couple hours if you try and get everything and are slow on the uptake like yours truly.  It's a great bit of platforming history as well as a solid game in general which holds up in play if not in looks after all these years.  I wouldn't say it's as hard as Super Mario Bros. on the NES but that might just be because there are saves in Commander Keen which makes life a lot easier.

If you like solid platforming then pick it up on Steam.  It's five bucks for the lot and if it goes on sale there's no reason not to pick it up.

Also, this game was made by ID Software.  You know, the guys who made DOOM and Rage and everything.

Monday, May 13, 2013

Fire Particles - An ActionScript 3 Tutorial

Well, hello there neighbor!

Below, you'll see something quite amazing that I happened to stumble across while trying to figure out how to make a starfield for my upcoming SHMUP.

Okay, it's amazing to me.  I'm not even a year old in the programming field, and much less than that in the ActionScript 3 language, so I must say I'm quite impressed with myself for coming up with something like this.

So below is the final product.  I'll be talking you through this, but not in a hand holding way, so if you don't know the basics of AS3 or how to use the FLASH IDE then this is not the proper starting point for you.



Pretty sweet, right? Let's start off with something simple:  the graphics.
DISCLAIMER: I'm using CS5 so if you're using anything else I can't guarantee this will work the same.

I set my stage up to run at 30 FPS and set both the width and height to 480.

Create a 50 pixel yellow ball with a size 10 orange stroke, so it looks something like this.

Turn this into a symbol with F8. "Fire" would be a good symbol name. Give it an instance name of "fire".

Next create a 10 pixel orange square.  Symbolize it calling it "FireParticle" and export it for ActionScript.

All of these will be created dynamically so delete this symbol from the stage, making sure it's still in the Library.

The last graphic is the Bounce button.   Create a 116 px by 38 px orange box.  Symbolize it calling it "ButtonBounce" and give it an instance name of "btnBounce".  Get inside the ButtonBounce symbol and create a Dynamic Text field, giving it an instance name of "txtBounce".  I used the "_sans" font so I don't have to embed it, and sized it to 24 pt.


Cool beans.  Now, let's get into the code.  First, set the Document Class to Main and pop that beautiful baby open.  Save it as "Main.as".  It should already extend MovieClip, but if not go ahead and make it so.
//Main.as
package  
{
 import flash.display.MovieClip;

 public class Main extends MovieClip
 {
  public function Main() 
  {

  }
 }

}

Alrighty. The first thing I like to do is establish the size of my stage for easy reference with a couple of constants.
 
//Main.as
  internal const SWIDTH:Number = 480;
  internal const SHEIGHT:Number = 480;
The most important thing is getting the Fire Particles to show up on screen. Right away in our "Main.as" in our Main() function we'll instantiate 80 of them but we want all of them to be above our fire object.
//Main.as
   //this will instantiate 80 fire particles and that's it.  
   //We'll use the "FireParticle.as" (which we haven't created yet)
   //to get them to reinitialize themselves.
   for (var i:int = 0; i < 80; i++)
   {
    //creates a new FireParticle at the index above our fire so it's always on top.
    addChildAt(new FireParticle(), getChildIndex(fire) + 1);
   }
That's it. If you test now it won't do much because we need to set everything inside the "FireParticle.as".

Go ahead and create that now. Let's add a listener so we know it's been added to the stage. We'll also give it some members (properties), one a reference to our root and the other a variable which will control our particle's speed.
//FireParticle.as
package  
{
 import flash.display.MovieClip;

 public class FireParticle extends MovieClip
 {
  //MEMBERS
  private var ROOT:Object;//our "Main.as" is our root so we need to access it somehow
  
  private var ySpeed:Number;//our particles have to move.  What better way than giving them some speed?
  
  //METHODS
  public function FireParticle() 
  {
   addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
  }
  
  private function init(e:Event = null) : void//we set this to "null" so we can use reinitialize it later
  {

  }
 }

}
Now, for prettiness, we know we don't want all of our particles to look exactly alike. That's just boring. So we'll want each individual particle to have a different alpha. This is simple, but it adds a lot of depth to our fire. Let's add a x and a y value so we can see the particles on stage. We'll also go ahead and set a ySpeed and a call to our ENTER_FRAME listener.
 
//FireParticle.as
   ROOT = root;//get our root MovieClip

   alpha = Math.random();

   x = ROOT.fire.x;//sets the x in the center of our fire
   y = ROOT.fire.y;//sets the y in the center or our fire

   ySpeed = 4;//will be used in our ENTER_FRAME listener

   addEventListener(Event.ENTER_FRAME, update, false, 0, true);
Let's go ahead and add our ENTER_FRAME listener, so our particles will move up. As well, if the particle reaches an alpha of "0" we want to reinitialize it, creating an endless cycle without instantiating a new particle.
 
//FireParticle.as
  private function update(e:Event) : void
  {
   y -= ySpeed;//moves this particle toward the top of the screen
   
   alpha -= 0.01;//lowers this particle's alpha every frame
   if (alpha <= 0)//if this particle becomes invisile...
   {
    init();//...we want to reset it
    //this is why we set our "init()" function to a default of "null"
   }
  }
Oops, there's a problem now. Our particles show up but it's all very boring and in a straight line. To change that we'll create a new function, one that is very useful in many areas of gaming. Let's do that now.
 
//FireParticle.as
  private function randomRange(minNum:Number, maxNum:Number) : Number
  {
   return Math.floor((Math.random() * (maxNum - minNum + 1)) + minNum);
  }
Confusing much? I'll try and break it down. What it does over all is take two input numbers (minNum and maxNum) and returns a number within that range. The floor function rounds the number down to a whole number so if we come up with say 5.43 we'd be able to get 5. Let's plug some numbers in for a more practical example, using "3" and "5" for our minNum and maxNum, respectively.
 
//EXAMPLE
  private function randomRange(minNum:Number, maxNum:Number) : Number
  {
   return Math.floor((0.2 * (5 - 3 + 1)) + 3);
  }
If the Math.random() returned "0.2" (Math.random() returns a number from 0 - 1 only) we would then multiply it by "6" which comes out to "1.2".  The Math.floor() function makes our return "1". Make sense? No? Check this link out. That's where I learned it.
Now we can use this function to make our fire that much cooler...well, you know what I mean. We'll change our starting x and y values as well as our ySpeed.
 
//FireParticle.as
   ROOT = root;//get our root MovieClip

   alpha = Math.random();

   x = randomRange(ROOT.fire.x - ROOT.fire.width / 2, ROOT.fire.x + ROOT.fire.width / 2);//this makes our particle's x initialize somewhere within the width of our fire object on the stage
   y = randomRange(ROOT.fire.y - ROOT.fire.height / 2, ROOT.fire.y);//this makes our particle's y initialize somewhere in the top half of our fire object on the stage
   
   ySpeed = randomRange(3, 5);//setting a random speed makes it look that much more believable, much as the random alpha value

   addEventListener(Event.ENTER_FRAME, update, false, 0, true);
So that's it if you just want to know how to make the particles dance like magic. If you want to make the ball bounce continue on, brave soldier.

We'll head back into our "Main.as" file for the duration. First up we'll add some new members to the family.
 
//FireParticle.as
  private var bounce:Boolean = false;//start it off false if you want it to be stationary from the get go, true if you want it to start off bouncing
  private var xSpeed:Number = 15;//this will be our fire's speed in the x direction
  private var ySpeed:Number = 15;//this will be our fire's speed in the y direction
Pretty basic stuff.

Now we need to put some listeners in our Main() function.
 
//Main.as
   btnBounce.addEventListener(MouseEvent.CLICK, toggleBounce, false, 0, true);//when we click on the button it will either start or stop the bounce
   addEventListener(Event.ENTER_FRAME, update, false, 0, true);
We'll do this in one go, because I'm tired. The comments should cover everything.
 
//Main.as  
  private function update(e:Event) : void
  {
   if (bounce)//if bounce is true...
   {
    //...we'll make the fire move in both x and y directions
    fire.x += xSpeed;
    fire.y += ySpeed;
    
    if (fire.x - fire.width / 2 < 0)//if it hits the left side we push it back to the right
    {
     fire.x = fire.width / 2;//repositions it so it doesn't get stuck.  Same for all the other ones
     xSpeed *= -1;//this makes the speed the opposite, ie "15" becomes "-15".  Same for all the other ones
    }
    
    if (fire.x + fire.width / 2 > SWIDTH)//if it hits the right side we push it back to the left
    {
     fire.x = SWIDTH - fire.width / 2;
     xSpeed *= -1;
    }
    
    if (fire.y - fire.height / 2 < 0)//if it hits the top we push it back to the bottom
    {
     fire.y = fire.height / 2;
     ySpeed *= -1;
    }
    
    if (fire.y + fire.height / 2 > SHEIGHT)//if it hits the bottom we push it back to the top
    {
     fire.y = SHEIGHT - fire.height / 2;
     ySpeed *= -1;
    }
   }
   else//if it's not bouncing then it sits at it's home 
   {
    fire.x = SWIDTH / 2;
    fire.y = SHEIGHT * 0.85;
   }
  }
  
  private function toggleBounce(me:MouseEvent) : void//when clicked...
  {
   if (!bounce)//..if it's not bouncing yet then we will make it bounce...
   {
    btnBounce.txtBounce.text = "STOP";//changes the dynamic text box
    bounce = true;
   }
   else//...otherwise we stop it
   {
    btnBounce.txtBounce.text = "BOUNCE";//changes the dynamic text box
    bounce = false;
   }
  }
Okay, all. I'm tired. Writing tutorials are much more time consuming than I thought. I really hope this helps you out. If it does, hit me up and let me know how you've used the concept or if you have any questions. Peace out!

Friday, May 3, 2013

Miracle and Late to the Party: Finished Review of BioShock

Would you kindly not be so frakkin amazing?!

::SPOILERS:: 
Come on, this came is six years old, you should have finished it by now.  If not, then don't read.

Yes, this game came out in 2007.  Yes, it's 2013.  But I've finally finished it!  This is two games I've finished in as many days.  It's been a long, drawn, tiresome way of finishing video games and I'll admit that some of the grandeur of this game was lost because of that.  But it's totally worth it.  I originally started the game back in 2010 (still very, very late to the party).  I played it on the hardest difficulty.  I died a lot.  I got frustrated.  I quit.  In 2011 I fired up Steam and clicked to play it, only my saved data had all been destroyed.  I had sunk four hours into it, yet all for not.  So I didn't play it.
Until I accidentally had it spoiled for me while browsing the interwebs, would you kindly.  So I said I have to play this game now, because that's just awesome.
So I did.
On Easy difficulty.
Man this game is a breeze!  I found an utter love for playing on Easy.  I said it would let me play and beat more games and I was right.  I will always play on Easy or Normal difficulty from now on.  I think I only died once the whole playthrough, and that was because I blew myself up.
I played the good guy route, saving the Little Sisters, because I'm such a sweet dude.  The ending was totally worth it when the Little Sisters stabbed Fontaine to death with their harvesters.  Such sweet innocence.  And the ending scene was short, but it was to the point.  Perfect in fact.  And then I didn't have to sit through the credits.  Pretty awesome.
I should probably talk about the game.  You get a bunch of weapons.  You shoot stuff (although killing big daddies with a wrench is super  satisfying).  You get superpowers like telekinesis, pyrokinesis, cryokinesis, magicbeeskinesis and you kill stuff with those too.  You can sneak.  You can use the environment to help you murder everyone in sight.  It's a great way to spend ten hours.
Plus, the story is amazing and very well written with a few a few surprises thrown in.  I think everyone compared it to System Shock 2 (I'm not fact checking), but I never got into that game so I won't.  I would compare it, storytelling-wise, to the Portal series, probably 2 more than 1.
Also, the atmosphere of this game is phenomenal.  Even though I was hardly in danger on Easy difficulty, I felt scared at points.  The sound engineers did a great job.  Bravo.  I think you guys don't get as much recognition as you should.
The point is, get this game and play it if you haven't already.  It's amazing and on Steam sales you can usually get it for five bucks.

Thursday, May 2, 2013

Miracle: A Finished Game Review - Spec Ops: The Line

War.  War never changes.

So, I don't finish games.  Even short ones.
But I was feelings sick and my natural...chosen pick me up in the past has always been play video games.  So I fired up Spec Ops:  The Line again, deciding to see what was what.  Yeah I was pretty close to the end of the game.
At the end it tells you how much time you spent playing the game.  4 hrs 32.  Yeah that's about four hours less than I actually played it, because I die alot.  I almost switched to playing an easier difficulty (and the game asked me to many, many, many times) but I held strong and ended the way I started it.
I went back and played two missions because I had left some of the intel laying around.  I played them on FUBAR mode and didn't die once.  Crazy that I'm only bad when I'm trying to get through the game.
Anyhoo.  Man, this game rocks my socks off.  There are four endings to this game and I went through everyone of them, because they make it easy to do.  All four point to the utter horror that is war and this game shows just how ugly it is.  I talked a bit about that in my unfinished review.  I won't ruin it for anyone who hasn't beat it, but this game is very psychological.  As Captain Walker you get Post-Traumatic Stress and it doesn't go away, even by the happy ending.

So beautiful...Let's blow it up!
Which leads me to the main thing I want to talk about.  This game is more of a role-playing-game than any I have ever played.  It truly puts you in the role of Captain Walker and it doesn't let you go.  You HAVE to go through what he's going through.  Unless you just skip the cutscenes.  Then it's just a fun third person shooter.  But I was fully engaged even with all the start/stop I did along the way, and it's because Walker was so well written, and the story was laid out so well, that I couldn't help but remember all that had happened previously.  Much like Amnesia:  The Dark Descent (which I also haven't finished, although that's more due to me being too scared to finish it) this non-role-playing-game is one of the best role-playing-games ever.  While I loved Mass Effect (only the first one) I still felt like Shepard was just a puppet whose strings I was pulling, much like any of the Bioware/Obsidian/Black Isle games.  In Spec Ops:  The Line I truly felt I WAS Walker.  And that's hard to do, especially when I'm generally taken out of the immersive storytelling when I'm constantly being killed.

So bottom line, if this game is good enough for me to finish it, then it's good enough for you to go out and get it.

Actually that's not saying anything.  I hated Mass Effects 2 & 3 but I still beat them.

Regardless, play and beat this game.  Yager deserves your money.

Friday, March 8, 2013

RPG Maker VX Ace Plus My First Game


Many, many years ago I messed around with RPG Maker 95.  It was a way to create your own RPGs similar to old school Final Fantasy or Dragon Warrior (Dragon Quest).  Except it was in Japanese.  It was lovingly translated to English by a fan (I think), but it was just a terrible system to work with.  Especially since  I didn't really have the drive to make games back then that I possess now.  Needless to say I quit using it, having only made a couple of buggy small and pointless games for my own personal enjoyment.

But a couple of days ago I saw the new version RPG Maker VX Ace on sale for 50% off on the Steam Store.  I figured for 35 bucks it wouldn't hurt and maybe since I understand programming a bit and have an actual drive to make video games so I'd give it a shot.  Plus it's translated properly!

Well, it's certainly less buggy than the 95 version was, but it's certainly not "Simple Enough For A Child", as the Steam store states.  Unless that child is really awesome.  It's hard.  Or I am really bad.  I don't know.  But in two days i finished this quick little game...or visual novel.  I'm not really sure.  It's more just me messing around trying to figure things out, but I spent alot of time (more than I should have probably) playtesting it, trying to make it a super tight (if short) experience.

Anyhoo, enjoy my latest creation:  The Sword.


Thursday, February 7, 2013

Late to the Party: The Witcher


Okay, I wasn't actually late to the party in playing The Witcher.  I got it because I needed something to fill my time while I waited for Dragon Age:  Origins to come out.  I played it and I remember liking it but once DA:O hit, The Witcher was forgotten.

Forgotten at least until the recent Steam sale for The Witcher 2:  Assassin of Kings.  Now I didn't pick it up because I haven't beaten the first game.  I'm a little more responsible with my money nowadays.  But I decided to play the first one and get to the sequel and see why everyone was saying what an amazing game it is.

So I restarted The Witcher and the first thing I noticed was how clunky it is.  The cutscenes into gameplay are jarring and the scenario always starts before the fade in is even complete.  Animations are pretty poor, but that's to be expected, especially on the Aurora engine.  Also, animations shouldn't dictate the quality of a game.  But starting a fight should be as simple as pressing the attack button.  Instead Geralt waits for a few seconds and then as he's being attacked he'll lazily pull out his sword.  Then he'll get into a fighting stance.  Then, finally, he's ready to go.  This has caused me many deaths that could easily be avoided.  This is a big gameplay issue.  However, it's more a frustration than anything else.

The big thing with The Witcher is the atmosphere of the story.  I have no idea what's going on, and since Geralt has amnesia I guess this is intentional on the storytellers' parts (I hope it is).  But it's engrossing and I just want to know more about the world that I'm in.  I know it's based on a book series but since I haven't read those (yet) I am truly lost.  I can't wait to play this game and everytime I have to stop (for work, eating, bathroom breaks) it breaks my heart.

But one thing about this game is really bizarre.  If a female NPC has a name you can sleep with her.  At least so far.  I'm up to the beginning of Chapter II and the only woman that hasn't thrown herself at me is Shani, but if I remember right from the first time I played this game, that's pretty close to happening.  If I remember right, even a dryad wants what only Geralt can give her.  That's really weird and perhaps a little misogynistic.  So, if you're immature, this game is fantastic for that alone.  If you are very young, please stay away from this game until the site of boobies doesn't make you giggle or feel uncomfortable.  Or if you just know how to say "no."

Monday, January 14, 2013

My First Flash Games

Hey there, folks!  When I first got it in my head that I wanted to make video games, I started learning C++, as that's a very base language and I'd heard that if you can learn that you can learn any other language too.

So C++ is good, but output is really slow for those that are impatient.  So I looked into Actionscript 3.0 (Flash).  I created my first game, a Pong clone, in three days.  It's simple and there's absolutely no depth to it at all.  I decided to graduate myself (a little prematurely) to a brick breaker game.  That's taken much more time to finish, although most of that was simply due to finding all the little bugs.  But it's done now, and up on my website, hopefully bug free.

Except that they're laggy as could be.  I don't know why.  But for now it's finished and I'll move on to something else.

Head on over to Floydian Theory to check them out.

UPDATE:  I've put some download links for the games so if you want to try them out they should be lag free.

Tuesday, January 8, 2013

Unfinished Review: Spec Ops: The Line

 
So I haven't  heard a lot about Spec Ops:  The Line but what I have heard was very good.  I got it on sale for just a couple of bucks because I was curious and $2.49 is perfectly within my price range for a game I'm not going to finish.

That's right, fellow gamers, it's time for another installment of Unfinished Re--

Spec Ops:  The Line is one very beautiful game.  I don't normally worry about graphics in video games as I believe gameplay should always trump anything else.  But sometimes the graphics are done so well that you can't help but notice it and in return comment on it, similar to my feelings on the movie Drive.  What I've played of the game, everything takes place in the desert, so you'd think brown would be the overall feel of the game.  But it's actually not.  The lighting is so awesome that the game has a vibrancy about it that is lacking in a lot of your typical action games such as Call of Duty or Gears of War.  It reminds me of Bulletstorm, actually (which I also haven't finished).

purple is the new brown

Which is actually quite funny because this is one dark game.  Not in lighting but in tone.  The opening sequence you shoot down a million helicopters with an endless supply of bullets and no cooldown, something that has been missing in action games for a long time now.  Fun, right?  Absolutely.  But then you get to the killing of people, up close and personal.  In this game there's something that makes the enemy feel very real and I genuinely feel bad every time I decapitate someone with a shotgun blast to the face.  But as the main character says if they shoot at you first, then you better shoot back (paraphrase).

So the story seems pretty cool if a little Apocalypse Now-ish, where a Colonel and his battalion, the Damned 33rd, have gone rogue.  But there seems to be more to it than that as a CIA agent comes into the mix and is helping insurgents kill me and more importantly the Damned 33rd.  Also, this game is really exciting and I can't wait to play more, where Apocalypse Now bored me to tears.

The play mechanics are pretty sweet.  It's a third person shooter, so cover is involved, but the cover doesn't make me angry like it does in the second and third Mass Effect games or Gears of War.  Cover is essential, because you will die without using it, but you can actually move from place to place pretty readily without immediately getting your head blown off.  Also, directing your squadmates seems to work better than in most games, although sometimes they shoot like Imperial Stormtroopers which can cause headaches and unnecessary deaths.

Despite the opening scene of unlimited ammo, the rest of the game is kind of sparse.  I found myself giving up my guns quite a bit in favor of less awesome guns, which had more rounds, which makes the battles more intense as I'm constantly pushing forward on the battlefield just to get to a weapon an enemy has dropped.

One mechanic that is just as annoying now as it always has been is the checkpoint system.  I understand certain ideas behind not having quick save and unlimited saves but I find that the older I get the less time I have to spend to repeat stuff.  I think I might start playing on easy modes from now on.  We'll see.  I'd probably finish more games that way.  But I have to say that the checkpoints are at least pretty close together.

Anyhoo, I highly recommend Spec Ops:  The Line as it seems very fresh.  Then again I don't play too many straight on shooters, so I'm not really sure if it's fresh or not.  But for me it is and that's what counts.

UPDATE:  Wow, I can't believe I forgot about this, but there are more intro movies on this game than I think I've ever seen.  It's truly insane. Here's a list of all of them which I found while trying to remove them:
 
2KDemo_Warn.bik
2KLogo.bik
blackscreen_3sek.bik
Legal.bik LegalScreen.bik
legal_DEU.bik
legal_ESN.bik
legal_FRA.bik
legal_ITA.bik
legal_logo_screen.bik
UnrealLogo.bik
YagerLogo.bik