top of page

Game Download

Crusade QA

Crusade is a third-person action RPG inspired by Souls-like design, featuring complex combat mechanics, AI behaviors, level exploration, and a variety of player systems. Throughout its development, I applied a rigorous QA testing approach to ensure every system in the game worked as intended resulting in a polished, immersive experience.

Technologies used

image.png

Unity

image.png

C#

image.png

GIT

image.png

Trello

My QA Approach

As a solo developer, I integrated QA testing throughout the entire development cycle. My work spanned across all areas of the project, including:

  • AI Behavior Testing: Ensuring enemies patrol correctly, engage in combat appropriately, and respond to player actions.

  • Combat System Debugging: Validating damage calculations, blocking, poise breaking, and player input buffering under various gameplay scenarios.

  • Level Navigation and Interaction: Testing collision, camera angles, environment clipping, and player interactions like opening doors, elevators, and activating save points.

  • UI and Inventory Systems: Verifying item pickups, inventory management, equipment swaps, and ensuring data persistence across saves.

  • Performance Optimization: Monitoring FPS, identifying bottlenecks, and stress-testing AI and player systems under load.

For each bug or issue I encountered, I documented it in detailed bug reports outlining reproduction steps, expected vs. actual results, severity, environment details, and proposed solutions. I also used debug logs, screenshots, and video captures to communicate findings clearly.

By incorporating a QA mindset into my development process, I ensured that every feature not only worked in isolation but also integrated seamlessly into the overall game. This approach reflects my commitment to delivering a polished, high-quality experience a key skill I bring to any QA or game development team.

Example: AI Patrol System Debugging

The AI enemy character fails to perform its patrol behavior correctly. Upon game start, the AI either remains idle at the first waypoint or only moves once before stopping entirely. The patrol loop is never fully executed. This prevents intended enemy behavior, significantly impacting game difficulty, level pacing, and player immersion.

Bug Details

Field

ID

Title

Reported By

Date Reported

Environment

Engine/Version

Game Build

Severity

Priority

Reproducibility

Details

BUG-002

AI character does not patrol as expected

Joseph Merrick

May 29, 2025

PC (Windows 11)

Unity 2021.3.10f1

0.1 (Prototype) / AI_TestBuild_0529

Major (blocks core AI functionality)

High (core gameplay loop affected)

100% (Occurs every time the scene is run)

Reproduction Steps

Steps to Reproduce

  1. Open the Unity project and load the TestScene_AI_Patrol scene.

  2. Place the AI character prefab in the scene (if not already present).

  3. Ensure the AI has the AICharacterManager component and an assigned list of waypoint Transforms (visible in the Inspector).

  4. Play the scene.

  5. Observe the AI’s behavior for 30–60 seconds.

Debugging & Problem Solving

While developing the AI patrol system for Crusade, I encountered a persistent issue: AI characters remained in the Idle state and failed to begin their patrol, even when assigned valid patrol paths.

The Problem

Despite having patrol logic defined within the IdleState scriptable Object and a valid AIPatrolPath assigned through the spawner, AI characters were stuck in the Idle state and did not begin moving along their patrol routes.

image.png
image.png
image.png

Investigation

I began by adding breakpoints and Debug.Log() statements to the Patrol() method within IdleState to trace the logic flow:

Check

Is IdleStateMode set to Patrol at runtime?

Is AIPatrolPath null at runtime?

​Is the AICharacterSpawner assigning patrol paths correctly?

​Is the AICharacter moving to the assigning patrol paths correctly?

Outcome

Outcome that is wanted

​Yes

​Yes

no

no

yes

yes

no

yes

Before & After: Code Fix

Previously, the patrol AI wasn't moving correctly between points because the isMoving state was being unintentionally overridden. The AI would briefly detect a target or evaluate its state and then reset its movement status, leading to the NavMeshAgent not moving properly or getting stuck. Specifically:

  • The code inside AICharacterManager.ProcessStateMachine() was always checking for combat targets first and setting isMoving based on combat movement logic.

  • This overrode the patrol logic in IdleState.Patrol()—even when the AI was patrolling, the combat check would interfere and stop movement.

Before

Before

After

After

  • Facebook
  • Twitter
  • LinkedIn

©2021 by Joseph Merrick. Proudly created with Wix.com

bottom of page