I’m Back!

I’ve been busy for the last months on getting a start in the industry, which also means having a job. Now, my contract has ended and it’s time to return and start taking care of this website, which I’ve completely neglected over the last 3 months.

To start, over the course of this week I will update the portfolio with the games that I have worked on and have been published.

And how come I started doing it now? Well, my contract has ended, in good terms, nothing bad, so it is time to find the next step in my career.

Project Bynar

Announcing Project Bynar

After watching the special edition of Indie Game: The Movie I got inspired and decided to actively do something. So far, my job search has not gone the way I intended and currently everyone is on holiday so there are even less available jobs out there, so why not take matters into my own hands?

Through this I’m starting this new project which I code named Bynar. I will present over the course of the following weeks the development but I will not go into too much detail. I am still afraid of people randomly stealing ideas, so I will only post a quick description of it here. I plan to release it for free for handheld devices by the time I leave Denmark.

Genre:
Top-Down Vertical Shooter. Action/Arcade

Target Audience: Ages 12+

Description: Think of it as a cross between Tyrian and Super Crate Box. You have to collect powerups but once you collect one, your weapon changes. You may only move left and right and your weapons fire automatically depending on the powerup. The enemies have specific standard firing patterns. Enemies are important to be destroyed. Obstacles not. Powerups count up as score only. If an enemy is not destroyed, he will come back as more powerful, making it important to mix between, killing enemies, collecting powerups and avoiding/destroying obstacles.

Molydeaux 2013

Molyjam 2013 is inspired by a parody twitter account by the name of Peter Molydeaux. There are some interesting and funny ideas in there. The theme for this year’s molyjam used actual quotes from Peter Molyneaux, of course in the manner of promising a lot. I compiled a shortlist and checked and saw if I will be working in a group. Not! I worked alone so I also needed to pick something that would be do-able in 48 hours and that would be interesting in looks.

For my game I chose the quote “Pull the right trigger to see The Most interesting Thing in the World”. Hmm. OK. I had a random maze generator up and running, well, kind of, and I thought about googling the most interesting thing in the world. Based on that result I decided on how to fullfill that.

Here I will present what went right and what went wrong and what can be done to improve it.

molydeaux2

Since I wanted to do something interesting, not just plain and simple planes floating about, I decided to actually build tiles and then set them up in Unity. For that I went on with 15 different blocks and then I proceeded to model them. The whole modelling process took me around 8-10 hours, since I wanted the models to look good and because I haven’t used  3Ds Max in quita a while. My final results looked really good but when I imported them in Unity… well, it didn’t work out as expected.

The objects, once imported into Unity, had their direction scrambled. Which meant that I then needed to figure out a way to make them fit. So lesson learned from here: If you are importing an object and its axis is screwed, make it a child of a Game Object. Doing that solved the problem. Of course, it does not happen all the time but when it does…

Hand in hand with the rotation problem, I also had a problem with my models as they did not fit in a box as well as expected. The Maze was first tried with Unity’s primitive cube system, but it did not seem to work properly. It was Saturday night, a long day had passed and I needed to know what to do because to top it all, the smoothing I applied increased the number of polygons to such a degree that a 10×10 maze took around 30 seconds to generate which wouldn’t be ok at all. So I decided to redo the models and just apply a smoothing division to them to make them somewhat more smooth.

The result? Vastly improved performances and since I knew exactly which tiles I had to redo, it all went by quickly. The only problem appeared in the corners and I wanted to keep its flexibility and get to putting them in. I had the clock ticking against me so I decided to use a column on every corner to hide the imperfections and put a plane beneath them with the same texture as the walls. This way the imperfections would be somewhat masked on first glance. Lesson learned? If you need to redo an object, simplify it as much as possible by taking out until there is nothing to take out.

Another problem was with the possible combinations and figuring out how to place the right prefab and what orientation it should use. (It’s also a problem I have apparently not completely fixed but I’ll do that ASAP). Due to the nature of the maze generator, and the fact that I have 15 prefabs, I have 256 possible combinations. Luckily some combinations just disappear and I’m left with a lot less. To solve that I created a help table to list every possible variation, where it occurs and how. To improve efficiency, I used a variable to sum up a value for each of the tiles around our tile and then used that in a switch. This made the switch be about 500 lines long! If you have a way of going around that I would appreciate your help :D but so far it’s the solution that works and it works pretty fine, especially since a switch is optimized to work in a way similar to a BST.

Then, all I needed to do was test and fix with each model until they worked. Some rotations are still off, due to my sloppy calculations, but I aim to clear those up as soon as possible.
I could also say that the final models and the algorithm were pretty efficient. On my laptop it took 3 minutes to generate a 100×100 tile map, which means effectively building well over 10k objects. Not bad!

