Rim: Rizal in Multiverse
Rim: Rizal in Multiverse
A Project
Presented to
the Faculty of STI College Lucena
by
Alayan, Harvey B.
De Torres, Franz Lawrenz A.
Ebora, Jayvee P.
Pillone, Alexis Paul A.
October, 2017
i
ADVISER’S RECOMMENDATION SHEET
Rizal in Multiverse
(An Android Application 3D Role Playing Game)
by:
Alayan, Harvey B.
De Torres, Franz Lawrenz A.
Ebora, Jayvee P.
Pillone, Alexis Paul A.
_____________________________
Mr. Sammir G. Glorioso
Project Adviser
October, 2017
ii
PANEL’S APPROVAL SHEET
Rizal in Multiverse
(An Application 3D Role Playing Game)
developed by:
Alayan, Harvey B.
De Torres, Franz Lawrenz A.
Ebora, Jayvee P.
Pillone, Alexis Paul A.
____________________________ _______________________
Prof. Bill Marlow O. Estibal, MIT Mr. Steven Yan
Panelist Panelist
_____________________________
Mr. Gaylord Alfonso
Lead Panelist
October, 2017
iii
PROJECT COORDINATOR AND DEAN’S ACCEPTANCE SHEET
Rizal in Multiverse
____________________________________
Project Coordinator
____________________________________
Dean
October, 2017
iv
Abstract
RIM (Rizal in Multiverse) is an Android application that could enlighten the user
specially the children to learn more about Dr. Jose P. Rizal’s life when he is still alive. This
project was also made to serve as an introduction for the children who are not familiar with
Dr. Jose P. Rizal. With the advance technology today, many things can be accomplished
easily with a small amount of time, but there are also thing that needs a lot of time to
complete. Example, reading and watching Rizal’s life, requiring long time of reading and
researches, tends lose a person’s interest. With this project that was developed by the
developers, children will have more interest and gain more knowledge about our National
Hero. Some recommendation was added for future development of the project to come up
with a more improved output. The future developers that may have encounter the same
project as RIM, they could make many stages, saving options, choices of heroes, and
vi
Preface
In Google play store in android phones, there are many game applications that can
be downloaded by a lot of smartphone users. Each game application has different purposes
to get the attention of many customers for them to download it and play it on their android
devices. There are many types of games that can be downloaded on play store such as an
The document is composed of five (5) different chapters that shows and explains
the information of how this project was developed. Chapter one (1) discusses the problems,
objectives of the game, and its scope and limitations. Chapter two (2) discusses the
theoretical framework. Chapter three (3) discusses the data gathering, procedures and the
resources to make the project successful. Chapter four (4) discusses the performance
analysis and the problems that were encountered during the development. Chapter five (5)
The RIM (Rizal in Multiverse) is designed for children aging 7 years old and above.
The number one purpose of the game is to revive and re-introduced to all Filipino,
notably to our youth, the importance and greatness of Dr. Jose P. Rizal.
vii
TABLE OF CONTENTS
Title Page i
Acknowledgment v
Abstract vi
Preface vii
List of Figures xi
List of Appendices xi
Chapter 1 INTRODUCTION
viii
Chapter 2 Theoretical Framework
2.2 Summary 2 - 11
3.6 Resources 3 - 10
ix
3.6.1 Software 3 - 10
3.7 Summary 3 - 14
x
LIST OF FIGURES
BIBLIOGRAPHY
APPENDICES
APPENDIX B Journals
RESOURCE PERSONS
xi
Chapter 1
INTRODUCTION
As of February 2017, Google Play features over 2.7 million Android applications
and almost half of them, specifically, 35% are 3-Dimensional games; object with three
dimensions (such as height, width, and depth) which are mostly composed of applications
for entertainment and gaming purposes. Users in over 145 countries can purchase or just
download applications for free, including the Philippines. In today’s generation, most of
the people own smartphones. In 2015 alone, 7 out of 10 Filipinos are using it according to
Miguel R. Camus of Philippine Daily Inquirer [MGRC2015]. This is the highest number
of Filipinos in history using mobile devices from its first availability in the market.
generation, most of the youth today have least knowledge about our history, especially to
our National Hero, Dr. Jose Rizal and his contributions and greatest works for our beloved
country. Even though he is popular and an icon in the history of the Philippines, there are
still things that many people probably do not know about Rizal as we are thought of only
major happenings and events, so as information about our National hero. We were taught
about his death, how he died, and highlighted details about his life.
Lui Baltazar of Filipino [FLPK2016] pointed out 36 facts that we probably did not
know about the great hero but he summarized it into 13 trivia for people to easily
understand. In order to broaden their knowledge about Dr. Jose Rizal, the developers
decided to create a 3-Dimensional Android game filled with facts and trivia, with Dr. Jose
3D objects.
years old and above to deeply understand who is our National Hero and present it
in form of a 3D game that not only will entertain the users but also acquire further
information about Dr. Jose Rizal to be achieved in the given time frame?
How to encourage children seven years olds and above to play the
usually look for something new to do with their phones. Based on the
firm Influence Central, children given smartphones went down to the age
Reading and learning more is one of the hobbies of a child at the age
of seven before but that is not the case in the children of today because of
an Android game that is unique than others where they can play and be
answers and tackles many variables and aspects like Programming for
controlling the flow of the game, Sound effects for making the game much
characters are also part of the game and to animate those models the models
How to create an entertaining game that will give facts and trivia about
learning in the process is one of the purposes of the game. The number one
game that will let the user interact with objects inside of the game and not
it was first introduced in the early 80s and there is no doubt that 3D based content is
often viewed as more attractive in games than the more abstract 2D graphics. Many games
publishers are keen to leverage their success in the console market into the mobile phone
platform [ACMD2008].
Based on the researched information, the common tool to find information about
Dr. Jose Rizal is to go through libraries, watch a movie about him, short plays, online blogs,
Books
There are too many informative books about Dr. Jose Rizal,
such as Life and works of Rizal and Jose Rizal in Our Times; and
Movies
knowing Rizal more but sometimes it costs more than other ways
more depending on the play that you are going to watch or you
Online Blogs
trivia quizzes and one even one of the most popular games in the
Rizal.
any backstory related to Dr. Rizal. The developers found out that
they just used Rizal as a model but they did not specifically include
anything about the Philippine National Hero other than his name.
dedicated to Dr. Jose Rizal that aims to entertain the users and enlighten them by giving
1.3 Objectives
old and above to deeply understand and know our National Hero and present
about Jose Rizal or simply inform the users about Jose Rizal’s sacrifices for
the advancement of our nation that can be used to almost all of Android OS
of the Philippines.
To encourage children seven years old and above to play the game,
World that will let the users play as Dr. Jose Rizal in a role-playing Game
(RPG) while interacting and moving around with a specific boundary which
are just walls stopping the users to go to an area without ground. The users
will also see some special effects and animation of models in the game.
top, bottom, front, back, left, right that has different texture and color that
To achieve this kind of game the developers will need to study and
o Programming
o Audio/Music/Sound Effects
o 3D Modeling
o 3D Texturing
o Coloring/Color Scheme
o Game Engine
o Game Debugging
o Building a Player/APK
To develop an entertaining game that will give facts and trivia about
To develop an entertaining game that will also let the user acquire
information about Dr. Jose Rizal. The developers designed the game to
make the users interact with objects such as cubes, and species that
Dr. Jose Rizal discovered and named after him fulfilling the side of Rizal
added Humanoid Characters that portrays the character of Dr. Jose Rizal
The following are the scopes and limitations that the developers set and
Scope
joystick. The other button on the right bottom of the screen was the sprint
button; it adds the movement speed of the character from the game.
The character’s life is signified in the rectangle bar that can be seen
in the centre bottom of the game. When the life bar emptied, the player
will be dead and the player has to restart the game. There is no any heal
potion or any healing ability for the character in the game to add
because using low poly design is much easier than full 3D and the
The developers made five (5) quests in the game for entertainment
accomplish, a trivia will appear in the panel box of the screen. After the
user completes the five (5) quests, the player will be ready to fight evil
Xanos, the lord of the evil who is ghastly terrorizing the Earth 2.
is due to some users who are not aware on how they can play the game.
It is normally seen before the users play the game, it will instruct the users
The game has a loading screen. Before the user play the game, the
the game, the logo, or the picture of the content of the game. In the
screen.
The game has background music which is played after the loading
screen. Backdrop music helps adding touch and tone in entertaining the
Gameplay
time traveled and asked Rizal to stop Xanos, the evil enemy from another
Chronos said to Rizal that he can not stop his execution on his time
and world and cannot save the Philippines from the Spaniards, but he will
make sure that if Rizal will be able to save the Earth 2, he will not be
quests for first stage and two main quests for second stage. The first quest
is to find the Cube of Knowledge attached with rapier that contains trivia
about Dr. Jose Rizal in his age of playing Rapier with his friends, second
quest is to find the three species that Dr. Jose Rizal discovered and named
after him, the third quest is to defeat the skeleton that holds the
quest is to defeat the “Summoned Dragon Boar of Xanos” that holds the
scroll of “Mi Ultimo Adios or My last Farewell in English”, and the last
quest is to hide the scroll dropped from the Summoned Boss in a lamp.
Limitations
The proposed game has no saving option. It can be played only one
time when you start playing it. If you close the app, the game will restart.
The user will find and finish again the quests, every time that the user
plays the game, they will remember the trivia placed in the quest in every
Android version 5.0 and above can support the game without any bug or
motion, realistic lighting and shadows, and familiar visual elements make
it easier to navigate your device. Vivid new colors, typography, and edge-
to-edge imagery help to focus your attention. The more time the user
one person. The main protagonist in this game is Dr. Jose Rizal. The
player has to complete the quests and defeat the enemies. The game
The character of the game has limited health unit. If the user is
defeated and did not complete the quests of the game, the user will start
from the beginning and try to find the quests again and fight the enemies.
The game can be played offline and can be played without internet
click it and view ads and download the advertising applications and that
pixels. This size is one of the most used resolutions in mobile applications
Android devices, the developers did not add a zooming option to preserve
the perspective of the user to the game which is called the third person
perspective.
THEORETICAL FRAMEROWK
2.1 Introduction
Before the developers finished this 3-Dimensional game based on the life of Dr. Jose
Rizal. The game has to accomplish its visuals and functions through taking informative
researches and utilization of worthwhile tools. This chapter contains the related studies and
researches to make the project possible. The developers made more studies and researches
2.1.1 Software
surfaces, etc. The developers used modeling for the project specifically, for
geometric primitives.
no visual simulations. .
The developers modeled the main character, Dr. Jose Rizal from
Pants of Rizal
Hair of Rizal
Shoes of Rizal
Ground Environment
Game UI
o Panel Icon
o Flash Icon
o Frog
o Beetle
o Dragon-Lizard
These are the models that the developers downloaded without animation included
[FREE2017].
o Walk Animation
o Attack Animation
o Walk Animation
o Bite Animation
o Scream Animation
2.1.1.2 Programming
System (NavMesh)
Inspector to create a base for the Artificial Figure 2.1 Artificial Intelligence
Intelligence (AI). The developers also
programmed a way for the enemy to face where the character is so it won’t
look like the enemy is attacking out of thin air after setting up the code for
the attack. The enemy AI also have a programmed radius that checks whether
if the character entered that radius or not cause if the player entered the radius
the character will start chasing the player and call the attack function with a
the player finished a quest that will trigger the transition between the quest
finished to the next quest. There might be a case where a multi-event system
The developers also programmed the animation; every time a player accepts
the condition, it will play a certain animation with a certain effect. The
next scene which means that it will be finished the moment that the scene is
done loading. Adding and triggering an audio also requires a code. This is to
play the audio at the right time or certain conditions like when the player hits
the target, the collider will affect the health of the enemy and trigger the
sound effect for sword attack, adding special effects also requires coding to
to trigger an animation for the attack, run animation and movement of the
virtual joystick. But setting a death animation for both the player and the
needed to trigger the animation. An example is that the player must reach the
health of 0 in order to play the death animation so the program will check
whether the player have reached that point to trigger a certain function
included the scream of the Dragon Boar after the death of player and the
activation of PlayerDeadMenu which is what the player see after the death
scene.
connects the Blend Tree to the specific animation bar to play the animation
at the specific speed set for that animation. An example of this is if the
developer set the animation to play at the speed of one, the character or the
player will start running because the maximum speed in blend tree is one, so,
if its less than three, it will start walking gradually until it becomes 0 and
produced sounds that were used in early games of Gameboy such as Mario
In the case of the developers, the rendering of the models was in low
polygons. The developers have chosen low poly 3D because the models
to the model itself. The developers have textured the models inside the
blender before the model is finalized and rendered. The developers used the
solid type of materials or called Diffused map. Diffused map generally only
support, scene graph, and may include video support for cinematics.
code lines, are divided into small components. For efficiency, each
whole [TCNP2016].
The Unity build system compiles app resources and source code,
and packages them into APKs that you can test, deploy,
automate and manage the build process, while allowing you to define
its own set of code and resources, while reusing the parts common to all
versions of your app. The Unity plugin for Gradle works with the build
2.2 Summary
Theories that were mentioned in this chapter were absolutely needed in identifying
the suitable components for the game application in software. The developers pursued the
connection of software in the game, like on how to pass information from one scene to
another, the overall design of the game, colors that are pleasing to the eyes of the users and
the music that accompanies the game well. In this chapter, the developers also discussed
different ways to trigger different animation using programmed codes and inserting a
3.1 Introduction
This chapter shows how the project is solved using the hardware in developing
interface that helps on playing the RIM, and to educate them more about Rizal’s life.
Every tools and materials that are involved in making this project possible is indicated
in this chapter. With a lot of researches and procedures, the developers solved the
problems and gathered a wide range of information to make this game. The RIM (Rizal
in Multiverse) is an RPG or Role- Playing Game. At first, Rizal was imprisoned at fort
Santiago after he was captured by the Spaniards. Before his execution on December
30, 1896, Chronos the guardian of time came to see Rizal and asked for his help to
After Chronos and Rizal talked, they travelled into the time dimensional hole to
Earth 2. Rizal has to defeat Xanos to stop his terror on Earth 2 and bring back peace
in that world. In the game, the users have to accomplish the five quests. In every quest
that the player will accomplish, they will see a panel box that contains trivia and facts
about Dr. Jose Rizal. After the user finish a quest, a new quest will appear and have to
finish.
There is a game called RPG (role playing game), it is a game in which the
user controls and play the role of a character, generally in a fantasy or science fiction
Rizal in Multiverse game has two stages that are divided into five different
quests, three for the first scene or level and two for the main scene. Every quest is
connected to Rizal’s life. The skeleton is in normal and the last boss is in hard in
terms of difficulty but defeating the boss will be worth it because of the reward after
It’s a tough work, because it consumed a lot of work and time collecting data.
group. The hardest work for the developers is the research part because of a lot of
developers. This includes time management and brainstorming. The developers used
The developers gathered data from past studies conducted that are
documents was read and analyzed by the developers to gain the data that
they need. It resulted into detailed information about Dr. Jose Rizal. It
includes his views and opinions about the Spaniards and his love for the
country.
information and data that gave them specific details to develop the
project. The developers learned that there are a lot of things that the
current generation or even the older generations do not know about Dr.
Jose Rizal just like him using drugs called Hashish [FLPK2016].
Observation
of Dr. Jose Rizal. One of the things that the developers realized is that
there is no current game that was made in 3D where you can interact
into objects and use it to let the user acquire information while playing
the game.
Interview
them what do they know about Dr. Jose Rizal? and their answer are
if they know that Dr. Jose Rizal used drug called “Hashish”. and most
these are the kind of things that we need to add in the game because
they thought right away that Dr. Jose Rizal is a drug user.
3.4 Methodology
progressively gains more complexity and a broader feature set until the final system is
complete. The deeper dive into the iterative model, including where it originated from
when discussing the iterative method and the concept of incremental development will also
often be used liberally and interchangeably, which describes the incremental alterations
made during the design and implementation of each new iterations [APLM2016]. Unlike
the more traditional waterfall model, which focuses on a stringent step-by-step process of
development stages, the iterative model is best thought of as a cyclical process. After an
initial planning phase, a small handful of stages are repeated over and over, with each
allowing the next iteration to be at least marginally better than the last.
that involves refining the product until the requirements are met. That’s why this is
steps.
Initial Planning
While the developers are brainstorming, the developers talked about the
specific game that they will create including planning and expenses. During
this time researching is one of the most important things that the developers
Implementing this will let the developers create a framework that can serve as
Requirements Gathering
can sustain and run the application with smooth rendering because it will affect
the game development; these are laptop and smart phone for emulation and
after that, the developers installed the Unity for the Game Engine and Blender
RIM (Rizal in Multiverse)
3-5
for modeling and animation. The developers also surfed different websites like
Wiki, YouTube, Google and even Facebook for the developers to easily
The developers created a sketch for every character in the game and
analyzed what is still needed and removed unnecessary parts in the sample
after that, the developers will ask their beta testers to know if they successfully
created a character and game play that they like. Designing the environment
character; the safe way to do that is to create a model for the characters first
Implementation
This is the gateway for the deployment as this is where visions and dreams
algorithms and designs that the developers did in the planning stage, the
developers also took notes of what was already implemented in order the track
the changes for future changes because in the implementation stage, the
developers might change some things again and go back to the designing
Testing
developers tested the application if the algorithm that they used worked
correctly and if there are some errors the developers will go back to the
Evaluation
developers and beta testers to evaluate some of them namely are Mr.Renzo
Surell, Geroshi Germidia and the developer’s adviser Mr. Sammir Glorioso
Deployment
After finishing and making sure that the target result is achieved the
developers built an APK or player that will be release to the public to gain
more knowledge and understand what the user wants in order for the
It indicates what every member of the team contributed to finish the project. This figure
shows the activities on what to do or what system would be needed. The developers colored
all processes with the corresponding members of the team. Each member has their own
color. The group in the first week of the month of July was the initial planning, it is
composed of brainstorming, how much will be the cost and the assigning of each tasks.
Getting the essential requirements and the analysis and data was reached in four weeks.
Then the rest of the month at the second week of august until last week of
September was the implementation of the project, testing of the application and evaluation
of the game. The last week of September was the deployment or day of defense. Each
consider in making the project possible. Scheduling is the art of planning your activities so
that you can achieve your goals and priorities in the time you have available.
When done effectively, it will help to find out what can be realistically achieved
with the given time. This makes sure that there is enough time for essential tasks.
[MTCT2017] Time is the one resource that we can't buy, but we often waste it or use it
ineffectively. Scheduling helps in thinking about what to achieve in a day, week or month,
3.6 Resources
and develop this application and also the codes of the interfaced of the application.
Blender
This software used in designing their models, because it’s the most
source 3D computer graphics software tool set used for creating animated
devices. The developers decided to use this software because this is the most
least Intel i3 core, and it’s okay in 2GB dedicated video card.
Photoshop CS6
Knoll. Since then, it has become the most effective to industry standard
GIF to.
pictures and graphics designs they used in their game. It could be run in
quality music. FL Studio is now one of the worlds’s most popular DAWs
These are the different hardware components used for developing the RIM
by the developers.
Acer Laptop
documentation.
Sony Laptop
i5 core with 4GB RAM, but it only has 32-bit OS. Modelling, used
Toshiba Laptop
the same specs. Intel i3 core with 2GB RAM and 64-bit OS. But
full time.
Multi-touch on.
At least 2 GB RAM
3.7 Summary
This chapter indicates the whole activity, procedures, and methods in making the
project a success within the given time. The given time for creation was shown in this
chapter and the tools that were used by the developers. It is also discussed in this chapter,
the software and hardware that was used by the developers to finish the project.
PERFORMANCE ANALYSIS
4.1 Introduction
In the process of making this project called Rizal in Multiverse, the developers did
some story line in the game that will catch attention to user to play the game. The
developers consumed a lot of time in making the low poly 3D game that includes trivia as
well as entertaining facts about Jose Rizal that generally targets children’s interests and
provide them additional knowledge. Also, the focal point of this chapter is to figure out if
the application is fully functional, and to test if it will still work even in encountering
blunders.
In developing the game application, the developers used the Unity Game Engine as
their primary IDE in developing the app. The Unity is specially developed to be good in
making animation, sounds, and graphic assets which were needed for the game application.
4.2 Experimental
The developers used the Unit Testing, Integration Testing and Functional Testing
for enumerating the activities improvement. While doing this different testing activity,
bugs and errors are expecting by the developers, and also the improvement of the project.
Unit Testing
In unit testing, the developers encountered problems such as the joy stick
and write better codes to improve the failed design. It also helped the
Integration Testing
Once all the individual units are created and tested, the developers
started combining those “Unit Tested” modules and begun doing the
many variables that needs to be checked and knew, first is that you have to
know if they do not complicate each other’s’ code; example, the code for
your animation and code for movement, does not match it will experience a
collision of both codes that may result into errors or different and unexpected
outputs like the character flying into space because you did not “clamp” (set
a specific limit) on the y axis. But if you know how those works, you can
control it in a way that you can create a scene that you can use in different
ways, example; you can have two collides; one for the enemy and one for
the enemy.
Functional Testing
finished the game application, the next step is testing where the project will
be tried and to work to assess if the game functions well. Because of using
functional testing, the step by step progress of the game application was
improved.
The first thing that developers should expect in running a program is if he/she is
a beginner, further research must be done as the difference between mobile development
and desktop development is massive. This is why being careful is a trait that must be
possessed in coding as it will greatly affect the optimization of your game, example, even
if you have the highest resolution in all the mobile games ever created, it won’t work if
you`re planning to publish the game because not all of the users have a high specification
smart phone. Before you get a result, the first thing that is needed to do is build a player
where developers had a hard time because if it is done for the first time, building a game,
no matter how big or small, it would take at least an hour because Unity (Game Engine)
will start to set a library where the game engine will put everything important in the game
important things in building a player; developers have to put the “Shaders/UI” in the build
list because if not, Unity will still build a player for your game but the UI in game or User
Interface will be covered with pink color, even though it will still work, your game will be
filled with pink. There are bugs that developers encounters and one of those is where the
summoned dragon attacks the player without playing the animation which means was
either got cancelled or the function for the attack is not in order. So the developers debug
and edit the codes to clear the errors and fix it.
4.4 Summary
This chapter reviews the results and different testing activities developers
used in order to determine the vitality of the application in terms of performing its function.
After the testing, the developers have enhanced the game properly. The developers chose
this low poly 3D RPG game because it will enlighten us about the life of Rizal who is our
national hero and provide entertainment for the users. The developers gathered information
in the development process to develop the game “Rizal in Multiverse” where before Jose
Rizal’s execution, Chronos came to Earth 1 and ask Rizal for help, and about how Rizal
CONCLUSION
and then they came up with a conclusion to show that the developed project is helpful and
serves as a new method of entertainment and learning while playing the Rizal in Multiverse
game application. The developers conducted researches using the library and internet to
make the project and to make the application useful to the users. The longer interaction of
the user to the game, the more information the user gets the more they become familiar
Even though there are a lot of struggles the developers encountered in doing the
project, they managed to solve all using different approaches and applied their learning
from scratch. Many people think of programming as a life that needed guides and controls
and to be able to get everything right, in programming to set an order and interaction
between the player and the creator, there must be a link between the player and the creator
The main reason why the developers created this game application is to
acknowledge more Rizal’s life and what he did to our country. This is also to encourage
the children/user to learn more about Rizal. Many of us just know Rizal as our National
Hero. That he is a Doctor and that he’s executed in Luneta. Many children get bored when
reading or even just listening to teachers at school about is Dr. Jose Rizal. That is why the
and acquire facts and trivia about our considered national hero, Dr. Jose Rizal.
Recommendation
The developers asked for the opinions of their main panelist, Mr. Gaylord, Alfonso
for his recommendations for the game R.I.M (Rizal in Multiverse). There is one thing that
he said which is to expand the game by putting more levels, adding inventory system that
will let the players to choose from different sets and items which at the end of the stage,
the developers showed the possibility by adding a light saber as a reward at the end of the
game and many things that signifies the game concept which is an Open World Role-
http://www.3drender.com/glossary/3drendering.html
https://www.smallbiztrends.com/2017_08/google-playbook-for-
developers.html
https://www.mindtolls.com/page/artcile/newPPM_71.html
https://www.image-line.com/flstudio/
https://www.searchofsoftwarequality.com/techtarget.com/definitio
n/unit-testing
https://www.softwaretestinghelp.com/what-is-integration-testing/
[ISTQ2017] ISTQB (2017). “ISTQBExam Certification”
https://www.istqbexamcertification.com/what-is-functional-
testing-testing/
rising.html
https://www.lifewire.com/google-play-store-2373346/
https://www.godfirms.com /glossary/what-is-play-store.html
https://www.creativeoverflow.net/photoshop-journey-fron-
photoshop-1-0-to-photoshop
[MORT2016] J.L. Morton (2016). “Color Matters”
https://www.colormatters.com/colors-and-design/basic-color-
theory
https://unity3d.com/learn/tutorials/topics/interface-essentials/build-
and player-settings
https://unity3d.com/learn/tutorials/topics/mobile-touch/building-
your-unity-game-android-device-testing
https://thelordofthenerds.wordpress.com/2014/06/19/things-you-
probably-didnt-know-about-rizal/
[FLPK2016] Filipiknow (2016). “Things that we probably don’t know about Rizal”
http://www.filipiknow.net/jose-rizal-facts/
https://www.spot.ph/newsfeatures/the-latest-news-
features/64740/10-amazing-facts-you-probably-didnt-know-about-
jose-rizal
[3DRG2014] Pluralsight (2014). “Model Movements”
https://www.pluralsight.com/blog/film-games/key-rigging-terms-
get-moving
https://www.musictheory.net/lessons
http://www.sketchup-ur-space.com/2014/aug/theory-of-3D-
modeling.html
https://soundtraining.com/online/course/music-theory-for-
electronic-music-production/
https://cgmichael.wordpress.com/2013/10/02/3d-modeling-theory/
ACKNOWLEDGMENT
The developers would like to take this opportunity to thank God first and foremost,
for being our strength and guide in making this IT Special Project. Without Him, they
they would like also to give their extreme gratitude to their Project Adviser Mr.
Sammir G. Glorioso, for devoting much time teaching them what are the right things and
decisions to do so that we can be more productive. His special interest and knowledge
dedicated to them, also the guidance, provided them with their much needed motivation.
They would also like to thank their Project Coordinator, Professor Bill Marlow O.
The developers would like to thank their parents for always being supportive of our
education. Although some of their parents are far away, they are always on their side
motivating them, giving them support and strength in making this special project or in the
Finally, the developers would like to thank STI College Lucena for providing
quality education to students and for having great facilities, which helped us while doing
this project.
Appendix A
Game Scenes
The First Scene of the game let the user tap anywhere on the screen other than the
exit button at the bottom right of the scene. It lets the user see and feel the openness of the
game because it is one of the features that the developers want to achieved.
The second module is the tutorial mode. After clicking the tap to play button, the
tutorial button will appear. When the player is ready to play, just click the ‘Got it’ button.
“First Quest Scene”
This scene shows that the player has accomplished the First Scene. There is a panel
box that tells the player detailed information about Dr. Jose Rizal after playing fencing
This scene shows that the player finished the first level, third quest scene that will reward
the user a new skill called “Self-Heal” that lets the character gain 3 health every time the
user clicks the button that has icon of potion. The player will also receive detailed
information about Dr. Jose Rizal during his experimentation with a drug called “Hashish”
One of the reasons why Dr. Jose Rizal traveled to Earth-2 is to defeat Xanos that is
ghastly terrorizing Earth -2. At this scene the player will have to defeat the Summoned
“Reward Scene”
After defeating the Summoned Dragon of Xanos the user will receive an
award which is an introduction about Dr. Jose Rizal`s last poem called “Mi Ultimo Adios
or My Last Farewell” which is also one of the best poems Dr. Jose Rizal ever created.
“Last Quest Scene”
This scene is one of the most memorable events in the life of Dr. Jose Rizal
before he died. This is where he put a letter which is the scroll in game that contains
his goodbye in form of a poem that touched the hearts of all Filipinos who have read
the poem and even those who did not felt the pain and happiness Dr. Jose Rizal
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
August 5, 2017
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
The developers consulted the adviser about the game and let the adviser be one of
the beta testers.
September 5, 2017
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Ebora, Jayvee P.
Alayan, Harvey B.
Final Defense.
Character Movement
Joystick Script
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace CnControls
{
[Flags]
public enum ControlMovementDirection
{
Horizontal = 0x1,
Vertical = 0x2,
Both = Horizontal | Vertical
}
_initialStickPosition = _stickTransform.anchoredPosition;
_intermediateStickPosition = _initialStickPosition;
_initialBasePosition = _baseTransform.anchoredPosition;
_stickTransform.anchoredPosition = _initialStickPosition;
_baseTransform.anchoredPosition = _initialBasePosition;
_oneOverMovementRange = 1f / MovementRange;
}
CnInputManager.RegisterVirtualAxis(HorizintalAxis);
CnInputManager.RegisterVirtualAxis(VerticalAxis);
}
Vector3 worldJoystickPosition;
RectTransformUtility.ScreenPointToWorldPointInRectangle(_stickTransform, ev
entData.position,
CurrentEventCamera, out worldJoystickPosition);
_stickTransform.anchoredPosition = stickAnchoredPosition;
if (SnapsToFinger)
{
CurrentEventCamera = eventData.pressEventCamera ?? CurrentEventCamera;
Vector3 localStickPosition;
Vector3 localBasePosition;
RectTransformUtility.ScreenPointToWorldPointInRectangle(_stickTransform,
eventData.position,
CurrentEventCamera, out localStickPosition);
RectTransformUtility.ScreenPointToWorldPointInRectangle(_baseTransform,
eventData.position,
CurrentEventCamera, out localBasePosition);
_baseTransform.position = localBasePosition;
_stickTransform.position = localStickPosition;
_intermediateStickPosition = _stickTransform.anchoredPosition;
}
else
{
OnDrag(eventData);
}
}
}
}
Controller
using UnityEngine;
using CnControls;
using UnityEngine.UI;
[RequireComponent(typeof(CharacterController))]
public class Controller : MonoBehaviour
{
public float MovementSpeed;
private Transform _mainCameraTransform;
private Transform _transform;
private CharacterController _characterController;
public Slider playerHp;
private void OnEnable()
{
_mainCameraTransform = Camera.main.GetComponent<Transform>();
_characterController = GetComponent<CharacterController>();
_transform = GetComponent<Transform>();
}
public void Update()
{
if (playerHp.value <= 0) return;
_transform.forward += movementVector;
}
Rizal Animator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using CnControls;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class RizalAnimator : MonoBehaviour {
Animator anim;
public Button runButton;
bool buttonClicked=false;
bool canMove=true;
float speed;
public GameObject colliderOfSword public Slider playerHP;
void Start () {
anim = GetComponent<Animator> ();
runButton = GetComponent<Button> ();
float h = CnInputManager.GetAxis ("Horizontal");
void Update () {
if (playerHP.value <= 0) {
anim.SetBool ("isDead", true);
}
WalkAnimation ();
}
if (h != 0) {
} else {
anim.Play ("Run");
}
public void AttackAnimation()
{
colliderOfSword.SetActive (true);
anim.Play ("Attack");
Animator Enemy
void Start()
{
void Update()
{
WalkAnimation();
}
public void WalkAnimation()
{
if (h != 0) {
anim.SetBool ("isWalking", true);
} else {
CharacterCombat
[RequireComponent(typeof(CharacterStats))]
public class CharacterCombat : MonoBehaviour {
Animator anim;
public float attackSpeed=1f;
private float attackCooldown=0f;
public Slider playerHP;
public float attackDelay=.6f;
bool isAttacking;
public Image damageImage;
public float flashSpeed = 5f;
public Color flashColor = new Color (1f, 0f, 0f, 0.1f);
bool damaged;
AudioManager audi;
void Start()
{
anim = GetComponent<Animator> ();
myStats=GetComponent<CharacterStats>();
void Update()
{
if (damaged) {
damageImage.color = flashColor;
} else {
}
damaged = false;
attackCooldown -= Time.deltaTime;
}
if (playerHP.value <= 0) {
}
if (attackCooldown <= 0f) {
}
}
damaged = true;
stats.TakeDamage (myStats.damage.GetValue ());
}
AudioSFX
void Scream()
{
audioS.PlayOneShot (scream1);
void Fs()
{
audioS.PlayOneShot (footSteps);
}
PlayerStats
void Start () {
EquipmentManager.instance.onEquipmentChanged += OnEquipmentChanged;
if(oldItem!=null)
{
armor.RemoveModifier (oldItem.armorModifier);
damage.RemoveModifier (oldItem.damageModifier);
}
}
public override void Die()
{
Exit
}
EnemyController
void Start () {
target = PlayerManager.instance.player.transform;
agent = GetComponent<NavMeshAgent>();
combat = GetComponent<CharacterCombat> ();
anim = GetComponent<Animator> ();
void Update () {
if (playerHp.value < 0) {
anim.SetBool ("isPlayerDead", true);
return;
}
if (skelHP.value <= 0) return;
agent.SetDestination (target.position);
if (targetStats != null) {
combat.Attack (targetStats);
FaceTarget ();
}
}
void FaceTarget(){
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);
}
}
AfterPause
}
}
#region PlayerManangerInstance
}
#endregion
}
Enemy
[RequireComponent(typeof(CharacterStats))]
public class Enemy : Interactable {
Animator anim;
PlayerManager playerManager;
CharacterStats myStats;
bool nc;
void Start () {
playerManager = PlayerManager.instance;
anim = GetComponent<Animator> ();
myStats = GetComponent<CharacterStats> ();
}
public override void Interact()
{
base.Interact ();
nc = true;
CharacterCombat playerCombat=playerManager.player.GetComponent<CharacterC
ombat> ();
if (playerCombat != null)
{
if (nc == true) {
playerCombat.Attack(myStats);
}
}
}
}
Interactable
}
void Update()
{
if (isFocus && !hasInteracted) {
float distance = Vector3.Distance (player.position, interactionTransform.position)
;
if (distance <= radius) {
Interact ();
hasInteracted = true;
}
}
}
public void OnDefocused()
{
isFocus = false;
player = null;
hasInteracted = false;
}
void OnDrawGizmosSelected ()
{
if (interactionTransform == null)
interactionTransform = transform;
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere (interactionTransform.position, radius);
}
}
PlayerMotor
[RequireComponent(typeof(NavMeshAgent))]
public class PlayerMotor : MonoBehaviour {
Transform target;
NavMeshAgent agent;
void Start () {
agent = GetComponent<NavMeshAgent> ();
}
void Update(){
if (target != null) {
agent.SetDestination (target.position);
FaceTarget ();
}
}
{
agent.stoppingDistance = newTarget.radius * .8f;
agent.updateRotation = false;
target = newTarget.interactionTransform;
}
public void StopFollowingTarget(){
agent.stoppingDistance = 0f;
agent.updateRotation = true;
target = null;
}
void FaceTarget(){
target = PlayerManager.instance.player.transform;
}
}
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);
}
}
firstAnimaUI
public class firstAnimaUI : MonoBehaviour {
GameObject.Destroy (kBoarUI);
GameObject.Destroy (questInfo);
questInfoLamp.SetActive (true);
scrollHolded.SetActive (true);
oldLamp.SetActive (true);
}
}
ConvertToRegMesh
DestroyImmediate (skinnedMeshRenderer);
DestroyImmediate (this);
}
}
Stat
[System.Serializable]
public class Stat{
[SerializeField]
private int baseValue;
return finalValue;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
Hiding
void Update () {
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Beetle") {
counter++;
counterChecker ();
}
}
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Draco") {
counter++;
counterChecker ();
}
}
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Frog") {
counter++;
counterChecker ();
Debug.Log ("Frog dafq" + counter);
Frog.SetActive(false);
}
}
}
}
}
public void Quest1Click(){
Quest1Panel.SetActive (false);
Quest1.SetActive (false);
Quest2.SetActive (true);
Beetle.SetActive (true);
Draco.SetActive (true);
Frog.SetActive (true);
}
public void Quest3Click()
{
Quest3.SetActive(false);
Quest4.SetActive(true);
hashandRizal.SetActive (true);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Beetle") {
counter++;
beetle =true;
Debug.Log ("Beetle dafq" + counter);
}
}
}
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Draco") {
counter++;
}
}
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Frog") {
counter++;
beetle =true;
Debug.Log ("Frog dafq" + counter);
}
}
}
void setter()
{
gg.SetActive (true);
}
}
rapierHit
void Start () {
anim = GetComponent<Animator> ();
skelHp.value = 100;
}
skelHp.value -= 20;
if (skelHp.value <= 0) {
canvas.SetActive (false);
anim.SetBool ("isDead", true);
Hashish.SetActive (true);
Level Loader
loadScreen.SetActive (true);
while (!operation.isDone) {
float progress = Mathf.Clamp01 (operation.progress / .9f);
slider.value = progress;
yield return null;
}
}
}
AudioManager
s.source=gameObject.AddComponent<AudioSource> ();
s.source.clip = s.clip;
s.source.volume = s.volume;
s.source.pitch = s.pitch;
s.source.loop = s.loop;
s.source.mute = s.mute;
s.source.spatialBlend = s.spatialBlend;
}
}
}
}
using UnityEngine.Audio;
using UnityEngine;
[System.Serializable]
public class Sound {
public string name;
public AudioClip clip;
[Range(0f,1f)]
public float volume;
[Range(.1f,3f)]
public float pitch;
[Range(0f,1f)]
public float spatialBlend;
[HideInInspector]
public AudioSource source;
public bool loop;
public bool mute;
}
BoarEnemyController
void Start () {
void OnDrawGizmosSelected ()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);
}
}
RedDragonAnimator
NavMeshAgent agent;
Transform target;
Animator anim;
float time;
public GameObject audioManager;
void Start()
{
void Update()
{
WalkAnimation();
}
public void WalkAnimation()
{
if (h != 0) {
anim.SetBool ("isRunning", true);
} else {
anim.SetBool ("isRunning", false);
}
}
RapierHitBoar
Animator anim;
public Slider boarHP;
public int PlayerDamage=25;
public GameObject miUltimoAdios;
public GameObject camera1,camera2;
void Start () {
anim = GetComponent<Animator> ();
boarHP.value = 500;
}
FindObjectOfType<AudioManager>().Play("PlayerAttackingSFX");
boarHP.value -= PlayerDamage;
if (boarHP.value <= 0) {
camera1.SetActive (false);
camera2.SetActive (true);
miUltimoAdios.SetActive (true);
}
}
Enemy Stats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
CharacterStats
Animator anim;
public float currentHealth { get; set; }
public int dafq;
public Slider healthBar;
public float maxHealth { get; set; }
public GameObject pDeadMenu;
public Stat damage;
bool isDamaged;
public Stat armor;
void Awake()
{
anim = GetComponent<Animator>();
maxHealth = healthBar.maxValue;
currentHealth = maxHealth;
healthBar.value = CalculateHealth();
}
void Update()
{
CalculateHealth ();
}
healthBar.value = CalculateHealth();
//Debug.Log (transform.name + "takes" + damage + "damage");
if (currentHealth <= 0) {
anim.SetBool ("isDead", true);
pDeadMenu.SetActive (true);
}
float CalculateHealth()
{
return currentHealth ;
}
public virtual void Die(){
}
public void healButtonClicked ()
{
if (currentHealth >= healthBar.maxValue) {
return;
}
currentHealth += 2.3f;
healthBar.value = currentHealth;
}
}
Skeleton Combat
[RequireComponent(typeof(CharacterStats))]
public class SkellCombat : MonoBehaviour {
Animator anim;
public float attackSpeed=1f;
private float attackCooldown=0f;
public Slider playerHP;
public float attackDelay=.6f;
bool isAttacking;
public Image damageImage;
public float flashSpeed = 5f;
public Color flashColor = new Color (1f, 0f, 0f, 0.1f);
bool damaged;
AudioManager audi;
CharacterStats myStats;
void Start()
{
anim = GetComponent<Animator> ();
myStats=GetComponent<CharacterStats>();
void Update()
{
if (damaged) {
damageImage.color = flashColor;
} else {
}
damaged = false;
attackCooldown -= Time.deltaTime;
}
public void Attack(CharacterStats targetStats)
{
if (playerHP.value <= 0) {
}
if (attackCooldown <= 0f) {
attackCooldown = 1f / attackSpeed;
}
}
damaged = true;
stats.TakeDamage (myStats.damage.GetValue ());
}
ExitButton
}
}
CameraController
void LateUpdate ()
{
transform.position = target.position - offset * currentZoom;
transform.LookAt (target.position + Vector3.up * pitch);
transform.RotateAround (target.position, Vector3.up, currentYaw);
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
scrollChecker
void goToCam1 ()
{
cam1.SetActive (true);
cam2.SetActive (false);
}
}
scrollClicked
killedBoarUI.SetActive (true);
scroll.SetActive (false);
}
}
}
}
QuestClicker
return;
} else {
questInfo.SetActive (false);
return;
}
if (!qInfoLamp.activeSelf) {
qInfoLamp.SetActive (true);
} else {
qInfoLamp.SetActive (false);
}
Resource Persons
Bestibal@yahoo.com
smpyan@yahoo.com
IT and CS Teacher
CS Department
Sure11renzo@yahoo.com
Personal Technical Vitae
09569465881
Pogiato29@gmail.com
JAYVEE P. EBORA
09973647454
Jayvee.ebora06@gmail.com
Camarines Norte
HARVEY B. ALAYAN
09151246612
alayanharvey@gmail.com
Pitogo, Quezon
09487005003
alexispaulpillone@gmail.com
Sariaya, Quezon