Search This Blog

Friday, October 31, 2014

HAPPY HALLOWEEN Haunted Minigolf

I posted about this before, but since it's Halloween, here's a project I did a coupla years ago called HAUNTED MINIGOLF and a little more about the development.

http://www.newgrounds.com/portal/view/644232?updated=1

It's one of the 1% of things I worked on that can be called a "completed game." 18 holes of atmospheric spooky fun.  Enjoy.

Just a few words about the development:

I made the entire thing using a product called APP Game Kit from a company called The Game Creators... but then deployment it was such a painful buggy process, I re-did it completely using Construct 2.  With Construct 2 I did in about 2 months what took me almost a year using AGK.  My AGK folder is now a ghost town as I will never use that product again.  There's no point.  Why use chop sticks when you can use a fork?

To be fair, I already did a lot of the art and assets by the time I hit Construct 2, but going from never using it before to finishing a project took a fraction of the time, and deployment to any web browser is done before you even start.

The ball has an animation that appears to "roll" in a neat 3d way even though it's a 2d engine.  Also I really like the "creepy attic" level. There's something about old creepy dolls.

Mostly I used stock photos, a 3d level editor and lightmapper called 3D World Studio, and Paint Shop Pro 7.   This way I had the freedom to just draw, cut n paste, add lighting, add effects etc in any way I wanted, and pre-render everything to create a mood for each level.  For example in the entryway of the haunted house (level 4 or 5) there are bloody hand prints on the door and there's the American Gothic painting with the old man and wife with a pitch fork, but they're skulls instead.  I tried to put little touches like that everywhere I could.  That's what makes gamedev fun.

I also made my own rules for minigolf, to make it feel more like an arcade game.  You start out with 3 shots or "balls" and after each successful hole, you get some more depending on the par.  If you don't use all your shots, they carry over so you can get through more difficult areas.  There are also bonus ghosts you can get and rolling skulls you can knock into holes for extra points.

If you get through all 18 holes, you get a bunch of points, 10 extra balls and start over.  This is how the real high scores get made.

Oh the music is a loop from the open license piano movement from um... "Ghost..." something... You can actually hear that same song in the XBOX version of Minecraft.  Cheap skates.  2.6 billion for the franchise, but they used an open license song for the interludes... anyhow I actually changed it up a bit.





Sunday, October 5, 2014

More to do...

Planets textures needs a fixin'
Arkana
Patria

Added XM-3 and big giant asteroid planet texture and Shinda (Japanese for "dead") Shinda I made from scratch for my "spooky evil ghost-ship" kinda system.



Friday, September 26, 2014

Arcade Influences and CREEPY SPACE

CREEPY SPACE!

In the biographical book Masters of Doom, John Camarack was quoted as saying "...the player should be afraid all the time..."

http://en.wikipedia.org/wiki/Masters_of_Doom

John Camarack and John Romero were said to be dead against a "Doom Bible" or definite story line --which explains the lack of cut-scenes in the game.  Games had cut-scenes before Doom.

A story should be the story of the player and it should happen in the game because of what happens during the game... at least in this kind of game.

I think the first space horror survival kinda game was really SINISTAR.  Sinistar was the Freddy Kruger/Jason Vorhees/Chucky of space.  I mean just look at him!


When he gets assembled and says "Beware I live!"  it was f#%$% terrifying!  Normal weapons don't affect him at all, he bashes asteroids out of the way like they're nothing, he moves faster than you and if (when) he touches your ship, he eats it.

The relentless single-minded purpose of the workers, the constant fear of the warriors... and the inevitable nightmare of Sinistar's incarnation, along with the loneliness and small-ness of the player in relation to the infinite seeming space that goes beyond the screen and even beyond your scanner range made the story of this game very intense --without having a story. 

If you're familiar with Sinistar, you'll see the game mechanics of Captain Zero owe a lot to Williams' 1982 masterpiece.  If you've played that and the PC version of Star Control, and arcade games like Strike Force and R-TYPE, then you know where Captain Zero is coming from.



STRIKE FORCE!

...or at least where I hope it's coming from.

In Captain Zero, there's a darker, colder, spookier section of space.  A place where ships go but never come back.  Where the husks of their destroyed spaceships come back to life to destroy anything around them.  



There's  a machine/monster called the DemiLich with bright red eyes.  If they fix on you directly... well ever see the end of Raiders of the Lost Ark?  Very uncomfortable. You'll need a really good dermatologist after that.   


Friday, September 12, 2014

Damage Collector & Callback Explosions Oh-and a Shader Effect

Damage Collector

When you get hit, a bullet, or impact delivers its damage to your "damageTaken" variable --and nothing happens --until the Damage Collector gets wind of it --which it does about once a second.

In this game, I wanted damage to be more than just yourHealth - BulletDamage when a bullet hits you. When you start talking about regenerating shields, armor, and systems damage --followed by smoke, sparks flying and maybe parts flying off, it starts to get more complicated.

To follow the Single Responsibility Principle and keep my code manageable I created an event that fires each second to go through all ships and assess their damage and figure out what happens to them.  This Event is called the Damage Collector.

This is gonna cost ya, pal...
To handle Shields is pretty simple. Take the damage out of shields first... if that's all used up, take the rest out on the armor --which is a little more complicated... no more armor?  Well now I'm gonna have to verify you have photon bolt coverage on your insurance policy! Things can potentially get interesting here.

