Bomberman-OverlordEngine-x64
README.md

Bomberman_OverlordEngine_x64

Bomberman Blast! Remake (DirecX11, C++)

Wii File Formats Research

I delved deep into romhacking & emulation forums and found out about the intricacies of the Wii file formats, giving me the tools & ability to understand and manipulate the specific data needed for this project. This specific game was never documented thoroughly so I had to go through some trial & error as I explored the assets structure.

Animation Repair in Maya

During the assets export process I encountered several animations that were not behaving as intended, not looping correctly or containing incorrect rotations on some bones due to bone scaling. Using Autodesk Maya, I manually fixed many of the animations and remade a few simple ones from scratch in Maya (Flowers animations), as well as animated some assets by code using solutions such as sine waves (Bushes squishing, Butterflys flight).

Pixel Shader's clip() Function

Draw order situations can often become complex, especially when transparency is involved. A prominent example of this in my game was with the bushes. To solve the issue, I utilized the clip() function of the pixel shader. This function allowed me to effectively manage complicated transparency draw order situations, ensuring that each bush was rendered in its correct order without any visual artifacts, against its own submeshes as well as other bushes.

Animation Blending

Incorporating smooth transitions between animations is crucial for a natural game experience. For this, I implemented an AnimationBlender class, designed to manage and execute seamless transitions between animation clips. Here's a more in-depth look into the technical aspects of it:

  • Initialization: The class is initialized with a reference to a ModelAnimator. This animator handles the current animation state, and the blender utilizes it to transition from one animation to the next.
  • Starting a Blend: When transitioning to a new animation, the StartBlend function is invoked. It stores the current animation clip and its progress, marking the beginning of a blending phase.
  • Blend Update: As the game progresses, the Update function ensures that the blending happens smoothly over time. It calculates a blend factor based on the elapsed time and the predefined blend duration. By using this factor, the function then interpolates between the ending frame of the previous animation and the starting frame of the new one.
  • Interpolated Key Retrieval: The GetInterpolatedKey function fetches an interpolated animation keyframe based on the given time. It determines the two closest keyframes (before and after the given time) and interpolates between their bone transforms.
  • Blending Completion: Once the blending process surpasses its designated duration, the Update function sets the new animation clip as the active one in the animator, ending the blending phase.