Initial scenes and random map
Render player and actors

Number of enemies is controlled by the root component.

Keep the tiles and actors in hashmaps. Use a free tiles list created
when generating the map to allocate the player and the actors.
Make the player move

Let the actors layer handle all the input. Right now it just moves the
player, with no collision checking. Next step would be moving other
actors as well.

Fixed an integer casting on the player's position.

Moved the actions map to be inside of the `props` to allow customization
Prevent player from moving into wall
Let the nearby actors chase the player

Using AStar of ROT, let all actors query for a path to the player, and
only the near ones will chase down.

There is an issue when collision with player happens.

There may be a bug in free tiles. Maybe we don't need to keep them in
state at all.

And there are a bunch of duplicate codes. Smell!
Wandering actors

Actors that are too far away from the player will just wander.

Tweak the appearance of the map to make it look like memory bits. Idea
is to provide the UI for a memory editing tool, and the player is the
cursor moving to change the bit.
Pass extra props to the player through the root comp

Add a child entity for Map component and use it to map to another
entity in Map component. Use `componentWillMount` to merge that
child entity's props to the player's props. This way we could pass
initial stats for the player to the Map to manipulate.
Keep track of free tiles

Added some debugging features.
Basic attack system

Different enemy types with HP and damage.
Attack can kill enemies.
If player dies, go back to menu scene.
A nice benefit is that a new game has a new random map.
Change the menu scene to be like a chat room

Probably showing an offer by an anonymous agent, taking the player to a
training mission to see if the player qualifies to join organization.

This Chat component would probably be reused through out the game as a
way to communicate missions between the organization and the player, as
well as other random jobs.

Most of the Chat component are random content to make it "animating".
Change the menu screen to be less menu and more interactions

Instead of using traditional menu and buttons to start game, display an
IRC client showing the player is connecting to a special channel. Some
time later an anonymous agent contacts the player for a job, w/ specific
instructions to guide the player to the actual combat.

Chat happen in different tabs. Player is generated a random nickname on
joining, but can change via `/nick newnickname`. `/msg NicServ identify`
does not function yet.

A random list of users is generated, and random users join and leave to
show a little bit of dynamic.
Inject the agent into the users list
Small fixes and enhancements to the chat interface

* Fixed users list not to become too many.
* Fixed sending empty message.
* Support arbitrary chat message.
* Scroll to bottom of messages list.
Small tweaks on gameover and use random IP
Add OS and specs selection menu.

Also hooks up with GA.
Add a goal onto the map.

For now it's the furthest free tile from the player.
End game by reaching the goal

When the player reaches the goal, the game returns the player back
to the chat room, with the current agent offering a new job.

Ideally, the player should still be able to play the current game,
until he closes the hacking tool, so that he can collects extra
files and (maybe) experience.
Move the random users list out to a component

This way the users list can update without rerendering the chat.
Visual tweaks with a Window wrapper
First step in implementing player's camera

Only render tiles that are visible within player's FOV.