Armor doesn't suck up damage the way shields does.  After all you could get hit in the armor in the exact same spot a couple of times and start taking real damage --or get hit in a critical spot--a weak point in the armor.  So Armor is more of, well, armor, than a shield.  Damage has much more chance of hitting armor as it does of causing internal damage... but you can still get killed with full armor and just a few choice insults to your ship. The good news is Armor doesn't necessarily go down when it gets hit.  There's a good chance it will deflect the bad energy like a yoga class with no damage at all.

I used to play Star Fleet Battles...  their damage system is great.
Which squares are the red-shirts?
After all the shooting, the damage was doled out either randomly or the player got to decide where to take the hits.  Different parts of the ship had different amounts of hit-points --squares on this picture, and when those were all used up, they would no longer function --or in the case of generators or weapons, work to the extent that they're not damaged.

The point is, now that I have a single place where all damage is figured out, I'm free to make it as complicated as I want behind the scenes.   

None of this complexity should involve the player much --it should always feel like an 80s shoot-em-up arcade game.  I don't want to bog the action down too much in minutia --I'm loathe to allow the player to set forward vs aft shields for example or repair things beyond very basic aggregate systems.  Like Shields Armor and Engines. And then only then briefly between action.  This is an action game. 

But I loved it in Wing Commander when parts of the HUD became cracked and sparky and inoperable and you had to limp home, barely surviving a mission-- and I want to capture that skin-of-your-teeth feeling in Captain Zero if possible.

Cracks in your windshield? Call EasyGlass! The Windshield Specialists!

So I'd like to have cracks in the player's view, and maybe parts of the hud broken off and sparkie or have the scanner show video noise and be cracked... stuff like that.  If the player is damaged, I want him or her to know it!

Callback Explosions

The Function object in Construct 2 is a very powerful programming tool.  It allows recursion, facilitates encapsulation and abstraction, and, because you can call functions by their name--even if that name is stored in an instance variable of an object-- a little reflection as well.  This allows cool programming tricks like late-binding and callbacks.  Things you would need delegates to do in, say, c#, you can do easy in Construct 2 with a function call. 

I can send a parent "explode" function a string containing the name of some or other specific minor or effect explosion functions for it to call based on whose doing the exploding.  Thus functions can easily call functions named explicitly in their parameters.  Instead of different ships having different explosion effects, I have them pick from a buffet of explosion effects --they can mix and match.

Shader Effect

One platter in that explosion  buffet is a cool shader effect that warps space in an expanding circle giving the idea of expanding gas or a shock wave from the explosion.  Oooo.  Aaaah. 


Saturday, September 6, 2014

Predictive Aiming

AI is never finished...only abandoned..


For testing reasons I have made a red circle visible where the enemy thinks you are going to be when his bullet might hit you.  This way it can lead you.   I know there is  "turret" object that has built in aiming but I did this myself with math. 

It basically takes its distance from you and your direction and speed times a constant and predicts your future X and future Y.

To be more accurate at different distances, I took that FutureX and FutureY and ran it through again to get a new distance which will be closer to the actual distance where you're going to end up and did the equation again to get a new more accurate Future X and Future Y.

Really this is a poor man's calculus.  I'm using basic algebra, but I should be getting the integral of the first equation instead of running it twice.  But I'm not quite that math smart... and it works pretty darn good right now!



Before the predictive aiming, he couldn't hit you at all if you were moving any way except toward or away from him... now he hits you most of the time.  He's a big meany head! 

What I'd like to do is a more human-like approach with turrets.  Instead of trying to predict where you're going to be I want them to use trial and error.  They shoot the first time at where you *are... then look at which way they missed and just turn a little in that direction and keep shooting till they hit.

Like the old 1979 Battlestar Galactica turrets shooting at cylons...


Tuesday, September 2, 2014

Attack of the Swarmers!

Really liking the how the swarmer turned out.  They come out when you blow up pods... a -la Defender.  Yes I rip-off my influences!  Wait till I start on the "Sinistar" I mean "My own original game scenario" level!

Thursday, August 28, 2014

I'll be tweaking the fighter AI till the end of time

You'll have to go sideways...


I just added another state to the fighter's menu of things to do called "sideways." about once every second, the fighter checks to see if it has line of sight to its target.  If not it picks a direction randomly (right or left) and goes into "sideways" mode.

Really it means fly tangentially to the target.  In basic terms it means face the target, now turn 90 degees right or left.   This will create a circling pattern where it circles around you until it gets a clear shot.

When there's a group of fighters together, they block each other and are forced to spread out which is really cool actually... and deadly to the target --which is usually going to be you.

This also gives them a primitive and very cheap kind of "pathfinding" to go around objects to get to their target.  Since you're in mostly open space with scattered objects. There are no dead ends, so going around things is all that's needed.  This works great with asteroids, space junk, and other ships getting in the way.

As soon as it gets a clear shot, it's back to tracking which involves fly-by shooting you and coming back around to to do it again.

I'm also encouraged by the fact that I was able to add 50 of these fighters to the game --all spitting out tons of particle trail objecs out their back ends and doing their flying around thing with no noticeable slowdown on a 5 year old cheap-when-I-got-it PC.

Oh... crap.


See the ones in the back jockeying for position? ...and nobody's on top of anybody else? It's the magic of sideways.

