Compass in Unity3D


Tutorial about creating a Compass in Unity3D.

Level: Basic

Topics: GUI, Texture2D, Euler Angles

Final Result: Something like this

What you need:
Background texture of the compass like this -












Compass Bubble texture - Google for some bubble icons, I got mine from here.

To the code minions....

Class members:
//For holding the compass textures
Texture2D bg;
Texture2D bubble;

//"North" in the game
//0 for + Z Axis, 90 for + X Axis, etc
float north;

//Where the compass needs to be placed
Vector2 center;

//Size in pixels about how big the compass should be
Vector2 compassSize;
Vector2 bubbleSize;

//Where the compass bubble needs to be inside the compass
float radius;

Constructor:
//Set the placement of compass from size and center
compassRect = new Rect(
            center.x - compassSize.x / 2,
            center.y - compassSize.y / 2,
            compassSize.x,
            compassSize.y);
         
Update:
// Note -90 
float rot = (-90 + this.transform.eulerAngles.y - north)* Mathf.Deg2Rad;

// Bubble position
x = radius * Mathf.Cos(rot);
y = radius * Mathf.Sin(rot);

OnGUI:
// Draw the background
GUI.DrawTexture(compassRect, bg);

// Draw bubble
GUI.DrawTexture(new Rect(    center.x + x - bubbleSize.x / 2, // Compensate for texture
                            center.y + y - bubbleSize.y/2,   // width of bubble
                            bubbleSize.x,
                            bubbleSize.y),
                bubble);

Notes:
Make sure width and height of compass texture is same (or modify the logic to compensate for it)

How to test:
Import Character controller package
Add FPS controller to your scene
Add this compass componenet to it
Set the "north" angle and others params.... Run.. Done.

Download the complete code from here.

Google vs AD BLOCK PLUS

Up until last week, users could disable Ads inside GMAIL using ABP. Google now linked chat textbox to the ads - user's can't practically chat without turning off ABP on mail.google.com! Genius strategy huh?

I tried getting that damn textarea to become editable again.. but no luck.. screw you firebug x_X

Let the Ads in... Bow in defeat

Procedural Track Generation in Unity3D

This post is basically how to generate a procedural/dynamic road or a  track at run time in Unity3D.

Work-flow:








Prerequisite: Check out this link

Final Result:



This mesh is actually an extrusion of the following 2D surface -














In 3D, this is how it looks -










Explanation of terms -
Block - 1,2,..n - The entire track is built of a sequence of building blocks. This is the repeating entity in the track

Points - P1, P2.. Pn - Points that define the track (input for this generator)

Sequence - S1, S2,.. Sn - The track can be thought of these 8 sequences of vertices (4 are shown above). Each sequence originates from the corners of the flat 2D surface above

Lets call this Track-Generator, hmmm.. let's see.. GUS ( I'm sure AlterVik would have given it a better name... eviiiiiiiil).

Gus needs an Array of Vector3, which is the list of Points described above. GUS generates the track along these points. This means that when GUS gets hungry, you create a spline (line) in your fav 3D editor and export the points and feed it to GUS.

How GUS works - 
First of all GUS assumes this is not a loop (To loop, GUS expects you to mutate it and create GEORGE, GEORGE LOOGUS). Secondly, GUS expects at least 2 points. Anyway...

