Category Archives: Tech

MEGA (Mundo Estrella Galicia) Sport Training (Kinect)

Disclaimer: This is a video preview of the published game. This video not shown the final state art.

3D Wire 2019

Details

Project: Estrella Galicia: MEGA Sport Training
Studio: Flying Beast Labs (Cateffects S.L.)
Genre: Sports, Casual
Platform: Windows, Kinect v2
Job description: Lead Programmer, Tool Programmer, Technical Artist
Technologies: Unity3D, .NET, C#, Git, Source Tree, Hercules Setup Utility
Website:
- https://mundoestrellagalicia.es/
- https://flyingbeastlabs.com/proyectos/mega-sport-training/
- https://flyingbeastlabs.com/3d-wire/

Credits

Lead Programmer, Tool Programmer & Technical Artist
José Miguel Sánchez Fernández

Gameplay Programmer
Diego Santiago Sanz

Producer & Game Designer
Carlos L. Hernando Lopéz

Project Manager, Music Composser & Sound Technician
Daniel Nuñez Martín

Art Director, 2D Art & UX Designer
Alberto de Torres Martínez

3D Art, Modeling, Rigging & Animation
Irene Arnaiz Lopéz

Producer
Cesar Piña Mudarra

Description

Lead Programmer and Tool Programmer for the development of MEGA Sport Training, an interactive experience for MEGA: Mundo Estrella Galicia museum, in A Coruña, Galicia, Spain.

My main task in this project was develop the entire game architecture, focused on modularize all critical parts of the project for ease maintenance, upgrade or deep-changes quickly, the creation of requested tools during the development, and supervising the work of a junior programmer, the person that was develop the 4 mini-games that compose the game (basket, football, hockey and rugby) and help me to integrate the Kinect v2 SDK in Unity and study how implement features like the advanced gesture recognition.

Other tasks that I colaborate was supporting the 2D and 3D artists as Technical Artist, optimizing all 3D assets and materials in-game (combining meshes, fixing materials setup in Unity, and advise the 3D artist, a junior profile, in some tasks involved with optimizing modeling and asset exporting), setup the lighting in all scenes and setup all post-processing effects to fit the limited requeriments of the target machine (an Intel NUC without dedicated graphics card) to achieve a good performance without lost quality visual look & feel.

3D Wire 2019

