Unity3D Course in Miri

I have organized another Unity3D introductory course at TEGAS Innovation Centre Miri last Saturday. The attendance was surprisingly much higher than the first course done in Bintulu.

People from different age group and different background joined the course, mostly out of curiosity. Hopefully they have gained some interest in game development and continue to pursue this dream!

Also, please join the Facebook group I just created recently, namely the Sarawak Game Developers group at https://www.facebook.com/groups/511210486092635/

Unity3D Introductory Course

I have recently co-organized an introductory course for Unity3D software together with SMA (Sarawak Multimedia Authority) and TEGAS (Tabung Ekonomi Gagasan Anak Bumiputera Sarawak).

Attendance was considerably well for such a technically in-depth course. I really hope that similar activity should be carried out in frequent manner to nurture more talents for the local creative industry.

Below is the end result produced during the course:

Shell STEM School Geek-a-thon Competition

I feel very honored to be invited to become the industry technical judge for Shell’s STEM School Geek-a-thon Competition, which was held in my hometown, Bintulu.

10 teams of students of different academic levels were taking part in this competition. They had to come out with creative solutions that incorporate arduino and android applications to solve common domestic and environmental problems and try making the world a better place to live in.

My main role was to check out their prototype, especially the coding that they wrote; and making sure that it is both functional and without plagiarism. Overall, most the projects were really cool and creative!

At the end of the competition, 2 teams were chosen to represent their school to take part in state-level competition in Kuching in 2 months time. I wish the students well, and hope that they will continue to uphold their passion and dreams. Can’t wait to see what they can achieve in coming years!

Prevent Direct Execution of EXE

Back in early 2000s was the time when MMOs were very very very poppular in Asian countries. That was also the time when I was crazy about Ragnarok Online, one of the most famous korean MMORPGs of all time. Besides playing the game (which cost around US$10 per month, a large sum for a middle school student like me), I also went into modding the game and ran it on an emulator (private server running locally).

One thing that I noticed was the existence of a mysterious EXE file in its installation directory called “Ragexe.exe” which can never be executed; it will show you an error message whenever you double click on it.

Years later when I started to learn C/C++ programming I finally understood what the hell was that EXE file for; in-fact, it’s the actual game executable and not the other EXE that has the game icon on it, the other EXE is actually the updater client, nothing else.

So finally, the mystery has been solved. However, the question is: How can we re-create this for our own programs/games? What if we also want our users to run the updater first and not directly execute the main program? It turns out, it’s pretty easy to achieve. In the following example I will be using C/C++ and Qt but it should be pretty similar in other programming languages and platforms as well.

The sample code here is pretty simple:

#include "mainwindow.h"
#include 

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	if (argc <= 1)
	{
		QMessageBox::critical(0, "Application Error", "Please run MyGame.exe instead.");
		return 0;
	}
	else
	{
		if (argv[1] != "yourpassword")
		{
			QMessageBox::critical(0, "Application Error", "Please run MyGame.exe instead.");
			return 0;
		}
	}

	MainWindow w;
	w.show();

	return a.exec();
}

In the example above, your EXE will simply pop out an error message that says "Please run MyGame.exe instead." if you double click on it directly. This is because the argc variable is either 0 or 1 (depending on platform, which means no additional input argument during launch) if you run it directly.