Also... I'm very happy with how my efighter3 turned out.... Shiny! They have some nasty rayguns on the front there and they're not afraid to use them.


Monday, August 25, 2014

OK The List Revisited

What I have so far:

Player motion and animation
1 weapon (twin laser bolts)

2 Enemy fighters (protectorate) rigged and done

1 Enemy boss (protectorate battlecruiser) rigged, but no shooting or ai

1 Friendly capital ship (alphanaut) not rigged, animation done. No ai.
(This is a huge sprite with over a hundred gigantic frames.  I may have to optimize this and lose some quality to keep loading and game play smooth)

Asteroids done.  I'm really happy with the asteroids.

Star and shadow effects are done and they look great.

Planets done.  Done and done.  However they do need things about them like bases to get stuff and status who's controlling them etc.

Starmap graphics done
Starmap and level xml needs to be done.  I figure I'll add all the elements first, then make the level organization happen next.

Level and starmap makers are last

Multiplayer.. not even started.


My first priority is to get all the ships and game elements done.  Ultimately what I want to do is make the levels happen randomly based on some rules.  In past versions I had a "Threat level" based on the cumulative hit points of the enemies there for a given system or game level.  That way I don't have to explicitly plan out every level and every ship in that level... just give it a few values and have the game make the level randomly within a set of parameters.  In other words, give me a level editor and I can make a bunch of levels over a long period of time.. give me an automatic level generator and I can make infinity of levels in a really short period of time!

It's just so much work... I think I have to take a step back and re-think the scope of what I'm trying to do.  I'd rather have less of a game than I imagine than no game at all.

Let's take a look at Doom 2

Zombiman
Shotgun guy
Machine gun guy
Imp
Cacodemon
Lost Soul
Pain Elemental
Hell Knight
Baron of Hell
Incubus
Spider Demon
Revanent
Spider Mastermind
CyberDemon
Arch-Vile
Demon
Spectre

Am I missing anything?  That's 17 enemies total including "bosses."  Really 16 because the "Spectre" is just a see-thru Demon.

So far I've got the Zombimen and Shotgun Guys done and I'm working on the "Revanant." in Doom terms.

When you see a protectorate battle cruiser it should be a pretty good indication you're going to die. It's meant to be a very scary ship.  In the video demonstrating how to kill it, I make it look easy because a) it's not fighting back, which it will.  and b) I turned up the damage of your twin lasers to like 500 a pop.  It's the equivalent of each bullet being a rail gun head shot with quad damage.  Your twin lasers are supposed to do about 10 pts of damage each.

So you're going to need bigger guns by the time you see that one --and maybe some friends --who also have bigger guns.

Also I'm not going to have that many enemies because Captain Zero has something Doom 2 does not.  Friendlies.  You have some massive ships on your side.  The Alphanaut can take on the Battlecruiser head to head and win.  You also have a Condor which I have the model done... and there's a light cruiser for the bad guys to match.    Of course the bad-guy's battlecruiser won't come alone.

There's something worse.. kind of an anti-big ship big ship called the "Dreadnought."  It just shoots one massive big ball of energy out its front.  It's useless against fighters --well not really but it's slow to turn and only shoots in one direction.  It can, however, take out a big ship in just a few hits.  It's basically a big giant lumbering cannon with rockets.  There's nothing on your side like it.

There are also a couple of helpless cargo ships and 2 kinds of star bases --which I may leave out in favor of just saying you landed on a planet for repairs and upgrades.

I know I should be thinking more about games like Wing Commander Privateer, Star Control, Star Flight, (loved StarFlight --loved all of those) but I what I really want this game to feel more like is...

...Zelda.

The first Zelda.  With its critical paths and offshoots... Secrets and bosses...  Its journey.  Cross the first Zelda with Sinistar, then let the offspring have a baby with Star Control --have her go visit Uncle Doom for a while, and that's what I want this game to feel like --after she goes to school and gets her Action Degree at R-TYPE college.

Is that too much to ask?

Probably.  But it's nice to have goals.






Thursday, August 21, 2014

Why Construct 2?

So I'm in Construct 2 instead of say, Unity to make a game with 3d looking spaceships.  Why Construct 2?   Well even though there is a Visual Studio plugin, I can start developing for practically free and I can use my language of choice which is C# and take advantage of the full featured 3d engine and great indie game dev community around Unity...

I'm sticking with Construct 2 for this one.

Why?

1.  Even if it's better, I don't have time to switch gears.  I messed around with Unity and starting out with it is much more cumbersome.   People making projects that are the scope I'm looking at in Unity are usually teams, with much more net free time to make their games.

I have a test with creative software:   If I can't make a simple something in the first couple of minutes... I don't like it.  I'm not saying I have to master it instantly or make anything substantial, I'm just saying I should be able to make *something* very quickly.   That's why I like Acid Wave, and not Fruity Loops.  In Acid Wave I can see directly what's going on.  With Fruity Loops it seems there's an extra layer between me and the sounds I'm trying to make.  I'm not sure there really is, but for me and the way I think, there is.  For some people it might be the other way around.    It's why I like Paint Shop Pro, and not Adobe Photoshop.  There's just something about it I find less intuitive and instead of making pictures, I end up fighting with the interface to get it to do what I want, which should be obvious.

