iCO2

As a Research Intern (Developer) for the National Institute of Informatics, Tokyo, Japan. From October 2013 to April 2014.

iCO2 is a cross-platform online multiplayer driving simulator, where users are encouraged to practice eco-safe driving in a shared simulation space, using both cooperative and competitive mechanisms.

In the game, players drive around a 1km2 replica of Tokyo city. The virtual scenario’s streets are populated with other players’ cars and with computer controlled cars from our traffic simulator system. With that, traffic situations occur in the virtual environment. Players login into the game via their Facebook accounts.

In contrast with its predecessor version, which contained two game modes, the latest iCO2 version has only one game mode, which places players in an open world environment where they can explore freely and complete quests as they will. By completing quests, players are rewarded with virtual currency, which is the key factor that motivates players to maintain eco-driving behaviours. Keeping fuel-efficient driving behaviour reduces the amount of fuel spent when completing quests and thereby saving in-game money. If the players manage to save enough in-game money, they are able to improve their vehicle fleet, by buying new cars and upgrading the owned cars towards eco-efficiency.

The game was developed in Unity3D, using C#, and the backend applications were developed in C#. Further, the game used the Facebook API for the players' login. Due to time constraints, the latest version of the iCO2 game client was only published to Android.

My contributions to this project were the following:
• Implemented gameplay features, such as, the quests system, the tutorial system, the garage system, UI (using the NGUI plugin), players’ spawn system (and backend application, in C#), etc.
• Produced technical documentation for future developers and for maintenance.
• Participated in the system’s maintenance during worldwide campaigns, which reached around 12000 worldwide users.
• Managed the development process regarding architectural decisions, supervised and guided other developers, and ensured that the game’s releases had minimal bugs.

Try iCO2 at the Google Playstore or check the older versions.

^Top^

My Dream Theatre

As a Research Assistant for GAIPS (INESC-ID), Oeiras, Portugal. From December 2011 to September 2013.

My Dream Theatre is one of the two conflict resolution serious games in the SIREN project, which intends to create an intelligent interactive software system that supports teachers’ role to educate young people on how to resolve conflicts.

The game setting is a school theatre club directed by the player. The player has to select an adequate cast for each performance. Each cast member (NPC) has a set of characteristics, such as preferences for roles, a level of proficiency, interests and personality. As the user assigns roles to each one of the characters, conflict situations may emerge due to the agents’ conflicting goals and their choice of actions to handle the situation. When conflict arises, the user intervention is required to balance the agent’s proficiency and cooperativeness (which may have to be mediated by the user) and assure a good performance in the end.

As mentioned above, the SIREN project consists in two serious games: My Dream Theatre and Village Voices. The latter consists in a 4-player multiplayer game where players need to achieve certain objectives by collecting items. Given that each player has a certain job and can only gather certain types of items, the players need to get items from other players, by negotiating and trading or by stealing. As Village Voice provides children with an open free environment where they can negotiate freely with each other, My Dream Theatre works as an introductory step to conflict resolution. Ideally, children play My Dream Theatre in which they learn conflict resolution concepts and strategies and then they explore that knowledge in Village Voices.


The game was developed, with Unity3D using C#, in partnership with Serious Games Interactive (SGI), which provided an early digital prototype of the game and the visual assets.

As the main developer in the INESC-ID team, my contributions to this project were the following:
• Produced storyboards and other prototyping documentation.
• Worked in remote partnership with SGI development team.
• Developed the game flow system (turn-based) by using an early prototype produced by SGI as a starting point;
• Developed the gameplay features, such as, player's actions, characters' behaviours, tutorial, UI, etc.
• Developed a framework to easily integrate new modules into the game (e.g., dynamic game adaptation);
• Imbued characters with emotion-driven virtual agents’ minds;
• Participated in the game's experiments with approximately 100 Portuguese children students.
• Developed a framework to integrate our virtual agents' system into Unity3D projects, and produced documentation and video tutorials on how to use the framework.


Publications:
• H. Campos, J. Campos, J. Cabral, C. Martinho, J. H. Nielsen, and A. Paiva. My Dream Theatre. In Proceedings of the 2013 international conference on Autonomous agents and multi-agent systems. International Foundation for Autonomous Agents and Multiagent Systems, Richland, SC. 2013.
• J. Campos, H. Campos, C. Martinho, A. Paiva. A Serious Game for Teaching Conflict Resolution to Children. In Proceedings of the 11th International Conference on Intelligent Tutoring Systems 2012, volume 7315. Chania, Crete, Greece. 2012.
• H. Campos, J. Campos, C. Martinho, A. Paiva. Virtual agents in conflict. In Proceedings of the 12th international conference on Intelligent Virtual Agents, Springer Berlin Heidelberg, volume 7502. Santa Cruz, CA. 2012.

^Top^

Gygan's Descent

For GBJam #3. August 2014.

Gygan's Descent is a rogue-like dungeon crawler that was developed in 10 days, using Unity3D with C#, for the GBJam #3. This Jam focus on gameboy-themed games. Each game needs to follow two important rules: only 4 colors and 160x144 resolution (however, the game's window can be scaled to 3x).

With this game we wanted to develop a dungeon crawler with a twist in its difficulty progression. In contrast to most dungeon-crawlers, in Gygan's Descent, the first dungeon is the last boss' level and, therefore, it is the must difficult dungeon in the whole game. However, as the hero inevitably dies in this dungeon, he will fall down to the next dungeon (descension), which has weaker enemies. During this phase, the hero can die indefinitely and keep descending through the dungeons, which keep getting less difficult.

