Tag Archives: Featured

Last Will

This week we played a game that’s all about flipping normality on it’s head.

bgLastWill

Last Will is a game in which the goal is to spend as much money as quickly as possible, and the firs player to go bankrupt is declared the winner, which is absolutely the opposite of traditional money-based games like monopoly.

It’s very much like taking on the role of the irresponsible wastrel that are the immoral paragons of Jan Austen novels. I’m essentially playing Mr. Wickham. The game’s art contributes to this ethos, and I’m almost entirely positive that the Victorian and Edwardian indulgence of the British Nobility is exactly the tenor of the game.

So if you’re looking to flip some of your board game preconceptions around, Last Will is a pretty fun little title.

Running in China

One of the most important things in any project, not just in software development, is to maintain a disciplined schedule. It’s absolutely critical to always have a set of goals and approaching deadlines in mind, at any stage of a program, and to gear your efforts to accomplishing those goals. I honestly think this is a productive attitude to have and it is key to keep yourself and your team members focused and driven.

But at times those approaching deadlines can get a little out of hand, and the need to meet a project’s planned schedule can become the cart that ends up in front of the proverbial horse. At these times, it might seem like a good idea to do one of two things: either to begin ejecting some of the project’s more ambitious features in the hopes that these can be included in a later version, or to produce “brute-force” solutions that meets all of the contractual obligations of the project but will inevitably require re-design in the future.

I’ve been in this situation several times over the course of my career thus far and have implemented both of the above solutions. I have been in the position of the developer that is pushing for more time and the position of the team lead that is pushing to get the product out the door on time.

When fighting for more time on a project, I’ve found myself recounting the same parable over and over again to guide myself and my colleagues.

A long time ago in Ancient China, the great scholar Lao-Tzu was spending the winter months with his family in the small village in which they made their home, with his wife, his children, and several students. As the snows thawed, the Emperor sent a message to Lao-Tzu, commanding him to present himself at the royal court at mid-summer. Always a loyal citizen, Lau-Tzu bid his wife and children farewell, and he set out on the road to the ancient capitol, accompanied by his students.

As the travelers neared the end of their journey, Lao-Tzu’s youngest pupil noticed that skies over their heads had begun to darken and the clouds had begun to thicken as if to rain. Lao-Tzu scowled; for, being early summer, they had begun their journey in the middle of the rainy season. Not wanting to be delayed on the road, Lao-Tzu urged his party on, all the while the clouds continued to grow thick and shaded.

After traveling a little further down the road, the group met a farmer, who was on his way home from working in his rice paddy. The great scholar Lao-Tzu stopped the farmer, and asked him how far he and his pupils were from the Imperial city. The farmer explained to the scholar that he was, in fact, only a few short leagues from the capitol. Reassured by the farmer’s statement, Lao-Tzu gave a long sigh, but the skies were growing even darker while he had spoken with the farmer.

Lao-Tzu turned once again to the farmer and asked the man if he thought that he and his group would be able to reach the shelter of the city before the summer storm broke.

The farmer gave the scholar a thoughtful look. He noted that the young men in Lao-Tzu’s retinue were burdened with papers and books, the sort that a true scholar would always carry with him wherever he traveled. The farmer saw this, and said to Lao-Tzu that he believed that the party would reach the city in time, as long as they did not move too quickly.

Lao-Tzu thanked the farmer, and he and his party continued down the road.

As they traveled, the clouds became so thick, that none of the sky beyond them was visible. Lao-tzu began to worry, and he quickened his pace. The wind began to blow strongly, and Lao-Tzu hurried even more, holding his scholar’s cap against his head as he walked. Lightning became visible in the distance behind the group, and Lao-Tzu moved faster still.

Eventually, the group topped the crest of a small hill and espied the walls and minarets of the capitol only a short distance away; and as they began to move down the hill towards the great gates, the first small drops of rain began to fall.

Lao-Tzu steadied his pack and began to jog rather hurriedly towards the great gate. His students breathed heavily, for their loads were not light and the wind was blowing against them.

The rain drops, that had been small and scattered only moments before, began to grow more substantial, but soon Lao-Tzu and his party were only a short distance from the gate.

As they hurried to reach shelter, the great scholar misplaced his foot on the road, and tumbled into the dirt, spilling his papers onto the ground.

The wind came on strongly, and carried the sheaves into the air. And as Lao-Tzu’s students stooped to help their master, the summer storm broke around them, drenching them all in the cold rain. The water soaked into their clothes and seeped into their baggage, ruining their precious books, scrolls, and notes.

And if they had not hurried so much, the great scholar would not have slipped, and the party would have made it to the city gates in time.

Whenever someone pushes me to meet some unreasonable deadline, I always think of this story of Lao-Tzu on the Chinese road, and it always helps to put things in perspective to me.

Sometimes, going as fast as you can is really the slowest option you have.

Red Sun Prototype

It’s important to test early and test often in order to get the best product possible.