With Construct 2 it's almost as if everything I want to do has a "do what I want" button.  Whenever I think "I need an option to do this..." That option seems to present itself.  Even though I have to spritify some of my 3d objects (actually I don't if I want to use the ThreeJS based 3d plugin for it) It's a small price to pay for being able to put up new effects, ships and logic in practically no time at all.  

2.  For a 2d game, I don't see how it's better.  OK I can see how bringing the power of C# or C++ to bear on my game would be cool.  I could import an open source neural net for my AI and have the directions an enemy can move as "out" cells and train the s$% out of the critters.  But then if I want to code special things, I can just use Javascript and make my own objects --So in the end what's the difference?  What can I not do in Construct 2 in 2d that I can do with Unity?  That's the real question...

When I do want to do a full 3d game with modern effects... why use Unity instead of licensing Unreal Engine?  The more I read about it and look into it, the more I believe I should skip Unity all together and go straight for the Unreal.   There are tons of books and tutorials out there so what's the point of not using that? I just don't see the down side, and the upside is it's a much better engine in every way and it's industry standard and used by AAA development studios.  Not that "who it's uesd by" means anything much to me.

I hear that argument from Mac users all the time about Final Cut Pro.  Their arguments are comprised of "Bla bla studio uses it..." yet they can't tell me one thing their $1600 program on their $2000 mac can do that my $120 Sony Vegas on my $400 pc can't --besides being able to say it's the same editor used to splice together Napoleon Dynamite.   Which part of Napoleon Dynamite could I not edit with Sony Vegas? I could then take the extra $3,000 and hire Olympic Gold Medalist Jessica Hardey to do a voice over on it.  And that's just off the top of my head.  OK rant over... Back to texturing spaceships.






Tuesday, August 12, 2014

Haunted Minigolf

One of the few games I actually sort of finished was Haunted Minigolf:


It's 18 holes using basic physics and creepy looking layouts.  Some I created from scratch in 3D World Studio, and others I mashed together from old photographs and atmospheric effects.   

This is a great example of what happens when I use assets from an older game attempt and make a new one.  The older game is something I made about 13 years ago called Cemetery Cat.  
Cool eh?

It had some nice imagery and a cool concept --but I couldn't get it to go anywhere as a game.  All I could come up with was you're collecting roses to put on the correct graves-- but no matter how much stuff I crammed into it, it never felt like a coherent game, so I gave up.

I was looking at the graves, fences, bricks, fog etc I made for Cemetery Cat and thought, "you know what IS a coherent game? MINI GOLF..."  So I made a mini golf game out of it.  And Voila Haunted Minigolf was born. Took a while, but born none the less.


Hole 1.  Boo!

The Creepy Attic hole... One of my faves  Par 2.

Any how I "dug up" this game (so to speak), and submitted it to NewGrounds.  Please check if it's still "Under Judgement" and go judge it OK?  I'll get back to Captain Zero now I promise!

http://www.newgrounds.com/portal/view/644232?updated=1

ENJOY!

Monday, August 11, 2014

Battlecruiser, Back Story, and Space Junk.

I've been working on the Protectorate Battlecruiser... The Protectorate of Kanek are the main bad guys.  The story is coming together in my mind, but I don't want to be too specific.  This is first and foremost an action arcade style game.  There's a little bit of "space adventure" thrown in, but overall the story should be the player's story, not my story.

Protectorate Battlecruiser



This is why they not only didn't have, but didn't allow a "Doom Bible" and I don't want any cut-scenes.  That's not to say I don't have a back story in mind.  The player was a decorated war hero who reached the Confederation of Planets' rank of Captain 7 --the highest rank possible, but then left either in disgrace or disgust and found work as a pilot for hire.

Because of a new threat from a large fleet of ships whose markings and communications indicate they're called the "Protectorate of Kanek" you are re-instated in an unofficial capacity and get your ship back but without any numerical rank, hence the name Captain Zero. Also you must outfit your own ship with weapons.

Doom was one of the first if not the first video game I ever played where the dead creatures bodies stuck around.  If you killed a bunch of imps or demons in a room, the bodies piled up instead of fading away leaving a clean floor.

Those bodies are there for good. No magic cleaning.


So for all my ships there are several sets of pieces called "space junk" that end up floating around after the ships have been destroyed.  Here's the resulting "space junk" from the above battle cruiser.  The pieces float apart drifting slowly, randomly in space.


What's left of the Protectorate Battlecruiser when you're finished


How cool would it be if you had a massive bullet-hell arcade style battle and destroyed tons of spaceships and pretty soon there was debris flying everywhere!  No more exploding or fading out of existence. There are consequences for your battles! 

...And here is the result so far:

 

Sunday, July 27, 2014

About following good programming practices in Construct 2 Part 1: Encapsulation

Why should you learn good programming practices when using a graphical "game maker" type interface that boasts you can "make games without coding."   Because the boast is a lie.  If you do anything much more complex than the most basic demo, You ARE coding.  It really "holds your hand" as far a coding interfaces go, but there's no mistaking it.  Before you know it, coding is going on.

If you had the patience to watch my bungling 24 minute Construct 2 first attempt at a "Tutorial," you'll know I love using groups.

I love groups and I want to marry them.

Here's my event sheet for the main game layout in Captain Zero (where all the real action happens) so far --that's right I'm letting everyone see my source code!:


