CPSC 4160 – Covert Wizard
Nicholas Jordan
Game Description
Covert Wizard is a top-down stealth-style game set in a fantasy world where the player controls a wizard who must defeat monsters to save the people of the land. However, the soldiers fear wizards, so the wizard must avoid them even as he fights to save them. Players must move quickly and carefully to evade both monsters and soldiers alike.
The objective of Covert Wizard is to defeat all of the monsters in each of the three levels without being defeated yourself. This is done using the wizard’s fireball spell as a reliable projectile. The monsters themselves will obviously attack you, but you will also be attacked by soldiers who you cannot defeat (the wizard is trying to save them, after all). In order to survive, you must evade enemies by simply breaking line of sight or using an invisibility spell.
Game Mechanics
The Wizard can attack monsters by shooting a fireball. This attack has a significant cooldown, leaving you vulnerable if you miss a shot; the player must aim carefully.
Monsters and soldiers will chase the player if they can see them. The simplest way to avoid detection is to make sure there are obstacles between you and your enemies.
If this isn’t possible, The Wizard has access to an invisibility spell, which renders him undetectable for a short time at the cost of his magic power, which regenerates while the spell isn’t being used.
Technical Description
The technical manipulation of the entities in Covert Wizard is done using Pygame’s Rects and the associated functions. The player and the enemies are Pygame Sprites, which each have a Rect as a member. Line of sight is calculated by drawing a line from an enemy to the player, and if that line intersects with any rectangle of wall collision, the enemy’s line of sight is blocked.
The game state is tracked by a global state variable, which the game uses to determine what to draw to the screen and how to interpret player input. The four states are “title”, “level”, “victory”, and “game_over”. For example, clicking a level button on the title screen transitions from the “title” state to the “level” state, and defeating all the enemies in a level transitions from the “level” state to the “victory” state.
The camera works by applying an offset to the blit position of sprites that should be in a different place based on camera position. This offset is currently directly tied to player position, but it could be made to work differently.
Controls
Game Limitations
Future Work
The number one priority for future iterations of this game would be improving the enemy behavior algorithms to make them more dynamic and interesting. Next, the player character could be given more abilities, such as more attack spells that work differently from the fireball. It could also be interesting to add a larger variety of level objects, such as traps or power-ups.
Game objective
Game Screenshots
Covert Wizard is played with a keyboard and mouse. As is standard for many games played with a keyboard, the player moves with the WASD keys. The player can aim their fireballs with the mouse and fire with left click. Holding left click will shoot another fireball as soon as the cooldown ends. Holding right click will use the wizard’s invisibility spell while draining magic, displayed in the top left of the screen. If the player runs out of magic completely, they won’t be able to reactivate the invisibility for a few moments while their magic recharges.
Many of my game’s limitations probably come with my lack of experience with the tools used. This was not only my first time using Pygame, but Python as a whole. Python wasn’t super hard to pick up considering my experience with C and Java, but there were a few difficulties. It was also my first time using Photoshop to any serious extent. My unfamiliarity with these tools, and also with the game design workflow as a whole, caused me to make choices early in the game’s development that reduced my efficiency later down the line.