However, if there is one or more arguments being dumped to the program during launch, check (within the argv array) whether the second argument (the first argument is usually the program's name) matches your secret phrase or password before allowing the program to launch. Usually there will be input arguments if the user drag one or more files to the EXE to make it launch, as this is very useful for programs like text editors or image editors. That's why we must check if the argument matches your password or not.

Now that your program can no longer be run directly, what about the updater? How to ask the updater to execute your main program with an input argument? It's actually pretty easy as well. In the following example I will be using C/C++ and Qt, but it should be similar across different programming languages and platforms:

QProcess *process = new QProcess(this);
process->setNativeArguments("yourpassword");
process->startDetached("MyGame.exe");
delete process;

exit(EXIT_SUCCESS);

In the code above, I simply declared a QProcess object and set the native argument before starting the main program and close the updater client.

That's all, it's very simple to achieve. The tutorial above is by no mean professional: Technical names and phrases are not necessarily accurate, and the method used is not necessarily the standard way. I'm just trying to share what I know and what I did with my own projects. Peace.

OpenGL Side Project

It’s been a long while since my last update. I was extremely busy for the past few months and only by now I have a little bit of spare time so I decided to work on a little side project just for fun.

I always wanted to learn OpenGL since a teen and hoped that one day I could make my own game engine that runs OpenGL. Even though I created a half-baked game engine/level editor thingy back in 2010 but I was using Irrlicht rendering engine so that doesn’t really count.

After messing around a bit with Qt 5 and OpenGL coding, I’m finally getting a pretty awesome results!! :

At the moment my prototype does the following:

  • Running OpenGL 3.2 core profile and GLSL 150
  • Loads OBJ files and PNG/JPEG textures
  • Move, rotate, scale model
  • Camera navigation (move, rotate, look at) using keyboard input
  • Skybox

Like I said, nothing fancy yet but even this took me quite some time to get it working since I’m using Qt 5 with OpenGL. Most of the tutorials out there only teach OpenGL with SDL, GLFW, GLUT, etc. but not with Qt. The reason why I’m using Qt instead of SDL is mainly because I like the additional features in Qt such as networking, image loader, file loader, etc. which will save a ton of my time since I don’t have to reinvent the wheel, or worse, trying to integrate my project with random 3rd party libraries that may or may not compatible with each other. I had a pretty bad experience when working on my Irrlicht project back then so I’m trying to avoid that now. Also, I may want to use Qt 5 to create a level editor for this project (currently only working on the ‘core’ library) so it makes sense if I also use Qt for the core parts.

Since this is a spare time side project so I might not work on it on a regular basis and might not even finish it, who knows? That’s all for today, ciao.

Exploring Modern OpenGL In Qt

I did OpenGL eons ago when fixed-function pipeline was still pretty much the industry standard and most computers were still not capable of running flashy shaders at the time. However, things have changed a lot for the past few years – GPUs are getting more powerful and almost every home computer and even mobile phones are capable of running shader-heavy games. Both DirectX and OpenGL are even abandoning the fixed-function pipeline (although it still exists in the realm of compatibility profile) so that got me thinking – should I start learning that as well?

I’ve been using shaders in game engines but never in raw OpenGL. It’s quite a different experience dealing with VBO and VAO compare to the good old glBegin, glVertex3f, etc. I decided to use OpenGL with Qt because in my opinion it’s very convenient when comes to managing window events and inputs. Qt is, in-fact, more than just a window manager, it also provides a ton of helper classes which make my life easier, so why not.

I spent few days in re-learning the modern OpenGL and created a simple demo that loads an OBJ model and displays it on the screen:

The “Hello World” text appearing at the upper left corner of the window was drawn using Qt’s QPainter class which looks like this:

QPainter painter(this);
painter.drawText(10, 20, "Hello World!");
painter.end();

Just 3 lines of code! As you see, with Qt, I don’t have to re-invent my own font loader and renderer which is a pain in the arse. Qt is really powerful and can be easily integrated with OpenGL. I think I should consider making this into a game engine just for fun.

LANManager Supports UNET

Surprisingly, the plugin I made for Unity called LANManager supports UNET out of the box. The plugin was made in last year, before Unity rolling out their new networking system called UNET, which is a complete remake from scratch.

LANManager is a Unity plugin that helps to propagate your Unity-based game throughout the local network and allows other clients to discover the game server automatically without the need to manually insert the server’s IP address.

The plugin seems to work fine without any modification to the code, except a small change is required for the sample project to run on the latest Unity – replace the Network View component attached on the character prefab with the Network Transform component and that’s it.

The reason why it still work is mainly because Unity didn’t change much of the abstraction layer, except the underlying architecture which is not exposed to the users. Event names such as OnConnectedToServer, OnPlayerConnected, etc. remain the same so it didn’t break any of the functions in LANManager. Good job to the engineers at Unity Technologies!

Old Project – 3D Level Editor (2010)

Today I stumbled upon some old screenshots in my backup folder and I thought maybe I should post it here to remind myself how passionate I was.

This is a 3D level editor I did for my hobby game project back in 2010. The level editor was made using Qt 4 and Irrlicht engine. Some of the screenshots below are showing the editor which uses Irrlicht’s native GUI. Irrlicht’s GUI system was quite limited in term of types of widgets and functionality, which later on led me to switching all the GUI over to Qt.

Some of the features supported by the “game engine” I did back then include:
– Basic fixed function 3D rendering
– Basic collision (box collider and trigger)
– Spawn points
– Player camera and animated camera (for in-game cinematic)
– 3D sound (using irrKlang)
– Simple path finding

I made a simple game demo using the game engine and level editor I made. Unfortunately, the game wasn’t finished and I moved on doing something else. Below is the video recording I did back in 2010 showing how the game demo look like, for a competition. Spore Motions was the name of our team back then.

[embedyt] http://www.youtube.com/watch?v=k4Q_D2WF0fM[/embedyt]

Hopefully I will be back into game development very soon.