See it's all there!   Grouping your code not only makes it really easy to read and isolate different parts, but the ability to turn off or on a group makes them act like sort of asynchronous methods  --which are sometimes more clumsy to make in traditional languages.

It's a method that keeps happening until you tell it to stop instead of terminating at the end of it... unless you tell it to stop at the end of it --which you can in which case its just like a method.

Here... I'll open up the "Star" Group and you can see the events in it...


What the heck?  More groups!  Because all the effect events associated with the star are in the Star group, I can turn off that whole group if the star is behind something or off the screen and turn it back on when it's back in view.  When it's all in one place you can keep it under control.  This is the heart of what computer science calls the rule of "Encapsulation."

One of the first rules in Object Oriented Programming is the rule of encapsulation.  It's normally talked about in terms of Object Oriented Programming, but it's really a larger concept that should be remembered in procedural programming as well.  Since Construct 2 is very object oriented in most ways you want to pay attention to following the rules of encapsulation.

People often include the concept of "information hiding" (i.e. public and private variables etc.)  when talking about encapsulation, but that's not what it's really about.  restriction does help enforce encapsulation but really all encapsulation is, is keeping data and functionality bundled together and all in one spot for one thing.

I don't, for example spread events that affect the star all over the event sheets or have other events affect the star except in a very controlled way.

They can either turn the whole thing off or whole thing on.  No where in the fighter events for example, can you change the disposition of the star's lense flare... because the star's lense flare is the star's job and the section of code dedicated to the star should handle it.   And that's the real spirit of encapsulation.


"AYE AM THE SPIRIT OF ENCAPSULATION!"

Turns out the spirit of encapsulation is kinda creepy at first, but you get used to it.



Saturday, July 26, 2014

OK Break's over. Explosion Test

Coming right along I made an enemy damage gage that pops up whenever you hit an enemy. Only when you or somebody on your team hits a ship... if a fight is going on and it's not involving you damage won't show up.

Then I made some explosions.  4 smallish ones with particles and effects, and one big one for larger ships --it shakes the screen and has a nice ring effect.

Then I made a test that explodes wherever I have the mouse when I hit numbers 1-5 on the keyboard!  That's fun all by itself!


Sunday, July 20, 2014

Wolfenstein The New Order Review

Taking a break on the Captain Zero development blog to review Wolfenstein the New Order.




Couple of thoughts:  This installment is a little more disturbing than the last.  


It takes place in an alternate past where the Third Reich got hold of an atom bomb first, and won the second world war.  By 1960, they already had laser guns, desktop PCs, a large populated moon base with regular civilian transports to and from, near terminator-like AI surpassing our current 2014 technology --and with the exception of the resistance that you, the hero, are part of -- a world of relative peace and harmony for most citizens --unless you happen to be in any way unhealthy or of some "non-pure" race.   


You might almost ask why are you resisting exactly?    It bothered me at first that this may have been an underlying message of the game.  Maybe there’s a substantial payoff for absolute evil --in the form of amazingly cool stuff! Yeah sure they’re horrible, but they’ve got a friggin’ moon base and cool as s#%$ robots!   Or as Blaskowitz himself says, perhaps echoing The Evolution Control Comittee’s song,  “I’m on the Mother F#$%in’ Moon.”  Yes I got that reference.





In real life, it was a peaceful Polish Jew who came up with the math and science that lead to the Atom Bomb, and it was the cultural and ethnic melting-pot of the US, not the purity and “efficiency” of the “master race” that got to the mother #%% moon.  Not to mention a gentle soft-spoken and by all accounts highly empathetic British homosexual who cracked their Enigma Code.  


Not only did the Third Reich’s war machine lose the war, but as most clearly illustrated by the 1936 summer Olympics, their ideology lost as well --and it lost badly.  So this world in which they won comes off as an alternate history where their cruel bigoted and dogmatic culture won too.  




This brings back the moral dilemma of ends justifying means, like hearing that great medical advances were bought at the price of their human experimentation --though I’m not sure even how true that is-- just something we all heard growing up.  Or the famous George Bush quote, “The thing about dictatorships is they are very efficient.”  I think there’s a tendency to over-play the “benefits” of evil and underplay its costs.


The game story-line mitigates this in two ways.  First: boy are they evil.  For all their fun toys, the casual executions of the helpless patients in the asylum and the Aushwitz-like grotesqueries of the “labor camp” level obliterate any fictional admiration one might have for their fictional accomplishments. The labor camp is especially graphic albeit sanitized by the shiny layer of disbelief a video game brings. After all any amount of torture and disfigurement can be erased with a health pack --as opposed to decades of healing and therapy.


As it turns out, all these accomplishments are built  literally on concrete that’s being eaten by a special type of mold.  Symbol (blink blink blink) Symbol… that’s symbolic… The edifices of evil however grand eventually turn on themselves and crumble...eaten from the inside by their own… anyhow you get the idea…  


Yet in the game, this seems to go nowhere.  I kept waiting for a call-back to this getting worked into the story line but nope.  Maybe I didn’t look around hard enough.  Still I wanted to see the evil empire eat itlself from the inside out --instead nothing… what was the point of the moldy cement at all?  Must be something I haven’t unlocked.  Seems like they missed the deep storyline boat on this one.  It’s just the pretext for one side-mission and never really gets mentioned again.


Second, as the game progresses, it turns out  that their amazing technology was largely stolen from some precursor or aliens or whatever. Neet! But again not expanded on at all really.  Seems like this game almost does a lot, but never quite gets there.


