top of page

WIZARD WALL BALL

ROLE

GAME DESIGNER AND DEVELOPER

DESCRIPTION

The lost magic of Wizard Wall Ball... once mastered, legend says that your name shall be forever etched on the Grand Scroll of HighScore. Only the most powerful and persistent of magic users could achieve this feat. Do you have what it takes?

​

Wizard Wall Ball is a magical breakout inspired game filled with magical power-ups, fun sounds, and animations. It has that classic brick breaker feel with a unique twist; There is no way for the ball to leave the screen.  In Wizard Wall Ball you must dodge the Ball and Incoming Asteroids while attempting to destroy all of the bricks within each level. There are unique themed levels as well as challenges for the player to complete such as force fields and switches that the player must shut off in order to break the bricks within. This game uses a point based life system which gives the player an extra life each time a point threshold is crossed. At the game's core it's meant to be relaxing and challenging, enticing the player to take their time and play with purpose. 

YEAR

2023

GENRE

2D Arcade Classic

PLATFORM

PC

How I Created This Game

 

Wizard Wall Ball was created using Unity and Visual Studios (C#) for scripting. To create this game I first started with the ball and paddle, I wanted the reflection to feel just like I'd remembered from Brick Breaker. The way I did this was to place simple logic on the ball so that it would look for two things. If the ball is bouncing off the paddle it will only use the speed variable and a call to a function within the paddle to decide which way to reflect. If the ball is bouncing off any other object it will take into account the angle that it was moving as it collided and reflect that angle on the way out so that it bounces off walls similar to a pool ball on a pool table. The paddle holds code which calculates the center of itself and then the distance to each edge on the X axis from that central point. When the ball bounces off the paddle it takes into account where the ball hits within that range between the central point and the right or left edge and will reflect the ball at a greater angle if it's closer to the edge and a lesser angle if its closer to the center. The bricks within the game contain a script which checks for the ball or fireball spells which will destroy the brick and give the player 1000 points in return.  The bricks also contain a hit factor which allows the number of hits before destruction to be set and for the sprite to be changed if the brick should look damaged after the first hit. The bricks also work hand in hand with a scoring system which utilizes PlayerPrefs to save the Score and Number of Lives between scenes and can be triggered to be reset upon a Game Over occurring. 

​

There are unique power-up's that work with a spawn script. The spawn script can set any brick within the scene as the trigger to release whichever power-up is set to spawn as the brick is destroyed. This script also contains X and Y min and max limits so that I was able to spawn the powerup within a random location inside of the player movement zone as the brick is destroyed. 

​

​

​

Power-ups

 

Fireball - When triggered the player will shoot a projectile fireball once per second for ten seconds. The projectiles each contain a script which spawns the projectile with a small sound and makes sure that the projectile is destroyed on collision. 

​

Duplicate - The script looks for the position of the ball and creates a duplicate of the ball at that location and ensures that it starts off in a direction moving away from the player so that it can never spawn and shoot strait toward them. The duplicate of the ball is an instance which contains the same logic as the original ball so it acts as it should once spawned. 

​

Speed Ball - This script actually calls to a function within the ball which starts the speed up process. Then uses and Enumerator/Co-Routine in order to set the ten second delay in which the ball will maintain its increased speed before calling to another function within the ball which will return it to its original speed which is set within the start function. 

​

Asteroid Storm - This script uses an X and Y min and Max Value which allowed me to create a zone above the game screen which will spawn 1 of 5 random asteroid prefabs each with their own set speed within random location inside of the zone and propel them toward the player. This script also uses an Enumerator/Co-Routine in order to speed up the spawn rate of the asteroids for a certain duration before returning the rate to normal. 

​

Shield - This script triggers an animation loop which I have set so that it looks like the player is creating a shield.  Simultaneously the player enters a state of invincibility which causes the player to be able to take one hit without dying. When they take the hit by either asteroid or ball, the players invincibility is set to false, the animation is allowed to release from its loop and continue back to normal, and a sound is power down sound is player to signify the shield has been lost. The way the invincibility is set is that when the player picks up the shield power, the invincible bool is set to true. Within the Death function which is called when the player is hit by a ball or an asteroid it first always checks if the player is invincible, if they are then a return command is called and invincible is set to false leaving the player vulnerable but alive.

​

​

​

Brick Shield Overlays and Generators

​

Brick Shield Overlay - I created this asset in pixart. It's an electric shield image which can be placed over top of bricks within the level in order to keep them safe from the ball while they're in tact. These shields are all marked within a shield layer so that they can be easily found and destroyed in one swipe as the Shield Generator is destroyed. 

​

Shield Generator - I created this asset in pixart. This is essentially a square sprite with a trigger collider which looks for every object within the Shield Layer and destroys them and itself any time that the ball collides with it. This allows for a challenge where the generator can be placed in such an area that it would force the player to strategically hit the ball toward that location

​

​

​

Scoring and Life System

​

This system works using PlayerPrefs to save certain integers between scenes. The script takes into account the score which is set by the destruction of bricks. Each time the player gains 65,000 points they are rewarded with another life. The lives are set so that the PlayerPref value is effected as a death occurs and as a life is gained. If the player reaches 0 lives they are sent to the Game Over Scene which asks if they would like to continue and utilizes UI buttons with scripted logic to either send the player back the scene one if they choose to retry or to quit the application if they do not wish to try again. The Score PlayerPref value is also set to be reset to zero if the player is sent to the Game Over scene so that if they do choose to retry, it will be starting at a score of zero again. 

​

​

​

Animation and Sound

​

I've created all of the animations within the game by using free sprite sheets, cutting them, and creating animations as needed for various purposes within the game. I've also created the Animator Controller and all of the logic within. The controller uses triggers and bools to determine which animation should be playing at what time and the bools and triggers are all called at proper locations within the necessary scripts so that the animations will play correctly. I also import free sounds to the project so that alongside visual feedback the player is also receiving audible feedback as to what is happening. 

​

​

​

UI

​

I enjoy working with UI and had fun with the Main Menu and Pause Menu of this game. The Main Menu features a cheese burger style button spread with options to see the credits, game information, or to quit. The play button uses reflection code similar to the ball as it bounces off walls and bricks, it also uses the X and Y min and max values to set an invisible boundary so it looks like its bouncing at the edges of the screen. This movement was inspired by the old DVD Screen Saver logo motion for many older DVD players. 

The Pause Menu features some fun elevator themed music and a button which bounces up and down within Y min and max values as to simulator elevator movement. 

​

​

Planning

​

For all of my games I currently use Trello as a way to create lists for myself with tasks which are either; To Do, In Progress, Testing, Bugged, or Complete. This allows me to keep track of everything I want to do and set a time schedule so that I don't get side tracked from what I'm doing or loose track of where I am. I use Google Draw to Create Info Panels which can be seen within the game Pause and Main Menu.

​

 

​

​

*** I'm currently iteration upon this game as I would like for this to be my first monetized game on Steam. I will edit the creation notes as needed once finished. ***

​

​

bottom of page