1. Gus calculates the number of blocks required as ( # of Points -1 ) and calls it "n" [ n = #Points -1 ]

2. Gus knows there are 8 Sequences of vertices in track as calls it "S"[ S = 8]

3. Gus then identifies number of vertices required as 18 + (n-1) x 8
[ 16 for 1st block, +8 for each after ]

Now GUS loops S=8 times (for each Sequence required) -
   For this Sequence
       GUS finds out offset [width (w) and height (h)] of the sequence from the center
        For each Block
           GUS finds out in which direction the track is moving [ P(n+1) - P(n)]
           GUS finds out Left Direction from this [ See Note at the end ]
           GUS adds point [ P + Left * w + Up * h]

Now it's time for GUS to identify the Triangles...
GUS knows there are n x 16 Tris, hence n x 16  x 3 points to define all the Tris.













Like before, GUS loops S=8 times (for each Sequence required) -
  For this Sequence
     For each Block
        Green Tri's points - (i)th and (i+1)th vertex from Sequence S, (i)th from S + 1
        Red Tri's points - (i+1)th  vertex from Sequence S, (i)th and (i+1)th from S + 1

That's it. I haven't explained the complete workflow as given in 1st fig, you can refer the code below and this is in no way optimized and bug free... so basically WTF License.

Notes:
1. While calculating the direction in which the Track is being generated, GUS assumes that the Road is not banked. Reason being, GUS only has a line as direction, there can be infinite "Up" vectors. Hence, GUS assumes "Up" to be global "Up" axis. Based on this, GUS does Cross-product of "Up" and "Forward" to get "Left".

To have banking, points given to GUS should also have associated Left or Up direction data. In short, GUS should be mutated into BOGUS - to calculate direction based on BOth these data.

2. GUS no like UV mapping for now.

Code
Save this link.
Add the script to a game object and set the width and height parameters.


If it helped you in some way, leave a comment so that I know someone out there is actually reading all this x_X

Yowza year for the Gaming Industry

Everything's going web-based, things I probably never imagined.

When I started with Unity3D I thought, well here's a platform for both Windows and Web. All we need to do is develop for one and the other fits right in. Last year,  to develop 3d on the web, there weren't much options - it was either Unity or Flash (software based rendering of course)

Times have changed... drastically. Or was I not paying attention? x_x

As of now, these are the following ways to publish 3D games on the web -
Unity 3D
Flash 11 (Molehill as of now)
Silverlight 5
WebGL

Lets take out WebGL, cos I feel it's not mature enough (read browser compatibility)

As of 2010, whatever 3D you'd do on the web would leave out an important target - Linux.

Adobe, being the target of sick-mindless-cribbing -whoa-HTML5-will-kill-it people has proved once again what it is to be a visionary.

Talk about development options for Flash 11 - Unity3D, Epic's UDK and Away 3D.
[ I was wondering why Unity came up with this Flash export option. They expected Epic to? ]

Silverlight 5 RC also means you can have your XNA games on the Web! ( I really never imagined this day would come)

Looks like "Browser" is indeed becoming a Platform. When Google said this,  it sounded ridiculous to me. Well now I'm a little.. never mind.. not gonna admit it. Well, Is Google Chrome headed in the right direction then? I don't know actually.. but I have this zoinks-scoob-something's-fishy feeling that it's gonna revolutionize gaming platform.

My predictions - 
1. Chrome is gonna change the equation for WebGL ( it's the only thing that can actually be 100% platform agnostic).
2. Chrome and Android are gonna leverage the same tech for making web = mobile equation true

Can't wait for Google to release their Game Engine (hope it's not in Go.. fingers crossed)

Air Hockey in Unity3D

Simple prototype I made in Unity3D. (Requires Unity web-player plugin)



Things to ponder -
It's a pain in the brain (O_o) to configure the Physics engine to work for simple things like this, that too when scaled to real world.


First i had to setup a few  parameters to tell Physx to consider collision at very small dimensions


Then I had to tell it to use "Bouncy" material


Then I had to tell it to confine rotation and stuff so that Puck doesn't fly-off.



I still couldn't get the desired effect, and like icing on cake - there is no "Cylinder" collider in Unity, nor a 2D-Circle thingy. So eventually, i was frustrated with all this, did my very-simple-stupid-flawed Circle-circle collision x_x

This proto has NO rigid bodies at all, the physics engine is probably like "Dude.. I'm bored >.<"

Lessons learnt -
To make small games like these, it's probably a good idea to scale everything up

Setup game dimension (screen width & height) before-hand and use the same settings while developing / testing

Programming the AI (so to speak) / NPCs is always more difficult than what you initially assume

Dropbox is awesome to host your blog content

Failure

"Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better." – Samuel Beckett

Monetization

Premature monetization is the root of all evil - Gabe Newell (Valve)

Desolate Racers - WIP 03

I redesigned my POD, I was too bored to code the whole of last week x_x















I've added energy binders too.

My POD was kinda unstable at high speeds and flipped over when turning at high speeds.
I added Anti-roll code based on some unity tuts. It helped but didn't solve the problem... I've set this POD to max out at 450 kmph ( I know O_o ) and anything above 250 flips over ( I don't know how Veyron pulls it off x_x )

As of now, the workaround is cutting down POD speed when users turn at speeds above threshold.

Things remaining - 
Few more particle systems
Movement of gliders
Modelling THE Circuit [bow]
UI Layer ( Yuk.. x_x )


Art of War or Business?

When strong, avoid them. If of high morale, depress them. Seem humble to fill them with conceit. If at ease, exhaust them. If united, separate them. Attack their weaknesses. Emerge to their surprise
- Sun Tzu

India Game Developer Summit 2010 - Carl Jones / Crytek

You're probably wondering why I'm posting this in 2011. Well, I just came to know that Crytek released their SDK.

I came across the name Carl Jones, which triggered a flash-back.. I've met this guy!!! Yes, the guy who gave a press release about Crytek SDK - I've met him and talked to him personally.. Whoo Whooo \m/

It was sometime in Feb 2010, he had come down to India to launch the "India Game Developer Summit 2010". Damn, good old times - I had quit my job to pursue game development when this happened. So much for the  Indie Dreams.. x_x

Anyway, I was so eager that I was almost the 1st to reach there...

(see, Carl still connecting his Laptop and just some people fixing the stage and stuff)














It was actually an awesome presentation... more than what I hoped for


I kinda recalled the essence of what he said (all hail my photographic memory \m/).

What your game should offer -

1. When you develop a game or an engine, list down 10 important features that others are offering (kinda industry standard). Your game should support all these 10 features to compete with them. 


2. Of these 10, filter out 3 features that you think are the most important. Your game should should set a new standard for these

He also mentioned how they work at Crytek - 

Anything difficult takes 2 days to implement, and anything impossible takes a week.

Ah anyway, after the session and stuff I went and spoke to him - (Whooo whooo again \m/)
I had asked him, "Epic made their Unreal engine available to Indies, what about you guys?" to which he replied they had plans to release the SDK for non-commercial use sometime soon, may be by the end of 2010.

Well, the time has come.. and I knew it an year before.. muhahahaha.. that's the only reason I'm posting this o_O

Wonder if I'll ever get a chance to meet Carmack x_x





Closure

Closure is the only Exception in life, which doesn't have an Inner-Exception

Clint, a 6 year old Genius

Reader's Digest published this photo on their last page, don't recall when.














Can't help but wonder, how "pure" his art would have been!

Day Dreaming...

Castles are meant to be in the sky... I just have to learn to fly \m/

Desolate Racers - WIP 02

Update on Desolate Racers ( ok the name sounds silly now x_x)



















I changed my Spaceship to a POD, Skywalker's POD to be precise! Always wanted to drive one of those things...on Tatooine. I added 2 Suns to make myself feel at home ( When I add 3... it looks stupid o_O )



Here's a small-stinky-very-very-low quality video of it -




Things to be done:
Particle Systems
Energy Binders (looks stupid now doesn't it x_x)
Improving Game mechanics
Create the Legen.. wait for it.. dary Boonta Eve Circuit


Things I learnt:
You can't scale a Terrain in Unity3D. Only way I could think of is export heightmap in RAW format, scale it outside, import it back.. which sucks. So, lesson learnt.. get the scale right from the beginning. And no, you can't scale down everything else cos you got the terrain wrong. It hurts the physics bad.

Google Maps Watermark - Duh!

Fringe + Fringe + Fringe + Coffee + Coffee + Coffee + F... = Very Sensitive Eyes.

I was checking out some terrains near my home in Google Maps.

Somehow thought it'll be fun to find out all the water-marks, you know... OK you may not...














Anyway, every tile has a watermark... non-jagged arrays and I'm still bored

Desolate Racers - WIP 01

Trying out Terrain Sculpting in Unity.

Some WIP screen-shots -


















Me calling it Desolate Racers - courtesy Wordweb ( You know desert... synonym...  x_x )

My 1st Game - In Unity3D

What better way to learn Unity3D than porting my old XNA prototype?

I put this up in a week's time - 1 to 2 hrs per day after work.



Few In-Editor Shots:















I was too lazy to design a level for this (unlike my XNA attempt). All the blocks created at run-time.

This triggered a new concept I wanna try - POD RACER! (obviously on Tatooine)

NTFS: Prototyping "Skyroads" is a religious thing from now on.. Peace   o_O \m/

My 1st XNA Game - Video

I was searching for a Spaceship model, when I realized I had made one for my 1st XNA game. I found the game ( in working condition O_o ), so thought of uploading a video.. just for laughs.


Well here it is:



To be honest its more of a POC kind, not a full game. I did this sometime in 2009/10 I guess.


Side notes:
1. Game play isn't as bad as it looks like in the video ( and I don't suck at my own game x_x). The video grabbing created jumps in frames. Due to this, the spaceship jumps awfully high somehow (elapsedTime screw-up to be precise) and Draw calls don't relate to Update either.


2. I have swapped my mouse buttons. Why? Read this, I wasn't kidding! I've actually done this to my office-comp too - used to annoy Bukki a lot ( Good 'ol times... farewell my ultimate-source-of-choci ). Anyway, while playing this game I realized - XNA doesn't seem to recognize this. XNA games off-the-shelf aren't lefty-user friendly!


3. See the credit to XNA Creators Club? (Soo nostalgic right now and I hate the new AppHub and attention to WinPhone). Anyway, I learnt so much from them, probably those 6 months or so is what made me a better programmer for life...

Unity - Blue Blast Effect

I've been trying out Unity and I must say, IT'S FRIGGIN AWESOME \m/
I couldn't believe it's so light weight either!


I was trying out my hands at the in-built Particle System. After seeing some of the samples, the very first thing that came to my mind was the Blue-Blast effect in Transformer's Chopper scene.


Well, this is my first attempt.

Kinda looks alright in the beginning, but as the ripple spreads out, gaps appear. I'm thinking of other better-slicker-elegant ways to achieve this effect.


Actually, I'm so tempted to start creating a level editor for Away3D / XNA right now!I know I know... it's like adrenaline rush... and I'm lazy.

Plus, Unity is probably THE example for Component/Entity based design

NTFS: 
Why did I stop playing with Away3D?
1. There is no editor.. bummer.
2. Unity is planning a "publish to Flash Player 11" (Molehill as of now)
3. I'm lazy and I find good reasons to convince myself

Applying Material in Away3D

I wanted to know Away3D basics first, before getting my hands dirty with Broomstick. So, currently I'm using version 3.6.

I looked at the Ferrari sample, and i replicated it - all seemed fine.
But when I created my own model - I wasn't able to apply material in Away3D.

Funny thing - a lot of people seem to have the same issue and no results have been posted yet. So after Google(Nasdaq GOOG.. lol.. that outta belittle you) finished playing cruel tricks on me, I was finally able to figure out the issue on my own.

Step 1: Modelling
Create the 3D Model and Unwrap UV
Go to Material Editor - Select a material and set a name for it - This is very important!
Apply this material and export it as a 3DS Model

Note: I'm using some old 3DS Max 2008 trial version that I got in a DVD along with some boring useless book, so a lot of things may be different or changed. And yeah, the new Blender is apparently awesome - gotta try it.


Step 2:
In Away3D, get the mesh ready and do the following

// Load the model, use load or parse - me use parse
// Gift me a server or shut up
myMesh =  Max3DS.parse( /* Embedded Resource */);


// Apply the material
// Note: The name "SKIN" is same as the one we set before
myMesh .materialLibrary.getMaterial("SKIN").material = Cast.material(/* Embedded Texture*/);


Just an FYI how I found this -
I opened the binary 3ds file in notepad++ and found only few things that were human readable - model name, material name and texture filename. So, yeah, it was a brute force attack.

NTFS: Prefer NOT to apply "texture or image" before export - will give resource not found run time error


True Engineering

I came across this hack-a-day post. It's about how Rice University students rigged Wii Boards to help kids with disability learn to walk.


From their website:

"By cleverly linking five Wii Balance Boards, a team of Rice University undergraduates has combined the appeal of a video game with the utility of a computerized motion-tracking system that can enhance the progress of patients at Shriners Hospital for Children-Houston.

The Rice engineering students created the new device using components of the popular Nintendo game system to create a balance training system. What the kids may see as a fun video game is really a sophisticated way to help them advance their skills. The Wii Balance Boards lined up between handrails will encourage patients age 6 to 18 to practice their balance skills in an electronic gaming environment. The active handrails, which provide feedback on how heavily patients depend on their arms, are a unique feature.

Many of the children targeted for this project have cerebral palsy, spina bifida or amputations. Using the relatively inexpensive game console components improves the potential of this system to become a cost-effective addition to physical therapy departments in the future."

Check out  this video on Youtube:




How sweet is this? Come to think of it.. We.. thats right.. You too (95% probability  - 80% that XNA, Game or Actionscript got you here and 15% that you are a known friend ) as engineering grads forgot all about making lives better and sadly, everything after college life is about "Money"


Pinball Box2D Prototype

This has been due for quite a while now - another reason I should never consider "project management."

But in my defense:
We won the World-Cup. So spent a lot of days being "high"
IPL going on (ah c'mon.. cheerleaders)
Guess who saw 3 seasons of Clone Wars? Muhaha \m/

Ok so I wanted to learn how to use a "Physics Engine" in a game. I narrowed down to Box2D.
I wanted to make something new, so I thought how about a Pinball game! Well.. apparently people have already tried that.. so.. boo hoo.

I actually ran into some trouble, expected - considering this was the first time I used it. I didn't how to rig up the "Flipper" system. Then I came across this post. So that was the moment of "Boo hoo" i told above, people already "Been there, coded that"

The Game: (Requires Flash Player.. duh)
[Its 1 MB, wait till it loads]

Link

Instructions:
Use LEFT and RIGHT Arrow Keys
P to Pause
SPACE or CLICK in the first screen

Known Bugs:
Flipper collision fails sometimes, probably due to drop in frame rates (Box2D requires constant time step)

Things to keep in mind:
When using b2RevoluteJointDef, do NOT set mass to zero and enable limit and motor.
Velocity and Position Iterations have little effect, they didn't seem to fix the flipper issue.

Note: It's doesn't work with with Flash Player 11

Flixel Test 01 - Contra Style!

I had last Friday off ( sssshhhh.. I was sick \m/ ) so started testing out Flixel Engine.


Here's a video of what I did.
PS: Frame jerks are because of the screen-grabbing. It actually runs pretty smooth @ 60 FPS.


Sprite Credits - Original creators @ Konami, then guys @ nesmaps.com and nes-snes-sprites.com for ripping em.


My first take on the engine and it's flexibility:
Pretty cool features - I didn't have to write too much code for this. It took me just 3 days to rig this whole thing up. All i had to do was create 3 classes. I must admit, there are not many "valuable" tuts around that give you an insight, but the EZPlatformer demo did pave the way. But to be noted -  I spent around 2 days for my classes itself (player state management and collision detection) and around 4 hrs to get the hang of flixel itself.


The feature I loved the most was "follow". You can ask the camera to follow a Sprite (in this case my "Player"  that extends from FlxSprite).


The part what I didn't like - so little info about FlxTilemap. It seems to have so many methods for me to use - but couldn't get anything working. It may be simple for off-the-shelf platformer but this was a little different. I didn't want collision from all the tiles, and I wanted different behavior when collision occurred across Land, water, etc and I wanted the fall-through.


So finally I decided to use my own Collision detection. Was it easy? Piece of cake  - at least for this. Everything worked with just AABB systems.


Here's how I went about it -


Iteration 1:
Decided to create rectangles with "Type" information from my previous editor. Went smooth. I got about 50-55 FPS. (around 300 rectangle-intersection tests per frame)


Iteration 2:
Since this is a side-scroller and same "Type" of tiles extend for a while, I thought I could reduce the count of rectangles by combining the neighbors. So 5 rects of same type next to each other become 1 rect with combined dimension (horizontal only). So the count reduced to 51 \m/ and I got around 55-60 FPS.


Iteration 3:
Why waste all tests when only part of the screen was visible? (Yeah yeah.. octree and quadtree concepts). I created a "Shell" class that encapsulates the rectangles. I set a threshold like 10 - so it will create 6 partitions to hold these 51 rects split by their X co-ordinates. (yeah.. very simple one to start off with). If the outer-shell collides then it checks those inner rects for collision. Some logging revealed an average of 10-20 collision tests (reduced from 51). 
[Best Case: When player is in the air - 51 tests reduced to just 6]


However FPS remained the same - around 60. Not much of an improvement -optimization outcome reduces exponentially x_X




Too much text, I'll stop. Hope to post my Player state management soon. It was more fun than this ( pinky promise ).


But here's something to ponder ( always makes me go WTF ) - The original Contra by Konami was written (probably) in Assembly Language and optimized for 8-Bit machines and the game play was still out of this world \m/

And it ends...

"So this is how it ends?"

With her head crawling into the shadow of her knees, she whispered "Yes"

"I can't believe this. You said you'll never leave me. You said you'll always be there by my side"

She couldn't even raise her head. May be it was guilt. With her voice choking from all the crying, she found the strength to reply "I did. But things are different now, it's complicated"

Frustrated he asked her "Why can't you just forget what happened? We can start all over.. Like in the good times"

She vaguely replied "I can't, if I could I would"

The last rays of the Sun seemed to wipe away the last hope he saw in her face. Her eyes no longer twinkled. The dullness in her face was rusting his heart away. After months of persuasion, he had finally managed to convince her to meet him. But all seemed so vain.

He ran out of words, he had tried in every way. Like a kid who throws the last pebble into the evening lake, he just shot in the dark "Is it that difficult to forget him?"

"Not a single beat of my heart can ever say that I can forget him"

Tears rolled down her cheeks, dripping onto her folded hands. She seemed so lost in "his" thoughts. 
Time just passed by, she didn't utter a singe word.

With all hopes lost, he said "May be you don't have to forget, all you have to do is not remember him."

With a sarcastic smile and a twisted look she blurted "Huh?"

For the first time, he felt her soul was engulfed in darkness. It was like he was in the corner of a dark forest, trying to fight through the fire with his bare hands. He hadn't a clue in this world on how to breach her, reach her heart. 

The darkness in her blurted out "Do you think you can replace him in all my memories?"

"I believe I can honey"

"No. No." Whispering softly, "No.. I connected with him at a level you can't even possibly imagine. It was divine. That feeling where you feel someone else's heart beat.. I can never have with you. What you are now, is just another entity in my life; one that I'm struggling to get rid of.. because it's so tough to let go of you, it's so tough to break all the strings attached. I wish there was an easier way for both of us. But it's fate. I didn't want it come to this"

Minutes passed by. Silence in the air was pinching his nerves. He never expected such a blatant reply from her.

"I guess, every light casts a shadow.. knowingly or unknowingly. You were one such light in my life, unknowingly you cast this dark shadow. The dark figure that is haunting my life now. I can never escape it, not when you're around."

"All of sudden I'm the shadow in your life?"

"Yes. Light fades off you know. Everything in this life burns out. I surrendered my heart to him, it was eternal surrender. I can't win over myself now and I'll.. I'll.."

"You'll what?"

"I'll probably never love you again. Not that I don't want to, it's just that I can't. As I look at it, life is pure evil. It has the power to twist your morning glory into a burning fury. I'm burning inside, don't you see? You may have not noticed it, but you both got intertwined in all my dreams. I never imagined one without another. I always wished both of you to be there.. till the end, the very end"

Wiping her tears, with a sudden urge of pride in her vocals, "He had some weaknesses. He wasn't perfect. But I never cared about that. You know when people say that love is blind?"

He slowly nods his head and looks at her, waiting for a gush of pain to strike him down.

"Well it's not.. It's colorful. So much.. all that vividness, you get addicted to it. And when that love is no more... that is when you become blind, blind to your own senses. All this numbness.. tells me to leave you forever. You remind me of him. Your smile reminds me of him. He acted just like you, he smelt just like you, he was nothing but you.. now I can't bear to look at you. You remind me of his death"

With moistened eyes he asked "He was my son too.. I lost him. You think I can stand losing another love?"

- VIK

[This was inspired by a scene from the movie Minority Report]

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.

Why do they cry?

It was noon. Dark clouds in the sky. Shady weather. All the souls were fast asleep. Beneath the old tree sat the Master, drawing wisdom from world that surrounded.
A disciple was awake, restless. He hadn't heard his Master speak in a long time. 

Cold wind blew. The leaves danced to the tune of the wind. Building upon the tune, the Master thus spoke..

"Why do you think grown men cry?"

"May be I'll know when I grow up. As for now, I can't think of a reason why", spoke the disciple.

"When do you think you'll grow up?" asked the Master.

"May be the day I realize that even other people have broken hearts", replied the disciple.

"Why do you think hearts are broken?" questioned the mighty Master.

With his eyebrows raised, the disciple answered "If it never broke, people would never know that they had a heart."

"How would it matter if they knew or not of the heart?"

"The same reason why you sit under this tree, looking for answers"

"What answers do you think I'm looking for?"

"The answers that do not exist, but makes life an adventure. A quest that can never be conquered"

"Why do you consider life as a quest?"

"I'm merely assuming. I've seen great people spend their entire life searching for the true meaning of life, the meaning of love"

"Do you think that they succeeded in the end?"

"No"

"Why do you say so?"

"Countless men with their countless wisdom. Infinite theories of life. Uncountable religions. Innumerable practices. Not one converges"

"So, do you think there is only one answer?"

"Yes"

"And may I know it?"

"No"

With a sense of shock, the Master asked, "Why not?"

"The moment I tell you, I join the league of those great mortals. The great ones who preach. The great ones who always think they know the eternal truth"

"But the world only knows about those great men"

"Only knows, but not respects. They are known for works of literature and fantasy, ones who honored the King in return for fame. But the world respects the common man for it can see love in his eyes"

"Love? Love is not seen but felt"

"Eyes are not required to see. Beauty lies in the eye, the eye that is attached to the golden heart. A heart that seeks truth in lies, but fails to see the lies in truth"

Stung, the Master asked, "But of what use, if it can't see the lie?"

"Thorns only prick those who dare hold the rose. It doesn't matter if you seek lies or the truth, outcome is the same. Pain"

"Pain you say? Pain doesn't last. Pain is momentary. Time heals everything."

"Time heals only the wound. But Pain... Pain becomes a memory. A memory that flashes at the wrong Time"

"Memory, a memory created by true love can never hurt. Only the ones caused by Lust cause suffering"

"What is Love to a young heart, may seem as Lust to the society"

"But the society is built from ages of wisdom"

"What is built, will be destroyed. What is wisdom today, is famine tomorrow "

A raindrop distracted them. The disciple looked up to see...
The sky had become dark. Day had flown by, without either one noticing it. It started to rain. 

The roles reversed as the disciple asked the Master his first ever question, "Why does it rain?"

"To destroy the famine, to soothe the society. To bathe in lust, to drip in love. To stop time, to replace bitter memories with new ones. To shine on the rose, to feed the thorns. To wash the lies, to cleanse the heart. To hide the tears in the eye, to sprinkle love. To make fantasy come to life, pave the way for the quest. To help the tree grow, the tree underneath which the very thought of why men cry was ignited. Rain is nothing but God's tears, both joy and sorrow demystified."

With this, the disciple smiled and stood up. He turned around to walk. 

Just then the Master asked, "I have never seen you here before. What is your name?"

"Name means nothing. People should be remembered for their thoughts and actions"

Just then, the Master heard a lot of murmur. Standing at the back were other disciples, giggling and talking amongst themselves. Puzzled by their ignorance, the Master turned back for the unknown disciple. But he was gone.

Just then, one of the disciples asked the Master, "Were you talking to yourself all this time?"

After a minute of silence, the Master recovered from the shock and replied "If I say Yes, you will call me a fool". 

With a blissful smile and gleaming eyes in the dark, "If I say No, and that I was talking to God, you'll praise me and serve me"

- VIK

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Switching to Story Telling!

Ok I've started using "public" transport. I can't sketch anymore during my travelling time - people stare at me like I'm a pervert or something.

Now that my imagination needs a new IO sub-system, I'm gonna start writing short stories.

Best part is I don't even have to write down anything, power to recall "dreams".. Muhahaha!

My 1st Level Editor

It's my 1st flash based editor.


Design / Features / Whateva:

Editor has diff types of tiles.

Tiles can have enemies or weapons

Special tiles to block / kill (so player doesn't fall to infinity)

Browser based - one text-area + 1 swf

Editor outputs data to the text-area (Flash to javascript ExternalInterface call)

Editor can parse back level data (see vid of how "Jungle" is loaded)


New things I got to learn:

1. Flash to Javascript supports only 1-Dimension array. To pass around, you need to convert multi-dimension data to 1-D. 


2. Flash Develop is also a very good (light weight) JS & Html Editor


3. Understood the importance of making code Platform Independent! I first thought I'll embed my editor in a C# app, but then decided to go with browsers + JS. This way I could switch browsers for features.


4. Google Chrome (V8 JS Engine) is a "Marvel". Bow to them in respect. This is called engineering. I started with Firefox 3.5. "Jungle" had around 10 * 100 tiles. So it took about 3 mins + to output level data. I switched over to chrome & holy smokes batman - less than 5 secs ( Vista SP 2, 1 GB RAM, Core-2 Duo 2.2 GHz, 3 yr old machine ok.. ). It  was a pleasant surprise, more like a wtf shock when I tried for the first time!


People keep admiring about chrome's start-up time. Little do they know, a bg process forks the browser unlike FF that starts from scratch. But the real reason why chrome should be respected - V8. Gotta look at the code sometime.. apparently JS code can run as fast as native.. talk about design!


5. My design (code wise) was seriously bad. I found it extremely tough to extend it. Yikes.. why didn't I see this coming? This editor can almost never be re-used. Hope to rewrite from scratch. Must explore "Component-based" entities. 


6. It's so much freaking fun to code when language supports hell lotta cool features! So glad AS 3.0 is almost JS




Panic Attack


[Read like a mysterious narration, Max-Payne style if you'd prefer]

I was surfing the web. It was around 3 AM. I had a bunch of apps running. Flash-Develop was open. Visual Studio was hiding in the back, sleeping like a little baby. Chrome was trying to show me some code while FF was busy downloading. All nice n quiet. A little too quiet…

Suddenly, my system stops responding. Just like that! Clank!

Must have been some updates - I lean back and hope that it starts responding. I wait like a predator, I click when the time is right… But it's one of those days where the prey doesn't show up.

I right click on my desktop. A menu opens up - I click, nothing happens. Ah, it’s happening again. I open the task-manager somehow. An achievement in itself - I still got it…

It was cold, I was suspicious...

I glance at all the processes. FF has triggered some plugin-container.exe. Uses memory, releases mem… Ahh! Cmon.. Make up your mind you lil piece of worthless javascript.

I couldn’t find anything that looks like malware. It’s getting late, my eyes are dreamy. I remember those good old days - when Win32 parite had screwed up my system. It took me a while to recover from that. But I couldn't let that happen again… Part of life is to not make the same mistake more than thrice…

I never have Anti-virus installed; I've always been the madcap-RAM-preserver-for-some-later-use type. So it’s gonna be all manual…  Just like the ol’ times.

I run Regedit - surprisingly it comes up. I was shell-shocked! I thought to myself, why didn’t they disable this thing, what are they up to? They don't want me to suspect… very nice... finally a challenge.

I sit there in the corner, feeling dizzy. Its 4 in the morning, I hear crows. Must be the ol' ones who need to pee... Sheesh. I close the windows. Dead-silence, I like it.

I enter the kitchen, make some coffee… really strong. The caffeine wakes me up. I sit there sipping, thinking what to do next - no clue. It suddenly occurs to me… the last resort.

I put in my Backtrack Live distro – Reboot; too much text. Damn, I hope to find some bad ass code in my C drive. Could this be the stuxnet? Nah... The Linux boots up, nice dragon I think to myself. I click on the Shell icon...Nothing happens. What the hell! It's then I realize.... R.I.P Mouse.

All this pain and panic - for nothing. If only, never mind and I doze off… Cometh the sweet dreams.

My mouse, with wings - like an Angel. She calls out to me. She brings up images of those nice things we clicked together. All the emoticons - the good times. All those dumb message boxes. There was too much history. I couldn't bear it. I woke up. Must get over it…

I wait till its noon. The Sun is vertical, shadow of the eagles blind me... so does the shadow of the crows... pigeons... you get the point. I lead my life as I want to. I defined it when I was a kid. I re-defined it my teens. I re-re-defined when I completed my college. All those re-definitions… nothing in common, except - I am the GOD of laziness. So I had to stick to it... Self respect.

I look outside the window, I see a shop. They sell mouse, whole bunch of em. Hanging there… One of those could be mine. I check my wallet, I have the cash. But should I go? No... Self-respect. Can’t afford to walk…

I ping my partner in crime. Poor guy, was sick. Somehow he pings back. I ask him to get me a mouse and come to my house. I know he's sick. But who cares. He agrees, probably had a .32 up and ready for me. I sit there, lean back… So I'm gonna get a new mouse, in less than 2 hours. All I have to do is wait, but can I? Nah, too lazy to wait... Self-respect.

I press the Win button on keyboard, I see a blue thing. It reads control panel. I see mouse settings... My angel... Hang on I'm coming.

I change the settings - to Left-handed. I right-click, and it left-clicks... Sweeet. My mouse is back, with just one wing left. But that'll do. I ping my friend and ask him to back-off. Nobody takes my angel away from me.

I learnt my lesson that day, Self respect. Stick with that one thing that defines you... defines who you really are.

Sketches - II










I'll never learn... \m/