ABOUT THE SEX SCENES (boom chucka wucka..)




Yes there are sex scenes.  Though only containing what a ratings board might call “partial nudity,” they are graphic and unmistakable.


A common response might be “What was the point of them?”  Seriously they have porn on the internet.  If I want to see people having sex on a screen, it’s only a couple of clicks away. (Ahem) or so I’m told.


I remember getting in this argument with my dad.  He was saying about movies, “Why do they have to show it? In older films, they just went into a bedroom or it was the next day and you knew what happened…. they didn’t need to show it…”


Of course I had to challenge this in my best snarky smart-ass teenage voice… “Ok but then why show a car chase?  Just show them getting into a car and then later have them explain the bad guys got away… We can work out basically what happened…They don’t need to show it. For that matter, why show ANY of the movie?  Just have the heroes walk into a room and say ‘Boy that was some adventure!’  then run credits! The End!  Wow, dad, you could save movie producers a ton of money!”


There was a time in the 80s for a while when movie producers figured out that adults didn’t want to go see a movie unless it had an R rating.  So they would somewhere in the movie flash some obligatory tits at the camera literally out of nowhere to get the R.  




Sigh.  The good old days.


But that’s not what’s happening here.  Consider the movie, The Terminator.




The sex scene in The Terminator was graphic enough to get an R rating all by itself… and absolutely necessary.  If it wasn’t there, Sarah Connor saying “...we loved a lifetime’s worth” later on would have been meaningless.  We needed to experience it on some level beyond the referential.  The iconic image of their hands in an orgasmic death grip at the end of it will stay with me forever.  If they would have just “went in a room and came out later” and she said, “we loved a lifetime’s worth.” my response would have been “You did? Wait, when?”  




The times Blaskowitz and his love interest “do it” are a bit clumsy and give away the salient fact that game cut-scenes are still way behind cinema no matter how much money they pour into the title.  With a couple of cringes and a shudder, they are, thank goodness, forgettable.  Whoever created them needed to watch less Machinema Porn and go back and watch Enemy at the Gates for how to have the hero viscerally connect with a love interest.   


Like with most of the game what they attempted was way too much more than what they accomplished.   Like the wheel-chair bound character gets this amazing Iron Man like suit and it just shows up for a couple of seconds here and there in the cut-scenes --and then as an obvious deis ex machena.… nothing more about it really.  

I was waiting for ME to get the suit.. but no, doesn't happen.  It’s like the game almost delivers so much… then yanks it back, and says, “Ha ha!”


Where are the Zombies?  Where’s the Supernatural?


I respect their choice to go away from the supernatural in this installment, but I don’t necessarily like it.  Where are the zombies?  It’s not Wolfenstein without friggin undead!  In Return to Castle Wolfenstein, those were the scariest zombies I had ever seen.  The parallel “spirit world” in Wolfenstein (3), was pretty cool.  


Here they in a way took the high road and abandoned a trope that was well taken over by COD’s Nazi Zombie series.  While I gotta give them props for that, I do miss the zombies.  On the other hand --scary robot dogs right out of a dark Jetsons cartoon!





The Ending (Spoiler Alert)


At the end, you have a defeated Death’s Head in one hand and a big knife in the other.  At this point, you’re pretty mad at him and probably want to stab him, but I didn’t want to.  I wanted to be better than him or at least see what happens if I don’t stab him.  


Turns out you can’t --any button you push will stab him.  You have no free will in the matter, so why bother making it a playable event at all?   Really it’s just a cut scene paused at a moment before you stab him, and you have to press A or the trigger to make it continue.  


What’s really funny though is you can stay there forever and never stab him --you can’t drop him; you can’t move.  Stab him or sit there are your only options.  His expressions are priceless as the moment gets more and more awkwardly, comically long.   Once in a while he says “Coward” and briefly laughs maniacally and coughs.  I wanted to see how long he’d keep doing that if you don’t stab him and apparently it’s forever.  Try it… it’s ridiculous.


Somewhere there’s a series of Youtube mash-up jokes that can be done with this.  I humbly suggest,  Deaths Head Karaoke.





“...get your motor running… head out on ze highway…Born to be viiiled”


Like many bad criticisms, I’m judging this game more against what it could be, than against other games, or what it is.  Even though it doesn’t go as far as in my opinion its potential, it goes really far.  The gameplay is amazing.   Some of the levels are the most challenging I’ve ever played in a single player FPS campaign.  Challenging in a good way, not in a “they’re cheating” way. Also a lot of what I'm saying is missing might be part of extended content that you unlock during re-plays. I only played through once on "Normal" and unlocked hardly anything.


But as a very wise woman once said, "Ain't nobody got time for that!"


In spite of where it may come up short, can’t help but be a really good game, and if you’re a fan of the franchise, you’re probably gonna buy it anyway.  I sure did.

Saturday, July 19, 2014

About that Star Map



The Starmap was part of the first version of Captain Zero, but this is my most sophisticated attempt. .

Also the stars are connected based on the player's "range" variable, so it's possible to have stars on the starmap that you just can't get to unless you upgrade that range.

It was inspired by the 1980s game, Star Control 1, which had a rotating 3d starmap with lines between the stars and their neighbors:

Star Control 1 3d StarMap  (go to time 1:54)