This same year, we make a variation for the 3DWire (https://3dwire.es/), an important spanish annual event of animation, games and new media that is celebrating in Segovia. Weird Games: Food Training is the new name of the game and have a little visual changes as replacing all sport things like the basket ball by a toaster or the hockey disks by spanish omelets, most of the work as rebranding and applied some gamification rewards for the event games.

The true challenge: Kinect 2.0, Windows 10 and beyond

Also of the difficulties recording custom gestures using the official Kinect SDK tools, implmenting a custom gesture system to avoid some issues with some gesture recognitions, and the many other related and technical issues, the true challenge to develop and maintain this project are the Kinect 2.0 + Windows 10 combo:

  • Kinect 2.0 has been discontinued by Microsoft in fall 2017 and removed support on Windows (drivers, tools, etc...) a few months after publising the tools for Kinect 2 for Windows (supported Windows 8.1 as last official version).
  • Never existed an official SDK for Unity, only a few outdated particular user implementations on the web for Unity 5.6 (we developed the game with Unity 2018.3.5). We using the only full implementation solution available and well documented by examples, that can be found in the Asset Store.
  • No all PC configurations supports Kinect 2 hardware. During the pre-production, we found that only 2 PCs in our studio are capable to run Kinect 2 without problems. Other PCs directly can't work, can't recognized the Kinect hardware. Seems the USB 3.0 in most of them has issues related with power supply or the drivers (in some cases, Kinect burned the AC Power unit on a couple of our PCs).
  • Kinect 2 hardware can't works on current versions of Windows 10. The last supported version is the build 1803 (April 2018 Update). The USB 3.0 drivers has many known issues and one of them affect to Kinect 2 USB connector. The solution initially seems very simple: using the build 1803, but...
  • In Windows 10 you can't full disable Windows Update services. And, later or soon, your Windows 10 will be forced to upgrade to latest version. In our case, disconnect the PC from the net is not a solution. The PC can not we unpluged from the net because need access to internet to send mails and send and read signals from an UDP server. Basically, the solution passed to reroute the all Windows Update known server address to localhost in the Windows hosts file, setup all Windows Update related services to manual and disabled it, and blocking the internal Windows folders related with Windows Update downloads and deployments.
  • The official Kinect 2 AC Power Unit not works on current PC configurations. One of the Kinects, supplied by the museum worked with the Surface 3 AC Power Unit instead of the Kinect official unit. For any reason the Kinect 2 official AC Power Unit not works properly on current PCs.

And the final boss...

But the true challenge was the final issue of the Kinect 2 + Windows 10 combo. At the final stages of the development and testing, we found the game sometimes was freeze without any reason! (very inappropiate for a museum experience).

After 2 weeks of deep debugging and testings in the source code of the Unity implementation of the Kinect SDK, I found that the reason of the game was freezing was the avatar recognition event in a driver level. It's seems that the outdated driver in Windows 10 has any internal memory leak or something related bug.

Because I'm not was capable to fix this, because is an internal driver bug and not a source code issue, I designed a little "trick" to able the game to catch the freeze state and reset himself. I developed a little program that works as a monitor instance of the game. A simple terminal program that run in fist place and launch a new instance of the game as child process. Basically the game instances comunicate with the monitor to tell that it's alive. When the game stop to send signals to the monitor, the monitor understand that the game is freezed, kill the freezed process and launch a new one.

For prevent the user noticed the game reseting process, as idea of Carlos L. Hernando, we empty the entire Windows desktop of icons and hide the task bar, and using the same game splash screen background as desktop background. With this, the user not see any stranger thing except that the game has return to the main menu screen.

P.D.: In a way to avoid several freezes and their resepective resets, I needed to reimplemented all avatar recognition logic system in the game to avoid conitnuous calls to native Kinect avatar recognition functions.

Argos: CICE MPV Project (Unity3D Master degree final project)

Details

Project: Argos: CICE MPV Project
Genre: 2.5D action-platformer, Unity3D game framework
Platform: Windows, Linux, Mac
Job description: Gameplay Programmer, Tool Programmer
Technologies: Unity3D, .NET, C#, Git, Source Tree, Argos.Framework (own Unity3D multiplatform framework)

Description

My final project for my Unity3D game development master degree coursed in CICE on 2017. A 2.5D cinematic action-platformer developed over a custom multiplatform framework (the true core of the project).

This project was developed while I was working on the porting to Nintendo Switch of Ginger: Beyond the Crystal in Drakhar Studio. During this period (3 months) I was working in the idea of creating a framework that ease the common tasks in a multiplatform development with Unity3D, like manage the input setup or the file system over the different operating systems or consoles. After finish my contract with Drakhar Studio, I was working on the playable part of the final project, the 2.5D platformer and how integrating the framework in his development. I made it in only 4 weeks.

The framework cover the following areas:

  • Input system:

    A single player oriented input system, based on Input Map assets witch defines actions and axes definitions for use in separate areas of the game like UI or player actions.

    This system is based on Virtual Axes that bring the posibility to define input based on keyboard, mouse and/or gamepad axes (sticks, DPads), and Input Actions to define actions like jump or shoot, using input from keyboard, mouse and/or gamepad buttons, DPad and triggers. Input Actions can managed from events, and both Input Actions and Virtual Axes can allow input rebind in runtime.

    This system nativelly support the popular game controllers like XBox 360, XBox One, PS4 and Nintendo Switch Pro Controller (on supported systems). The input system manages automatically a common map between different controllers, in a way to only uses a unique button list to setup the actions and axes. The system also allow the use of generic gamepads and uses a generic input map asset to setup the input map, also allow this setup in runtime.

    This system implement a custom Standalone Input Module and some custom components to bring full support on Unity UI components for UI navigation.

  • Multiplaftform file system layer:

    A file system layer to safe manage the basic file operations between Windows, Linux and Mac systems. The system manage a predefined paths to manage savegames, settings, screenshots and custom data folders on user document folder, and avoid errors on path formatting or creation/check the current folders.

  • Localization system:

    A simple localization system that allow to localize UI text elements with rich text formatting support. The system implements a simple component that manage the UI Text component content in realtime. For the project, this system was designed for only support English and Spanish languages.

  • UI components:

    A serie of UI components to bring some functionalities like doble click events, customizable text message events and UI input icon system to show text messages with keyboard, mouse or gamepad button or axis icon based on the common input map system implemented on the first point of this list.

  • Misc additions:

    Multipurporsal scripts and components with various ideas learned and implemented during this master degree on each practical excercise.

Argos.Framework, coming soon

Today, I'm working in this framework to pulished some parts and improved ones (Input System code and his editor inspectors) and rewriting others from scratch (file system, localization system and some UI components), and implementing new additions like XInput gamepad vibration support (with visual pattern vibration assets, to allow to design vibration patterns similar to the classic DirectInput Force Feedback patterns), GameJolt API integration (user session, trophies, leader boards and cloud storage) and more.

Other additions that I'm working is the XBox One support, via Universal Windows Platform, with XBox Live basic services (user session, user stats, leader boards and file storage). The goal of this is trying to unify this services with other like the GameJolt or Steam services (even consoles services like PS4, XBox One (not UWP) or Nintendo Switch) under an unique layer to simplify the development between platforms, the main goal of this framework.

Grey Infection

The original flavour of Grey Infection

Before the arrival of the Graphic Designer profile, we have already decided and closed the visual style of the game, a pixel-art style with clean aesthetics, using plain colors (black & white palette for the non-passed levels, and basic color palette for cleared levels). The original art was created by me, based on previous works for TLSA Project and used in White & World project.

The final visual style of the game is an imposed decision by the Graphic Designer because he was unable to work with the original style. The decision was not voted with the original creators of the project, Eduardo Millan and me. And also because we are running-out of the schedule (the Graphic Designer arrival in the last stage of the development, he wasted near of a month trying to adapt with the original style and we needed to be ready to publish the game in less of 2 months after this), we finally desist to use the original style in favor the current used, and finish the rest of development in time.

These is a some captures of the original prototype visual style of the game, the same style used for the Microsoft Dream Build Play 2011 entry:

Pre-Production video and Dream Build Play 2011

A couple of videos from the pre-production stage, mentioning a Grey Infection as succesor of White & World, and early preview of the submited version to Microsoft Dream Build Play 2011 contest, both before the Graphic Designer entered to the team:

Details

Project: Grey Infection
Studio: Undead Code Studios
Genre: 2D Puzzle-Platformer Adventure
Platform: XBox360 (XBox Live Indie Games)
Job description: Game Engine Programmer, Game Programmer, Technical Artist & VFX Artist
Technologies: .NET 4.0, C#, XNA 4.0, TLSA.Engine (own XNA Game Engine), Visual Studio Express 2010
Source code:
https://github.com/VisualStudioEX3/Grey-Infection
https://github.com/VisualStudioEX3/TLSA.Engine

Credits

Producer, Game Designer, Level Designer
Eduardo Millan - SiPoX

Game Engine Programmer, Game Programmer, Technical Artist & VFX
José Miguel Sánchez Fernández - [EX3]

Music Composer
Pablo Delgado - Guybrush Threepwood

English Localization
Cristina Pinilla Fernandez

Graphic Designer
Ruben Barroso Heredia (*)

(*) Disclaimer: The rest of the team and I, after the publication of the project and in the future, we are no longer related, supported or associated with this person, Ruben Barroso Heredia, and we are not responsible for their legal or illegal activities related directly or indirectly, with the video game industry or related business, including false professional experience accreditation or related training jobs in this area as teacher.

Description

Game Engine Programmer, Game ProgrammerTechnical Artist & VFX Artist for the development of Grey Infection for Xbox360 (XBLIG).

My first professional game developed in a game studio, and my first console game. A 2D Puzzle-Platformer Adventure, based on White & World, a Game Jam project in which some members of the team worked, and that you can found in this portfolio.

The game mechanic basically is destroy the enemies, in the correct order, to create or destroy parts of the level, to reach the exit point. The exit point can only be enable when the all enemies are eliminated.

The game was developed using an own XNA based game engine, TLSA.Engine, a newer version of my old game engine TLSA Engine (based on Visual Basic 6.0 and dx_lib32, an own game framework).

In addition to programming the game and the engine, other tasks where I been involved was VFX enhancement in the final art in scene, simulate some post-process effects, like the glitch effect, UI visual design of the main menu and their elements, several background live visual elements and effects in most of the levels, and guide the artist in how to prepare and optimized the final assets to use in the game.

Reviews

A few reviews in specialized spanish game blogs:

Pulpetes Forever

Details

Project: Pulpetes Forever
Genre: 2D Puzzle-Realtime strategy
Platform: Windows
Job description: Game Programmer
Technologies: .NET 4.0, C#, XNA 4.0, TLSA.Engine (own XNA Game Engine), Visual Studio Express 2010
Dev blog: http://ex3perience.wordpress.com/category/compo-cpes15/ (ES)

Credits

Producer, Game Designer, Level Designer
Eduardo Millan - SiPoX

Graphic Designer
José Zanni - Josepzin

Game Programmer
José Miguel Sánchez Fernández - [EX3]

Description

A project for the Game Jam in GameDev area of Campus Party España 2011. A game inspired in the classic Lemmings. The game was programmed with TLSA.Engine, a new version of my old game engine in Visual Basic 6.0 and dx_lib32 (an own game framework). This version is based in .NET, C# and XNA 4.0.

The restrictions of the Game Jam were: octopus, teleports and randomness.

TLSA Engine

Details

Project: TLSA Engine
Genre: 2D Game Engine +SDK
Platform: Windows
Job description: Programmer
Technologies: Visual Basic 6.0, dx_lib32 (own game framework), XInput
Languages supported: Visual Basic 6.0
Sources: https://github.com/VisualStudioEX3/TLSA_Engine_VB6

Description

A 2D Game Engine based on dx_lib32 Project, with the purpose of develop a 2D platform game like Flashback or Another World.

A little resume of their features in latest versions:

  • Component Oriented Engine, trying to simulate the XNA architecture.
  • 2D Graphic Engine, multilayer sprite based, with simple effect system based on Directx 8.1 fixed pipeline, applicable to individual sprites or to entire scene (the final scene are a transformable canvas with support for all sprite effects, position, rotation and scale transformations), implementing a sprite control point map system (similar as how DIV Games Studio implementing in his sprite system) to manage easily multiple textures and transformations in a nested object group (to create complex animations, based in multiple pieces, with independent sprite animations), simple camera system (with support to define multiple scene cameras, to switch between them easily using paths or animations with scales and rotations).
  • 2D Audio Engine, with support for basic realtime standard effects (non parametrizables), and spatial system to simulate distances and position listeners changing the stereo volume level of the sound effects, and a basic mutichannel mixer.
  • Basic Input System, based on actions, which can define multiple input (keyboard, mouse and joysticks or gamepads), and complete support for joysticks and gamepads, via DirectInput 8 and XInput 1.3 (for fully support XBox 360 Gamepads), with basic Force Feedback support (to simulate the XInput rumble system in compatible joysticks using constant force effect).
  • Basic Physics Collision engine, with multiple layer collision system, world partition areas, raycaster and force emitters (to simulate explosions or black holes forces).
  • WYSIWYG Level Editor with flow controls (play, pause and restart scene during the debug), scene physics designer, an audio areas designer (for applying effects and emitters) that uses the physics defined in the scene, and visual debugger.
  • Some tools in the SDK like the Input Editor to create profiles input files, with define actions and her input controls, to import in the game engine easily, and the Tile Studio, a simple but complete editor to define tile sheets and sprite sheets with irregular sizes, control point definitions, and animation sequences, with animation previsualizer.

The first versions of the engine development are from 2005 and 2006. The last version, reprogrammed from scratch, started development during the summer of 2009, and during until the last built, in summer of 2010.

This game engine is not finished, because the complexity to develop a project as this in Visual Basic 6.0. The game engine was used in few projects,  mostly a prototypes and gamejams.

Aquanoid (CP2K8)

Details

Project: Aquanoid (CP2K8)
Genre: Arcade
Platform: Windows
Job description: Game Programmer, Graphic Designer, Level Designer
Technologies: .NET 3.5, Visual Basic .NET, C#, dx_lib32 (own game framework), Visual Studio Express 2008, MS Paint (as level editor)

Description

A project for the Game Jam in GameDev area of Campus Party España 2008. This an Arkanoid game with altered mechanic: the pad/player float on water. The water level goes up every few seconds. The player dies if reach the block level or the ball touch the water.

The game defines her levels with small bitmaps images of 12x12 pixels, where the color pixel defines the type of block.

The restrictions in this Game Jam were: water, puzzles and comic style.

dx_lib32 Project

Details

Project: dx_lib32
Genre: Game Framework
Platform: Windows
Job description: Programmer
Technologies: Visual Basic 6.0, Win32 API, DirectX 8.1, OGG Vorbis
Supported languages: Visual Basic 6.0, Visual Basic .NET, C#, C++ (in theory, any language which can support COM/ActiveX technology)
Download: This binaries are 2.2.0 version. Last version, 2.2.1, is only available as source code:
- Development Kit (for development. Contains Compiled HTML documentation reference, Visual Basic 6.0 and VB .NET code samples and runtime dlls)
- User Redistributable (only runtime dlls for running any program or game developed with dx_lib32 2.2.0)
Source code:
 https://github.com/VisualStudioEX3/dx_lib32

Description

Game framework or API (or also wrapper) that enable to access the power of DirectX APIs to Visual Basic 6.0 developers. A simple framework composed of 5 specialised classes: a graphics class, an audio playback class, a game input device manager class, a video playback class and a helper class with a set of functions to cover multiple needs.

It's compiled as an ActiveX DLL, with a minimum dependency libraries (the Visual  Basic 6.0 runtime, the ActiveX library to connect with the DirectX 8.1 API, and the OGG Vorbis libraries), included in the setup, and it's compatible with any version of Windows, from Windows 98 to the current Windows 10 (desktop version only) and future Windows with Win32 and DirectX 8.1 support (today, it's working properly on Windows 10).

The project started development in early 2001, under DirectX 7 API (changed to DirectX 8.1 in 2002). The first functional version was released in 2004, with only a set of program samples as documentation reference and a forum to consult doubts. The second version was released in early 2006, with a full set of program samples, in Visual Basic 6.0 and .NET formats, and with a full API reference documentation in Windows Helper format. The final version, after several bugs fixed and new functionalities, was released as open source project in GitHub in middle of 2012.

Some user projects made with dx_lib32