molydeaux4

The last part that I’m going to cover are the trigger boxes which some of you who have played the game have found already. I currently have a public array where I store the textures for the surprises (yes, I know, but I was tired, ok?!) and then just put them out. The problem with the  boxes is that they still are not placed as expected. Some are placed outside which comes to show that there are still bugs in the algorithm. That and a proper number of boxes should be found as I would like for a person to find at least one and soon as it would motivate one to keep on looking for more.

(Controls: W,A,S,D to move)

.

What’s in store for the future?

Well, I aim to build a menu system where you choose the size of the maze that you’re going to play in. That and fix any possible prefab orientation and trigger position bugs. Other than that it would be very cool to be able to hook it with a internet meme website so that a random meme is shown everytime. It’s a would be cool but it’s to be saved for last. Furthermore, I would like to increase the feel of the dungeon by creating torches and putting them in there. So far I am pleased with what has been done in these 48 hours.

What’s the next project?

Since I am still currently unemployed and am working to fill up my portfolio with more stuff to show my skills, I aim on doing several projects before my allocated looking for a job time runs out. My next project though is a match 3 game, but in complete 3D. Kind of like a 3D tetris. I aim to try and develop it for google play and actually put it online and on google play for free for testing. I would like to use it initially to gather data but if it’s good enough I will try and find some help with the art side and making a good looking 3D match 3 tetris-like game.

Civilization IV Map Builder Based on Real World Data


As part of a school project on Procedural Content Generation, myself and Ulrik Brønsted have concocted a wonderful third party app to improve the way one can play Civilization IV.

Currently this mod is available only for Civilization IV Beyond the Sword. This mod is at version 0.5

What it does is it creates a map for the game based on a satellite image. It creates the terrain height, types and level of woodland. Currently, rivers are not created and resources are not placed depending on their position in the real world, which is something the developers want to do for future build. Besides these, some lower lying regions might be represented as under water, such as the Netherlands or the Po River Valley.

Scrsht-SEAsia

Indonesia

Instructions:

Download and unzip to any folder you want. This is a third party app and does not require the game files to function. Once extracted, double click on the .bat file to open the app.

Drag a rectangle on the image of the world, write down the name of your map and click on Generate Map. You can fine tune the selection by modifying the values on the right hand side of the interface and then click on re-draw rectangle.

Once generation is completed, you will receive a pop-up message and the map will be in the same folder where you extracted the mod. Then you must copy the file created to the PublicMaps Folder found in the Civilization IV Beyond the Sword folder. Once done, you can start playing the map as a Scenario.

Enjoy!

Download

Funen and Zealand

Funen and Zealand

 

Random Maze Generation using Unity 3D

 

Ok, before we go into any details, this is easier to understand if you have some knowledge of programming and by knowledge I mean you can understand data types and what a code is trying to say.

Now, random maze generation. It sounds so complex, so difficult to do. It is until you actually put your head into it and realize how easy it is in the end. I mean, this project that I will present was done in an hour or so and most of the time was figuring out how to put around the walls and rotate them into place.

Now, to build this all you need is a plane saved as a prefab, that is what will be instantiated, a camera (because you need to render the world), a directional light (you do want to see your world, right?) and an empty game object (this will be the generator. What?! Just read on…). Just set up your scene by putting the game object somewhere and creating the plane. Mind you, the plane should have the following scale: 0.1 x, 1 y, 0.1 z . That is just based on the calculations that are present in the code but they will be quick to modify, as long as you scale it right. Regarding planes, if it is 0.1 in size, then the next adjacent one could be at 1.0F world points away. Not that bad, eh?

Now, set up the scene. Next, create the script that will generate the whole thing. My script uses the following global variables:

public bool[,] mapArray;
public GameObject wall;
public int maxHeight;
public int maxWidth;

mapArray is going to be your map. Wall is the prefab that will be instantiated everywhere and maxHeight and maxWidth are the sizes of the map. The only variable that needs to be instantiated is the mapArray using mapArray = new bool [maxWidth,maxHeight]. Generating what will be in the array is even easier. You just run a traversing method such as a for or a while and you go:

int k=Random.Range(0,2);
if(k<1)
mapArray[i,j]=false;
else
mapArray[i,j]=true;

This code generates a random value as an integer that could be either 0 or 1 ( that’s how range works, generates numbers from the first parameter until the second parameter -1) and if it is 0 then it generates a wall, otherwise it generates a floor. False is wall, true is floor.

In my code, I am running the generation from 1 to maximumSize-1, but that’s because I’m then running a code to put walls on the edges of the array, so as to wall off the whole map. This patch of code is just :

for(int i=0;i<maxWidth;i++){
mapArray[i,0]=false;
}

