Presentation

Fooo is my first year school project written in Delphi. During 8 months, Vladimir Nachbaur, Alban Perillat-Merceroz, Felix Abecassis and I developed a game that mimics Warcraft III and achieved to be major of the promotion.

We tried to make no use of copyrighted Warcraft files, however, a large majority of custom models are based on Warcraft files at some point and use some of their textures. All the interface graphic, icons, models has been made by fans and we are using them with their approbation.

What's the game able to do :

  • Animated 3D Models
  • Interface in XML/Lua
  • Building & Unit creation
  • Group and Subgroup management
  • Group movement with formations
  • Ranged & Melee Attacks
  • Multiplayer over LAN or Internet
  • Ingame Chat
  • 2 Races: Treants and Rats
  • And much more ...

Demonstration Video

My work in the project

Interface

A RTS game is requiring a lot of user interaction, so it needs a complex interface. I decided to make an interface engine like the one used by World of Warcraft. The content is displayed through XML files and scripted with Lua. If you are not familiar with this, you can think the XML as HTML and Lua as Javascript.

The interface engine is able to do the following:

  • Supports Frame, Texture and FontString elements
  • Ability to draw Backgrounds and Borders from images
  • Mouse and Keyboard Interaction
  • Inheritance and Virtual Frames
  • Position through 2 Anchor points (element and its relative)

3D Engine

The 3D Engine is written on top of OpenGL. I've been confronted to two major problems. The first one is the Warcraft III models: there is really few documentation on them so i had to spent quite some time to reverse engineer them and figure out how animation were working.
The engine had to be optimized in many ways. At first, displaying one building was freezing the PC, now we are able to show more than 100 units and the game still runs smoothly.

The 3d engine is able to do the following:

  • Animated Warcraft III Models
  • Camera: Zoom and Rotation
  • 3D Picking
  • Frustum Culling
  • Vertex Array

Learn more

If you want to learn more, for each presentation we made a 30 page document (french) explaining in detail the progression. You can read them at hgf.fooo.fr.

CosmosUI is an open source interface modification of World of Warcraft. Many of the CosmosUI additions were later implemented by Blizzard on the default interface.

I had been doing Warcraft III map making for more than a year when World of Warcraft has been leaked. This was really exciting to hack into the game and being able to modify it. Since I had no real programming knowledge at the time, I could not help people making a server for the game. However, I found the interface in XML and Lua really interesting and spent some time tweaking it.

There was nothing real to do in the sandbox servers at the time, I spent some time programming MiniGames (TicTacToe, Connect 4) in the interface. I have been remarked by Thott (thottbot.com) that gave me a Beta key in order to work on the open source interface modification project he took part: CosmosUI.

I have been working on CosmosUI during the whole beta and these are my notable additions.

QuestMinion

During the Beta of World of Warcraft, the only way to see your quest progression was to open the quest log and search for the quest you were doing. I made an addon that would show a summary of the quest you wanted in a small movable box located under the minimap by default.

Since I did not want to maintain a standalone version people started making addons with this concept. The most successful is MonkeyQuest downloaded 1 million times. Blizzard added later a Quest Tracker functionality to the World of Warcraft default interface that is a nearly exact copy of QuestMinion. The game Warhammer Online made the same choice for its interface.

Quest Minion

Quest Minion

World of Warcraft

World of Warcraft

Warhammer Online

Warhammer Online

Addonification

At the beginning, CosmosUI was just modifications of the World of Warcraft interface files. This was good for small modifications but once CosmosUI grew, we had to make some tricky diff every time a World of Warcraft patch was released. CosmosUI was the only interface modification at the time, so people would be without interface for about 12-24 hours while we were merging everything.

I found a solution to this problem. Instead of modifying the actual code, we can hook the specified function and put our custom code in another file of our own.

local thefunction_backup = thefunction
thefunction = function (args)
  -- Do what we want before
  thefunction_backup(args)
  -- Do what we want after
end

