Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
31263 / 32004 Introduction to Game Development
Assessment 3 and 4
Recreate a Classic Game
Overview:
Assessment 3 and 4 are two parts of a linked assessment. In these assessments you will recreate a
specified classic Atari-era game by developing nearly all the assets yourself. The game will look and
feel different to the original but will have the same core game design. You will then innovate on the
game to push your self-study skills and explore new game development topics on your own. These
are individual assessments and it is expected that all the work done here is your own.
Primary Design and Development Constraints:
Regardless of the game that is chosen, there are some important constraints that must be adhered
to:
1. You must use the Unity version that is used in the lab room and specified on Canvas.
2. The game must be made in 2D, using sprites.
3. Your final game (in Assessment 4) will have at least three scenes – one that is for the main
menu, one that is a recreation of a level from the original game, and the last that shows off
your design innovation. You may have more scenes in your project structure if you wish.
4. All visual assets must be entirely your own creation. These must be different in appearance
to the original game and they must be your own designs so as not to infringe on copyright
or trademark. I.e. do not draw existing characters from games, anime, movies, memes, etc.
5. You must have sprite animationsin your game. You may also create your own particle system
effects with 2D sprites.
6. Audio must be included for all major interactions in the game but the audio clips do NOT
need to be your own creation. They must be different to the original game but you may
source these from royalty-free audio websites.
7. All scripts in the game must be your own creation. You may use learning resources such as
the Unity manual, forums, Unity Answers, and video tutorials, but you must not use any
downloaded scripts from the Unity Asset Store, GitHub, or similar. Sophisticated plagiarism
checking software will be used to ensure that your code has not been substantially copied
from any single source, whether that is other students or online resources.
8. You may NOT use the Unity Rigidbody physics functionality or the standard Unity
CharacterController component (or similar). Therefore, all motion must be coded by you as
frame-rate independent continuous movement (see Week 5 lecture). If you have a Rigidbody
or Rigidbody2D component on a gameobject for the purposes of collision detection, it must
be set to “Is Kinematic” at all times (or Body Type set to Kinematic if you are using a
Rigidbody2D).
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
9. You MAY use the Tilemap functionality in Unity, though it is not required. You MAY NOT use
the extra Tilemap Animated Tile functionality as it will cause issues in Assessment 4. For
Assessment 3 Band 75% D, you should place any animated tiles manually, regardless of
whether you used Tilemaps or not.
10. Assessments 4 stacks on Assessment 3 – anything you miss in Assessment 3 will likely affect
your Assessment 4 grade as well.
Assessment 3 – 20%
Pac-man (PacStudent)
Visual Assets, Audio Assets, Level Layout, and Git
Reference Example:
For a reference example of Pac-man, go to Google and type “Pac-man” (
https://www.google.com/search?q=play+pacman+doodle ). On the first page, you will find a
playable Google Doodle version of Pac-man that you can play in your web browser. This is the
reference that these specifications were built upon (other than the Level Generator). Features
found in other versions of Pac-man and Ms Pac-man are not included here. If a specific feature or
design consideration isn’t mentioned, then you can use your own judgment to design it into the
game – only what is listed in “Task and Grade Overview” below will be graded.
Due Dates:
Unity Project Files:
Due via Canvas before 11:59pm Friday 27th September
Deliverables:
Unity Project Files:
studentNumber_Assess3.zip
This is your entire Unity project folder (including your .git folder and .gitignore file), zipped up (as a
.zip, no other format), with the specified naming convention. Before creating the zip, delete the
“Library” folder.
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
Plagiarism Detection Software:
Sophisticated code plagiarism software will be used to check all code submissions in Assessment 3
and 4 with those of other students in the subject, submissions from previous years, and online
sources. While learning from online tutorials and communities is strongly encouraged, there is a
difference between learning code segments and re-implementing the included concepts or specific
Unity API calls, versus plagiarising large chunks of code. A similarity score higher than 25% between
a submitted project and any single other source will be further investigated by the Subject
Coordinator and, where necessary, raised with the university as Student Misconduct. Additionally,
visual and audio assets will be manually checked for originality by marking staff. Finally, you should
not be using any assets, packages, or plugins other than those that come with the Unity Installation
or that you have created yourself (except the audio assets). This includes any add-on packages found
from websites like the Unity Asset Store.
Task and Grade Overview:
In Assessment 3, you will be assessed on the first half of the semester worth of lecture and lab
content by preparing visual and audio assets for your game, setting up and beginning to use your
Git repository, and planning for your future development. In this way, you will demonstrate not only
foundational knowledge and skills in development, but also your ability to analyse an existing game,
decompose it into a set of required assets and coded systems, and identify your own knowledge
gaps for future development plans.
You should start from the top and work your way downwards. These tasks are stacked in terms of
difficulty as well as completing requisite functionality before moving on to later functionality that
utilizes this.
You must complete each grade band before moving onto the next. If there are major issues with an
earlier section, we will not mark the later ones. E.g. If you don’t have any animation (you skipped
that section), but you did make the level layout, we will not mark the level layout section. This is to
encourage students to do good, consistent work throughout each section before moving onto the
next and stopping students from thinking they can get easier grades by skipping steps.
Doing more than what is specified below will not get you additional points for this assessment.
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
Max Grade
Possible
after completing
section and
assuming no
points lost in
earlier sections
Requirements
2
(10% Z)
Git Repo
You must setup a Git repository, with a remote host on Bitbucket, GitHub, or
GitLab. This git repository must:
● Have the “.git” folder at the root level of your Unity project folder you
should see “.git” next to “Assets”, “Logs”, “Project Settings” etc. in the
file structure.
● Have the .gitignore file from
https://github.com/github/gitignore/blob/master/Unity.gitignore . This
should also be at the root level of your project, along with the .git file
● You must commit to your git repository often – e.g. after a few hours of
working on the project or every time you reach a minor milestone.
By the time you reach 100% HD, your Git repository must have at least seven
branches:
● Master – this should be the branch that is active before the submission
.zip file is created)
● Development – this branch is where the below feature branches are
created from and are merged into
● Feature-Audio – this branch should be committed to when adding the
audio assets to the project and putting them in the scene.
● Feature-Visual – this branch should be committed to when adding the
majority of the visual assets and animations into Unity and the main
scene.
● Feature-ManualLevel – this branch should be committed to during and
after completing the manual level layout.
● Feature-Movement: This branch should be committed to when you are
implementing PacStudent’s movement.
● Feature-LevelGenerator – this branch should be committed to during
the creation of the LevelGenerator.cs script.
As you reach later sections, you will be graded on this section in the following
way (all of which is extracted from your .git folder):
● Having the git repository setup with reference to an online
server/remote (e.g. GitHub or BitBucket)
● The consistency of commits throughout the project life-cycle.
● The use of the above branching structure
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
Additional resources and suggestions:
● For more on this style of branching structure, see the Git Workflow
branching strategy. You may have more branches if you wish.
● It is highly recommended that you work on one branch/feature/grade
band at a time. E.g. checkout dev -> branch Feature-Audio -> work on
the audio while committing frequently -> finish the audio and merge
Feature-Audio back into dev -> branch Feature-Visual -> repeat
o This will help you to avoid merge conflicts. Git helps you recover
from poor planning (e.g. resolving merge conflicts), but it is
much harder and time consuming than just planning your
project flow ahead of time.
● If something goes wrong – https://dangitgit.com/
o Git is there to protect from catastrophic failure, as long as you
commit and push often.
o If you mess up a merge, reset back to a previous commit.
o If you PC malfunctions, clone the repository from your remote
(e.g. GitHub) to another computer.
o With this in mind, no extension requests will be granted for
reasons of having PC, Unity, project, or Git issues/crashes.
4
(20% Z)
Project Structure
The Project Window in Unity should have a logical and organised layout of
folders and sub-folders. Folders and assets should be appropriately named
such that other potential team members (e.g. your tutors) could easily
navigate that project and find the asset they are looking for.
The Hierarchy Window of the Recreated Level scene should also be well
organized, with use of parenting to form groups of gameobjects and each
gameobject with an appropriate (short but clear) name.
Inappropriate or messy Project and Hierarchy Window organisation will
receive zero or partial marks for this section.
7
(35% Z)
Audio Assets
You must source all audio that you will need for your game. Like the visual
assets, the audio clips used must be different from the original game so as to
give your game its own audio style.
You do not need to create the audio yourself. You should only use “Royalty
Free” or completely free audio from the internet and not copyright protected
audio. If you want to make your own audio, we recommend the use of
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
https://www.bfxr.net/ as an easy online tool to randomize and mix sound
effects.
Again, you will not be marked for the quality of your audio, but rather the
completeness of your audio assets (per the list below) and whether they make
sense – e.g. an explosion sound for PacStudent’s movement doesn’t make
sense.
The audio assets that you will need to include are:
● Background music for the game intro (when the level first starts)
● Background music for when ghosts are in their normal state
● Background music for when the ghosts are in their scared state
● Background music for when at least one ghost is in its dead state
● Sound effect for when PacStudent is moving but not eating a pellet
● Sound effect for when a pellet is eaten
● Sound effects for when PacStudent collides with a wall
● Sound effect for PacStudent death
These audio clips must be imported into Unity and in the Project Window, in a
folder named “Audio Clips” and with an appropriate name for each clip.
You must also have at least one Audio Source in the scene that, when the Play
button is pressed, plays the intro background music and then when that
finished plays the background music for the normal state ghosts.
10 (50% P) Visual Assets – Sprites
You must create all of your visual assets yourself. You may use any tool you
feel comfortable with. If you do not have much visual design background, it is
recommended that you use https://www.piskelapp.com/ .
You must not to recreate the assets exactly as they appear in the original
game. Instead, you should create your own visual style for the game. These
also do not need to be works of art, we are NOT grading you on the quality of
your visual assets (we are not an arts faculty). Instead, you will be graded on
the completeness of them – you must have a different visual asset and
animation for each of the items listed below. The assets should also make
sense and be of an appropriate size in your scene such that it is easy for the
player to understand what is going on in the scene.
The following is a list of visual assets that you will need to create your own
version for:
● PacStudent
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
● Four Ghosts in normal state
● Ghosts in scared state (dark blue in original game)
● Ghosts in dead state (just eyes in original game)
● Normal pellet
● Power pellet
● Bonus score cherry
● PacStudent life indicator (bottom left in original game)
● Wall segments for each wall type (see Manual Level Layout section
below)
All visual assets must be imported into Unity and all visual assets must be
placed in the scene view.
13
(65% C)
Visual Assets – Animations and Animators
You will also need to create an equivalent Animator Controller (and associated
animation clips) for the following animations found in the original game:
● A single Animator Controller for PacStudent, including the following
states and animations:
o Four Walking states, one for each cardinal direction (up, down,
left, right). These should each have an appropriately rotated
PacStudent movement animation (mouth opening and closing in
the original game).
o A Dead state and associated animation for when PacStudent
dies.
● Flashing power pellets
● One or more Animator Controllers with the prefix “GhostAnimator_”
that do the following:
o A Walking state for moving in each cardinal direction (up, down,
left, right) and an associated sprite or animation clip for each
(eyes look in direction of movement in original game).
o A Scared state
o A Recovering state for when the ghosts are transitioning from
their scared state back into their normal walking state (flashing
between white and blue in original game)
o A Dead state
Animations and Animator Controllers must be established so that they can be
previewed in the Game View when the Play button is pressed. E.g.
PacStudent’s movement animation should play, a preview of PacStudent’s
dead state animation somewhere in the scene, power pellets should flash in
the level, and the ghost animator controller should cycle through all of it states
for each ghost on a “Has exit time” of 3 seconds per state or for the whole
animation clip (whichever is longer).
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
15
(75% D)
Manual Level Layout
You should aim to manually recreate the original Pac-man Level 01 layout.
When properly constructed, this should look similar to the below image, which
is the top-left quadrant of the original Pac-man layout for Level 01.
To recreate this accurately, you should use the map below (represented as a
2D array).
int[,] levelMap =
{
{1,2,2,2,2,2,2,2,2,2,2,2,2,7},
{2,5,5,5,5,5,5,5,5,5,5,5,5,4},
{2,5,3,4,4,3,5,3,4,4,4,3,5,4},
{2,6,4,0,0,4,5,4,0,0,0,4,5,4},
{2,5,3,4,4,3,5,3,4,4,4,3,5,3},
{2,5,5,5,5,5,5,5,5,5,5,5,5,5},
{2,5,3,4,4,3,5,3,3,5,3,4,4,4},
{2,5,3,4,4,3,5,4,4,5,3,4,4,3},
{2,5,5,5,5,5,5,4,4,5,5,5,5,4},
{1,2,2,2,2,1,5,4,3,4,4,3,0,4},
{0,0,0,0,0,2,5,4,3,4,4,3,0,3},
{0,0,0,0,0,2,5,4,4,0,0,0,0,0},
{0,0,0,0,0,2,5,4,4,0,3,4,4,0},
{2,2,2,2,2,1,5,3,3,0,4,0,0,0},
{0,0,0,0,0,0,5,0,0,0,4,0,0,0},
};
The legend for the above map is shown below. Each of these pieces will
require their own sprite image and, as with the other visual assets, should be
in your own visual style.
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
0 – Empty (do not put anything here, no sprite needed)
1 – Outside corner (double lined corner piece in original game)
2 – Outside wall (double line in original game)
3 – Inside corner (single lined corner piece in original game)
4 – Inside wall (single line in original game)
5 – An empty space with a Standard pellet (see Visual Assets above)
6 – An empty space with a Power pellet (see Visual Assets above)
7 – A t junction piece for connecting with adjoining regions
You must have no more than the 7 sprites above in your Project Window for
the level layout. In order to achieve the Level 01 image above, you should
place and rotate copies of each sprite to align with other adjacent sprites
properly. Some recommendations:
● Decide a standard size for all sprites (e.g. 16×16 pixels, or 32×32 pixels).
● With the above, when imported into Unity, you should be able to level
the scale of all sprite instances as (1,1,1) and they should be
appropriately sized.
● From here, you only need to deal in 90 degree rotation intervals. E.g. a
horizontal wall is turned into a vertical wall by rotating it 90 degrees.
Or, a top-left corner piece rotated by 90 degrees becomes a top-right
corner, or by 180 degrees it becomes a bottom-right corner piece.
To produce the whole level, once you have made the top-left quadrant as per
the image above, you will then need to duplicate and mirror it horizontally to
the right (to create the top-right quadrant), and then both of these are
mirrored vertically (to get the bottom-left and bottom-right quadrants).
Note that there should be tunnels to the left and the right of the level, one
PacStudent in width (to let PacStudent through) but with no pellets in it.
This level layout should be manually created and present in the Scene View
before the Play button is pressed. When the play button is pressed, the
camera should show the entire level layout (i.e. all four quadrants).
You may use Unity Rule Tiles if you wish (still using only the 7 sprites specified
before), but you can also lay the tiles out individually using each sprites
Transform in the Inspector panel.
17
(85% HD)
PacStudent Movement
Use frame-rate independent motion and programmatic tweening from Weeks
6 and 7 to move PacStudent.
● Move PacStudent clockwise in a cycle around the top-left inner block of
the level (as seen in the previous image).
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
● The movement must be linear – that is, PacStudent should move at a
consistent speed throughout the movement from one corner to the
next and this speed needs to be same for every section of the trip.
● PacStudent must play their movement animation and their moving
audio (for when they are not colliding with a pellet) as they moves.
● For Assessment 3, you do NOT need to:
o Respond to user input
o Detect collisions with walls
o Detect collisions with pellets.
o Move the ghosts at all
20
(100% HD)
Procedural Level Generator
Create a new script called LevelGenerator.cs and copy the levelMap 2D array
from earlier into it.
When the Play button is pressed, the Start() method of this script should
delete the existing Level 01 from the scene. From here, LevelGenerator.cs will
programmatically procedurally generate the level. To do this, you should take
the levelMap 2D array from the “Manual Level Layout” section and the sprites
you created for that section and procedurally generate the level layout by
stepping through the array and calling Instantiate(…) (and other methods) to
create, move, and rotate the sprites.
Note that in order to accomplish the full level you will need to:
● Determine the position of each piece
● Determine a way for your code to decide which rotation angle each of
the wall and corner pieces should be at to align with each other. Hint:
have you code look at the pieces around it to determine how it should
be rotated to connect to them (in the case of walls)
● Mirror the above 2D array or instantiated pieces three times
(horizontally, vertically, and horizontally-and-vertically) to get the other
three quadrants of the level to make the full level.
o For the vertical mirroring, you will need to ignore or delete the
bottom row of the 2D array so that there is only a single row of
empty spots.
● Adjust the game camera to react to the size of the level such that in
Play mode the entire level layout can be seen.
How this will be graded:
When marking this section, your tutors will substitute the levelMap 2D array
with a custom one, of any size, using the same legend and a similar style, but a
different layout. Your code must adapt to this custom levelMap 2D array to
Created by: Dr William Raffe
UTS CRICOS PROVIDER CODE 00099F
produce a logical level, with marks being removed based on the number of
pieces in error (e.g. in the wrong place or with the wrong rotation).
Some other notes:
● This must be done through your own code and you should not use Rule
Tiles or any other in-built Unity systems for procedurally generating
levels.
● The top-left corner of the level (i.e. levelMap[0,0]) will always be an
outside corner piece with a default rotation (i.e. it will look the exact
same as the manually built level).
● The walls will always have a smooth connection. I.e. a vertical wall will
never be adjacent to a horizontal wall, there needs to be a corner piece
or T piece joining them.
● The PacStudent Movement from the 90% band does not need to be
updated. Leave PacStudent moving clockwise around the area where
the manually create map was.
● There will not be a tutorial on this or resources provided. Procedural
content generation is all about working through logic problems, with an
eye on the visual design quality of the output. So, this is a test of your
logical thinking skills – get out a pen and paper (or drawing software)
and start planning it out before you start programming. If you ever
want to do anything interesting in your IT career (especially making
games), these logical thinking skills are a must as you encounter new
problems. This is also for the 100% HD, which at UTS is often reserved
for students that “exceed expectations” and go well above the average
skill set. So challenge yourself and give it a go!