Procedurally generate a night skybox

I started to experiment on a fully procedurally generated game. Along with the models and textures, I decided to procedurally create the skybox textures to have more flexibility and a minimize the game build size. Here is a simple example of the generated skybox :

Procedurally generated skybox with stars

Procedurally generated skybox with stars

The code is pretty simply and self-explanatory. The header initialize a couple of variables. Then, 6 textures are created by looping trough each pixel individually and setting their color with the Texture2D.SetPixel() function. The code set some single pixel as grey-white and some 2-by-2 pixels as a yellowish color with their texture varying too. A random number is evaluated on each pixel to decide if its a black,yellow or grey pixel . Once all texture are created, they are assigned to the skybox material and the material is defined as the skybox to use in the RenderSettings.

Texture2D texture = new Texture2D(1024, 1024, TextureFormat.ARGB32, false); // Create a new 1024x1024 texture ARGB32 (32 bit with alpha) and no mipmaps
Material skyboxMaterial = new Material (Shader.Find("Mobile/Skybox")); // Create a new material for the skybox.
string[] skyboxTextures = new string[] {"_FrontTex", "_BackTex", "_LeftTex", "_RightTex", "_UpTex", "_DownTex"}; // The skybox textures names
Color color; // Color that will be set for each pixel

// Create 6 different textures to use as skybox
for (int i = 0;i < 6; i++)
	// Loop horizontally on all pixel
 	for(int x = 0; x < texture.width; x++)
		// Loop vertically on all pixel
		for(int y = 0; y < texture.height; y++)
 			float randomValue = Random.Range (0.0f,1.0f); // Random value between 0 and 1
 			if(randomValue < 0.001f) // 0.1% Of the pixel are set to a grey/white pixel with varying transparency
 				float colorValue = Random.Range (0.6f,1.0f); //Random value to use as RGB value for color
 				color = new Color(colorValue,colorValue,colorValue,Random.Range (0.5f,0.9f)); // Set the pixel to a white/grey color with variying transparency
 				texture.SetPixel(x, y, color); // Set the pixel at (x,y) coordinate as the Color in color
 			else if(randomValue < 0.0015f && x > 0 && y > 0) // 0.05% Of the pixels that aren't on the first row/column
 				float colorValue = Random.Range (0.85f,1.0f); //Random value to use as RGB value for color
				color = new Color(colorValue,colorValue,0.0f,Random.Range (0.6f,0.9f)); // Set the pixel to a yellowish color with variying transparency

				// Set a square of 4 pixels to the current color. The 3 other pixel have been stepped on earlier so their color won't be modified afterward
 				texture.SetPixel(x, y, color);
 				texture.SetPixel(x-1, y, color);
 				texture.SetPixel(x, y-1, color);
 				texture.SetPixel(x-1, y-1, color);
 				texture.SetPixel(x, y,; // Set the pixel as black for the default background color

// Apply all SetPixel calls

// Set the current texture on one side of the skybox

// Set the RenderSettings skybox to the created material
RenderSettings.skybox = skyboxMaterial;

Once you have this going, you can try more complex patterns such as using perlin noise for pixel color or more complex object such as galaxy or star clusters!

For the interested, here is a first screenshot of the game I’m working on. It shows the terrain, the ground of a sci-fi base and a wood table. All models and texture are procedurally created. The ground texture come from perlin noise, the table use Voronoi noise and the sci-fi base ground are sinuses to make the lines that crosses.

First screenshot of new procedural game

First screenshot of new procedural game

One Game Per Day – Day8

Today’s game has been inspired by a r/gameideas/ thread on reddit by /u/TheJonesy. I figured I could give him credit in the game’s name so hear is the first day of work on Jonesy IDE.

Game 8 – Jonesy IDE (Day1)

Write code to interact with the game and solve puzzle.

Write code to interact with the game and solve puzzle.

Play Jonesy IDE!! – WebPlayer

Idea :

The idea is a mix-up of the ideas found on the Reddit thread. The objective would be to have puzzle that are solved by entering command in the command line. I would like to make the command line really feel and designed like a language. Eventually, a full editor could be added to allow more control to the player. There’s a lot of work to do before then.

You can use the Help() function to have a list of all currently implemented functions. The commands that would be implemented are things like Create(Door,”Door1″, [2,2])  then Door1.Open. Another idea would be SetTrigger(Button1, Door1) then, you could press the Button1 to automatically open the door1.

If the code design get powerful enough to create an editor, the levels could be generated by the in-game code and allow player to edit the generation of a level to solve a puzzle or create custom maps for fun.

In simple, I want to create an interface language, Rod#, that will allow control of the Unity API at runtime.

Design :


The principal scripts of my project are the following :

–  GameManger.cs : Responsible for the initialization and managing of the overall game. Not deleted on scene loading.
–  LevelManager.cs : Responsible for the initialize and managing of a level.
Compiler.cs : Evaluate the syntax of the code and evaluate the type of command to be executed
Linker.cs : Execute the commands(functions for now)  called by the compiler
– Function.cs : Class for each function. Contains its name, definition, inputs, input types…
– FunctionType.cs : This is where I create and store the List of function. The values should be imported from outside the game eventually(JSON or XML)
– Controller2D.cs : Control and animate the 2D player.

To make it short :

When a Function is entered, the Compiler look at the syntax and evaluate the type of command to execute. The Linker execute said command.

Command Window

I started design my own command window at first but realized the NGUI example close to what I wanted so I imported it and modified it to my taste. I added a button that call the same Callback as pressing Enter on the Command line input. This Callback give the command to the compiler that then verify and execute the line of code if its valid.

Call a function from its name in a string

This took me a while to get working. For each Function that are defined in FunctionType, a C# function is defined with the same name in the static class Linker. The function name is feeded to the linker that then execute it.

The first answer of this SO question got me started but didn’t touch the specific of a static function in a static class. The answer on this second SO question put me on the right tracks with the BindingFlags. A look at the MSDN documentation for MethodBase.Invoke answered the rest of the problems.

Here is how I do it for the _functionName function with no argument that is called from the static class Linker:

 using System.Reflection; // For MethodInfo and BindingFlags

 object[] _arguments = new object[] {};
 MethodInfo theMethod = typeof(Linker).GetMethod(_functionName);
 theMethod.Invoke(null, BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public, null,null, null);

Next day of work:

There is so much to do in this game :

  • Allow function to take inputs
  • Create an object system that will allow player to access property of some objects (i.e : Box1.Collider = false; Player.Controller = true)
  • Create an interface to see documentation and allowed function call
  • I’m interesting in prototyping early some kind of IntelliJ system to have real-time code completion offered to the player
  • Add more level that would be solved by code

Conclusion :

This is no simple task, the objective is to design a language that works on top of Unity/C#. It will be interesting to see the console accept more function as time goes by. This project will require me to learn a lot of design language theory which is good for my overall low-level programming knowledge.

One Game Per Day – Day7

For today’s game, I was looking to make some kind of 2D MOBA and I started to browse to find some assets to base my game on. Instead, I found a really nice set of really low-pixel Hexagon tileset by Pixel32. I started to think of a couple ways I could use the sprites and decide to make a game with it. Here is the result of the first day.

Game 7 – God of HexCity (Day1)

God of HexCity

Procedural world generation with basic city placement and land growth.

Play God of HexCity!! – WebPlayer

(* World generation can take a couple seconds to fully generate. City growth is limited to 7 cells for this version)

Idea :

The idea for this game is to make a twist on the classics like Simcity, Civilization or Colonization(one of my all-time favorite). The objective is to have an automated simulation between different cities that would fight to prosper and grow bigger while fighting for resources and land. Everything should be as scientifically accurate as possible. I would like to generate map from temperature,wind,humidity model that would yield different type of land for different position on the map. Depending on the position of the player, different source of energy would be available such as wind or solar.

The player is a god that look at the evolution happening. He can make change happens on the world, remove land from a player or grow one city’s land. He can change water to land or desert to moutain. He can add wheat close to a city to save it from famine. He could also put cloud above a city that heavily rely on solar power. However, each modification has a cost. Player will need to  manage his mana and perhaps, research new skills before being able to use them.

I see different type of games. A sandbox where player could look at the world evolve and have total, free control over it. A campaign where the player would have to make sure that its city take over the whole map by helping it grow faster than its enemy. Another mode could be some kind of skirmish, where you have to research new technology and use mana, but without having to make a city win, for the pure pleasure of modifying their behavior.

Design :


The principal scripts of my project are the following :

–  GameManger.cs : Responsible for the initialization of all system
–  GridManager.cs : Generate the grid, setup cells on creation and deal with the interaction with the cell and the mouse.
WorldGenerator.cs : Algorith that calculate the type of tile for each cell. This is where the Perlin algorithm is evaluated.
Cell.cs : Each cell on the screen have a cell. It contains the tile definition aswell as cell’s owner and eventually temperature,wind,humity…
Tile.cs : A tile is a type of land(i.e Desert,Deep Water) and is associated with a sprite for rendering. It also contains some info such as if walking on the cell is possible.
TimeSystem.cs : This was a script developped in Game3 – DigDeepInc and I imported it. It divide a day in 1440 minutes and allow to step more than one minute per frame for proper simulation.
Simulation.cs : This is the script that evaluate the action of each city at each minute.
City.cs : Information about the city of each player. It’s size, the number of villager, its current energy…

To make it short :

At start, GameManager Initialize the game. GridManager call WorldGenerator to obtain the map to draw. It then build the grid by instantiating each Cell and assigning it a Tile. Grid generation is made over many frames to show the player the advancement of generation.

Each frame, TimeSystem step over X minutes and call Simulation.TimeTick() every time. At the end of the frame, it call Simulation.FrameTick() to render the result of the simulation only once.

Procedural Generation

During this project, I learned about the wonders of Mathf.PerlinNoiseI didn’t know Unity had a built-in PerlinNoise that allowed such easy generation. It doesn’t give total control over the generation but it allow for a quick implementation which was perfect for me. I used this implementation from Answer Unity3d :

int mapheight = 15:
int mapwidth = 30;

Vector2 shift = new Vector2(0,0); // play with this to shift map around
float zoom = 0.1; // play with this to zoom into the noise field

for(int x = 0; x < mapwidth; x++)
for(int y = 0; y < mapheight; y++)
Vector2 pos = zoom * (new Vector2(x,y)) + shift;
float noise = Mathf.PerlinNoise(pos.x, pos.y);
if (noise<0.5f) map[x,y] = 0; // water
else if (noise<0.6f) map[x,y] = 2; // sand
else if (noise<0.9f) map[x,y] = 1; // land
else map[x,y] = 3; // mountain

By using random values for shift you move around and get different part of the perlin noise everytime. By using random values for zoom, you end up more or less bumpiness in the map and allow to change from let’s say, many small islands or a big land with some water around it. Here are some results that are ordered by increasing the zoom from left to right.

3 Different procedurally generated map. The zoom is increased from left to right.

3 Different procedurally generated map. The zoom is increased from left to right.

Next day of work:

Here is what I’d be interested in working on for the next day on this game :

  • Make a menu before map generation to allow customization of map from the player(Size, number of player on the map, bumpiness vs mountains…)
  • Now that procedural generation is working and the data structures are in place, I am ready to implement the simulation and make the city look for wood, foods, water. Make them grow in population/size, ect…
  • Give basic power to the player’s god like changing a tile, adding certain item on a tile
  • Refine procedural generation and optimize the grid generation for bigger map. Instead of using 1 cell = 1 sprite, I could create a chunk sprite with different tile mapped on it.
  • Start working on the save/load system. I will probably introduce a seed for regeneration of the world at load and only update change to the world after loading.

Conclusion :

Another really interesting project! I love procedural generation. It’s like AI, you can play your game and surprise yourself by the results! I can see this game going somewhere. The low-pixel tileset is really nice and give a particular look to the game. Thanks to Pixel32 for the amazing free arts!

One Game Per Day – Day6

So I finished my 5 games in 5 days! Why stop now?

So here is Game6! I really like playing this one.

Game 6 – BombAround

Drop bomb and break the boxes! Play with a friend or vs AI only!

Drop bomb and break the boxes! Play with a friend or vs AI only!

Play BombAround!! – WebPlayer

(* You can enter the world and move around while looking at sun/moon moving but there isn’t real gameplay in it yet)

It’s a simple Bomberman-clone. On explosion bomb only can only make fire on 1 cell around, you can’t get any upgrade for more bomb/longer fire.

There are some problems with collision detection. Between player and wall and even between player and fire. I will need to look into that because I don’t undertand what is happening.

I spend a bit of time tuning the AI and it’s really nice playing against it. It can be improved but at least it doesn’t kill himself too much!

I’ll add more information on this game soon.

One Game Per Day – Day5

Here we are the last day of the 5 game in 5 day. I decided to go for something bigger for this last game.  Sadly, I didn’t come up with a good gameplay. I wanted to  put a good 3-4 more hours of work, but I fell asleep. Duh. So what I have is a prototype for a game, consider it a tech demo. I would like to make a survival game in this environment based on energy and resource management.

Day 5 – HexLife

Look at the sun and moon rise in the sun on this 3D Hex world!

Look at the sun and moon rise in the sun on this 3D Hex world!

Play HexLife!! – WebPlayer

(* You can enter the world and move around while looking at sun/moon moving but there isn’t real gameplay in it yet)

Idea :

For this game, I wanted to use the Grids plugin to create a 3D world. This was the first core mechanic of the game. I decided to make it a survival game where you have to move around gathering food and resources to make your camp. Howevery, I spent most of the time on the environment/world generation/interface and couldn’t tie it up with the game play in time.

How I did it :

The 3D world is generated by a Perlin Noise image. It wouldn’t be too hard to implement my own perlin algorithm to have a new random map everygame. I created a sun and made them turn around the world.

I imported my TimeSystem class from my Day3’s Game DigDeepInc and used the same minute system for simulation purpose. Every minute, the game reduce the food value of the player. If he has no more food, he start to lose health and would eventually die at 0.

Every minute, the new sun/moon position are calculated and the temperature/light world of the light are calculated with sin and cos (Note that current model is off, the  number in the screen doesn’t really make sense)

Lesson learned :

  • Again, Grids is an awesome plugin. Bringing my tile system in 3D hasn’t been too hard and I want to keep improving with it.
  • I wanted the game environment to feel real even with the hexagonal blocks. I spent a while playing with lights/skybox and flares to give a good feeling. I enjoy the result and definitly learn how to work with those unity’s tool.

What’s Left :

There is a lot left in this game. I would like to make a realistic life simulation out of it. Light and temperature models would need improvement. I would see other models added such as winds and clouds.

I also need to add gatherable ressources. Be able to make building with the ressources(i.e fire to keep own player temperature). Make the player’s temperature change according to the outside temperature.

Conclusion :

I thought too big for this game and it shows. Maybe not falling asleep and putting 3-4 more hours would’ve make something better but that’s what happened.

All in all, this is still a protoype. Playing in the world give an idea of what it could be. I wished my last game would’ve been better but well, I went big and it didn’t pay off! I’ll definitly come back and give a second day of work to this game and see where I could bring it to.

One Game Per Day – Day4

Day4’s objective were a bit different. The goal was to make a game using the awesome Grids plugin made by the guys at Gamelogic. Gamelogic is the company that posted the original 30 games in 30 days that made me embark on this 5 game in 5 days challenge. After Day1, they emailed me and gave me a copy of the Grids plugin. This is really awesome from them and what else could I do than make a game with it? This game has been made with zero-prior experience with this plugin apart from reading the documentation and looking at examples yesterday.

This game has probably been my biggest challenge since the beginning of the week. Starting a one-day game without knowing the workflow of a new plugin is a really daunting challenge.

Day 4 – GridWar

Send your unit towards the enemy castle, steal spawner along the way and win this turn-by-turn game!

Send your unit towards the enemy castle, steal spawner along the way and win this turn-by-turn game!

Play GridWar!! – WebPlayer

(* The game is Player versus Player. There are currently no AI, you control both Red and Blue player)

Idea :

This game had to use a grid mechanic to use the Grids plugin. I didn’t really have a design in mind until late in the project. I just played with the plugin until I could generate a nice grid. The shape of cell used in the grid(Pointy Hexagon) was determined by some assets I already had. When making a game in a day, you don’t want to lose time searching for assets.

After I got my grid with textured cell, I settle for a type of game I like a lot that has seen different version over time. The goal is to send your units to conquer cells and capture the enemy castle. I went for a turn-by-turn version instead of real-time to allow 2 player on the same computer.

How I did it :

Obviously, I start by making a grid with the Grids plugin. The grid can be in any shape as long as the cells are Hexagon tile. Afterward, I specify position for both player’s castle and I create the neutral spawner and set the owner/unit value of each cell

When a cell is clicked, the game state change and wait for the player to click on another cell. If it’s an ally cell, half of the units are transfered to the other cell. If it’s enemy, half of the units are sent to try and steal the enemy cell. If the stolen cell is a castle, the game is won!

Lesson learned :

  • The principal thing I learne was to use the Gris plugin and how to work with grid in general.
  • I had some problem to sort the different layers. Unity2D and NGUI layer can’t be sorted on a same root/camera. You can only put NGUI in front or behind the Unity sprite, not in front AND behind. If there is a way, I’m interesting in knowing it.
  • Learning a new API is always a good way to learn different software structure. I learned different things along the way such as the use of IEnumerable.

What’s Left :

I’m pretty happy with the final outcome of the game. I tried to put as much polishing as I could. I’m really happy that I had time to implement a proper menu with different levels.

There are many more complex building that could be added to the game for a better gameplay(walls, structure in a bottleneck that lose unit every turn…). Also, I only scratched the grid shape creation. It is really, really easy to make various complex shape with the Grids plugin. I’ll try to add many more as soon as I can!

Lastly, I feel like adding an IA for this game would be a really interesting topic. The game could also use more than 2 players and easily be networked.

Conclusion :

Making a game in 1 day while learning a new plugin has been a big challenge. I’m really happy with the result especially considering how late the actual gameplay has been implemented in the game.

Grids is an awesome plugin that I will use in many games and I would recommend to anyone interested in a robust grid solution.

One Game Per Day – Day 3

It seems you’ve done well in yesterday’s game! You now have enough money to start your own company and manage a swarm of mech instead of driving one yourself. This might seems boring to some, but who doesn’t want to be rich? Lots of job ahead, get to it!

Day 3 – DigDeepInc

Buy and upgrade your robots to send the mining.   Don't mine at night, it's forbidden by the law. Ready to make some money ?

Buy and upgrade your robots to send the mining. Don’t mine at night, it’s forbidden by the law. Ready to make some money ?

Play DigDeepInc!! – WebPlayer

*(Game use a 1066*600 pixel size(16:9) webplayer)

Idea :

The idea for this game is to make a Tycoon game that heavily rely on the interface. It is some kind of spin-off of Day2’s game, DigDeep.

How I did it :

This game has been hard to start because I had trouble nailing the design I wanted to go for. I started by implementing a basic UI and starting to work on the time mechanic and it became a core system of the game. The game has 3 speed + a pause system. The game time is based around minute going from 0-1440 each day. The minute is displayed as standard hour(5h43) for the player. When the speed is changed, the real-life second needed to pass 1 game minute is diminished(currently 1sec=1min at Speed 1 and 0.0075sec= 1min at Speed3).

Every frame update, the time elapsed since last update is compared to the time needed for each in-game minute.  At low speed, many frame are needed for 1 minute and everything is pretty simple. However, when going at high time rate, a in-game minute take less time than a frame update. The amount of minute to be spent on the particular frame is calculated and  each minute are triggered one by one to test for event(Such as illegal mining at night) and give player money if its Mech are mining.

The rest is basically a lot of UI desig which always takes me a lot of time.

Lesson learned :

  • This game was highly UI driven and I greatly improved my workflow between Unity2D and NGUI. I tried to focus on making a clean project with a robust relation between the code and UI so it is easily scalable afterward.
  • It has been my first attempt at making a UI from a spritesheet taken on internet instead of simple buttons. This is somewhere where I can see my workflow improve. I’m still looking for the best way to take a spritesheet and make all sprite available. Unity2D sprite editor can be a quick way to do it but I can’t find a way to put each sprite in an NGUI Atlas afterward. I’ll keep looking into that.
  • I was having some problem getting a nice interface that would scale well with different size. I decided to make it pixel perfect and fix the size in the WebPlayer. Trying different solution for this gave me a good idea of NGUI’s option for scaling of the interface.

What’s Left :

The basic mechanic are there but the game would need more content to be interesting. Random event would also give a less monotonous gaming experience for the player. Rapid-prototyping also means more shortcuts and hardcoded value. Making the game to a more data-driven state would make it more scalable and easier to maintain.

There are currently no research available and the land size has no impact. The objective is to force the player in maintaining a good ratio between area and Mech forcing him to buy one or another he has too much of the other.

Conclusion :

The conclusion for this project is simple to me. UI takes a lot of time. I’m not sure if there are secret way to easily make good and robust UI but I would like to know them! Until then, I’ll keep trying different ways of building my UIs until I feel I’m really comfortable with it. I usually put most of the UI code in the same script. This time, I spread it around and let different script drive different part of the UI. It went well, but it’d be interested to see how well it scales.

This game looks really interesting to me. I like tycoons and I see many ways to improve it. I’ll definitely get back at it eventually!