Sorting out paths to nearest neighbors is something that, in a formal language like c# would have been much easier with a simple recursive method, but in an object centered graphical game platform like Construct 2, it's not as straight forward.

The fact that it can be done and in just a few hours, however, shows us just how powerful and versatile Construct 2 is.  In a 2D game engine I've created a 3D starmap rotating along the y axis.  The problem with "drag and drop" style game makers has always been the limitations imposed by its framework.  Do do something outside the game-types it was designed to create usually required a lot of work-arounds that make its advantages useless --if you even could do it.  So far with Construct 2 I haven't found anything stopping me from doing what I want pretty easily.

This wasn't super easy though.  To make lines between stars and their neighbors, I was faced with the problem of creating a 1 to many relationship for each star, without having any redundant connections.  In other words in a method where I go through all the stars once, if I made a line from a star to its neighbor, how do I stop its neighbor from making a line back?

Establishing this kind of self-referential cardinality is something more the job of SQL than of a graphical game making tool.  With say LINQ, or a simple recursive function, it would be no problem.

I tried lots of ways, but in the end it turned out to be as simple as "only connect stars to other stars on to the right of them."  Once I figured this out, it doesn't matter the order in which the stars are connected... as long as the connections are 1-way, then other stars can't connect back.   I could have used up, down, or left for the same effect.

The other problem you run into with Construct 2 is relating a single type of object to other instances of its type.  Events narrow down the objects so if you say "all stars such that" you end up with a subset of the stars, and from there you only have that subset and can't easily relate them back to a different subset.

To get around this when setting up the lines, I had to make temporary "stars2" objects on top of the stars, so then I could make connections from a subset of stars to a subset of stars2 without any problems.   I saved the original stars' UID to an instance variable in each stars2 so then I could connect the lines to the stars based on that UID, and get rid of the stars2 objects.

Sorry... it helps to talk about it!

Another problem was the hud wheel that controls the starmap rotation speed.  I wanted it to move like you're physically putting your finger on a dial and turning it around.  Try to find that behavior in Construct 2!

What I ended up doing was making an invisible "pointer" object in the center of the wheel and when you click on the dial, it locks the pointer to point at the mouse xy.  As long as you're holding down the button on the dial, it points that pointer at the mouse.   From there I can translate the angle changes in the pointer to the dial's rotation angle and voila... it's a rock-solid dial control.

Wednesday, July 16, 2014

Fighter AI

A word on game A.I.  Broadly, it means anything that governs the behavior of elements in your game.

My first try at a space game I had to make "AI" for the ships.   Here's what I did.

First make the ships move like you do.  That is to say: make them have the same rules you have:  rotation, acceleration, drift, etc.   This goes a long way toward making any ai more believable.

Early enemies
 The AI for my ships is based on this philosophy:

This might seem obvious, but it’s something to remember in general.  Half the battle of convincing AI enemies is to make sure the enemies appear to play by the same rules as the player.  A lot of what they do will then be determined by general rules and how they act will be more realistic.  (this is a rule that can be broken --but it’s a good place to start).

When possible, make them control like the player  (ie if the player has physics, gravity or “spaceship movement,” then so should the most player-like enemies), and make them subject to the same control limitations.

 Don’t let them get caught “cheating” --for example by always knowing where the player is --when they couldn’t, or turning on a dime when that would look unnatural with no explanation.

Make them subject to damage by the same things that would damage the player.   Nothing groin-kicks my suspension of disbelief like when enemies weaker than the player walk harmlessly over an electrified or lava floor or get hit by asteroids with total impunity.

“Friendly fire” among enemies is sometimes great (see Doom, Quake, Berzerk, etc) , but in this case none of them would survive  --so I’m willing to give them “friendly fire shields” or assume that they’re shooting “under or over” each other for the sake of gameplay.

Now that they control the way you do, I started with just 4 simple rules:

1.  If they were too far away from you --say beyond 800 units (or something) then they turn toward you.
2.  If they were too close to you -- say within 200 hundred or so, they turn away from you.
3.  When they’re in bullet range and pointing at you, they shoot.
4.  They thrust all the time.

That’s it.

When you have many instances of the same enemies following the exact same rules, they tend to bunch up and try to occupy the same spot.  To fix this, I added a little randomness to when they turn toward and when they turn away and gave them slight differences in speed.   These variables are set when the enemy is created and are unique to each instance of that enemy --so no more bunching.

Just with this mind-numbingly simple method in place, I let my friend test the game with several of these dumb 4-rule ships.  He came back with a surprising amount of “strategy.”   He talked about “tricking them” and “getting them riled up” as though they had much more sophisticated brains than they had.

He saw intelligence in these simple brained objects the same way a player sees a “tree” from a few simple blocks in Minecraft, or an “alien” from an 8 byte blocky character from Space Invaders.

The intelligence was projected from his imagination.

They are much more sophisticated now.  Back then they had only one "state" which was following those 4 rules, and another state which was "dying" in which they spun and blew up.   This is what is meant by "finite state machines" and describes the AI of most simple game enemies.  They have a few more states now and pick their targets based another simple set of rules.

Bottom line is they don't have to be smart at all, they only have to sort of "seem" like they are.





Friday, July 11, 2014

HUD HELL


OK I'm obsessing a little much over the HUD.  It's gone through several iterations so far, and has a long rich history of not really being what I want.

