/**
 * Common data to be used in the portfolio
 * 
 * @author Dennis Robinson
 * @date   February 16, 2009
 */

/**
 * List of programming/scripting languages with urls to their descriptions
 */
var languages = {
	'C'            : 'http://en.wikipedia.org/wiki/C_(programming_language)',
	'C++'          : 'http://en.wikipedia.org/wiki/C++',
	'C#'           : 'http://en.wikipedia.org/wiki/C_Sharp_(programming_language)',
	'Java'         : 'http://en.wikipedia.org/wiki/Java_(programming_language)',
	'HLSL'         : 'http://en.wikipedia.org/wiki/HLSL',
	'ActionScript' : 'http://en.wikipedia.org/wiki/ActionScript',

	'HTML'         : 'http://en.wikipedia.org/wiki/HTML',
	'XML'          : 'http://en.wikipedia.org/wiki/XML',
	'CSS'          : 'http://en.wikipedia.org/wiki/CSS',
	'JavaScript'   : 'http://en.wikipedia.org/wiki/JavaScript',
	'PHP'          : 'http://en.wikipedia.org/wiki/PHP',
	'SQL'          : 'http://en.wikipedia.org/wiki/SQL',

	'FBML'         : 'http://wiki.developers.facebook.com/index.php/FBML',
	'FBJS'         : 'http://wiki.developers.facebook.com/index.php/FBJS'
};

/**
 * List of programming and application development technologies with urls to their descriptions
 */
var technologies = {
	'Java'          : 'http://en.wikipedia.org/wiki/Java_(software_platform)',
	'Java Applet'   : 'http://en.wikipedia.org/wiki/Java_applet',
	'Visual Studio' : 'http://en.wikipedia.org/wiki/Visual_studio',
	'XNA'           : 'http://en.wikipedia.org/wiki/Microsoft_XNA',
	'XACT'          : 'http://en.wikipedia.org/wiki/XACT',
	'Direct3D'      : 'http://en.wikipedia.org/wiki/Direct3D',
	'OpenGL'        : 'http://en.wikipedia.org/wiki/OpenGL',
	'Shaders'       : 'http://en.wikipedia.org/wiki/Shader',
	'Adobe Flash'   : 'http://en.wikipedia.org/wiki/Adobe_Flash',
	'Win32 API'     : 'http://en.wikipedia.org/wiki/Windows_API',
	'Console'       : 'http://en.wikipedia.org/wiki/Win32_console',
	'TCP'           : 'http://en.wikipedia.org/wiki/Transmission_Control_Protocol',
	'Threading'     : 'http://en.wikipedia.org/wiki/Thread_(computer_science)',

	'XACT'          : 'http://en.wikipedia.org/wiki/XACT',
	'Photoshop'     : 'http://en.wikipedia.org/wiki/Photoshop',
	'3ds Max'       : 'http://en.wikipedia.org/wiki/3ds_Max',
	'Maya'          : 'http://en.wikipedia.org/wiki/Maya',

	'DHTML'         : 'http://en.wikipedia.org/wiki/Dynamic_HTML',
	'MySQL'         : 'http://en.wikipedia.org/wiki/MySQL',
	'SQLite'        : 'http://en.wikipedia.org/wiki/SQLite',
	'Flat File DB'  : 'http://en.wikipedia.org/wiki/Flat_file_database',
	'GD'            : 'http://en.wikipedia.org/wiki/GD_Graphics_Library',

	'Facebook API'  : 'http://wiki.developers.facebook.com/index.php/API',
	'phpBB'         : 'http://www.phpbb.com'
};

/**
 * List of development platforms with urls to their descriptions
 */
var platforms = {
	'Windows'  : 'http://en.wikipedia.org/wiki/Microsoft_Windows',
	'OSX'      : 'http://en.wikipedia.org/wiki/Mac_OS_X',
	'Linux'    : 'http://en.wikipedia.org/wiki/Linux',
	'Solaris'  : 'http://en.wikipedia.org/wiki/Solaris_(operating_system)',
	'Xbox 360' : 'http://en.wikipedia.org/wiki/Xbox_360'
};

