programming

GitHub Repositories - my projects code are hosted there

BitBucket Repositories - there too, but only privates for now..

My Game Engine (this is outdated)

Sonna the Hooker

[Game Engine, C++, Cyberpunk Game Jam]

**Check updated version:

**

About the first version:

Game developed in 10 days for the cyberpunk jam hosted by itch.io.

Another game made with my game engine! <3. Those where some extreme 10 days! Procrastination not allowed!

I can't believe how productive I managed to be in those 10 days, with my own engine! Totally worth the workload!

Cool reusable content produced during the jam: a tile collider component, a tile collider system, a tile map layer, a paralax layer and a distance joint (for the rope).

I will still be working int this game, polishing graphics and mechanics.

Mentle - Memory Game

[Game Engine, C++, D3D11, UDP, XAudio2 ]

Yay, my game engine! Finally! After having tried the framework (the one I used on the Ray Tracing), and them checking some ideas with the Collectors AI, I started to gather lots of specific details to build an engine, this time for real. This one is going pretty far.

The game is a memory game (find the equal pairs) but full of extra gameplay rules.

The idea is to have a campaign mode, but still didn't happen, the single player mode right now is just a random (boring) match, the multiplayer is the mode that is cool.

The cards and effects can be created/modified to a lot of extents by editing the gfig files.

The multiplayer can be online (P2P, requires port forwarding) or on the same machine.

Collectors AI

[C++, win32 console app, AI, Machine Learning (Reinforcement Learning),

Influence Maps, A*, Flood Fill]

That project was quite something to me. Learned a lot. Starting by the fact that I decided to have a minimalist game engine to build the AI stuff onto. A console game engine..yep.

This was the one that totally opened my eyes to the "inheritance is evil" and "prefer component based architectures instead". Even being a purposely simplistic engine, it was enough to me realize that inheriting from game objects and adding new stuff each new hierarchy level has no chance of scaling well.

Lots of techniques used, influence maps to detect hot spots, flood fill to create the influence maps, A* to go to a 'collectee', and Reinforcement Learning to train the agent.

There's 2 phases, the first phase the agent just acquires experience, recording logs of matches (the memory). On the second phase the agent uses the memory, compares with current situation and decides which action to take. More details on the README.

The actions it may take is either go to the closer 'collectee' or go to the most hot, based on current agents position, distance and "hotness".

Ray Tracer

[C++, D3D11, Ray Tracing]

I loved this project, it was fun to code and awesome to see images being created from scratch.

The app reads a scene description text file and traces it to an image, displaying it on the screen and saving the image to file.

The Ray Tracing specific code is really clean, but Im using a old frame work of mine to display the image, so Im putting only the ray tracing code here.

2D Isometric Infinite Voxel World

[C#, XNA, Procedural Map (Perlin Noise), Isometric Depth Sorting]

I've always been a fan of 2D isometric stuff, and the procedural voxel world fever got to me, I needed to give it a try.

I didn't implemented the Perlin Noise myself. Im using LibNoise.xna, a library by Big Black Block (which is a port of Libnoise).

I didn't worry about performance, my initial idea was to compute just the next row/column/height (the next visible 'wall') each time the character stepped into a new voxel (into a new wall), but ended up generating the entire visible cube of voxels each time the character steps out of current voxel..it runs fine.

The sorting for the correct drawing of the isometric voxels is done based on the distance from the camera (which is not perfect).

The collision detection simply check the 8 corners of the cube. Things are treated as normal 3D, just the drawing code deals with the iso thing.

The world is infinite in all 3 dimensions, not only xz.

The funny thing about it is that you never get stuck into a dead end! You can go forever and never have to go back, I wasn't expecting that.

Unity Projects at Learn4Fun

[C#, Unity]

At Learn4Fun I worked as a programmer in many different duties - custom editors and inspectors, GUI/HUD, gameplay, worth mentioning the mesh morphing used for facial animations, and whatever showed up.

We developed games which teaching purposes. Clients we worked for include O Boticario, Ford and Abbot Vascular.

- I did NOT make any art at Learn4Fun-

InDaHole! Minigolf 2D

[Objective C, iOS, Cocos 2D, Box2D]

This is a game made with cocos2D, not much to say, except that I don't own an iOS device, and can't record any decent video of it (the video is recorded from a mac virtual machine, so bare with the frame rate).

Sudoku

[C++, win32 console application]

My first programming project, after learning C++ I decided to make a start to end project. I though it would be really simple, till realize there's forums dedicated solely to Sudoku programming.

The project is really naive, a Sudoku class does everything (the only class in the project).

My algorithm to create the grid is a (extremely) brute force one: lay out all the numbers on the grid, shuffle, and then start to fix. This approach presented a problem that I remember find really hard to figure out. The thing is, there's some configurations that the grid will get after start fixing that will get it into a loop (a fix that recreates a fault in a previous fixed part of the grid, the fix will be applied again, till the same fault be generated later on, creating a loop ). My fix to that was simply amazing =D, well, if you're stuck too much time trying to fix you probably stuck on one of those loop condition, restart it! \o/ yay! Well, it works.

Another thing I found out about Sudoku is that real Sudoku games have only ONE possible solution given the first given numbers..I wander how much of those we see in journals/magazines really worry about that. My algorithm obviously don't care about it, since I didn't even know about it at the time.

Given the full filled valid grid, I pick the initial numbers to be displayed based on the options.

Of course, when all spaces are filled, it must check if the grid is valid, and not just compare with the initial full grid, as I said, its not a one solution algorithm.

It saves the best score on file. The 'solver' on the options was never implemented. Its a win32 console application, I did it when we still had full-screen console on Windows, so its not as 'beautiful' anymore T_T.

Use the arrows to navigate on the grid. Press F1 to restart a game and ESC to bring the pause menu.

ddg