Afterwards comes the interesting part: we have to instantiate all those wonderful little planes. This happens within a traversing method, of course, such as a double for or a double while. For example: for(int i=0;i<maxWidth;i++) for(int j=0;j<maxHeight;j++)

Then, the best way to generate it is to just wall off the unwalkable tiles, or the “walls”  as we have defined them. Then, for each wall we have to look at the tiles around it, so if you want to look at the tile above, it would be if(mapArray[i-1,j]==true), looking at the tile below would be if(mapArray[i+1,j]==true). In each of these if’s we should instantiate the game object as follows:

GameObject w = Instantiate (wall,Vector3.zero,Quaternion.identity) as GameObject;

Vector3 nextPos = new Vector3(i+-0.5F,0.5F,j);
w.transform.parent=gameObject.transform;
w.transform.localPosition=nextPos;
Quaternion rot = Quaternion.Euler (0,0,90);
w.transform.rotation=rot;

the first line will instantiate. the second line will generate its position. Now watch it, I have put there i+-0.5F, that’s because it depends on which position you are checking. The same will be for the rotation Quaternion rot.
If you are checking at mapArray[i-1,j] then you should use Vector3 nextPos = new Vector3(i-0.5F,0.5F,j), otherwise have Vector3 nextPos = new Vector3(i+0.5F,0.5F,j). The same would go for Quaternion rot. If you are checking for i-1, you should have rot = Quaternion.Euler (0,0,90). Otherwise, have rot = Quaternion.Euler (0,0,270);

If you are checking at the edges you should account for it so that you are not overstepping, thus creating an index out of bounds exception. If you are at coordinate 0 just check above and if you are at the maximumSize-1 coordonate, just check below.

The same could can be modified and be used for the sides, or the j variable. The only difference is in modifying the z value in the position and in flipping the rotation values so that if it is to the left you use 270 for the rotation value and vice versa.

With that set and done you should be good to go. Your maze could look like one in the part below, just that it is incredibly big. The bigger you make it, the more time it would take. You could also modify the threshold for generating unwalkable tiles. I for example have switched them to public values so that I could modify them freely in the editor. This way I could make it so that 70% of all tiles are walls, or 32% are walls and so on. You could use maxSize instead of maxWidth or maxHeight. maxSize is useful if you want to make squared maps, while the others are good for rectangular maps.

But what I’ve given you here is the tip of the iceberg. You can go on and be crazy and make more awesome stuff, or even a wolfenstein remake, or even create rooms that you can randomly attach one to another. Go Crazy! You might just make a better thing than I did ;)

Maze

P.S. If you want the code or the project, just e-mail me.

Future Development

Now with playtesting over, I believe it is time to talk about the future of this project. Since playtest has so far been positive, after asking my muse if she would be willing to help me complete the project and take it beyond, to which she responded very happily, admitting that she felt a bit privileged, but that is only due to the nature of the circumstances.

One could divide the future development of the product into four main columns:

First, the aesthetics. From an aesthetics point of view, what is important is to finish all artwork and polish that. Firstly, model and animate the character. Make the player feel attached to it by polishing the main character as much as possible. Afterwards, start modeling the environment and by that the direction will be of using clouds as inspiration and making them look somewhat cut-out, similar in vein to Little Big Planet. Afterwards, creating different enemies and modeling them and creating the ocean will be all that’s left before going alpha and testing it again.

Second, the sound system. That has to be done from scratch but with an aesthetic already planned, that should be more than possible. The music might be a bit harder as tense classical music is a bit hard to find, and Wagner sounds a bit too epic rather than tense. The sounds will have to be taken off the internet but I plan on doing it on a pre-alpha stage so as to map exactly what is needed and then proceed according to that.

Thirdly, the levels. Using what I have so far and what will be built further on, I will want to build a lot of small levels that take full use of the mechanic of rotating a 2D space in order to use a 3D space environment. Probably creating similar worlds would be a plus as it would give the player a sense of progression and then dividing everything into chapters. Currently, I am planning on working on a demo, thus I believe that the first chapter will be up in the heavens and use the mechanics found there. That will also be what will be developed and released as freeware. If there’s enough public support, the rest of the chapters will be released as episodes through sales.

 

Fourth and final, the programming. The code will have to be slick, clean and as free from bugs as possible. Besides that, new mechanics or enemies have to be prototyped and turned into prefabs. Using a modular approach to building the code and levels would decrease time spent on production significantly and allow for a better flow of assets within the game.

That being said, I hope to actually do as much as possible with this game and if possible, submit it to an indie or student contest. It’s a good enough game I believe that will use what Fez has started and take it to a different level.

 

The Muse’s last playtest

