Lately, I had the opportunity to work with Dbug on a small demoscene release.
I did a series of screens (the main title, the Defence Force logo and some other bitmaps) for this production and had a lot of fun making pixelart for the Oric.
What’s he that wishes so?
My cousin Westmoreland? No my fair cousin:
If we are mark’d to die, we are enow
To do our country loss; and if to live,
The fewer men, the greater share of honor.
God’s will! I pray thee, wish not one man more.
By Jove, I am not covetous for gold,
Nor care I who doth feed upon my cost;
It yearns me not if men my garments wear;
Such outward things dwell not in my desires:
But if it be a sin to covet honor,
I am the most offending soul alive.
No, faith, my coz, wish not a man from England:
God’s peace! I would not lose so great an honor
As one man more, methinks, would share from me
For the best hope I have. O, do not wish one more!
Rather proclaim it, Westmoreland, through my host,
That he which hath no stomach to this fight,
Let him depart; his passport shall be made
And crowns for convoy put into his purse:
We would not die in that man’s company
That fears his fellowship to die with us.
This day is called the feast of Crispian:
He that outlives this day, and comes safe home
Will stand a tip-toe when the day is named,
And rouse him at the name of Crispian.
He that shall live this day, and see old age,
Will yearly on the vigil feast his neighbors,
And say ‘To-morrow is Saint Crispian:’
Then will he strip his sleeve and show his scars.
And say ‘These wounds I had on Crispin’s day.’
Old men forget: yet all shall be forgot,
But he’ll remember with advantages
What feats he did that day: then shall our names,
Familiar in his mouth as household words
Harry the king, Bedford and Exeter,
Warwick and Talbot, Salisbury and Gloucester,
Be in their flowing cups freshly remember’d.
This story shall the good man teach his son;
And Crispin Crispian shall ne’er go by,
From this day to the ending of the world,
But we in it shall be remember’d;
We few, we happy few, we band of brothers;
For he to-day that sheds his blood with me
Shall be my brother; be he ne’er so vile,
This day shall gentle his condition:
And gentlemen in England now a-bed
Shall think themselves accursed they were not here,
And hold their manhoods cheap whiles any speaks
That fought with us upon Saint Crispin’s day.
Please help me to push ‘Astlan’ into the selection process of Steam/Greenlight. It needs every upvote, favorite or comment from you. The more votes there are, the more a game is likely to be considered for the Steam games catalog!
This project started as a simple remake of Lunar Lander.
Lunar Lander relies on a 2D gameplay with a simple use of physics and it exactly what I was looking for. I’m going to explore in this post how it finally evolved into something bigger, iteration after iteration.
A long list of improvements.
The initial change I wanted to implement on my remake was a multi directional scrolling, to offer a larger game area.
I built rapidly a minimalist level made of cubic blocks and started to write the physics and the controls of the Lunar Lander.
I found out that the game play could be accelerated, and then I made the ship to move faster. Rapidly, the challenge evolved from “land softly” to “navigate softly and avoid the walls”.
The goal of the game would be not only to reach a specific point, but also to collect a series of items scattered across each level.
I started to focus on the controls of the ship. A Lunar Lander is basically about controlling the ship’s reactors versus the gravity and the inertia.
But I wanted to avoid the usual problems related to the rotation of the ship. If the player is in charge of both the thrust and the roll angle, a situation might occur where the ship is upside down and the thrust direction will sum up with the gravity, thus sending the ship even faster against the nearest wall.
To suppress the frustration inducted by such a control scheme, I wrote a simple routine that always controls the rotation of the ship. The player is free to move in any direction, the physics engine handles all the collision and physical responses, the ship can translation, rotate, bump into walls, but in the end it always remain properly oriented.
In my opinion, this is a good compromise for a physics-driver action game, where the physics engine makes the game looks real but doesn’t spoil the gameplay.
The code of this routine takes only a few lines of code :
local _align, _speed
// Get the current orientation
local _rot_z = ItemGetRotation(item).z
// Get the angular speed (if the ship is rotating)
local _ang_v_z = ItemGetAngularVelocity(item).z
// Magic factors applied using an empirical approach …
_align = Clamp(Abs(RadianToDegree(_rot_z)) / 180.0,0.0,1.0)
_align *= 250.0
// … that defines the strength of the torque (angular force),
// applied on the ship to stabilize it
_speed = ItemGetLinearVelocity(item).Len()
_speed = RangeAdjust(_speed, 0.25, 0.5, 0.0, 1.0)
_speed = Clamp(_speed, 0.0, 1.0)
_align *= _speed
One of my friends who works in the game industry always told me that I needed to refine the controls before doing anything else on the game. During my past attempts at making a game, I disregarded this advice, and started with the level design. I eventually understood that Romain was right.
To bring the ship in motion, the player will only need to trigger the 2 side thrusters by touching the 2 halves of the screen. Such a basic control is perfectly suitable for smartphones and tablets, allowing you to concentrate on the game without having to constantly check that your fingers are properly positioned on the screen.
With the help of Emmanuel, I was finally able to tweak the core routine that drives the ship and defines the way lateral forces are applied to it. It ended up with the exact kind of behavior I was looking for, so the level design could start, at last!
The Level design
As I knew I couldn’t spend too much time on the graphics, I headed for the simplest method I could think of to build the levels : “lego bricks”. This technique, based on blocks, presented two benefits to me :
it is cheap in terms of time investment, because you only need to prepare a few blocks and you’re free to work with the GameStart editor. I didn’t have to constantly exchange back-and-forth between 3dsMax and GameStart.
it let’s the door open to a future extension that brings a lot of value to a game : a level editor that the players can work with to assemble new levels from scratch.
It has drawbacks too, of course. It’s a bit heavier for the engine to handle a large list of split blocks, and the overall visual aspect tends to be less realistic.
What’s next ?
Now that the game is almost done, with a series of 24 different levels, all we need is to polish the final builds both for iOS and Android platforms. As soon as the game is released, I’ll be able to focus on the next big implementation : the level editor.
In the meantime, you may enjoy the gameplay video below :
Today, as we have planned a walk to the Aerotrain’s test site, I decided to bring my iPhone and a tripod.
The Aerotrain railway makes a perfect landscape to create a fun & intriguing trailer for my (almost finished) game ‘Astlan’.
For the record, the Aerotrain prototype was designed during the 70’s as an high-speed alternative to the regular railways. A test site running on 25km, made of a concrete rail was built in order to test this prototype (max speed recorded was around 400km/h).
Nowadays, only the concrete rail remains, making a perfect place for urban exploration.
Here are a few mockups I made of the kind of framing I want to shoot once on the site. We’ll see if the final result is close enough. Or not