Pages

Thursday, December 23, 2010

Confused?

I'm currently in the final semester of my 3rd year of studies in University now, and just one more year, two more projects, and I'll be off saying bye bye to my Uni and work in some (probably) good company later on.

It sounds like a great ending, but the more I think about it, the more I felt useless, as I can only wish for those "successful" things to happen in the future after I graduated, instead of being "successful" while I'm still in Uni... It's like I'm gonna regret about my Uni life when I started working, just like how I regretted not doing anything really meaningful in high school.

Not that I don't have anything to be proud of now, I do have one currently, it's my first Unity game, EcoTat... It was my first and somehow complete game I designed and developed entirely. It's also something I created when I've pushed myself up to my limit, during the time when I first started using Unity and scripting in Java; building a turn-based fighting system...

Anyway, my progress had gone worst than before in the following semesters: I developed a vehicle-adventure game, and a 3rd person shooter adventure game based on 'the boring Tim Burton's movie, Alice in Wonderland', which were not entirely complete. Particularly the Alice game, where I completely stop its development after the presentation is over, though the game wasn't even half complete during the presentation day, as the scope I set was a bit higher than the others.

And my latest work, a job-searching application did not meet up to my majoring coordinator's expectation. To be quite frank, I've been really lazy lately, and developed the application within a week's time (again?). Furthermore, I've had zero interest on the project, as my primary interest is on game development. The output and reception were worst than I expected...

But from these past experiences, I've really learned a few things, something values which I, and probably the rest of the young developer/beginners may need in the future:
1. Never look down on projects - 
As boring and uninteresting a project may seems, you should always give in your best, because whether of not it's in the real world or in your University life, you always have to develop stuff that satisfy your client, which in a student's case, the lecturer is the client.
2. Create stuff that isn't possible in real life - 
My latest project revolves not only the interactions but also the architecture and design of my virtual environment. One of the review by my lecturer is that, the building and environment I made for my application was too common in the real world. I'm building a virtual world here, and it's a place/world where impossible ideas from the real world can be fulfill even with just a slight creativity.
3. Your lecturer sucks doesn't mean you are too - 
To be quite frank, my current majoring lecturer was the worst I had throughout my studies in this University. He's not like rude or not being friendly or anything, he's just not up to par. And during the semester when my progress had gone from good to bad, he was my lecturer of the semester. Anyway, I realize later on that I blame the others too much, and never think about what my major problem is here: I'm too lazy (probably from )
4. Do what you are suppose to do, stuff within your range - 
After facing so many failures in these development stuff, particularly it's because that my application wasn't well-received by everyone, I realize something... I'm not just a game programmer... I'm a freaking game designer. And I'm like nothing if compared to those real Computer Science and IT people... I've been focusing so much on programming that I rather give up on my designing time just to make better technologies for my applications/games. This is a wrong step, and I understand it now... 
5. Project finished within a short time is not always good - 
While some developers may have been talented for developing games within a short time during Ludum Dare. But you can never do the same when working on a school's project or for a client (lecturers). Doing a project within a short time means, less game design, less interaction ideas and thought-out, less focus on the game project, and less chance of it getting tested by anyone other than yourself, etc... Means you will have no idea on whether the project is gonna be good or not if you are not able to develop a prototype first for user testing... blah, blah, blah, and get pawned by critics later on...

...
I do remember there's still some more... but that's all for now, I'll update more when I think of them...

Unity3d + C#: Rect.Contains(Correct mouse postion)...