We had our final playtest. You can check the build over here: http://www.vtanase.com/Files/UxP_Prototype/WebPlayer.html.
I’m not sure if I have uploaded the build that I will be handing in, as it has a couple of minor modifications but even though I had planned to have it be the second last playtest, due to external events it ended up being  cancelled and further playtests will have to occur should I choose to develop it further. (Check my ranting on housing in Denmark for more details).

The results of the playtest were quite positive. They were not only positive though, bugs were still found, nonetheless, her overall impression was that it had evolved quite well since our last test. I had to take out the music and I will have to compose something different, the reason being that it was too peaceful and not tense enough. I guess that is a problem with classical and baroque music, though I believe I shall still use a string quartet for that case, even if it will be all made using a sound composing program. I have also gone through the art style that I have thought of for the game and reached an agreement on many points. In the end I believe this game will be fantastic once it is complete. Currently, I believe that it is important to create every element and test it and then have the levels simply fall into place. Continuing to work on the prototype to produce something better is the next logical step I think since every playtester has not stopped at the first level, but has continued trying it out several times over, showing that there is something “fun” in all of that which keeps players in. Something that could be tapped into to produce something good.

Playtesting with others

If you do a user-centered approach to design, should you allow others to try your game? The Answer: YES!!! Even if you are designing for a muse in particular, attempting to test on a user level allows for more flaws and quirks to be seen than through one person and besides that, one could see if the game is fun for more people than just you, and that is not just important, that is vital! Having the game be accessible and seem fun by many people is what makes the difference between a good game and a bad game. Make your game friendly. Make your game polished and inviting. Have players get sucked it and have the theme elements flurry them so that to daze them.

Besides that, what else could one learn through having external playtesting? Well, for starters, one could get fresh input. Your muse may know what you are trying to achieve or may have the experience of trying the game earlier in production and then getting accustomed to it, or in other words, start loving it. This could make her  less careful about what the game is supposed to transmit in general and it could make her not notice certain bugs or elements that are supposed to be different.

External playtesting is also good for PR purposes as they can not only provide good feedback, but they could be used to create hype around your product which in turn could lead to a good turnout in sales, something that if you want to sell your game, you should do.

Digital Considerations

Time for a post on my reflection of what tools to use when going digitally.

In order to properly Assess, I guess I should go through each of the skills in order:

Programming – I’m good with it, I have a bachelors in it. This means that I can handle most code you can throw at me. This means that I might be using something that could be complex as well. For this reason, I have to choose between Actionscript, Java and  C# (Unity 3D) but due to the fact that Java does not have a proper game engine so to say and Actionscript is not something for the future, Unity was my prime choice regarding programming as it is not only growing, but it also looks ok on your portfolio.

 

Art – Here I guess my skills are a bit lacking. I’m not that much of an artist I could say, except some vector graphics and pixel art, I’m not that great. I’m a newbie when it comes to modeling despite having done a modeling class and I have no clue when it comes to animation. Animation is like a foreign language to me, one that I have not yet had the time to properly learn. Thus, I will try to keep this to a minimum if possible, try to make my prototype mechanics work first, then focus on the game. I will most probably be using Adobe Illustrator and Photoshop, since I have some experience with them, while I will be using 3D Studio Max for modeling.

 

Sound – For this I will be using Ableton live, as well as cool edit pro when it comes to editing sounds. Ableton will be used exclusively for music, except some quirky sounds that might need an instrument to produce, while environment sounds will be taken off of freesound.com or similar sites that allow of free use of sound samples. I will probably be doing sound last as it has to fit with the art design and with the general flow of the game and one could get a better grasp of these once they can better see them.

Rice Pudding Interviewing

Now with a new muse, it’s time for the interview. I have decided to sweeten that up by using rice pudding to bridge the gap between us, but before I go further into why it’s good to pamper your muse in order for her to open up, I’m going to present my muse a bit.

She is Korean, around my age, and is a non-gamer, again, though we have played a couple of board games on and off again with friends of mine, every thursday before dinner. That way I noticed her style of play a little. She did not like acquire or munchkin but she really enjoyed Guillotine, showing that she likes simple games. Not too hard, not too complex, but simple. What made me choose her as a good contender for a muse was the fact that she was my flat mate which made things a lot better in terms of communication.

Now, back to the interview. It is important to get to form a cozy atmosphere for you and your muse, and I mean cozy, not romantic. This opens up the minds of both parties involved and allows one to be comfortable to open up, even to describe little quirks about ones personality. Why Rice pudding then you might ask? Simple: Because simply she did not ever have it, despite the fact that she is Korean. Actually, since then, I showed her that you can actually buy and that’s what she’s been having on a weekly basis. That and she started playing her favourite game, Rayman again. That’s good now, isn’t it? It means our discussion was simple enough to make a connection in that she learned new things and started fixing her nostalgia, while I gained vital information to my project.