/**
 * Projects list
 */
var projects = {
	'xna' : [
		{
			'title'          : 'Smite',
			'languages'      : ['C#', 'HLSL'],
			'technologies'   : ['XNA', 'Direct3D', 'Shaders'],
			'platforms'      : ['Windows', 'Xbox 360'],
			'description'    : 'Smite was the huge final project for our last year in the Game Development program.  With a team of 10 students, including myself, we set out to re-create a board game that several of us had designed in our first year.  Smite is a very unique turn-based game, involving gods who battle for control of human followers to win the game.<br /><br />'
								+ 'Smite was created using C#, XNA and Visual Studio 2008.  My team is very dedicated, and we strive to make a really great game that we can not only be proud of, but that we can also release on Xbox Community Games.<br /><br />'
								+ '<b>Notice:</b> The development of this game is still in progress, and it is not of final quality.  Additionally, this game will be commercially released, and therefor no demo is provided.',
			'contributions'  : [
				'Wrote the majority of the AI code, for both the AI player and the Neutral player',
				'All of the basic code for the hex board and town system, including navigating and selecting hexes',
				'The dynamic Water',
				'Worked on the Game Setup screen',
				'Wrote the Input library that is used in the game'
			],
			'download'       : null,
			'screenshots'    : [
				'The Smite Main Menu.',
				'The Game Setup screen.  Here players can choose their colour and main building.',
				'A Nice view of the dynamic water.',
				'Player 2 Merging two groups of followers together, into a group of 12.',
				'A view of the entire board from the very back, as player 3 captures a town.',
				'Notice the menus in the corners are now showing one of each player\'s cards.',
				'An unsuspecting group of followers get fireballed!',
				'The effect from casting the Harvest Festival spell.'
			]
		},
		{
			'title'          : 'Networked Battleship',
			'languages'      : ['C#', 'HLSL'],
			'technologies'   : ['XNA', 'Direct3D', 'Shaders', 'TCP', 'Threading'],
			'platforms'      : ['Windows'],
			'description'    : 'For my third-year networking final project, I was assigned to create a networked multiplayer clone of the game Battleship.  It was suggested to use Windows Forms for the interface, but I instead created the client application for project using XNA.<br /><br />'
								+ 'My battleship game features a server lobby with table and user lists as well as a chat box.  Each table serves two players and allows chat between them at all times.  The network code is well tested and fairly stable, with checks for most that would occur.<br /><br />'
								+ 'During the development of this game, I also created the "DRobinson" XNA library.  It contains a large number of extension methods for common XNA tasks, many general use classes and a large set of input handling classes meant to simplify and replace those provided in the Xna framework.  This library also contains a series of XNA "GameComponents" including FrameRateDisplay, TextBox, Button, ListBox and a full featured ScreenManager.  This library will be developed further and released to the public in the future.',
			'contributions'  : [
				'All of the code, excepting the Shader system, is 100% original, written by me',
				'Wrote the DRobinson library which is used in this project'
			],
			'download'       : 'projects/networked_battleship/networked_battleship_dennis_robinson.zip',
			'screenshots'    : [
				'The Join A Server menu screen.',
				'The lobby, after connecting to a server.  Tables are recieved from the server.',
				'After joining a table with no other users on it, you need to wait for another player.',
				'The player placing their ships onto their board.',
				'Waiting for the opponent to finish placing their ships.',
				'Firing and making a hit on the opponent.',
				'The opponent making a hit.',
				'The opponent successfully sunk a ship.  The ships lower into the water when sunk.',
				'A message displayed when the opponent leaves the table.  The player then waits for another opponent to join.',
				'The in-game menu.',
				'The main tab of the server, showing the ongoing events within the server.',
				'The raw incoming and outgoing network packets on the server.',
				'The lobby tab of the server, showing the users in the lobby and the lobby chat.',
				'The tables tab of the server, showing the tables list, table users and table chat.'
			]
		},
/*
		{
			'title'          : 'Asteroid Survival',
			'languages'      : ['C#'],
			'technologies'   : ['XNA', 'Direct3D', 'XACT', 'Maya', 'Photoshop'],
			'platforms'      : ['Windows', 'Xbox 360'],
			'description'    : 'For the final project of Console Game Design, we were to create a game involving spaceship shooting down alien ufo\'s.  I took my game a bit further, and added asteroids that you must dodge as you attempt to destroy the alien invaders, complete with a hyperspace tube.<br /><br />'
								+ 'As usual, I also added something extra into my game, a radio inside your spaceship with far too many stations.  There is also random radio chatter that can be heard at any time as you fly through space.  Lastly, you can switch to First-Person view by pressing \'C\', which shows the inside dashboard of your spaceship in 3D.<br /><br />'
								+ 'If I were to make this game better, I would include a menu system instead of the splash screen, as well as in-game notifications so that the game makes more sense.',
			'contributions'  : [
				'All of the code is 100% original, written by me',
				'Created all of the graphics and 3D models, except the first spaceship skin'
			],
			'download'       : 'projects/asteroid_survival/asteroid_survival_dennis_robinson.zip',
			'screenshots'    : [
				'The splash screen you see when starting the game.',
				'The ship selection screen.',
				'The main gameplay, chasing an enemy ufo in 3rd person.',
				'The 1rst person view, from inside your ship.',
				'The victory screen.'
			]
		},
*/
		{
			'title'          : 'Missile Defence',
			'languages'      : ['C#'],
			'technologies'   : ['XNA', 'Direct3D', 'XACT', 'Photoshop'],
			'platforms'      : ['Windows', 'Xbox 360'],
			'description'    : 'The Mid-Term project for my Console Game Design class was to create a Missile Defence clone using C#, XNA and XACT.  My project nails this goal on the head, and does it in style.<br /><br />'
								+ 'My version of Missile Defence involves an Anti-Aircraft tank defending three cities by shooting down incoming missiles, while avoiding being blown apart itself.  It features a falling health powerup, multiple levels with increasing difficulty, and 2D sprite effects such as smoke and explosions.  The game has not been tested on the Xbox 360, but it does include support for the Xbox 360 Controller.<br /><br />'
								+ 'If there was something I would do to make this project better, it would be to add prompts during the game with instructions, and a menu system.  I am, however, particularly proud of the transparent clouds at the top of the game, and the spritesheet effects, which were not a requirement to the project.',
			'contributions'  : [
				'All of the code is 100% original, written by me',
				'Created all of the graphics in Photoshop'
			],
			'download'       : 'projects/missile_defence/missile_defence_dennis_robinson.zip',
			'screenshots'    : [
				'Missile Defence Main Menu',
				'The main gameplay, shooting down incoming missiles.',
				'A falling powerup can be seen, as well as the explosion effect.',
				'The victory screen when a level is completed.',
				'A falling powerup, and the double bullet secondary fire mode.'
			]
		}
	],
	'directx' : [
		{
			'title'          : 'Warpcrank Pinball',
			'languages'      : ['C++', 'HLSL'],
			'technologies'   : ['Direct3D', 'Shaders'],
			'platforms'      : ['Windows'],
			'description'    : 'As the final project for my DirectX course, we were put in groups with the task of developing a themed pinball game.  My group decided on a "Cityscape" theme, where the gameplay would take place in the street of a city.<br /><br />'
								+ 'My proudest contribution to this project was the lighting.  Between the street lamps and the dynamic day/night cycle, the lighting in this project really helped it stand out. Unfortunately the current build is still plagued with buggy collision, which had been in varying degrees of broken since the beginning of the project.  If I was able to do the project over, collision would have been the cornerstone, and I would have made sure it worked right from the beginning.<br /><br />'
								+ 'This was one of the most enjoyable projects I have ever worked on.  In many of the group projects before this one, I was forced to do 80-100% of the programming work on my own. However, on this project, everyone on the team had allot of programming skill, and I think we produced a really cool game out of our collective programming abilities.',
			'contributions'  : [
				'Wrote the model, material and bounding box classes',
				'Wrote the light class and lighting shader',
				'Wrote the code for the flipper and slingshot objects',
				'Wrote the majority of the shader and object classes',
				'Collaborated on the creation of the ball, bumper, drop target and drop target set objects'
			],
			'download'       : 'projects/warpcrank_pinball/warpcrank_pinball_dennis_robinson.zip',
			'screenshots'    : [
				'The evening lighting.',
				'Night time lighting, displaying the lamps complete with bugs, and the rain starting to fall.',
				'Midnight, displaying the police car lights going off when the car is hit.',
				'The morning, with rain.'
			]
		}
	],
	'opengl' : [
		{
			'title'          : 'OpenGL Pong',
			'languages'      : ['C++'],
			'technologies'   : ['OpenGL', 'Photoshop'],
			'platforms'      : ['Windows'],
			'description'    : 'This was part of a competition several of my peers held one summer, during which the contestants were to create 8 games in 8 weeks, using whatever languages and technologies they liked.  The first week was to create a Pong clone, and that is just what I did, except better!  My pong clone is not just one game, it is 6 games in one.  It includes Classic Pong, Pong Solitaire, Pong Double-Control, Multi-ball Pong, Pong Doubles and Four-Way Pong.<br /><br />'
								+ 'The reason I chose OpenGL was because I had taken an OpenGL class in the previous semester, and I wanted to strengthen my knowledge of the OpenGL API.  For this game, I created an OpenGL class in an attempt to object-orient the OpenGL API, however it is far from complete.<br /><br />'
								+ 'Something that I really like about this game is that each of the six game modes uses the same paddle and ball code, among other things.  Infact there is very little code that differs for each game type.<br /><br />'
								+ 'The biggest problem with this game, that I would definitely change before ever releasing it, is that the update loop is not controlled by the elapsed time.  What this means, is that the gameplay will run as fast as possible on any given computer.  Because of this, you may find that the game will run either too fast or too slow.',
			'contributions'  : [
				'All of the code is 100% original, written by me',
				'Created the sound effects, using an application called SFXR'
			],
			'download'       : 'projects/opengl_pong/opengl_pong_dennis_robinson.zip',
			'screenshots'    : [
				'The Pong Menu',
				'Classic Pong',
				'Multi-ball Mode',
				'Four-Way Pong',
				'Credits Screen'
			]
		},
		{
			'title'          : 'OpenGL RTS Engine',
			'languages'      : ['C++'],
			'technologies'   : ['OpenGL'],
			'platforms'      : ['Windows'],
			'description'    : 'The final projects for my OpenGL, C++ and Game Design classes was one big combined project. As a group, we were tasked to design, plan and develop a game prototype using Scrum and Agile software development methods.  After careful consideration, my group decided on creating an RTS game with modern day humans pitted against ancient giants.  We would, of course, only be creating a rough prototype, but the concept was there.<br /><br />'
								+ 'I think our prototype turned out quite well.  OpenGL can be a rough API to grasp, especially when it is the first graphics API you have ever used.  All of the basics are covered, including Lighting, Fog, Textures, Alpha Blur and Motion Blur.  We also had some basic AI logic, including waypoint patrolling, Wandering, Following and Fleeing.  Lastly, you were able to select, move, kill and create units.<br /><br />'
								+ 'Contained is not only the RTS Prototype we developed, but also a UML Class Diagram, Budget, Financial Analysis, Product Backlog and powerpoint presentation.',
			'contributions'  : [
				'Wrote the majority of the basic OpenGL code including lighting, texturing, fog and motion blur',
				'Wrote all of the selection and movement code',
				'Wrote most of the AI code, including the wander, follow and patrol behaviours and the basic AI framework',
				'Wrote all of the test scaffolding',
				'Created the UML Class Diagram',
				'Took part in the creation of the Budget, Financial Analysis and Product Backlog'
			],
			'download'       : 'projects/opengl_rts_engine/opengl_rts_engine_dennis_robinson.zip',
			'screenshots'    : [
				'The view when the project is opened, with both giants and humans (red and blue).',
				'The view when zoomed out to see the whole map.',
				'Selecting units.',
				'Texturing disabled, showing the underlying grid that is used for moving units around the map.',
				'A giant following a human unit.'
			]
		}
	],
	'win32' : [
		{
			'title'          : 'Win32 3D Engine',
			'languages'      : ['C++'],
			'technologies'   : ['Win32 API'],
			'platforms'      : ['Windows'],
			'description'    : 'Im not sure what the original final project for my second semester C++ class was, but when the teacher announced that we could alternatively propose our own final project, I sprung at the opportunity.  With a great interest in 3D engines, and little 3D programming knowledge, what better final project than to create a 3D rendering engine from scratch?<br /><br />'
								+ 'With approval from my teacher I spent the next month writing the 3D engine you see here, using the Win32 API.  The downfall of using Win32, is that it is not 3D accelerated.  This however, meant that I could start from the ground up creating my 3D engine.<br /><br />'
								+ 'I actually created both a 2D and 3D renderer, since in order to draw 3D objects, you must break them down into 2D objects.  The engine works by taking a 3D object in 3D space, and converting it to a series of 2D objects in screen space which is then drawn to the backbuffer, and then the screen.<br /><br />'
								+ 'The accomplishment I am the most proud of in this project, is the scanline conversion where a 2D facet, or triangle is converted to a series of horizontal lines so that it can be drawn with a solid fill.  When I first started this project, I had no idea this was what actually goes on in the background when you draw a filled shape, and it fascinated me.',
			'contributions'  : [
				'All of the code is 100% original, written by me'
			],
			'download'       : 'projects/win32_3d_engine/win32_3d_engine_dennis_robinson.zip',
			'screenshots'    : [
				'The introduction screen.',
				'Two boxes rendered in 3D space.',
				'Using the menu to enable the debugging options.',
				'Spawning more boxes, and observing the debugging options.'
			]
		},
		{
			'title'          : 'Sudoku',
			'languages'      : ['C++'],
			'technologies'   : ['Win32 API'],
			'platforms'      : ['Windows'],
			'description'    : 'My third semester (second year, first semester) C++ final project was to plan and develop a Sudoku game with the ability to generate random Sudoku puzzles and play a singleplayer or multiplayer game with up to three players.  This was a group project with three other team members (Martin, Kyle and Adrianna), as credited in the about menu of the game.  I was, however, the only group member to participate in programming the project.  The remaining group members worked extensively on the project planning and documentation.<br /><br />'
								+ 'I also participated in the planning, and have included a partial game development document containing several "Scenario Textual Descriptions" or STD Use Cases that I developed for this project.',
			'contributions'  : [
				'All of the code is 100% original, written by me',
				'All of the supporting documentation that is provided with the code is 100% original, written by me'
			],
			'download'       : 'projects/sudoku/sudoku_dennis_robinson.zip',
			'screenshots'    : [
				'The main menu.',
				'Singleplayer gameplay.',
				'Multiplayer gameplay.',
				'Multiplayer, with debugging enabled.'
			]
		},
		{
			'title'          : 'Console Blackjack',
			'languages'      : ['C++'],
			'technologies'   : ['Win32 API', 'Console'],
			'platforms'      : ['Windows'],
			'description'    : 'For the final project of my first semester C++ course, I was tasked to create a blackjack game using only the windows console.  In addition to the core gameplay and what I think are pretty awesome console graphics, I also went a little further and added a full menu, a music player and a high scores chart.',
			'contributions'  : [
				'All of the code is 100% original, written by me'
			],
			'download'       : 'projects/console_blackjack/console_blackjack_dennis_robinson.zip',
			'screenshots'    : [
				'The main menu.',
				'The highscores screen.',
				'The about screen.',
				'The blackjack gameplay.',
				'The options screen.'
			]
		}
	],
	'flashjava' : [
		{
			'title'          : 'Hostile Force',
			'languages'      : ['ActionScript'],
			'technologies'   : ['Adobe Flash'],
			'platforms'      : ['Windows', 'OSX', 'Linux', 'Solaris'],
			'description'    : 'The final project for my Flash/Actionscript course was to create a Flash game from a set of requirements such as: use a preloader, load a video, use sound effects, use OOP logic, etc.  My group (Mike, Matt, Farid and I) decided to make a game inspired by "Soldat" (www.soldat.pl), a 2D side scrolling shooter.<br /><br />'
								+ 'I think the game turned out pretty good considering the short timespan of the project, and I had alot of fun creating it with my group.',
			'contributions'  : [
				'Wrote the base Soldier code, as well as the AI Soldier and Playable Soldier derivations',
				'Wrote much of the basic gameplay code',
				'Created the bullet object',
				'Created the decal system and the blood and bullet casing objects'
			],
			'webAddress'     : 'dennisrobinson.basnetworks.net/projects/hostile_force/demo/',
			'screenshots'    : [
				'The main menu of Hostile Force.',
				'The credits menu.',
				'The controls menu.',
				'The level selection menu.  Level names appear on mouse over.',
				'The jungle level.',
				'The cave level.  Soldiers can partially hide behind level geometry near the edges.',
				'The city level.',
				'The sea level.  Soldiers die when they hit the water.',
				'The sea level.  Dynamic bullet holes can be seen all over the floating platform.',
				'The mountian level.  The AI fly fearlessly into battle.'
			]
		},
		{
			'title'          : 'Colour Memory Game',
			'languages'      : ['Java'],
			'technologies'   : ['Java', 'Java Applet'],
			'platforms'      : ['Windows', 'OSX', 'Linux', 'Solaris'],
			'description'    : 'The final project for my Java programming class was to create a colour memory matching game using the Java language, and a Java Applet.  I decided to spice my project up a bit and added a music player, a wipe reset effect, and 2D particle effects such as confetti and fireworks.',
			'contributions'  : [
				'All of the code is 100% original, written by me'
			],
			'download'       : 'projects/colour_memory_game/colour_memory_game_dennis_robinson.zip',
			'screenshots'    : [
				'Java Colour Memory Game!  The current song can be changed with the controls on the right.',
				'Mid-game, an explosion appears after successfully matching a set.',
				'The end of the game.',
				'During the middle of the board reset transition.'
			]
		},
	],
	'modding' : [
		{
			'title'          : 'Battlefield: High Definition',
			'languages'      : ['BF1942 Con'],
			'technologies'   : ['Refractor 2 Engine', 'Photoshop'],
			'contributions'  : [
				'The entire modification is 100% original, created by me'
			],
			'description'    : 'Battlefield: High Definition is a modification for <a href="http://www.ea.com/official/battlefield/1942/us/">Battlefield 1942</a>.  The goal of the mod is to bring as many visual enhancements to the game as possible.<br /><br />'
								+ 'The modification brings the following enhancements to <a href="http://www.ea.com/official/battlefield/1942/us/">Battlefield 1942</a>:<br />'
								+ '<ul>'
								+ '	<li>Drastically increased view distances</li>'
								+ '	<li>Increased the rendering quality of the terrain</li>'
								+ '	<li>Increased the rendering distance of most vehicles</li>'
								+ '	<li>Most vehicles will stay on the map permanently when destroyed</li>'
								+ '	<li>Dead bodies remain for five minutes (you will rarely see them disappearing)</li>'
								+ '	<li>Added blood effects</li>'
								+ '	<li>Added third person view</li>'
								+ '	<li>Many more minor tweaks</li>'
								+ '</ul>',
			'webAddress'     : 'bfhd.basnetworks.net',
			'screenshots'    : [
				'The Market Garden map.',
				'The Bocage map.',
				'The Battle of Midway map.',
				'The Battle of Britian map.'
			]
		}
	]
};