Prince Albert had one of the world’s largest diamonds, the Koh-i-Noor, repeatedly re-cut in order to get the perfect shine to it, and that’s what we’ll be doing with Project Red Sun. Unfortunately for Prince Albert, this constant re-cutting decreased the size of the diamond by 40%! So hopefully, we’ll have a better idea of when to stop polishing.

To do that, we’re working on a quick prototype app to test the trickiest bits of functionality (with a loveable Pirate Theme!).

We’ll keep you apprised of our prototype project and we edge our way closer to a successful launch!

 Fingers (and swords) crossed!

Positioning the Platforms – Y Now!?

Last time we nailed down the X-Coordinate of our Platform Nodes, and this time we’ll dig into the much more difficult task of picking a Y-Coordinate. In our last post, we just left the Coordinate as a value of 4, which will make a single unbroken platform. (Pretty boring right?)

But now it’s time to add a little challenge!

The primary aspect of platform games is the ability of the player to jump from one platform to another, essentially making an obstacles course. Sometimes there can be monsters, or treasures, or traps, but at their heart, platform games really come down to that simple premise.

So to procedurally generate this feeling, our first step is to start programmatically carrying the height of our platforms as they scroll across our screen.

To do this, we’re going to take some time to do a bit of design effort that will save us some time down the road.

What we’re going to do is add a new class to our project that encapsulates our height calculation algorithm. This design principle is called the Strategy Pattern, and is the best pattern to encapsulate complicated algorithm that might change over time. For now, we’ll be keeping our algorithm simple, but we may want to change it over time, and this design pattern will help make that easier.

So we’ll make a new class in our project and call it  EEPlatformGenerator.

Now that we have our strategy class, we can get to work.

But, there’s no sense getting ourselves wound around the axel immediately, so we’ll implement the simplest possible algorithm that we can. The simplest way to vary the height of our platforms is to just make it random. To do this, we’ll spin a quick helper function to generate a random number between two values, a maximum and minimum value:

Method - Random Number

Now all we have to decide what those maximum and minimum values are going to be. So we’re going add some data to our new class:

Class - EP Platform Method

What this data does is:

  1. currentBlockHeight – This datum will track the Block Height of the last platform.
  2. jumpHeight – This datum is the height our player can achieve when he jumps.
  3. dropHeight – This datum is the height form which a player can fall without taking damage.
  4. platformCielingHeight – This datum will provide the maximum height of a platform. We’ll use this to prevent our platforms from climbing to ridiculous heights, we wouldn’t want a platform with a height of 145,057.

Now we’ll use our new data to build a method to determine the height of our next platform:

Method - heightOfPlatform_01

 

Ta Da!!!

Prototyping the UI

Right now we’re prototyping some of the UI designs for Project Red Sun.

Being that we’re all visual folks here at Electronic Graffiti, it helps us to really have a vision that we can really aim towards. So I wanted to share our first UI sketch to show the feel of our UI for now.

iOS Simulator Screen Shot Feb 12, 2015, 12.28.27 AM

Jupiter in the Scarlet Robe

This weekend I went to see the new movie Jupiter Ascending, and I have a lot of mixed feelings about.

First off, Jupiter Ascending is a movie I could just stare at for hours. The visual style and the art is just overwhelming and it perfectly hits that grandiose Sci-Fi sweet-spot for me. It’s exactly the kind of thing I could spend hours staring at, like some computerized rendering out of an old issue of Heavy Metal. Of the movies I’ve seen recently, Jupiter Ascending best drives home for me the fact that film is very much a visual medium. If they took this movie and turned it into a series of panoramic shots of the scenery and the spaceships with Sean Bean’s voice-over narration of what everything was, I would have still walked away happy. That being said, the story of Jupiter Ascending is one of the most fucking disappointing things I’ve ever seen.

But here’s the kicker: the story isn’t bad. No really hear me out on this one, because I’m about to say something that I rarely say about anything.

This movie should have been a trilogy. Unlike the Matrix films which were unnecessarily stretched out over three films for ostensibly poor reasons, Jupiter Ascending tried to do too much in a single film.

Boy are the Wachowskis bad at their pacing.

Jupiter Ascending sets up with three incredibly powerful galactic siblings who, over the course of the movie, each vie to manipulate and control, through various means, the main character Jupiter, Mila Kunis. Because each sibling needs time to interact with Jupiter, her encounters with the three siblings are each very abridged and rushed so that the film simply has Jupiter awkwardly stumbling between her encounters. The Wachowski’s could have easily broken this up across three movies, and I know this because the work was literally already done for them, because Jupiter Ascending’s plot actually follows the same story, almost point for point, as a trilogy by pulp writer Michael Moorcock’s Sword Series of book from the early 1970’s.

I’m not even joking. Michael Moorcock pretty much wrote Jupiter Ascending for the Wachowski Brothers in 1971.

corum

Moorcock wrote about the Hero-Prince, Corum Jhaelen Irsei, and his struggle to defeat a trio of incredibly powerful, god-like siblings. Corum encounters each sibling in turn and defeats each one through varying means before freeing his world from their creepy, Big-Bad-Evil-Guy Tyranny. Moorcock broke his work into three easily digestible pieces, that would have translated easy-peasy to screenplays, and the parallel is pretty uncanny to Jupiter Ascending in both the weird Ambience and the story structure.

