jueves, 18 de marzo de 2010

self.showOff(:kianagy)


In the middle of 2008 year, during our winter break, myself and a univerisity colleague (José Prous) wanted to test our technical and programming skills, in order to fight boredom. Thats how we scheduled our 2 weeks available time to produce a game engine from scratch, just to see what we could achieve in that very limited time.



Thats how KIANAGY (Kianagy Is Apparently Not A Game Yet) was born. Our own prototype. When we said "from scratch" we really meant it. So we decided to use the most basic dependencies. The whole engine is written in ANSI C using only standard libraries (threads and sockets) for the server, and OpenGL and SDL for the client.




The whole development process was made in a iterative way, the first version was only a few cubes with basic moves on a plane. At the end of each iteration we decided what would be the next features and what should be changed in order to accomplish them.



We worked in parallel, I took full responsibility for the server and José decided to work on the client side. Kianagy's architecture its pretty simple (simple != good), all the virtual environment and its logic is managed on the server side, the client function is to display the environment state on a graphical way, also catching user's mouse/keyboard inputs translating it into our custom communication protocol. That means that each of us had to deal with an different domain of challenges.



Upon the final iteration, one week after the end of the winter break, we had a very decent prototype. We learn to much in those 3 weeks, in to many aspects and fields. Just to summarize kianagy's features, alias our achievements and code wall of shame :)

  • Client client-server architecture, "multi-player" by design.
  • Custom communication protocol, based on actions and formal definitions of "environment state".
  • Custom Collision system support based on uniform spacing partitioning.
  • In-map transport system, it is based on the tree-like arrangement of the environment objects with relative positions.
  • Chat support
  • Basic combat system
  • Basic NPC (Non Player Character) support.
  • NPC's behavior is modeled using "script-able" Markov chains.
  • NPC-Player interactions over simply chat, based on "script-able" keywords definition.
  • NPC's basic combat support.
  • Custom .map support based on unofficial definitions. The parser was written using flex and bison. Its use on server side was to translate .map files to our custom uniform spacing partition binary files. On the client side for map loading.
  • Custom Octree library as part of the rendering optimization.
  • Custom md2 parser support, also based on unofficial definitions. Used for character model support, the code was based on a online example.
  • Custom library for Cell shading rendering support.
  • Some others I can't remember right now...

The character models were taken from planetquake
The map we used are the ones I still keep from my "mapper" career.

Our conclusions can be summarized on this video.

lunes, 15 de marzo de 2010

self.showOff(:university)




Right after I joined the University, I realized that I would not have to much time for game modding anymore. So I started to take my classes very seriously. I did not do much in the first years, The first 2 years it was basically pure maths, honestly I wish I had more maths, because I am still not so good at it.



I spent my free time learning how to use Linux and helping some gaming communities setting up their game servers and playing online games (Ohhhh, beware of the evil mmorpgs, the root of all evil!!! Just kidding). Actually its a good way to meet people around the world and learn English.



Theres a lot of things to change and improve concerning the current University education system in Paraguay, but I will focus on the good things. The best thing of my education was very rigorous evaluation system it had.



Most of the Computer Science assignments had very crazy exams where the students were suppose to solved very hard assignment related problems in a couple hours, from designing, implementing and calculating space/time complexity of algorithms (All in the same exam), creating new mixed data structures to solve typical computer science problems or maybe just random problems that the professor had at work (yes, creating and implementing included) or just to make formal probes of why randomly created Turing machines just beat you.



Anyways, I am very glad I had the chance to dedicate full time to this academic matters. Read a lot of great books, including Herbert Schildt C's Reference, Deitel & Deitel C++ Guide, Tanenbaum's Computer Networks and Modern Operating systems, The OpenGL Redbook, Carlo Ghezzi's Theorical Foundations of Computer Science, Russell's Artificial Intelligence: A modern aproach and many others including a lot of math books.



So I basically surfed over many Computer Science fields, year by year loving it more. There were plenty of projects I enjoyed so much working together with my colleagues, from writing a multi-player version of Stratego in C, implementing my own version of basically all common data structures, developing small projects using many programing languages like C, C++, Ruby, Python, C#, Delphi, Prolog and Haskell, solving a few of the Kernel Project for Linux Book, implementing classic data mining algorithm, writing an custom version of iptables--, a very reduced subset of C to Ruby translator, implementing genetic algorithms to evolve transition rules for cellular automatons (Paper, Spanish required) and even boring web applications.



The last 2 years I started teaching at the University as Professor's assistant, and had a lot of fun doing it, also went to a lot of conferences and participated in many free software festivals. But by far, the best I found during that time was a very few passionate, dedicated and inspiring professors and studies partners, to which I own most of my success.



domingo, 14 de marzo de 2010

self.showOff(:game_modifications)

Under the "GGO" and some other silly aliases and as I mentioned in my last post, my first passionate computer related work was to support Quake III (or derivate engines) game mods.

In almost of these game mods my job was to make good quality maps (levels, scenarios, or whatever else its called). Looking back I am still very proud of my work, considering all the limitations of Quake III, had to deal with very different fields (Programming, 2D art, 3D art techniques and Architectural principles).



My first project consisted on a Quake III modification called "Saviour of Strength" (the original web site is no longer hosted, but amazingly there are still a lot of content published in modding communities). Basically, it was supposed to be a player vs player combat game plus a few RPG elements, based on Dragon Ball Z anime series. Back then I did not understand the copyright concept, he he, I was thinking more like an "Professional Art Fan" creation.

Over the 4 years I worked on that project released more than 10 maps, some of them were never seen, other were featured on very popular websites like www.planetquake.com.



In the last years of my "Mapper" career I started or joined other projects such as "Rurouni Kenshin Redemption", another anime combat game and many others which names I can't even remember.

As I mentioned before, in the later 2003 I stopped all serious work, and started spending more time on university matters.



One of the most interesting aspects of this kind of work is that you never forget how to do it and even with years of inactivity you always come back with greater skills and ideas.



The tools I used were, GtkRadiant for the basic structure design and game internals, Terragen for the sky boxes, EasyGen for terrain generation and any text editor for the shaders and sometimes 3DStudio for fancy renders.