Skip to content

Enemies user testing and test plan

manavvbahl edited this page Sep 13, 2021 · 1 revision

Purpose

For Sprint 2 we mainly put our enemies on different tracks, and different tracks will have different enemies. Our goal is to give the user a real feel for what the enemy is doing at this stage and give feedback.

Process

  • Run and show the user what we did in Sprint two
  • Introduce the concept of the game to the user
  • Introduce the user to the gameplay
  • Let the user experience
  • In the process of experience let the user say their real-time feelings about the game and enemies
  • Complete the experience and give feedback
  • Conduct interviews with users

Key questions we asked were

  • How do you think enemies performed in the game?
  • Do you think the enemy image conflicts with the overall style of the game?
  • Do you think the enemy's actions are justified or make sense?
  • What do you like/dislike about them?
  • Is there anything confusing about how the enemy works? (If so, in which section?)
  • What changes to enemies do you think would benefit the experience?

Result

User1

  • Overall, the enemy looks good.
  • There is no conflict with the overall style because they are pixel style, and the colour matching is also more harmonious.
  • The enemy is moving too fast. Enemy movements are easy to understand and need to be avoided.
  • Think enemies ate a little bit too small, and in fact, the Player is too small to see the details. It would be nice if we could zoom in on the whole thing.
  • Little confused about the enemy moving back and forth. Maybe they could disappear on the runway? Like being beaten by a player?

User2

  • Very good, the overall style is more harmonious, although it is not perfect to play, but feel the finished product will be very interesting.
  • The shape of the enemy does not conflict with the style of the game, and the colour and shape feel good.
  • Enemy features are also easier to understand and currently not too difficult to play. It's just monotonous.
  • Enemies might be able to add a little extra skill, such as not just affecting the player's health?
  • I think the idea of enemies coming in separate runways is good, but the number of enemies is a bit too high. Multiple enemies overlap as they appear and move towards the player. Can reduce the number of enemies.

User3

  • It's fine. There's nothing wrong with it. Styles don't clash, colors don't clash.
  • The gameplay and the way the enemies attack are well understood, but not yet perfected. Look forward to the finished product.
  • The enemies are small, but they look more sophisticated this way. Size doesn't really matter.
  • Enemies are too one-dimensional in appearance and behaviour, maybe something else can be added. For example, a boss appears after how many enemies the player defeats, or a boss appears after a certain amount of time. Bosses can be bigger than enemies, have more skills and are harder to defeat.

User4

  • The overall style and design are good, but the size of the characters is too small to see the details of the characters.
  • The enemy movement and gameplay are easy to understand, but not very playable and the interaction is too one-dimensional.
  • But the style and design are great, and the pixel style is fun.
  • Some enemies only make it halfway down the runway and then come back, with no interaction with the player, no way to engage in combat or other interactions. Maybe it would be better if the player could move forward or if the map could move but the enemies were relatively stationary?

Conclusion

Overall, user feedback suggests that it shows our design style and appearance are something to which users can relate to. But they also suggested many improvements based on the movements of the enemy character. We will analyze and discuss user feedback and iterate on our design in Sprint 3 based on it.

Test Plan

The document describes the test plan for the main classes and methods used for the enemy feature.

A CreateBaseNPC class to be used as a base entity for littlegreen and ghost class entities. Below is the class code for testing.

/**

* Creates a generic NPC to be used as a base entity by more specific NPC creation methods.

*

* @return entity

*/

private static Entity createBaseNPC(Entity target) {

  AITaskComponent aiComponent = new AITaskComponent()

       `.addTask(new WanderTask(new Vector2(30, 0), 0f))`

       `.addTask(new ChaseTask(target, 0, 0, 0));`

Entity npc = new Entity(Entity.Type.GHOST)

       `.addComponent(new PhysicsComponent())`

       `.addComponent(new PhysicsMovementComponent())`

       `//.addComponent(new ColliderComponent())`

       `.addComponent(new HitboxComponent().setLayer(PhysicsLayer.NPC))`

       `.addComponent(new TouchAttackComponent(PhysicsLayer.PLAYER, 0f))`

       `.addComponent(aiComponent);`

// PhysicsUtils.setScaledCollider(npc, 0.9f, 0.4f);

return npc;

}

A CreateBaseNPC1 class to be used as a base entity for the ghostking class entity (Dragon - Boss Enemy ). Below is the class code for testing.

private static Entity createBaseNPC1(Entity target) { AITaskComponent aiComponent =`

     `new AITaskComponent()`

             `.addTask(new WanderTask(new Vector2(50f, 0f), 0f))`

             `.addTask(new ChaseTask(target, 0, 0f, 0f));`

Entity npc1 = new Entity(Entity.Type.GHOSTKING)`

             `.addComponent(new PhysicsComponent())`

             `.addComponent(new PhysicsMovementComponent())`

             `//.addComponent(new ColliderComponent())`

             `.addComponent(new HitboxComponent().setLayer(PhysicsLayer.NPC))`

             `.addComponent(new TouchAttackComponent(PhysicsLayer.PLAYER, 0f))`

             `.addComponent(aiComponent);`

//PhysicsUtils.setScaledCollider(npc, 0.9f, 0.4f);

return npc1; }

Then we test the spawn() methods for each class responsible for spawning the enemies from the rightmost side of the map layout and move towards the player.

private void spawnGhosts() {

// GridPoint2 minPos = new GridPoint2(0, 0);

// GridPoint2 maxPos = terrain.getMapBounds(0).sub(2, 2);

   `for (int i = 0; i < 5; i++) {`
       `Entity ghost = NPCFactory.createGhost(player);`
       `spawnEntityAt(ghost, NUM_GHOST, true, true);`
   `}`

}

NUM_GHOST responsible for returning the correct coordinates of the lane from the GridPoint2 class.

private void spawnLittleGreen() {

// GridPoint2 minPos = new GridPoint2(0, 0);

// GridPoint2 maxPos = terrain.getMapBounds(0).sub(2, 2);

   `for (int i = 0; i < 5; i++) {`

// GridPoint2 randomPos = RandomUtils.random(minPos, maxPos);

       `Entity littleGreen = NPCFactory.createLittleGreen(player);`

       `spawnEntityAt(littleGreen, NUM_LittleGreen, true, true);`
   `}`

}

Num_LittleGreen responsible for returning the coordinates of the lane from the GridPoint2 class.

private void spawnGhostKing() {

// GridPoint2 minPos = new GridPoint2(0, 0);

// GridPoint2 maxPos = terrain.getMapBounds(0).sub(2, 2);

// GridPoint2 randomPos = RandomUtils.random(minPos, maxPos);

   `Entity ghostKing = NPCFactory.createGhostKing(player);`

   `spawnEntityAt(ghostKing, GHOST_KING, true, true);`

}

GHOST_KING responsible for returning the coordinates of the lane from the GridPoint2 class.

Table of Contents

Home

Game Design

Player Health System, Scoring System & Game Over
  • Enemies

Enemies
Enemies testing and testing plan
Player Interaction Sprint1 & Sprint2
Player Interaction Sprint3
Player Interaction Sprint4
Map contents Sprint1-3
Map contents Sprint4

Game Features

Game Engine

Getting Started

Entities and Components

Service Locator

Loading Resources

Logging

Unit Testing

Debug Terminal

Input Handling

UI

Animations

Audio

AI

Physics

Game Screens and Areas

Terrain

Concurrency & Threading

Settings

Troubleshooting

MacOS Setup Guide

Clone this wiki locally