Neon lights glow through the science of excited atoms. When electricity passes through a sealed tube of neon gas, electrons jump to higher energy levels. As they return, they release energy as vibrant light, creating dazzling displays in cities worldwide.


General Software


In this section I will talk about some of the projects that I have conducted in the software development field. These projects are directed to show efficient and robust software with good design and a solid architecture that follows certain rules to achieve the goals that they are directed to. Most of these applications are embedded in pipelines that have been developed from scratch in C/C++, using OpenGL and Microsoft Visual Studio.


Chip-8 Emulator


A CHIP-8 emulator is a program that replicates the functionality of the CHIP-8 virtual machine — a simple, interpreted programming environment developed in the 1970s for early computers like the COSMAC VIP. The emulator allows modern systems to run classic CHIP-8 programs, most of which are small retro games.

For this project I programmed from scratch a Dissasembler and Renderer in C++ that decoded information from and into hexadecimal, while dealing with the small amount of memory that a CHIP-8 possessed. These types of emulators usually had 16 assembly-like operations that played with registers and bits to make good use of the few resources they had. Following a series of tests provided by my instructor I adequated the emulator to the usual standards and successfully emulated several ROMs such as br8kout, flightrunner, snake or spacejam.

SIMD Sobel Operator


SIMDSingle Instruction Multiple Data is a tool with which we can parallelize work. As its name dictates it allows the programmer to apply a single instruction to multiple pieces of data (up to vectors of 4). This means that we can optimize the time of work in certain cases.

On the other hand a sobel operator is an algorithm widely used in computer graphics to detect edges of photos based on changes of depth, normals or colours in screen space.

Since we have to deal with several pixels that don’t have anything to do with each other it is perfect to use SIMD.

Local Networking Application


During the previous stages on this topic I worked with both TCP(Transmission Control Protocol) and UDP( User Datagram Protocol) to pass certain tests conducted by my instructor. I developed four protocols to see the differences that both granted and after that we decided to use UDP for this real-time application.

While TCP is much safer than UDP and ensures that all messages arrive in the proper order, it is not sufficiently fast. In a real-time application we can not afford to stop and wait for a message to be resent or for it to be acknowledged, thus TCP gets totally discarded. UDP on the other hand ensures nothing and acknowledges nothing, and precisely because of that its faster.

Using an UDP custom protocol I modified an already existing application and made it function in multiplayer with up-to 4 instances. Using LockStep a server was created to keep track of all the stats either from the users or the asteroids.

A* Based AI


During this project I worked with DirectX10 to create an environment that succesfully represented the behaviour of an optimized A* agent, to search and find the shortest possible path from point A to point B.

For this algorithm I followed the typical approach of open-closed list in which distances were evaluated with different selectable methods: Euclidean, Octile, Manhattan, Chebyshev

In the same way I programmed several optimizations like Rubberbanding or Smoothing that allowed to create a more straightforward, smoother path.

Behavior Tree


During this project I worked with Finite State Machines(FSM) in order to create a complex behavior tree for several agents that together comprised an interactive scene.

In my case I chose to create a scenario that emulated College Stands for recruiting, and created several agents that worked as Director, Students, Parents and Recruiters. Each one of these had different behavior trees that made them act differently.

Enemy Agents: Hide and Seek


For this part of the pipeline I added an enemy agent that followed certain patterns of visibility, recognition and propagation to emulate the game hide and seek.

With a visibility threshold and certain sound propagation the enemy was capable of following the player even when lost. Using techniques such as per-tile visibility, dual propagation or per-tile opennes I created a controlled environment in which the player could have a fun time just playing around with a quite complete AI agent.

Football AI: Tactics and Plays


For my final project in AI for games my team and I designed a way in which a football team would work following certain rules and trying to score a goal in the contrary team. For more information on the matter I redacted a report that extensively explained the details on the matter