I first moved my modifications out of the Blizzard code and everyone started to do so. Then a few weeks later Blizzard implemented an addon manager into the game. With the preliminary work we did, it was really easy to transform CosmosUI into an addon without any file dependency.

Localization

When I started working on CosmosUI, it was only available in English. Since I am French, I wanted my fellows to be able to use it in their native language.

CosmosUI being a compilation of multiple addons, I first started to make a translation template and applied it to my own addons. Then I put all the strings of all the CosmosUI addons into their respective English translation file. And finally, I formed a translation team composed of French and German people.

Once everything was translated, I started to advertise CosmosUI in the French community and made the technical support.

Sky - Communication Library

In order to make my MiniGames multiplayer, i had to transfert data between the two players. The only way at the time to achieve it was by text messages. However, they are visible to the user. My work on Sky was to automatically join a channel, hide all messages from this channel, make it invisible to the user and finally intercept the incoming messages.

Since channels were only available with command lines, they weren't used that much and their internal API was really buggy. Most of the job was to find workarounds for these bugs. Sometimes channels weren't saved across sessions, they would be joined there but not listed or not joinable at all. For more information you can read the description on WoWWiki

Quote

Christopher was one of our top contributors on the Cosmos project, overseeing both community relationships in the French community as well as developing several mods within the community. The most revolutionary of these was the Quest Helper addon, which became so infamous and popular that Blizzard added it into their base UI. Christopher was a major contributor to the project's culture, content and community. It would not have been the success it was without his direct contribution and passionate commitment.” April 27, 2009 -- Alexander Brazie, Cosmos UI Team Leader. (LinkedIn)

MMO-Champion is the biggest news website of World of Warcraft. The main page is viewed millions times a month and was done with old school tables. As a result, it was really slow to load but worse, all the content had to be loaded before being displayed.

The first thing I did was to rewrite the whole main page template using clean and valid HTML + CSS. The goal was to make it compatible up to IE6. The rendering was so much pixel perfect that nobody noticed a change when we pushed it live.

The main challenge was to rewrite the menu. Previously, the menu was using several images that were cut in order to make it easy to implement it in CSS. However, it was a torture to add another menu. The new one is now using a single image that is basically a screenshot of the rendered menu.

In order to save bandwidth, if the browser is supporting HTML5, instead of storing the menu state in a cookie, it is saved under the new localStorage feature.

Cineartistes.com

Cineartistes.com

Philippe Pelletier has been gathering information of people working on the cinema industry for years as a hobby. He realized that people could be interested in his work and he could share it over the internet.

The website Cineartistes.com is a database of biographies and filmographies of actors, film directors. Some of them contains a gallery of photographies and film covers. There is a section dedicated to awards (Oscars, Césars ...).

There are two points that make the project unique:
Content is parsed from a Word Document. Philippe Pelletier had thousands of already written Word documents when he asked me to create the website. What he has to do is copy & paste from Word to a textbox. The parser analyzes the text and automatically adds italic, bold and color for filmographies.

Names in biographies are automatically linkified. In order to have a smooth navigation in the site, artists names in the biographies are transformed into links. This is working retroactively and without any special markup for the content manager.

Conference Delphi

Conference Delphi

Together with Alban Perillat-Merceroz, we organized a one-hour presentation of the programming langage Delphi followed by 3 hours of exercises. The objective was to introduce Delphi to the students in order for them to be able to start working on their year project.

Students had no more than two months experience of programming with Caml, a functional (opposite of imperative) language. The first part of the presentation was a comparison between the two paradigms and how to move from interpreted to compiled code. Then, a brief explanation of the various structures of the languages and how to organize files around the project has been explained.

Even if the conference was not mandatory and took place a friday 9pm, there were about 200 students attending. They have been split into two room and attended the presentation made by Alban and myself. Right after, they moved to the computer rooms and started working on the exercises.

The exercises focused on very basic things like function definition, for, while and structures for the most advanced. We formed a team of 15 people helping everyone out. Overall, this has been a success. You can download the Presentation Slides (Powerpoint 2007), Exercises subject (PDF) and Correction (ZIP).