Search This Blog

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





Captain Zero Development... Background



Captain Zero.

Background

It started out as a quick project to test how to make objects bounce off each other in an Asteroids-like 2D "spaceship" environment.

Once I got something flying around, ideas started coming about what I could do with this type of game.

...That was 12 years ago.

My first experience with spaceship movement like this was the same as everyone else's:  Space War.


I think that might have been the first video game I ever played.  It was at a county fair in Oregon somewhere. Later, I loved games like Asteroids, Asteroids Deluxe, Star Castle, Space Fury and other top-down spaceship games.


I did it in a BASIC language that had 3d Direct X based commands (like "make object sphere" and "texture object") called Dark Basic. It then grew to a full space shoot-em-up which ended up in the first edition of the Dark Basic newsletter as an example game.   It's still on their site.  I got lots of good feedback, and constructive criticism.



"I really liked Captain Zero. The graphics were really cool, and these ones are even better. I have some suggestions though:

*Make a difficulty setting. Captain Zero 1 was waaaaay too hard for me.
*I absolutely hated the fuel system. I could never last more than 2 battles because of it. I could never figure out what I was doing wrong.
*Add a tutorial level. It would make things a lot clearer."

"Wow, incredibly well polished and the game play looks awesome. Big respect! "


"Very cool stuff. I was working on something like this a while back, but I'll probably have to go back to the drawing board cos yours looks graphically so much better. "


"Absolutely, unquestionabley,undeniabley,Amazing. Release it and I will buy it.

"Much respect."

And if I may ask,what did you use to make the video with sound."


Great video. Can't wait until the next demo!"


It goes on like that.


When Dark Basic Professional came out, I started over, using their superior engine and more robust language.  (Oooh you can have data structures now!)  Which was a big deal to me back in 2004-2006.

"Looks pretty sweet dude. What are you planning to do the sequel?"







The best was from the TheGameCreators staff, who included my game in their newsletter:

"A lot of love went into this game..."  

But love can be painful, and soon the game got too big and buggy and after years of development, I abandoned it.

Since then I started a a few projects, but finally it was my youngest son who convinced me to "Finish Captain Zero..."  So That's what I'm going to do.  Of all the comments and encouragement I've gotten, those of my boys are the most important and have by far the most impact.  If I can make a game they like, then I've done what I set out to accomplish.

The biggest influence was a PC game called Star Control --which was basically a really souped up Space War with a lot of variety and fun elements --There were many kinds of ships with their own unique weapons --and a really cool looking "3D" star map to navigate between areas in space with different planets.
Star Control

The camera got closer when ships were fighting at close range and then "zoomed out" when they were far apart.  Different weapons meant different strategies, and the camera zoom effect made the battles seem much more cinematic than any game of its type.


NEXT:  OK Enough nostalgia crap.  As the late Steve Jobs once said,




"Great artists ship."

Here's the "Dark Basic" review of the original version:

There is just something very honest and pure about this game. Like it isn't trying to be something it's not and yet at the same time it offers some great gameplay and arcade action. The basic premise is this: shoot everything, move from one planet to the next and repeat :) The action takes place in a 360 degree playing field with you looking down on your ship. Asteroids and aliens bombard you from all angles and if you blow them away you get to pick up bonus weapons and power-ups to make life easier for the larger foe on the later levels. There are some very nice touches in this title - I especially like the winding trails of the homing missles, the devastation of the laser cannon and the enemy ships that split into swarms of smaller beasts requiring some frantic fire-button work to clear. There is careful balance between keeping away from them and maintaining fuel levels (perhaps in some cases it's too hard to do this as fuel runs dry very fast) but it's all part of this quality game.


Here's what's done and what needs to be done: (next post)