My first hud for version 1 back in 200(cough) long time ago was this:


Now that I look back it's actually kind of charming in its retro 1970s kind of way... like the cardboard print on an old arcade cabinet.  Maybe that's why I liked the big intrusive HUDs that were a physical part of the game..

Later when I redid it, it looked like this:
Pink is the old "transparent"

Not as intrusive, but still it represents a physical object.  The next step, my HUD lost its physical body altogether and became a more modern "ghost" of its former self.


It just needs a few things:  Scanner eg every space game since Defender, shields, armor, gun energy and an extra coupla things for special weapons or messages or which weapon you are using.   The most important thing to me in this game is a cohesive, and beautiful aesthetic --this should be the 2nd most important thing --game play should come first... but it doesn't --at least not for me.

The problem is it's hard for me to pass off a hud like the one above when there's stuff out there like this:

So I've been back to the drawing board... And by drawing board I mean Paint Shop Pro... an older version I like.   Here's what I've come up with for the scanner so far.  The light blue turns with the ship and the red points at the closest enemy and the dark blue turns with the enemy rotation --so it's very animated and kind of functional too.  I'm playing with other shapes for the gauges, but I donno...




It seems like the whole "Iron Man" hud elements have been done to death, but what can I say, they're perdy!  The bad part is I get stuck on stuff like this and it brings my development to a halt until I abandon it as "good enough"  But I always want to tweak it more.


Tuesday, July 8, 2014

Captain Zero Still working on enemy ai

OK fighters are back.  I made an abstract "shipbrain" that hopefully can take care of any enemy movement by tweaking values like "how close does it get to you before it either stops or turns away" and "when does it circle back..."  does it try to get behind you or flank you or just go toward you.  There are also some flocking algorithms I can give them so they'll be aware of each other, not just their target.   I think those should be states, though.  I don't have to make them play 3d chess with Spock  or win at Jeopardy, I just have to make them fun to blow up.

To get targeting to work the flexible way I want it I had to have teams --right now an enemy ai just picks the closest ship that's not on its team... to do this I had to have 2 variables: One for what team the ship is "really on" and another for what team other ships see it as.  This is the same most of the time but it doesn't have to be --which opens up some possibilities I never thought of before.   Mainly I just want to be able to have as many teams as I want.

I love in games when you go into a battle that's kind of going on around you without necessarily you being the focus of it.  Like in Halo 1 when you first see covenant fighting flood in the distance.  You just want to hang out and let them fight for a while.   It gave me that "whoa" feeling I got when a Berzerk robot first shot another..

A really good old school example of this is in the game Crossroads. It was made by a guy in the 80s for the Commodore 64.

http://www.dessgeega.com/crossroads.html

There's so much going on-- tons of destruction... most of which doesn't involve the player at all really.

Sunday, July 6, 2014

Captain Zero Development: Destroyed all my fighter1 code

I had fighters that were able to dogfight the player the same way they did in the old version, but as soon as I tried to put on an efighter2 code I realized I had violated the most basic rules of object oriented programming... encapsulation and inheritance!  I might want to make 10 types of fighters and there's no reason to make separate dogfighting behaviors for each rather make one really good and configurable dog fighting set of logic and tweak it for each type.  Things like "boldness" and "aggressiveness" can be quantified by how near they got before they start dodging or running away...

Whenever I've scrapped or lost something and had to re-do it completely, it's turned out better.  Whether the dog or computer ate my homework... I had to start over and the final result turned out to be much cooler.  So here I go.

Tuesday, July 1, 2014

Captain Zero: The List.

What's done:

Ship movement, scrolling, anim. *right now it's top-down static scrolling.  I'm
Template Layout.  Space Effects

zooming according to nearest enemy distance

Twin blaster weapon

Hud with  scanner, shields, armor, direction finder

Explosions: small, medium, particle

Asteroids.
3d Spinning, physics
large decorative background asteroids
Add asteroids function.

enemy fighter.1
Picks target, turns toward then away.  Shoots small blaster 1 shot per second when pointing at target















What's Left?

Star --flare, lense flares, volumetric lighting effects**DONE
3d star-map, navigation, effects
10 Planets
10 locations that aren't planets
4 secret locations (via wormholes)
random encounter generator
enemy wave system
2 more protectorate fighters
5 protectorate bosses/capital ships
spaceworm, cruiser
Kanek (main boss battle)
pirates
aliens
confed fighters
2 confed capital ships
confed transport
confed cargo
confed starbase
civilian starbase
protectorate starbase
worm holes
weapons:

twin blaster 2, 3, 4,5
5-way blaster 1,2, 3,
laser railgun*, 1,2 3  (aiming)
shotgun 1,2,3
electro 1,2,3,

special: ubershield, circling drone, homing missles, super bomb, blowback bomb, double quad dammage, cloak, comet shield, blowback shield , energy trail

main menu
options menu
upgrade menu -confed starbase
upgrade menu --civilian starbase
upgrade menu --alien ship
upgrades:
armor 1-2-3
shields 1-2-3
engines 1-2-3
turnspeed 1-2-3

money mined from ships/ asteroids
Survival/arcade mode
Survival high score/leaderboard

Music
Sounds
ACHIEVEMENTS!

*maybe
cosmetic ship upgrades --different ship models
monotization
extra damage from behind

MULTIPLAYER Co-op.
MULTIPLAYER deathmatch