In order to win the game, the player needs to defeat the last boss (located in the first level). To do so, he needs to get back to the first dungeon by ascending. The hero ascends by destroying the crystal located in a certain room in each dungeon. Once the hero starts ascending he cannot die anymore, or else he will be defeated. The hero gets stronger by collecting the items that appear when a dungeon's room is cleared. It is up to the players to decide when they should start ascending. If players start ascending too soon, they might not be able to have a hero strong enough to defeat the last boss. The high-score system would consider the players with the lowest amount of descensions. However, we could not finish it before the Jam's deadline.

The dungeons in the game are all randomly generated. Also, the enemies in each room are procedurally generated in regards to the dungeon's difficulty. The difficulty affects the amount of enemies in each room and their capacity to take and inflict damage. As mentioned previously, the first level is the most difficult in the game as it has the highest difficulty. As the player descends, the difficulty is lowered. Therefore, the generated dungeons are easier than the previous.

When the player descends, the difficulty is lowered by a constant value and by an effort bonus. This effort bonus considers the amount of damage that the player inflicted into the enemies. The rationale behind this bonus is to motivate the player to try to beat the dungeon, or to cause the most havoc as possible, instead of just dying over and over again to rush low difficulties.

The team consisted in me as the main developer (and I also contributed with some art and sounds), a sprite artist that also contributed with some code, and a audio designer. The game design was a team effort. In this project, I contributed as follows:
• Implemented gameplay features (player controls, hero, enemies, weapons, item and dungeon's logics, mini-map system, hero's camera, difficulty system, etc);
• Implemented the gameflow system (game states system, pause system, dungeon and room teleportation, etc);
• Produced some art for the early prototypes;
• Produced some sound effects using Bfxr and as3sfxr.

There are some things that we did not conclude in time for the Jam: more enemies, more hero characters (archer, mage, thief), items that give passive status to the hero, more effects (enemie's death, etc) and a high-score system. Also, the game required some balancing, in regards to how much each descension decreases the next dungeon's difficulty and how the difficulty affects enemies.

Try Gygan's Descent at the GBJam #3's page.

^Top^

You only get ...

For Ludum Dare #28. December 2013.

"You only get..." is an endless catch-a-cube game in which the player has to follow the rules that are dynamically changed throughout the game. The game was developed in 72 hours, with Unity3D using C#, for Ludum Dare #28 under the concept: "You only get one".

In "You only get..." the player controls a paddle that catches numbered cubes that fall down. The player needs to catch only the valid cubes as stated by a rule that is displayed in the top of the game's screen. By catching a certain amount of valid cubes, players transition to the next level, which will spawn cubes at faster rates and speeds. If players catches too many invalid cubes, they will fall down to the previous level.


The game was developed for fun, where we focused more on having fun during the development process. Our final concept for the game would include other simbols instead of just numbers, such as, roman numbers, kanji characters, etc. However, we did not make it in time for the competition's deadline. Further, the submitted version had a problem with the genetic algorithms that generated the cubes' patterns and sometimes the game's progression is very slow.

The team consisted in me as a programmer with 3 other programmers, a graphical artist and a sound engineer. In this project, I designed and implemented the game’s main architecture, the paddle’s logic, the cubes’ logic and implemented the visual effects into the game.

Try the submitted version of "You only get ..." at the Ludum Dare #28's page.

^Top^

Other projects

Asteroids 2008

For Computer Graphics' course, 2008

"Asteroids 2008" is a 2.5D space shooter game based on the classic "Asteroids", developed in C++ with OpenGL, for the Computer Graphic's course. In this game, the player controls a spaceship that needs to destroy all the asteroids in order to proceed to the next level, which contains even more asteroids. At the start of every level, the spaceship starts with a shield that protects it from the asteroids for a short period of time. This allows the player to position the spaceship properly when the level starts.

With this project I learned some basic concepts of game development, such as, object pooling, object grouping (for optimized collision processing), pre-loading objects (caching), viewports, simple physics, 3D math, etc. All the 3D objects in the game were obtained from royalty-free sources.

This project scored a grade of 17 out of 20.

Dyne Online

For a High school's course, 2005

Dyne Online is a text-based MMORPG with a medieval fantasy theme that was developed for a course in my senior year of High School. The course only required a simple webpage that performed transactions between the webpage and the database. However, me and 2 colleagues decided to produce an ambitious project.

In the world of Dyne Online, players can create a hero character from 4 races: Human, Elf, Dwarf, or Orc. Each race has its own traits in regards to how they are affected by each character attribute (health, speed, damage, defense, etc). After creating a character, the player can explore the world of Dyne, by fighting in the arena (against monsters or other players), buying or selling equipment and items, using the bank to deposit money, sending messages to other players, upgrading the character after a level up, etc.

Further, the game also provided an administration view, which allowed administrators to manage the game in-real time, such as, writing for the news' feed, adjusting items and enemies' properties, and banning/unbanning players.

The game was developed with PHP, Javascript, HTML and CSS for the website, and MySQL for the game's database. Even though the game had some beginner issues (if you manipulated some pages you could hack into the game's administration), there are some security aspects that we took into consideration, such as, preventing SQL injection. Also, back then, we had no notion of copyrighted material. Therefore, a lot of the visual art used in Dyne Online comes from Ragnarok Online (enemies and equipment) and Diablo II (character's equipment UI).

I find always interesting to take a look at how this project was made, because even though I was taking my first steps into programming and had no knowledge of Object Oriented Programming, the code is fairly well structured and robust.

This project scored a grade of 19 out of 20.

^Top^

© 2014 Henrique Campos' Portfolio is designed by Templateify