So I can see exactly how the movie could have been stretched, see how the gaps could have been filled, and how the pacing should have worked. As it stands, I’m just left feeling hollow at seeing a story I read as a child regurgitated to me in a condensed, rushed, and hap-hazard manner.

Positioning the Platforms – Dos Equis

Last time we built a function to add Platforms to our Scene at a specified point, so we can place our platforms wherever we want! All we need is an X-Y Coordinate in our tile grid that we’ve already developed here:

But just getting the platforms scrolling along our scene is really the easy part; the tricky part is developing a procedure to place them in order to make our game looked like a pre-designed platform level.

There are two parts to this issue: getting an X-coordinate, and getting a Y-coordinate. The first part will be fairly easy, and the second part will take a bit more design work.

To select our Platform’s X-Coordinate, we’ll use the platform buffer we developed previously.

If you recall, the entire point of our platform buffer was to hold all of our Platform Nodes as they scroll across the screen. This means that if  we can visualize our platform buffer as a line of Platform Nodes positioned across the screen, with the first Platform Node in our Platform Buffer as being the first Platform Node in a line of across the screen and the last Platform Node in our Platform Buffer as being the last Platform Node in a line of across the screen.

This is a pretty key concept, here! What this concept allows us to do is simply use a Platform’s position in the Platform Buffer as it’s X-Coordinate.

We’ll implement this in a new method below:

AddPlatform_01

This method will add a new platform, using the generate platform method we developed previously. We place the platform at the end position of our platform buffer.

For now we’ve got the platform’s X-coordinate sorted out, and we just place at a height of 4 four now, but we’ll be changing that later.

Coordinate Conversions

Last time, I held off on going over our method to add Platforms to our SKScene. The reason I did this is because I wanted to take some time to go over a bit of background before diving headfirst into the code.

This time I’m going to go over the coordinate system that we’ll use to place our Platforms.

The strategy that we’ll use is to break our SKScene into a grid. Every column of our grid will have exactly one Platform, so the width of our grid will be the size of our  Platform Buffer and the size of each square of our grid will be the size of our Platforms.

The trick is going to be finding a way to change the coordinates of our grid to the coordinates of our SKScene.

To do this, we’ll add two new methods to our PlatformNode  class:

- (CGPoint) convertGridCoordinate ToSceneCoorindate:(CGPoint)gridCoordinate {return CGPointMake(gridCoordinate .x * self.platformBrickTexture.size.width,
gridCoordinate .y * self.platformBrickTexture.size.height + self.platformBrickTexture.size.height / 2);}
– (CGPoint) convertSceneCoorindateToGridCoordinate :(CGPoint)sceneCoorindate
{return CGPointMake(roundf(sceneCoorindate.x / self.platformBrickTexture.size.width),
roundf((sceneCoorindate.y – self.platformBrickTexture.size.height/2)/self.platformBrickTexture.size.height) );}

 

These two methods will convert a CGPoint between the coordinate system of our grid and the coordinate system of our SKScene.

The Black Star

Te namesake and capital of the Hyperiad Empire is the Hyperion System, revolving around the remains of the main sequence star, Hyperion.

blackhole2

Before the founding of the Hyperiad Empire, the Hyperion star system was the capitol of the Titanic Hegemony, the ruling body of mankind. During the Astromachy, the Promethean Emperor waged a war against the Titanic Hegemony that spanned across the galaxy and culminated in the Hyperion Nova, when the Promethean Emperor forced the sun of the Hyperion star system to go Super Nova and then rapidly collapse in on itself forming a black hole. Most of the remaining Hegemony forces, as well as the majority of the remaining Titan, were dragged into the gravitational pull of the remains of the Hyperion sun, ending the Astromachy.

After stabilizing the remaining black hole, the Promethean Empire decided to establish his capitol in the remains of the Hyperion system, constructing several artificial satellites to orbit the gravitational singularity at the center of the system.

The Horatians

redSunSign

The Bridge of Piles almost afforded an entrance to the enemy, had it not been for one man, Horatius Cocles; he was the bulwark of defence on which that day depended the fortune of the Armies of the Hyperiad.

-Livia Auguria

Horatii

The Familius Horatius is one of the more prominent in the Hyperiad Empire. Counted among the Twelve Greater Houses, the Horations carry significant political influence, and several of their members have risen to the rank of Consular over the history of the Empire.

The founder of the family, Horatius Cocles, was an accomplished military commander who led the defense of the Bridge of Piles, during which the Titanic Hegemony almost over-ran the Imperial Armies. But through his skill and bravery, Horatius was able to disengage from the battle and make an orderly retreat, saving the lives of many of his soldiers. Although his descendants have never shared Horatius’s military inclinations, the Familius Horatius has maintained one of the larger and more capable fleets in the galaxy.

A fleet that must either be destroyed or co-opted by any of the galaxy’s would-be conquerors.