When using the Contains function:
void Update() {
    buttonRect = new Rect(20,20,50,50);
 
    if (buttonRect.Contains(Input.mousePosition))
    {
        print("haha");
    }

void OnGUI() {
    GUI.Button(buttonRect, "");
}

I realize that the phrase "haha" will be printed in the compiler only when the mouse position is at Rect(20, Screen.height - 20, 50, 50), instead of Rect (20, 20, 50, 50). So what happen is that the origin (0, 0) of the mouse's position starts at the bottom left of the screen... instead of the top left.

To solve the problem here, I created a function that return a value from reverting the mouse's Y position...
Vector2 RevertMousePosValue(Vector2 mousePos) {
    Vector2 newMousePos;
    newMousePos.x = mousePos.x;
    newMousePos.y = -mousePos.y + Screen.height;

    return newMousePos;
}

How the function and formula works:

And then applying it in the Update() function:
void Update() {
    Vector2 mousePos = RevertMousePosValue(Input.mousePosition);
}

So, what I do next is to compile all scripts together while switching the "Input.mousePosition" with "mousePos":
using UnityEngine;
using System.Collections;

public class TestingScript : MonoBehaviour {
    private Vector2 mousePos;
    
    void Update() {
        mousePos = RevertMousePosValue(Input.mousePosition);
    }

    void OnGUI() {
        Rect buttonRect = new Rect(20,20,50,50);
        GUI.Button(buttonRect, "");
        if (buttonRect.Contains(mousePos))
        {
            print("haha");
        }
    }
    Vector2 RevertMousePosValue(Vector2 mousePos) {
        Vector2 newMousePos;
        newMousePos.x = mousePos.x;
        newMousePos.y = -mousePos + Screen.height;

        return newMousePos;
    }
}

and... that should do it. Check out my mini coding project which uses similar method.

Saturday, December 18, 2010

Unity3d + C#: Return-able functions in C#

I'm still new to the C# environment, and is working on my first application coded entirely using C#...

So when I was using Java, functions can always be return by simply writing the "return" phrase, followed by the value you want to return:
function ReturnAValue(a,b,c) {
    return a+b+c;
}

But after coding for a while in C#, I realize that I just can't simply put the "return" phrase in a void function (in C# they use "void", instead of "function", really confusing for beginners)... So anyway, I figure out a way to deal with it at the moment. Say you want to return a "float" value in a new function, here's what you do: instead of writing "void", you write "float" follow by the name of the function:
float ReturnFloatValue(float a, float b, float c) {
    return a+b+c;
}


Haven't try other variable types yet, but I guess it's pretty much the same... Will practice more on XNA as soon as I'm done with my current project~

Unity3d + C#: Referencing object's script variables...

Just something I kept forgetting when scripting with C#...

If a variable is not "public static", then it cannot be reference from other script such as this:
//If we are taking a bool variable called "canAccess" from another script called "Player.cs"...
Player.canAccess = true;

Thus, in order to reference a variable from a script which is not "public static", first, you need to state the script name as the class of the variable, follow by the name of the variable:
Player playerScript = 

Then, after the equal sign, "cast the variable", before stating the "GetComponent" function:
//"obj" is the game object which you want to access to...
Player playerScript = (Player)obj.gameObject.GetComponent("Player");
//Now you can reference the variable...
playerScript.canAccess = true;

It's kinda long, and I always forgot about the "casting" part...

Wednesday, November 17, 2010

some deep, deep, scary dungeon

Been extremely busy in the past few weeks, doing University's assignment and stuff. But now I've got a week's break, I can do whatever I want, which was what really frightening me the most, because it's one of these times where I won't have the will to do anything.

I'm not planning to make any game for now, as I mentioned it one of my previous post, I'm planning to explore the possibility of Unity and enhance my skill before going on making another game in Unity. But that doesn't mean I won't make any game on other platform. I have some puzzle game ideas which I would like to work on Flash... which means I'm gonna have to re-touch the AS3 I left long-long time ago...

Moreover, I continue with my current Unity project - making a dungeon generator (I have been working on it, then deserting it over and over again for the past few weeks). Started around one month ago when I suddenly plan to make a JRPG game. Here's the current progress:


Above shows 4 variety of a 3 corners dungeon. The dungeon will automatically be created (instantiated) when the Play button is click. So currently I'm the stage where it could somehow calculate where it should go/corner itself. At the same time I'm also dealing with tons of scripting problem here, particularly on the rotation part and issues with Quaternion... Despite all the troubles, I felt like wanting to know more - how they programmed the Quaternion function, the formulas etc... I actually found a book entitled Visualizing Quaternion which I plan to read during the mid-break. So for now, I'll just focus on getting the dungeon stuff done.

What else... Oh yeah, I found a pretty good site to learn XNA, called 3D Buzz... Not sure if it's good yet, but the stereotype here is that: if it's made by the west-pros, it has gotta be good. And I've also been working on some game design document (GDD), I really wanna join the game development industry, thus such skill is vry much needed.

Tuesday, November 9, 2010

Java stuff: Declaring space in Array

One thing I notice about the Array in Java is that, you have to declare whether the Array have space or not, before you can finally Push() values in.

While I was writing my current project's script, I did something like this:

private var arr : Array;

function Start () {
  arr.Push("2");
}

When I click Play, the compiler give me this error:
NullReferenceException: Object reference not set to an instance of an object

I realized I had faced the same problem before and my solution previously was to declare a "space" for the array by adding "[]" after declaring the array...

private var arr : Array = [];

function Start () {
  arr.Push("2");
}

I posted this because I never had the same problem in Flash AS3 before... I'm still consider new in Java since I first started using Unity this March, but they are basically the same, just that AS3 is more to object oriented stuff... 

Saturday, November 6, 2010

repair and get done with'em

A lot of stuff to do all over the months... First I have one presentation on Tuesday and a case study to be submitted on Wednesday, then an exam on Saturday. At the same time, I'll have to finish building my portfolio site before sending it to my future (possibly) internship boss, for evaluation... 

So there's a total of 4 Unity games which I had developed thus far, and I've finished building and fixing one of them, which was the latest piece that me and my team created for a competition held by our University. You can play it here.

And here's the main title of the game:


I still have 3 more games to be fixed, it's gonna be another busy week(s) for me...

Besides all these, I was also involved with another project by a few French guys as one of their minor AI programmers (really really minor)... And I've also asked Efraim of the TornadoTwin brothers on whether I could sell any Unity prefab I made at their store, and their reply was 'very possible'. 

Thus, for my next free time, instead of developing games, I'm gonna develop a few prefabs prior to what I mentioned in my previous post - as a preparation before getting into the actual game development... and sell some of them (if they are good enough)...

Wednesday, October 27, 2010

preparation and exercise

A months ago, I gave myself a little challenge making a puzzle game in Unity. I don't know exactly how I'm gonna start, thus I took a Flash sliding puzzle game tutorial I had from a while back and port the scripts from AS3 to Java, with the aid of its tutorial video of course. After a few weeks of trial and errors, and some major problem with Array and While loop, I finally arrive at the last stage of the puzzle mechanic's development, where I couldn't find a solution to some script-porting problem related to some confusing object positioning stuff... That's when I've decided to quit working on it as I'm at the limit of my scripting knowledge... 

Anyway, what I've learned from all these is that never ever build the assets of the game first before you are assure of the technology of the game you're making... And yeah, I built everything for the game before I work on the game's mechanic, the environment, the object in space, the characters and their animations, I even UV and textured everything well before I even started the project. It was a false move, I agree. I had my game design did pretty well, prepared everything, every data about the style, the game play, the game mechanics of the game I'm about to make... It was a waste now that I think about it.

Thus, before moving on to a new project which I also had planned for a long time now... I'm gonna start with its mechanics first. So my next project is gonna be a JRPG-style game, with (listing them down):
- dungeons
- turn-based battle
- AIs
- inventory
- talking/chatting system
- good-looking characters (involved better sketching designs of the characters, I mean, c'mon I'm from an art degree, I should be able to pull this off)
- animated GUIs (not sure if iTween got this for free... if not, I'm gonna have to make my own, poor me...)
- etc... (still got something I might miss out, update later)

For a start, I'm going to make my own dungeon generator. I now have two ideas of making it, one, using the traditional binary system (0,1,0... thingy) like the one here.
Or,
Using tons of for loop and IF statement to generate the generator randomly like how one usually program an AI's thoughts... 

I'm gonna give the second one a try first, so good luck to me...

Sunday, October 17, 2010

Unity.IndexOf(indexOf);... Looking for "indexOf" within Unity's array of functions...

I was currently building a game in Unity, sort of a puzzle-adventure game, which means there will be a lot of array related stuff all through the scripting. It was a huge headache for just making the puzzle itself, and I was following a puzzle making tutorial at the same time, which was in Flash's AS3. So I stumble across this useful but impossible to found on Unity script reference, function called "indexOf", which sole purpose was to search for a number or string variable within an array. The way of using it in Flash was:
var arr : Array = [1,2,3];
arr.indexOf(1);

Clueless, depress, and desperate (for finishing the game prototype, as I promise my composer I would show him that in 2 weeks time... now's already entering the third) I look for my own solution by using tons of FOR statement to re-create the IndexOf function. Not exactly tons of them, but just two lines:
function IndexOf(arr, posX, posZ) {
  for (var i : int = 0; i
  for (var j : int = 0; j
  if (arr[i][j] == allTiles[posX][posZ]) {
  return 0;
  }
  else {
  return -1;
  }
    }
  }
}


Two lines of FOR statement was used because my array here is a 2 dimensional array (array within an array, which explains arr[i][j]). In some way, the function above still have a lot of mistakes and incomplete, not enough to satisfy me. I was like, this was as far as I (my programming skill) could go... 

I was planning to look for a better solution on the Unity forum but my idiotic internet service provider has left me internet-less for about 5 months now.

Thanks to fact that most programmers spend most of their time in front of the PC, as soon as I got my chance to get online and seek for help on the Unity forum, I got my reply from them and found this: 
System.Array.IndexOf(Array, Integer/String);

This goes without saying that... I really should start learning C++~~~

Wednesday, October 13, 2010

Note on using root, rigging and exporting character to Unity...

Been having some troubles with Unity 3 for the past few days, primarily on the animation part. For some reason, every single animation which I exported into Unity 3 or 2.6, it kept pushing my character to Vector3.zero and stay stationary all the time in Play mode. Ultimately I figured out where the problems are, it's the ROOT's fault...

Well, for every character which I animated, I place a Point (in 3ds Max, which I named as "ROOT") at the origin while attaching the main bone to the Point, so that I can move the entire sets of bones without selecting all of them, actually it can also be done without using Point at all, it's just a habit of mine. So, my character consist of a gear-shaped mesh and a sphere ball, which doesn't exactly need any skinning or enveloping other than just attaching it to the bone I wanted it to move with...


Soon after animating it, I exported it directly into Unity and the problems I mentioned above starts occurring... 
It turns out that it couldn't detect the Point (ROOT) and I'll have to apply a Skin modifier to the gear-shaped mesh and add the corresponding bone into it. I exported the new version into Unity and the problem is solved... what a mess!

Monday, September 27, 2010

How to make a mini map for your scene in Unity3d


This is my first tutorial on Unity, kinda nervous writing it... Anyway have you guys ever play Hitman, Dynasty Warrior, Starcraft or any RTS games? Usually at the bottom left of those games, there's a 2d map showing where the players are and where you're suppose to go etc.



Well, that's what I'm trying to write about today, how to make a simple mini map similar to that, instead of using the top down camera method. This comes in handy when you're trying to create a mini map to locate the player and the enemies (AIs) current position... Like Hitman, where you can see where everyone's heading from within a map.

I've already set up the scene for an easy start, download it here:
Starting project
Final project
And... let's get started!

First, import the "startPackage" into Unity, then expand the "My Scenes" folder in the Project view and open up the "tut" scene. There should be a "well" textured terrain with mountains, a prefab called "Enemy" in the form of a cube, a first person controller, and a game object called "Waypoints" which contains a bunch of other game objects with "w" follow by a number on their name inside. Click "Play" to play the scene, and you should see the cube starting to move by itself across all the waypoints in the scene.


Next, create a new Javascript file, name it "MiniMapScript" (or whatever that suits you). Double click on it in the project view to edit it. Now we are gonna create a few variables for the script (comments are added for explanation):

//For placing the image of the mini map.
var miniMap : GUIStyle;
//Two transform variables, one for the player's and the enemy's,
var player : Transform;
var enemy : Transform;
//Icon images for the player and enemy(s) on the map.
var playerIcon : GUIStyle;
var enemyIcon : GUIStyle;
//Offset variables (X and Y) - where you want to place your map on screen.
var mapOffSetX = 762;
var mapOffSetY = 510;
//The width and height of your map as it'll appear on screen,
var mapWidth = 200;
var mapHeight = 200;
//Width and Height of your scene, or the resolution of your terrain.
var sceneWidth = 500;
var sceneHeight = 500;
//The size of your player's and enemy's icon on the map.
var iconSize = 10;
private var iconHalfSize;

function Update () { //So that the pivot point of the icon is at the middle of the image.
//You'll know what it means later...
iconHalfSize = iconSize/2;
}



Those were the basic variables required to make the map works. You can try dragging the script to the FPS (First Person Controller) and then customize the GUIStyle variables with the textures I provided in the folder named "My Textures"; drag the Enemy from the Hierarchy view to the "enemy" transform variable in the FPS's mini map script, and the same thing for the FPS, into the "player" transform variable.

Now there's a few thing you need to understand before we proceed...
So what we are trying to do here is to take the X and Z (not Y) position of both the player and enemy, and convert them into the X and Y (again, not Z) axis of the screen (for the map).

When you look at the image above. it's like you're gonna flip the whole things up (Z and X to Y and X). I'm not sure if Unity has a function for what I just mentioned above, I know there's something called GUI.matrix4x4, but at the moment I was to lazy to find out, and I used the directly proportional method, to "convert them".

Under the Update function, add this line:



function GetMapPos(pos : float, mapSize, sceneSize) {
return pos * mapSize/sceneSize;
}

Basically what this line of function does is to take the position (pos) of the player, multiply by the height or width of the map, and then divide by the resolution (height or width) of the terrain, and it'll return back a value which we could use later to locate the player's position as it is on the map.

After that, create a new OnGUI function below the GetMapPos function, write these in:

function OnGUI() {
GUI.BeginGroup(Rect(mapOffSetX,mapOffSetY,mapWidth,mapHeight), miniMap);
var pX = GetMapPos(transform.position.x, mapWidth, sceneWidth);
var pZ = GetMapPos(transform.position.z, mapHeight, sceneHeight);
var playerMapX = pX - iconHalfSize;
var playerMapZ = ((pZ * -1) - iconHalfSize) + mapHeight;
GUI.Box(Rect(playerMapX, playerMapZ, iconSize, iconSize), "", playerIcon);
GUI.EndGroup();
}

The first line (GUI.BeginGroup) and the last (GUI.EndGroup) is to create a GUI group and placed it at the bottom right of the screen using the mapOffSetX and mapOffSetY variables in Rect(), and the GUI texture for it would be the miniMap GUIStyle which we just set-up earlier.

The second and third line (pX and pZ) is two new variables which has the returned value of the GetMapPos function...

The forth line (playerMapX) contains the information of the player's X-axis position on the map. It is minus by iconHalfSize so that we can have the pivot point of the player's icon which would appear on the map to be in the middle (looks more appropriate that way).

The fifth line (playerMapZ), like playerMapX, contains the information of the player's Y position on the map (it's written as playerMapZ to let you know that we are taking the player's Z-axis position in the scene, you can name it to anything you want actually).

Like what I've mentioned in the sketch I posted above (the one with the Z & X axis, and Y & X axis), when you are creating the map, you have to flip the Z-axis in scene vertically to make it the Y-axis in map. To do that, we multiply "pZ" with negative one (which would flip it), and then plus the mapHeight to get the value of the Y-axis in map.

The sixth line is to create a GUI.Box which would represent the player on the map, together with the playerIcon GUIStyle as the texture...

Those stuff should be enough by now. Click "Play" and you should be able to see a map on the screen, and a small, yellow, diamond-shaped icon on the map (the player).

Try to move around, and you should see the yellow icon move along too. If it didn't, check your line again, see if you didn't confuse the Z axis with the Y axis (unless if you choose to write it accordingly, instead of copy and paste).

If you understand what I've wrote thus far, you should be able to code the enemy part yourself. But if you can't, below is the full codes, copy and paste them to your script:

//For placing the image of the mini map.
var miniMap : GUIStyle;
//Two transform variables, one for the player's and the enemy,
var player : Transform;
var enemy : Transform;
//Icon images for the player and enemy(s) on the map.
var playerIcon : GUIStyle;
var enemyIcon : GUIStyle;
//Offset variables (X and Y) - where you want to place your map on screen.
var mapOffSetX = 762;
var mapOffSetY = 510;
//The width and height of your map as it'll appear on screen,
var mapWidth = 200;
var mapHeight = 200;
//Resolution (both width and height) of your terrain.
var sceneWidth = 500;
var sceneHeight = 500;
//The size of your player and enemy's icon as it would appear on the map.
var iconSize = 10;
var iconHalfSize;

function Update () {
iconHalfSize = iconSize/2;
}

function GetMapPos(pos : float, mapSize : float, sceneSize : float) {
return pos * mapSize/sceneSize;
}

function OnGUI() {
//Everything about the map.
GUI.BeginGroup(Rect(mapOffSetX,mapOffSetY,mapWidth,mapHeight), miniMap);
var pX = GetMapPos(transform.position.x, mapWidth, sceneWidth);
var pZ = GetMapPos(transform.position.z, mapHeight, sceneHeight);
var playerMapX = pX - iconHalfSize;
var playerMapZ = ((pZ * -1) - iconHalfSize) + mapHeight;
GUI.Box(Rect(playerMapX, playerMapZ, iconSize, iconSize), "", playerIcon);
var sX = GetMapPos(enemy.transform.position.x, mapWidth, sceneWidth);
var sZ = GetMapPos(enemy.transform.position.z, mapHeight, sceneHeight);
var enemyMapX = sX - iconHalfSize;
var enemyMapZ = ((sZ * -1) - iconHalfSize) + mapHeight;
GUI.Box(Rect(enemyMapX, enemyMapZ, iconSize, iconSize), "", enemyIcon);
GUI.EndGroup();
}

And that's basically all... If you have any question (like an error or bug), drop me a message at leezhifei168@rocketmail.com, I'll try to answer to your problem as soon as I can.

Please be noted the final product will not look like one of in GTAs, but those in RTS games, where you have an entire big area in a small map. To do the effect like in GTA, you have to use a top down camera and some shaders, I'll try to post a tutorial about it later when I'm free.

Sunday, September 26, 2010

End of a Chaos, Start of a new... Chaos


Again, a lot have been going on this week, first of all, my AIW's presentation was a big let down. I learned my lessons now, that people never appreciate the technology (inner) side of a game but more on the way it feels (outer). Both the tech and interface played important roles in a game, as the interfaces runs on the tech, and if the tech wasn't good, the interface wouldn't be good either...

Either way, game development, virtual reality, and some other stuff related to interactions are complicated and takes time to understand. In which I took my first step, by reading The Art of Game Design by Jesse Schell. I couldn't find the book anywhere in the stores so I downloaded a copy of it from somewhere on the internet, but as a book lover and collector, I'll definitely buy one in the future, cuz I still prefer holding the book than reading it off the PC screen...

Anyway, it was a good read. I get a lot of tips from it even after only reading the first half of the first chapter. One thing I like the most was what he mentioned it the book that a game or an application is about giving people experiences, and it reminded me of the Dejobaan games called "AaaaaAAaaaAAAaaAAAAaAAAAA!!!: A Reckless Disregard for Gravity"...


One of the reason I think it was a huge success is because it gave me an experience of jumping off a building and... well... it was a really awesome game, but definitely not for people who are afraid of height though (yeah, it was 'that' scary).

I heard those "giving people experiences" stuff all the time in the Dean's Experiential Studies class, the Interaction Studies class... almost once or twice every week. But I guess it was tons of failures (I failed lots of time in my journey of making a good games) that leads me to finally listen to what they say. For instance, just now I was doing some game designs for my new game which I was planning to submit for the 9th Casual Gameplay Design Competition held on JayisGames. And this time it wasn't just plainly "sketch a few stuff" and "I've got everything in my head" stuff, but actually writing it down and plan to finish building everything before I make it (mostly because I was gonna make a puzzle platformer game, that's why).

Unlike before, this time I'm really gonna join the competition. Before this, I used to say that I will join but then ended up not joining in the end. Well, that time I was too over confident of myself... This time I'm seriously planning to venture into the indie game biz. Oh yeah, I even found myself a freelance music composer, and of course I have to give him a share whenever I won a competition or something.

Whether I'm going to win or not is still a big question, just depends on whether I can design a better game from now on (against millions of other indie game developers). Let's just see how it goes then!

Saturday, September 18, 2010

AIW's new progress

A video of my current progress in A.I.W.'s development:



Instead of using a top-down camera, I use GUI and a little bit of math to calculate and convert the player's position as it'll be in the map. The math part is simple, it's just the idea of how to make it took me a while to figure it out.

Anyway, it'd been fun developing the map, I'll continue to finish the game ASAP, before the final submission date arrived.

Thursday, September 16, 2010

September No. 1

Just realized that I haven't blog for some time now. A lot have happen from the previous post till this. I'm currently developing a game for my course assignment entitled : "AIW". It's not a "good" game yet, but another experimental game for me to test out my skills.

This is the kind of game which was made just to pass up for my assignment. The final submission is next Thursday, around the afternoon time, so I've been rushing the assignment and hoped to finish it ASAP so that I can have time to study for my final exam which is also happening next week (sigh...).

Below is some snapshots of my progress of AIW, it's a small adventure game based on Tim Burton's Alice in Wonderland (thus, "AIW"):



Been working on it for two months now (from game design, concept sketches, character design, modelling, texturing, environment design and programming, all in Unity3d).

And... yeah, that's all I have to say now, cuz my mind is all about AIW...

Saturday, August 21, 2010

Head Texturing in 3ds Max

I've just stumble across an easy way to texture a 3d head model. So all these times I've been: adding Unwrap UV modifier, flatten mapping, and take a long time trying to arrange the pieces of flattened maps into a face map, which was a really tedious and boring job...

So I was following this character modelling tutorial called Joan of Arc, and it taught me some great technique on modelling and texturing a character that I thought I'd take a note here.

Easy face texturing

1. Click on the face and apply a "UVW Map" modifier, then choose Cylindrical Mapping.


2. Click the "+" sign beside the modifier and select "Gizmo".


3. Use the move, rotate and scale tool to position, turn and resize the gizmo so that it covers the entire head model in a tidy manner.


4. Next, right click on the UVW Map modifier and select "Collapse All", and the modifier will be collapsed into the model, leaving only the Editable Poly/Mesh modifier on the stack.


5. Then, add a "Unwrap UVW" Modifier, and click on the "edit" button, there'll be a nice looking UVW map waiting to be modify on the screen.


6. Though it looks pretty good already, it's still not very satisfying here. I'll make some modification here. Select everything an rotate them so that the face is in an upright position.


7. Look up and closer and there'll be some thin-looking map over there. Those are the unsatisfying stuff I'm talking about.


8. Select them all at once, and flatten mapping it.


9. I'll leave them for a while now, will get back to them later, so just place them at the top for a while. So now, the face look a bit to the left, and I wanna arrange it so that it'll be in the middle. I first select the other half on the right, detach it (right click > Detach Edge Verts) and place it to the left, and weld all the vertex there (right click > Weld Selected).


10. And the face looks much more settled now.


11. Took some more time to further modify it and I got this.


12. What about the unsatisfying map from earlier? Here they are, arranged together with the face without crossing over each other. It wouldn't take too long to make this part... for those who aren't still beginner.


13. So I've got my face mapping done and it's about time to texture it in Photoshop.
Click on Tools > Render UVW Template... When the box appear, choose the size (mine favorite: 1024x1024) and click the Render UVW Template button. A rendered UVW template will shows up. Click save to save it...

Done!

Friday, August 6, 2010

Binary 1

Was developing my new game, and here's the first binaries for the first scenes' map:
01111111111111111111111111011010111110101011111111110111011101101101111
110111101100011110111011000011111111101111100111011110111111111001101
11010011110110111101111101011110101010001111011010000101001111111111
1111111111110111111111111111111

Designed using the Online Maze Designer. Though I'm not really designing a maze, the method which they propose were also good for map design.

Thursday, August 5, 2010

Breaking the process

So I've got a few... as a matter of fact a lot of game ideas in mind, mostly JRPG style (my favorite game genre). But judging from my current skill, it's actually quite impossible for me to finish any one of them. There's still a few possibilities which I wanted to explore in Unity, thus I'm gonna break the process down to pieces and do experiment on each of them while at the same time making a game based on what I've learned, just like what Sophie Houlden did... Her idea was sorta good btw, really need to thank the Game Developer Mags for showing me her existence.

So, here are a bunch of stuff (elements) that would make up the game I wanna make in the future:
1. 3rd person shooter (gonna work on a game project for campus soon, and it's gonna be using the 3rd person shooter camera)
2. Cut scenes (camera movements)
3. Enemy AI (I'll start with walking... then further. Currently reading AI for Games by Morgan Kaufmann)
4. Turn based battle system (ady have the basic concept and structure of the program)
5. Characters conversation (not sure about the name, but this one's like how you talk to another character inside a Japanese game, the chatting stuff with the floating picture if the character)
6. Gizmo (I want the GUIs to appear above or around the character)
7. Interactive GUI and interfaces (other than just GUI, I wanna try Movie texture on the game interface to make it looks more lively)
8. Loading screen (the loading screen just like the one in the game consoles' games)
9. More animations!!! (on 3ds max, and probably... if I'm free... Maya!)
10. Foreign languages (always wanted to make a foreign language film, and Jap is definitely the main choice here)
11. Character modelling (I suck at this, still improving... since I can only depends on myself to make things workout the way I wanted)
12. Character design (hand drawn stuff, especially mecha!!! I can draw but suck at mecha-lish drawing)

That's about what I could think of thus far... I know there's more, but I just can't recall back what I had in mind previously at the moment. I might make 5 more games for those things I've mentioned up there, you know, to strengthen my skills...

Tuesday, July 27, 2010

RedChariot+Survivor

Finally finish making my second Unity game: Red Chariot Survivor... It's a driving game, where player trying to outta the dark mansion while at the same time, staying alive.

I was originally planning to write a few development post about it... But due to insufficient amount of time for me to complete this project (I was given 6 days by my lecturer), and with my router broken (thus, no internet!!!) I hardly can.

I'm now attempting to upload the current version to dimeRocker, while working on a newer version for the DigiCon6 submission... If I won in any category, I can (stand a chance to) go to Japan!

Friday, July 16, 2010

RedChariot...

Been working on my game level's design for the entire day. Apparently, it's harder than I thought, I mean, it's not that hard if someone else were to do it, but for me it's hard, as I didn't really have a solid plan about the level's design. I had already done the top view sketch, but my mind kinda want something different when I was actually building it...

from this...

to this.

Basically, the level is complete, just need some programming stuff to make it better.

Oh yeah, the game is called RedChariot by the way, it was originally called "Anciently Survivor", but I felt the name was kinda lame, and my racing car was a red chariot, so... that's why.

Some screenshots of the RedChariot vehicle.

I thought blogging would make me lose off some stress, but it doesn't... Anyway, it's fun to blog again (after deserted it for a while), and I really hope that I can blog a full Japanese post later in the future. Okay now back to work~ got 2 days left till final submission of this project... I'm a busy man~(T3T)~

Thursday, July 1, 2010

Game Developer Mags

Just found out that one of my favorite mags in high school, Game Developer Mags is still publishing now:

Still got my old March 2006 issue lying on my desk.

Wonder if they're still selling it in M'sia, probably only Kinokuniya have this kinda great magazine these days. Anyway, great to know that they haven't gone, and I've been downloading its latest issue in PDF off the internet. But I prefer to read it (and any other books) on hand, rather than on the PC screen... I really should get an iPad.

Saturday, June 26, 2010

ナンバー41

Finally, I'm on the 41st posts here. It's been long, for almost half a year since I started this blog. I have had numerous version of the "JakeL168" blog over the years, but this is by far the one I had for the longest period of time.

It's a good thing that Blogger finally added the "Design" setting, cuz I've been struggling with my blog's design for a long time, looking for the right layout for my blog. I'm just too interface-sensitive. Even the current layout only satisfied me by 50%. As far as I know, all of the previous one didn't even get pass 30%.

Anyway, the only project which I started and can be considered "done" so far was EcoTat. made using Unity3D. I have no intention of ever improving it anymore since it was just a prototype, unless if I start over with a new design and scripting.

I've had all these crazy ideas in my head which I wanna start working on. For now I wanna create a turn-based RPG game about school-life and children's folklore, but I still don't know where to start from. Btw, the course which I'm taking now has taken a serious step, more towards the preparation of game design now. I'm hoping that after all these, I can finally be able to conduct my own preparation of game design, and start making game!!!

Lastly, I've finalized the name of my project, it's gonna be called "AfterSchool", instead of "Scare me, not!". I've design some basic logo for the game's ScreenSelector (for later Unity's use):

Title + A little Japanese words in there (both Katakana and Kanji) to make it looks cooler... I prefer the Katakana vers.