0% found this document useful (0 votes)
410 views111 pages

Rim: Rizal in Multiverse

This document describes a project titled "RIM (Rizal in Multiverse)" which is an Android application that aims to educate users, especially children, about the life of Jose Rizal through a 3D role-playing game. The project was developed by four students at STI College Lucena to fulfill their degree requirements. It contains chapters that discuss the problem statement, objectives, methodology, development process, analysis and conclusion of the project. The game seeks to introduce children to Rizal's life and accomplishments in an engaging way using new technologies.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
410 views111 pages

Rim: Rizal in Multiverse

This document describes a project titled "RIM (Rizal in Multiverse)" which is an Android application that aims to educate users, especially children, about the life of Jose Rizal through a 3D role-playing game. The project was developed by four students at STI College Lucena to fulfill their degree requirements. It contains chapters that discuss the problem statement, objectives, methodology, development process, analysis and conclusion of the project. The game seeks to introduce children to Rizal's life and accomplishments in an engaging way using new technologies.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 111

RIM: RIZAL IN MULTIVERSE

(An Android Application 3D Role Playing Game)

A Project
Presented to
the Faculty of STI College Lucena

In Partial Fulfillment of the Requirements for the Degree of


Bachelor of Science in Information Technology Major in Digital Arts

by

Alayan, Harvey B.
De Torres, Franz Lawrenz A.
Ebora, Jayvee P.
Pillone, Alexis Paul A.

Mr. Sammir G. Glorioso


Project Adviser

October, 2017

i
ADVISER’S RECOMMENDATION SHEET

This Project entitled

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.

And submitted in partial fulfillment of the requirements of the


Bachelor of Science in Information Technology Major in Digital Arts
Degree has been examined and is recommend for acceptance and approval

_____________________________
Mr. Sammir G. Glorioso
Project Adviser

October, 2017

ii
PANEL’S APPROVAL SHEET

This Project entitled

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.

after having been presented is hereby approved


by the following members of the panel

____________________________ _______________________
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

This Project entitled

Rizal in Multiverse

After having been recommended approved and hereby accepted

by the Information and Communications Technology Department

of STI College Lucena

____________________________________

Prof. Bill Marlow O. Estibal, MIT

Project Coordinator

____________________________________

Prof. Giovanni O. Junteral, MBA, MIT

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

different maps to play.

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

RPG, and many are for entertainment and educational purposes.

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)

discusses the conclusion and recommendation.

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

Adviser Recommendation Sheet ii

Panels’ Approval Sheet iii

Project Coordinator and Dean Acceptance Sheet iv

Acknowledgment v

Abstract vi

Preface vii

Table of Contents viii

List of Figures xi

List of Appendices xi

Chapter 1 INTRODUCTION

1.1 Statement of the Problem 1-1

1.1.1 General Problem 1-2

1.1.2 Specific Problems 1-2

1.2 Current State of Technology 1-4

1.3 Objectives 1-6

1.3.1 General Objective 1-6

1.3.2 Specific Objectives 1-7

1.4 Scope and Limitations 1-8

viii
Chapter 2 Theoretical Framework

2.1 Introduction 2-1

2.1.1.1 Modeling Characters 2-1

2.1.1.2 Programming 2-5

2.1.1.3 Music Production 2-8

2.1.1.4 Rendering 2-9

2.1.1.5 Texturing Mapping 2-9

2.1.1.6 Game Engine 2 - 10

2.1.1.7 Game Debugging 2 - 10

2.1.1.8 Building a Player / APK 2 - 11

2.2 Summary 2 - 11

Chapter 3 RIM (Rizal in Multiverse)

3.1 Introduction 3-1

3.2 Game Concept 3-2

3.2.1 Game Category Selection 3-2

3.3 Data Gathering 3-2

3.3.1 Data Gathering Procedure and Outputs 3-2

3.4 Methodology 3-4

3.5 Schedule of Activities 3-7

3.6 Resources 3 - 10

ix
3.6.1 Software 3 - 10

3.6.2 Hardware for development 3 - 13

3.6.3 Hardware for Implementation 3 - 14

3.7 Summary 3 - 14

Chapter 4 PERFORMANCE ANALYSIS

4.1 Introduction 4-1

4.2 Experimental 4-2

4.3 Result and Analysis 4-3

4.4 Summary 4-4

Chapter 5 CONCLUSION 5–1

x
LIST OF FIGURES

Figure 2.1 Artificial Intelligence 2-5

Figure 2.2 Humanoid Rigging 2-7

Figure 2.3 Mecanim 2-7

Figure 3.1 Iterative Modeling 3-5

Figure 3.2 Schedule of Activities 3-8

Figure 3.3 Blender Logo 3-10

Figure 3.4 Unity Game Engine 3-10

Figure 3.5 Photoshop CS6 3-11

Figure 3.6 FL Studios 3-12

Figure 3.7 Acer Laptop 3-12

Figure 3.8 Sony Vaio 3-13

Figure 3.9 Toshiba Laptop 3-14

BIBLIOGRAPHY

APPENDICES

APPENDIX A Game Scenes

APPENDIX B Journals

APPENDIX C Source Codes

RESOURCE PERSONS

PERSONAL TECHNICAL VITAE

xi
Chapter 1
INTRODUCTION

1.1 Statement of the Problem

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.

Because of the continuous innovation of technology and modernization of our

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

RIM (Rizal in Multiuverse)


Rizal as the main character which also lets the users interact in an Open World filled with

3D objects.

1.1.1 General Problem

How to develop an Android game application that encourage users, seven

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?

1.1.2 Specific Problems

 How to encourage children seven years olds and above to play the

game Rizal in Multiverse in Android phone?

Most children nowadays are fond of using smartphones and they

usually look for something new to do with their phones. Based on the

developers’ research, on average, children are getting their first

smartphones around the age of 10. According to the research

firm Influence Central, children given smartphones went down to the age

of 12 in 2012, noticeably, still too young. For some children, smartphone

ownership starts even sooner — including second graders as young as

seven, it is based on the research of internet safety experts [INCT2013].

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

the presence of Android phones where children can explore

RIM (Rizal in Multiverse) 1-2


and do a lot of much more entertaining things. The developers took

advantage of children’s major usage of technology and decided to make

an Android game that is unique than others where they can play and be

entertained while learning along the process.

 How to develop an intractable Open World 3-Dimensional Game in an

Android phone with a limited time frame (3 months)?

Developing a game is a task that takes a lot of time because it

answers and tackles many variables and aspects like Programming for

controlling the flow of the game, Sound effects for making the game much

more enjoyable and productive. Modeling characters to provide the user an

experience of moving a 3-Dimensional character, animating those

characters are also part of the game and to animate those models the models

must be rigged in order to control the movement. 3D texturing for the

models and environments texture.

 How to create an entertaining game that will give facts and trivia about

Dr. Jose Rizal in game?

To achieve the goal of providing entertainment to the users while

learning in the process is one of the purposes of the game. The number one

purpose of the developers by developing Rizal in Multiverse is to create a

game that will let the user interact with objects inside of the game and not

just a simple text quiz that are popular nowadays.

RIM (Rizal in Multiuverse) 1-3


1.2 Current State of Technology

3D computer graphics have been an important feature in games development since

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,

and games. Below is the detailed explanation of above.

 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

it will take a long time to read them all.

 Movies

Watching a movie about Dr. Jose Rizal is a good source of

knowing Rizal more but sometimes it costs more than other ways

because producer mainly produce movies for profit which is

something that is very common like Rizal Cinematic.

RIM (Rizal in Multiverse) 1-4


 Short Plays

It’s almost the same as watching a movie because it may cost

more depending on the play that you are going to watch or you

have watched. There’s also a chance of false notions which means

portraying certain subjects or themes in a way which is far from

reality such as “Ang Munting Gamo-gamo”.

 Online Blogs

You might learn something from an author of a blog but the

main problem is the authenticity of the information that will be

published or released. The resources that was used in coming up

with the article.

 Current Games about Dr. Jose Rizal

There are a lot of recorded current games about Dr. Jose

Rizal with variety of genre such as quiz games, jigsaw puzzles,

trivia quizzes and one even one of the most popular games in the

world now, Tekken, based one of their iconic characters, Josie, on

Rizal.

She is seen wearing a golden blouse, blue skirt, red

headband, gladiator sandals, and an assortment of ornate gold

RIM (Rizal in Multiverse) 1-5


accessories all reminiscent of traditional jewelry and the colors on

the Philippine flag [CCMN2015]. But Josie doesn't appear to have

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.

That is why the developers created a FREE 3-Dimensional Android Game

dedicated to Dr. Jose Rizal that aims to entertain the users and enlighten them by giving

trivia and facts about the hero, inside of the game.

1.3 Objectives

1.3.1 General Objectives

To develop an Android game that will encourage users, seven years

old and above to deeply understand and know our National Hero and present

it in a form of a 3-Dimensional Game that aims to entertain the users while

acquiring facts and trivia about Dr. Jose Rizal.

The developers are aiming to develop an application that will provide

challenging and entertaining game that will enlighten people’s understanding

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

phones. The main intention of the game is for the

RIM (Rizal in Multiverse) 1-6


user/player to know why Dr. Jose P. Rizal is considered as the National hero

of the Philippines.

1.3.2 Specific Objectives

 To encourage children seven years old and above to play the game,

Rizal in Multiverse in Android phones

To achieve this, the developers designed a 3-Dimensional Open

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.

The developers also used Skybox which is a 6-sided box specifically

top, bottom, front, back, left, right that has different texture and color that

will add touches to entertain the users just by looking at it.

 To develop an interactable Open World 3-Dimensional Game in an

Android phone within 3 months

To achieve this kind of game the developers will need to study and

learn many things (List below)

o Programming

o Audio/Music/Sound Effects

o 3D Modeling

RIM (Rizal in Multiverse) 1-7


o 3D Animation/Rigging

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

Dr. Jose Rizal in an Open World environment

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

information dissemination. For the side of entertainment, the developers

added Humanoid Characters that portrays the character of Dr. Jose Rizal

and has different types of animations and visual effects.

1.3.3 Scope and Limitations

The following are the scopes and limitations that the developers set and

decided to be the feasible arrangement, for the completion of this project.

Scope

 The character’s movement

RIM (Rizal in Multiverse) 1-8


The game can be controlled using touch ring control using virtual

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 player’s life is represented in HP bar

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

challenge and excitement for the game.

 The player and game objects are in a low poly 3D design

The developers designed a 3D low poly character and other objects.

A low poly means a 3D computer graphics with a small number of

polygons. The developers designed objects and characters in Blender,

because using low poly design is much easier than full 3D and the

developers can save much time designing and modelling.

 The game has 5 quests to complete

The developers made five (5) quests in the game for entertainment

and knowledge gaining purposes. In every quest that the users

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.

 The game will have a tutorial before playing

RIM (Rizal in Multiverse) 1-10


The game has tutorials to help new players to start of their game. It

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

how the character move, attack and find the quests.

 The game has a loading screen

The game has a loading screen. Before the user play the game, the

loading screen appears. It contains information such as the developers of

the game, the logo, or the picture of the content of the game. In the

loading screen of the RIM (Rizal in Multiverse), the logo is placed on

screen.

 The game has backdrop music

The game has background music which is played after the loading

screen. Backdrop music helps adding touch and tone in entertaining the

user. The purpose of the backdrop music is to accompany the actions of

the game and add energy to not bore the user.

 Gameplay

Before Rizal’s execution on December 30, 1896, the guardian of

time traveled and asked Rizal to stop Xanos, the evil enemy from another

world who is terrorizing the people of Earth 2.

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

RIM (Rizal in Multiverse) 1-10


forgotten after his death. The game composed of only two stages, three

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

information about Dr. Jose Rizal while he is experimenting a drug called

“Hashish” which he tried for experimentation purposes only, the fourth

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 game has no saving option

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

single time they play the game.

 The game can only be played on Android phones

This mobile gaming app can be played only in Android phones.

Android version 5.0 and above can support the game without any bug or

RIM (Rizal in Multiverse) 1-11


error. The developers chose this version because it is responsive, natural

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

playing, less time charging [ASDG2014]. Windows and IOS do not

support this game.

 The game is a single-player only

A single-player game is usually a game that can only be played by

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

cannot be connected to another player.

 The character has a limited health

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 health will reset to default.

 The game can be played without internet

The game can be played offline and can be played without internet

connection, and it is children friendly because no internet connection

means no pop up advertisements. There are instances that children may

click it and view ads and download the advertising applications and that

is one of the things the developers considered in making the game.

 The game resolution has a maximum pixel size

RIM (Rizal in Multiverse) 1-12


The developers set a maximum resolution pixel size of 800 x 480

pixels. This size is one of the most used resolutions in mobile applications

and lowering the resolution will blur the game itself.

 The game has no Zooming option

Even though the developers created a multi-touched game for

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.

RIM (Rizal in Multiverse) 1-12


Chapter 2

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

related to the project.

2.1.1 Software

2.1.1.1 Modeling Characters

In 3D computer graphics, 3D modeling (or three-dimensional

modeling) is the process of developing a mathematical representation of

any surface of an object either inanimate or living in three

dimensions via specialized software. Three-dimensional (3D) models

represent a physical body using a collection of points in 3D space,

connected by various geometric entities such as triangles, lines, curved

surfaces, etc. The developers used modeling for the project specifically, for

making the characters of the game.

RIM (Rizal in Multiverse)


 Polygonal modeling - Points in 3D space, called

vertices, are connected by line segments to form a

polygonal mesh. The vast majority of 3D models today

are built as textured polygonal models, because they are

flexible and because computers can render them so

quickly. However, polygons are planar and can only

approximate curved surfaces using many polygons.

 Curve modeling - Surfaces are defined by curves, which

are influenced by weighted control points. The curve

follows (but does not necessarily interpolate) the points.

Increasing the weight for a point will pull the curve

closer to that point. Curve types include no uniform

rational B-spline (NURBS), splines, patches and

geometric primitives.

 Solid - These models define the volume of the object

they represent (like a rock). These are more realistic, but

more difficult to build. Solid models are mostly used for

no visual simulations. .

 Model Rigging – by adding a virtual representation of

bones in a character, it lets the Developer control the

movement of the character frame by frame, 30 frames is

equivalent to 1 second so if you rigged a character and

animate it you will need to set a trigger to every frame of

RIM (Rizal in Multiverse) 2-2


the character to create a series of movements, the speed

will depend on how you place the triggers in the frames.

 List of developers Modeled Character and Game Objects

The developers modeled the main character, Dr. Jose Rizal from

top to bottom; the developers also modeled and designed the

character’s equipment in game those are:

 Shirt with Philippine badge of Rizal

 Pants of Rizal

 Hair of Rizal

 Shoes of Rizal

 Ground Environment

 Skybox or the background that the player sees in game

 Attack Animation of Rizal

 Scroll Animation and Camera Switching

 Run Animation of Rizal

 Game UI

o Attack button icon

o Run button icon

o Pause button icon

o Reset button icon

o Panel Icon

o Flash Icon

RIM (Rizal in Multiverse)


2-3
o Virtual Joystick

 Base and Stick

 Attack animation of Skeleton Enemy

 Death animation of Rizal

 Death animation of Skeleton Enemy

 Death animation of Dragon Boar Enemy

 Sound Effects of the game

o Sword sound effect

o Scream of the Dragon Sound effect

o Walking of the Dragon Sound Effect

o Background Music of the Game

o Bite of the Dragon Sound Effect

 3 species that Dr. Jose Rizal Discovered

o Frog

o Beetle

o Dragon-Lizard

These are the models that the developers downloaded without animation included

[FREE2017].

 Skeleton Warrior used in Scene 1 Quest 3

o Walk Animation

o Attack Animation

RIM (Rizal in Multiverse) 2-4


 Summoned Dragon Boar

o Walk Animation

o Bite Animation

o Scream Animation

2.1.1.2 Programming

The developers used Unity 3D built in

Editor Monobehavior. In Unity 3D the

developers used the Navigational Mesh

System (NavMesh)

with the main purpose of moving the

character that has NavMesh attached into

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

restriction of distance. The developers also programmed a scenario where

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

RIM (Rizal in Multiverse)


2-5
will happen like the showing of different species Dr. Jose Rizal discovered.

The developers also programmed the animation; every time a player accepts

the condition, it will play a certain animation with a certain effect. The

loading scene of the game is also programmed asynchronously to load 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

trigger it at the right time.

Calling a certain function like AttackButtonClicked is one of the ways

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

enemy requires a different approach because of the variables and condition

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.

RIM (Rizal in Multiverse) 2-6


Humanoid Rigged Models have access

to “Mecanim” which lets the developer

set up the animation using a certain

parameter like speed, that determines

whether the player is walking, running, or

in Idle mode; which means you`re not Figure 2. 2 Humanoid Rigging

doing anything during that time.

To set up the animation

to trigger at the right time,

there is also a need to add

a condition in the lines

that Figure 2.3 Mecanim

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

play the Idle animation set.

RIM (Rizal in Multiverse) 2-7


2.1.1.3 Music Production

In producing the soundtrack, it can be a recorded music accompanying

and synchronized as a feature in a motion picture, film, programs and video

games. In producing the soundtrack of the game, the developers provided a

Musical Instrument Digital Interface or MIDI file which represents the

notes to be used for the soundtrack to be produced. The developers

produced sounds that were used in early games of Gameboy such as Mario

Bros., Pacman, Legend of Zelda, and Contra.

 Music theory is frequently concerned with describing how musicians

and composers make music, including tuning systems and

composition methods among other topics. Because of the ever-

expanding conception of what constitutes music, a more

inclusive definition could be that music theory is the

consideration of any sonic phenomena, including silence, as

they relate to music. This is not an absolute guideline; for

example, the study of "music" in the Quadrivium liberal arts

university curriculum that was common in medieval Europe

was an abstract system of proportions that was carefully

studied at a distance from actual musical practice. However,

this medieval discipline became the basis for tuning systems

in later centuries, and it is generally included in modern

scholarship on the history of music theory [OXFD2014].

RIM (Rizal in Multiverse) 2-8


2.1.1.4 Rendering

3D Rendering is the process of producing an image based on three-

dimensional data stored within a computer. 3D rendering is a creative

process that is similar to photography or cinematography, because you are

lighting and staging scenes and producing images. Unlike regular

photography, however, the scenes being photographed are imaginary, and

everything appearing in 3D rendering needs to be created (or re-created) in

the computer before it can be rendered [JRBR2002].

In the case of the developers, the rendering of the models was in low

poly, low poly means 3D computer graphics with a small number of

polygons. The developers have chosen low poly 3D because the models

were rendered with less time.

2.1.1.5 Texture Mapping

Texture Mapping is the process of applying the color of the material

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

represents the base colors.

RIM (Rizal in Multiverse) 2-9


2.1.1.6 Game Engine

It is a software framework designed for the creation and

development of video games. Developers use them to create games for

consoles, mobile devices and personal computers. The core functionality

typically provided by a game engine includes a rendering engine

("renderer") for 2D or 3D graphics, a physics threading, localization

support, scene graph, and may include video support for cinematics.

The process of game development is often economized, in large part, by

reusing/adapting the same game engine to create different games, or to

make it easier to port games to multiple platforms [UN3D2017].

2.1.1.7 Game Debugging

Developing software programs undergo heavy testing, updating,

troubleshooting and maintenance. Normally, software contains errors and

bugs, which are routinely removed. In the debugging process, complete

software programs are regularly compiled and executed to identify and

rectify issues. Large software programs, which contain millions of source

code lines, are divided into small components. For efficiency, each

component is debugged separately at first, followed by the program as a

whole [TCNP2016].

RIM (Rizal in Multiverse)


2 - 10
2.1.1.8 Building a Player/ APK

The Unity build system compiles app resources and source code,

and packages them into APKs that you can test, deploy,

sign, and distribute. Unity 3D uses Gradle, an advanced build toolkit, to

automate and manage the build process, while allowing you to define

flexible custom build configurations. Each build configuration can 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

toolkit to provide processes and configurable settings that are specific to

building and testing Android applications.

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

function in function of frames.

RIM (Rizal in Multiverse) 2 - 11


Chapter 3

RIM (RIZAL IN MULTIVERSE)

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

save Earth 2 under the ghastly terror of the evil, Xanos.

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.

RIM (Rizal in Multiverse)


3.2 Game Concept

3.2.1 Game Category Selection

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

setting that can interact within the game's imaginary world.

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

the death of the boar.

3.3 Data Gathering

3.3.1 Data Gathering Procedure and Outputs

It’s a tough work, because it consumed a lot of work and time collecting data.

The developers learned the sense of cooperation, discipline and responsibility as a

group. The hardest work for the developers is the research part because of a lot of

information that the developers needs to consider.

Data gathering is the method in identifying the outputs to satisfy the

developers. This includes time management and brainstorming. The developers used

research, observation and interview to finish this project.

RIM (Rizal in Multiverse)


3-2
 Research in library

The developers gathered data from past studies conducted that are

related to app development. The past projects, researches and

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.

 Internet Data Mining

Through research on the internet, the developers gathered a lot of

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

By observing different games that has a connection about the life

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

The developers conducted interviews to the students of STI

College Lucena and other smartphone users. The developers asked

them what do they know about Dr. Jose Rizal? and their answer are

RIM (Rizal in Multiverse)


3-3
the same which is a “Hero” and the author of the books “El

Filibusterismo and Noli Metangere”. The developers also asked them

if they know that Dr. Jose Rizal used drug called “Hashish”. and most

of their answers project amazement. The developers realized that

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

The Iterative model is a particular implementation of a software development life

cycle (SDLC) that focuses on an initial, simplified implementation, which then

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

completion of the cycle incrementally improving and iterating on the software.

Enhancements can quickly be recognized and implemented throughout each iteration,

allowing the next iteration to be at least marginally better than the last.

RIM (Rizal in Multiverse)


3-4
Figure 3. 1 Iterative Modeling

The developers chose the Iterative development methodology because this

methodology implemented the rework approach. The rework approach is a technique

that involves refining the product until the requirements are met. That’s why this is

perfect for game development. Iterative development is composed of the following

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

must do to create a satisfying, entertaining and educational game.

Implementing this will let the developers create a framework that can serve as

a guide and a goal for the developers.

 Requirements Gathering

After planning, the developers gathered the hardware requirements that

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

communicate with each other.

 Analysis and Design.

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

is a different task because in order to create a scene that compliments the

character; the safe way to do that is to create a model for the characters first

and then apply the perfect theme for the model.

 Implementation

This is the gateway for the deployment as this is where visions and dreams

become a reality. In implementation, the developers also applied the

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

phase which is one of the purposes of Iterative Modeling.

 Testing

After the initial planning, analyzing and designing phase, the

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

RIM (Rizal in Multiverse)


3-6
analysis and design phase to analyze what went wrong and fix the

problem or bug that occurred during the testing phase.

 Evaluation

In the evaluation stage, the developers created a prototype for the

developers and beta testers to evaluate some of them namely are Mr.Renzo

Surell, Geroshi Germidia and the developer’s adviser Mr. Sammir Glorioso

who is a great part of the development.

 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

developers gain experience about game development.

3.5 Schedule of Activities

RIM (Rizal in Multiverse) 3-7


3.2 ‘Schedule of Activities’

RIM (Rizal in Multiverse)


3-8
It served as the calendar of the developers in making and finishing the application.

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

member conducted the gathering of information to identify what processes to do and

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,

and it keeps us on track to accomplish your goals.

3.6 Resources

RIM (Rizal in Multiverse)


3-9
3.6.1 Software

The developers considered the following software in order to design

and develop this application and also the codes of the interfaced of the application.

 Blender

Figure 3.3 Blender

This software used in designing their models, because it’s the most

referable software in when it comes in 3D designing. It is free and open-

source 3D computer graphics software tool set used for creating animated

films, visual effects, art, 3D printed models, interactive 3D applications

and video games. Blender's features include 3D modeling, UV

unwrapping, texturing, raster graphics editing, rigging,

skinning, particle simulation, animating, rendering. It further features an

integrated game engine.

 Unity Game Engine

Figure 3.4 Unity Game Engine

RIM (Rizal in Multiverse)


3 - 10
A cross-platform game engine developed by Unity Technologies,

which is primarily used to develop video games, consoles and mobile

devices. The developers decided to use this software because this is the most

recommended software in developing a mobile app. It could be run in at

least Intel i3 core, and it’s okay in 2GB dedicated video card.

 Photoshop CS6

Figure 3.5 Photoshop CS6

Adobe Photoshop is a raster graphics editor developed and

published by Adobe Systems. It was created in 1988 by Thomas and John

Knoll. Since then, it has become the most effective to industry standard

in raster graphics editing. Photoshop is editing software for pictures and

GIF to.

In this software, the developers can easily manipulate and edit

pictures and graphics designs they used in their game. It could be run in

Intel i3 core too, and with at least 2GB RAM.

RIM (Rizal in Multiverse)


3 - 11
 FL Studios

Figure 3.6 FL Studios

FL Studio 12 is a complete software music production environment

or Digital Audio Workstation (DAW) [FLSD2012] representing more than

18 years of innovative developments. It has everything needed in one

package to compose, arrange, record, edit, mix and master professional

quality music. FL Studio is now one of the worlds’s most popular DAWs

and is used by the most creative artists

3.6.2 Hardware for development

These are the different hardware components used for developing the RIM

by the developers.

 Acer Laptop

Figure 3.7 Acer Laptop

RIM (Rizal in Multiverse) 3 - 12


The developers used this laptop because; it has Intel i3 core

with 2 GB RAM and 64-bit OS that the developers used in

documentation. But Photoshop CS6 is congenial in this hardware.

It was not compatible to use in coding and animation because

of insufficient RAM, there will be a problem in rendering and

testing. The developers used this Acer laptop in designing and

documentation.

 Sony Laptop

Figure 3.8 Sony Vaio

The laptop used in coding and designing the developers’

models using Blender, Unity, and Photoshop. Because it has Intel

i5 core with 4GB RAM, but it only has 32-bit OS. Modelling, used

in designing and coding was make in this hardware.

 Toshiba Laptop

Figure 3.9 Toshiba

RIM (Rizal in Multiverse)


3 - 13
Same with the Acer laptop that the developers used, it has

the same specs. Intel i3 core with 2GB RAM and 64-bit OS. But

this hardware was used by the developers in designing in Photoshop

full time.

3.6.3 Hardware for implementation

Requirements for implementing the application on Android phones:

 Minimum OS: Android 5.0 Lollipop

 At least 500 MB of free space in Storage or SD Card.

 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.

RIM (Rizal in Multiverse) 3 3- -1514


Chapter 4

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

RIM (Rizal in Multiverse)


Unit testing is a software development process in which the smallest

testable parts of an application, called units, are individually and

independently scrutinized for proper operation [MGRS2017]. The

developers checked each display of the game to know if it is working well.

In unit testing, the developers encountered problems such as the joy stick

UI shadier not included in building.

During the unit testing process, it helped the developers to debug

and write better codes to improve the failed design. It also helped the

developers to avoid lapses of changes and repeating the errors.

 Integration Testing

Once all the individual units are created and tested, the developers

started combining those “Unit Tested” modules and begun doing the

integrated testing [SPCR2017]. In integrating different modules, there are

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

RIM (Rizal in Multiverse)


4-2
your sword; so, if those two collides there will be an interaction that damages

the enemy.

 Functional Testing

In functional testing, basically, the testing of the functions

of component or application is done. It refers to activities that verify a

specific action or function of the code [ISTQ2017]. After the developers

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.

4.3 Result and Analysis

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

RIM (Rizal in Multiverse)


4-3
like Shaders, textures that affects both in-game development. And this is one of the most

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

can defeat Xanos who is ghastly terrorizing Earth 2.

RIM (Rizal in Multiverse)


4-4
Chapter 5

CONCLUSION

Testing, observation, and interview processes were performed by the developers,

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

with Dr. Jose Rizal.

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

so that they can reach a deeper understanding about the game.

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

RIM (Rizal in Multiverse)


developers got an idea to make a game that will entertain the users and let them understand

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-

Playing Game, which is also the developers’ recommendation.

RIM (Rizal in Multiverse)


BIBLIOGRAPHY

[JRBR2002] Jeremy Birn (2002). “3D Rendering”

http://www.3drender.com/glossary/3drendering.html

[TTND2017] Michael Guta (2017). “The Trends”

https://www.smallbiztrends.com/2017_08/google-playbook-for-

developers.html

[MTCT2017] Mindtolls (2017). “Mindtolls”

https://www.mindtolls.com/page/artcile/newPPM_71.html

[FLIM2012] Image Line Software (2012). “Image Line”

https://www.image-line.com/flstudio/

[MGRS2017] Margaret Rouse (2017). “Techtarget”

https://www.searchofsoftwarequality.com/techtarget.com/definitio

n/unit-testing

[SPCR2017] Shilpa C. Roy (2017). “Software Testing”

https://www.softwaretestinghelp.com/what-is-integration-testing/
[ISTQ2017] ISTQB (2017). “ISTQBExam Certification”

https://www.istqbexamcertification.com/what-is-functional-

testing-testing/

[MGRC2015] Miguel R. Camus (2015). “Business Inquirer”

https://www.business.inquirer.net /smartphone/ use-in-seen-

rising.html

[LIWI2017] Priya Viswanathan (2017). “Life Wire”

https://www.lifewire.com/google-play-store-2373346/

[GDFM2017] Godfirms (2017). “Godfirm”

https://www.godfirms.com /glossary/what-is-play-store.html

[TJKL2011] KMahesh (2011). “Creative Over flow”

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

[UN3D2017] Unity 3D (2017). “Unity Player”

https://unity3d.com/learn/tutorials/topics/interface-essentials/build-

and player-settings

[UN3D2015] Unity 3D (2015). “Unity Building”

https://unity3d.com/learn/tutorials/topics/mobile-touch/building-

your-unity-game-android-device-testing

[TLND2014] Nerd Focus (2014). “The Lord of the Nerds”

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/

[SPOT2015] Spot (2015). “Spot”

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

[MTNL2017] Music Theory (2017). “Music Theory”

https://www.musictheory.net/lessons

[SUUS2014] Debamoy Ghosh (2014). “Skecthup Space”

http://www.sketchup-ur-space.com/2014/aug/theory-of-3D-

modeling.html

[STMT2016] Sound Training College (2016). “Sound Training”

https://soundtraining.com/online/course/music-theory-for-

electronic-music-production/

[CGML2013] CG Michael (2013). “CG Michael”

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

would not have the wisdom or the physical ability to do so.

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.

Estibal taking time to encourage and motivate them to do this work.

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

general attainment of their education.

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

“Main Menu Scene”

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.

“Tutorial Menu Scene”

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

with Mariano Ponce and Juan Luna at Paris.

“Third Quest Scene”

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”

that he used for scientific purposes.


“Boss Mode Scene”

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

Dragon of Xanos in order to reach the fifth quest.

“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

expressed in his poem.


APPENDIX B
Journals

June 18, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Finalized the groupings for IT Special Project has been selected

Mr. Sammir G. Glorioso

June 19, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Brainstormed for the title of the IT special project


Mr. Sammir G. Glorioso

June 20, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Finalized the concept of the game.

Mr. Sammir G. Glorioso

June 21, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Finalized the title proposal for the project

Mr. Sammir G. Glorioso


July 14, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

IT Special Project Title Proposal Defense

Mr. Sammir G. Glorioso

July 20, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Submitted the final title of the IT Special Project.

Mr. Sammir G. Glorioso


July 30, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Start of sketching the models of characters

Mr. Sammir G. Glorioso

August 5, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Designing and modelling of the environment of the game

Mr. Sammir G. Glorioso


August 15, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Start of modelling the characters of the game

Mr. Sammir G. Glorioso

August 25, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Start of coding in the Unity Game Engine

Mr. Sammir G. Glorioso


August 30, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

The developers consulted the adviser about the game and let the adviser be one of
the beta testers.

Mr. Sammir G. Glorioso

September 5, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Debugging errors in the game.

Mr. Sammir G. Glorioso


September 15, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Building the game player in Unity.

Mr. Sammir G. Glorioso

Setptember 20, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Designing the next scene of the game.

Mr. Sammir G. Glorioso


September 23, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Coding and placing game objects.

Mr. Sammir G. Glorioso

September 24, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Mock defense to the project adviser

Mr. Sammir G. Glorioso


September 27, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Building the game player in Unity.

Mr. Sammir G. Glorioso

September 29, 2017

De Torres, Franz Lawrenz A.

Ebora, Jayvee P.

Pillone, Paul Alexis A.

Alayan, Harvey B.

Final Defense.

Mr. Sammir G. Glorioso


APPENDIX C
Source Codes

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
}

public class SimpleJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPoi


nterDownHandler
{
public Camera CurrentEventCamera { get; set; }
public float MovementRange = 50f;
public string HorizontalAxisName = "Horizontal";

public string VerticalAxisName = "Vertical";

[Space(15f)] public bool HideOnRelease;


public bool SnapsToFinger = true;

public ControlMovementDirection JoystickMoveAxis = ControlMovementDirection


.Both;

public Image JoystickBase;


public Image Stick;

public RectTransform TouchZone;


private Vector2 _initialStickPosition;
private Vector2 _intermediateStickPosition;
private Vector2 _initialBasePosition;
private RectTransform _baseTransform;
private RectTransform _stickTransform;

private float _oneOverMovementRange;

protected VirtualAxis HorizintalAxis;


protected VirtualAxis VerticalAxis;

private void Awake()


{
_stickTransform = Stick.GetComponent<RectTransform>();
_baseTransform = JoystickBase.GetComponent<RectTransform>();

_initialStickPosition = _stickTransform.anchoredPosition;
_intermediateStickPosition = _initialStickPosition;
_initialBasePosition = _baseTransform.anchoredPosition;

_stickTransform.anchoredPosition = _initialStickPosition;
_baseTransform.anchoredPosition = _initialBasePosition;

_oneOverMovementRange = 1f / MovementRange;
}

private void OnEnable()

HorizintalAxis = HorizintalAxis ?? new VirtualAxis(HorizontalAxisName);


VerticalAxis = VerticalAxis ?? new VirtualAxis(VerticalAxisName)

CnInputManager.RegisterVirtualAxis(HorizintalAxis);
CnInputManager.RegisterVirtualAxis(VerticalAxis);
}

private void OnDisable()


{
CnInputManager.UnregisterVirtualAxis(HorizintalAxis);
CnInputManager.UnregisterVirtualAxis(VerticalAxis);
}
public virtual void OnDrag(PointerEventData eventData)
CurrentEventCamera = eventData.pressEventCamera ?? CurrentEventCamer
a;

Vector3 worldJoystickPosition;
RectTransformUtility.ScreenPointToWorldPointInRectangle(_stickTransform, ev
entData.position,
CurrentEventCamera, out worldJoystickPosition);

_stickTransform.position = worldJoystickPosition; var stickAnchoredPositi


on = _stickTransform.anchoredPosition;
_baseTransform.anchoredPosition = _baseTransform.anchoredPosition; if (
(JoystickMoveAxis & ControlMovementDirection.Horizontal) == 0)
{
stickAnchoredPosition.x = _intermediateStickPosition.x;
}
if ((JoystickMoveAxis & ControlMovementDirection.Vertical) == 0)
{
stickAnchoredPosition.y = _intermediateStickPosition.y;
}

_stickTransform.anchoredPosition = stickAnchoredPosition;

Vector2 difference = new Vector2(stickAnchoredPosition.x, stickAnchoredPositi


on.y) - _intermediateStickPosition;

var diffMagnitude = difference.magnitude;


var normalizedDifference = difference / diffMagnitude;

if (diffMagnitude > MovementRange)


{
if (MoveBase && SnapsToFinger)
{ var baseMovementDifference = difference.magnitude - Movemen
tRange;
var addition = normalizedDifference * baseMovementDifference;
_baseTransform.anchoredPosition += addition;
_intermediateStickPosition += addition;
}
else
{
_stickTransform.anchoredPosition = _intermediateStickPosition + normalize
dDifference * MovementRange;
}
}
var finalStickAnchoredPosition = _stickTransform.anchoredPosition;
Vector2 finalDifference = new Vector2(finalStickAnchoredPosition.x, finalStickAnch
oredPosition.y) - _intermediateStickPosition; var horizontalValue = Mathf.Clamp(
finalDifference.x * _oneOverMovementRange, -1f, 1f);
var verticalValue = Mathf.Clamp(finalDifference.y * _oneOverMovementRange,
-1f, 1f); HorizintalAxis.Value = horizontalValue;
VerticalAxis.Value = verticalValue;
}

public void OnPointerUp(PointerEventData eventData)


{
_baseTransform.anchoredPosition = _initialBasePosition;
_stickTransform.anchoredPosition = _initialStickPosition;
_intermediateStickPosition = _initialStickPosition;

HorizintalAxis.Value = VerticalAxis.Value = 0f;

public void OnPointerDown(PointerEventData eventData)


{

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;

var inputVector = new Vector3(CnInputManager.GetAxis("Horizontal"), CnInputM


anager.GetAxis("Vertical"));
Vector3 movementVector = Vector3.zero;

if (inputVector.sqrMagnitude > 0.001f)


{
movementVector = _mainCameraTransform.TransformDirection(inputVector);
movementVector.y = 0f ;
movementVector.Normalize();

_transform.forward += movementVector;
}

_characterController.Move(movementVector * MovementSpeed * Time.deltaTime);


}
}

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 ();
}

public void WalkAnimation()


{

float h = CnInputManager.GetAxis ("Horizontal");

if (h != 0) {

anim.SetBool ("isWalking", true);

} else {

anim.SetBool ("isWalking", false);


}

public void PlayAnimation() {


colliderOfSword.SetActive (false);

anim.Play ("Run");

}
public void AttackAnimation()
{
colliderOfSword.SetActive (true);
anim.Play ("Attack");

Animator Enemy

public class AnimatorEnemy : MonoBehaviour {


NavMeshAgent agent;
Transform target;
Animator anim;
float time;

void Start()
{

anim = GetComponent<Animator> ();


agent = GetComponent<NavMeshAgent> ();
target = PlayerManager.instance.player.transform;

void Update()
{
WalkAnimation();

}
public void WalkAnimation()
{

float h = agent.velocity.magnitude / agent.speed;

if (h != 0) {
anim.SetBool ("isWalking", true);

} else {

anim.SetBool ("isWalking", false);

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;

// public event System.Action OnAttack;


CharacterStats myStats;

void Start()
{
anim = GetComponent<Animator> ();
myStats=GetComponent<CharacterStats>();

void Update()
{

if (damaged) {

damageImage.color = flashColor;

} else {

damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed *


Time.deltaTime);

}
damaged = false;

attackCooldown -= Time.deltaTime;
}

public void Attack(CharacterStats targetStats)


{

if (playerHP.value <= 0) {

anim.SetBool ("isAttackingBoar", false);


anim.SetBool ("isPlayerDead", true);

}
if (attackCooldown <= 0f) {

StartCoroutine (DoDamage (targetStats, attackDelay));


attackCooldown = 1f / attackSpeed;

}
}

IEnumerator DoDamage(CharacterStats stats,float delay)


{

anim.SetBool ("isAttacking", true);


anim.SetBool ("isAttackingBoar", true);

yield return new WaitForSeconds (delay);

damaged = true;
stats.TakeDamage (myStats.damage.GetValue ());
}

AudioSFX

public class AudioSFX : MonoBehaviour {


public AudioClip scream1,footSteps;
public AudioSource audioS;

void Scream()
{
audioS.PlayOneShot (scream1);

void Fs()
{
audioS.PlayOneShot (footSteps);

}
PlayerStats

public class PlayerStats : CharacterStats{

void Start () {
EquipmentManager.instance.onEquipmentChanged += OnEquipmentChanged;

void OnEquipmentChanged(Equipment newItem,Equipment oldItem)


{
if (newItem != null) {
armor.AddModifier (newItem.armorModifier);
damage.AddModifier (newItem.damageModifier);
}

if(oldItem!=null)
{
armor.RemoveModifier (oldItem.armorModifier);
damage.RemoveModifier (oldItem.damageModifier);
}

}
public override void Die()
{

Exit

public class Exit : MonoBehaviour {

public void exitA()


{
Application.Quit();

}
EnemyController

public class EnemyController : MonoBehaviour {


public float lookRadius=10f;
Transform target;
NavMeshAgent agent;
CharacterCombat combat;
public Slider skelHP, playerHp;
Animator anim;

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;

float distance = Vector3.Distance (target.position, transform.position);


if (distance <= lookRadius)
{

agent.SetDestination (target.position);

if (distance > agent.stoppingDistance)


return;

if (distance <= agent.stoppingDistance) {

CharacterStats targetStats=target.GetComponent<CharacterStats> ();

if (targetStats != null) {
combat.Attack (targetStats);

//anim.SetBool ("isAttackingBoar", true);


}

FaceTarget ();

}
}

void FaceTarget(){

Vector3 direction = (target.position - transform.position).normalized;

Quaternion lookRotation = Quaternion.LookRotation (new Vector3 (direction.x, 0, d


irection.z));
transform.rotation = Quaternion.Slerp (transform.rotation, lookRotation, Time.delta
Time * 5f);

void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);

}
}

AfterPause

public class afterPause : MonoBehaviour {

public void StopTime()


{
Time.timeScale = 0;

}
}

public class PlayerManager : MonoBehaviour {

#region PlayerManangerInstance

public static PlayerManager instance;


void Awake ()
{
instance = this;

}
#endregion

public GameObject player;


public GameObject EnemySkeleton;
public void KillPlayer()
{

}
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

public class Interactable : MonoBehaviour {

public float radius =3f;


public Transform interactionTransform;
bool isFocus=false;
bool hasInteracted=false;
Transform player;

public virtual void Interact()


{
Debug.Log ("Interacting"+ transform.name);

}
void Update()
{
if (isFocus && !hasInteracted) {
float distance = Vector3.Distance (player.position, interactionTransform.position)
;
if (distance <= radius) {
Interact ();
hasInteracted = true;
}
}

public void OnFocused (Transform playerTransform)


{
isFocus = true;
player = playerTransform;
hasInteracted = false;

}
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 ();
}
}

public void MoveToPoint(Vector3 point)


{
agent.SetDestination(point);
}

public void FollowTarget (Interactable newTarget)

{
agent.stoppingDistance = newTarget.radius * .8f;
agent.updateRotation = false;
target = newTarget.interactionTransform;

}
public void StopFollowingTarget(){
agent.stoppingDistance = 0f;
agent.updateRotation = true;
target = null;

}
void FaceTarget(){

Vector3 direction = (target.position - transform.position).normalized;


Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x,0f, di
rection.z));
transform.rotation = Quaternion.Slerp(transform.rotation,lookRotation,Time.delta
Time * 5f);
}
}
lampClicked

public class lampClicked : MonoBehaviour {


public float lookRadius=10f;
public GameObject oldLamp,scroll,scrollInside,celebUI;
Animator anim;
Transform target;
void Start()
{
anim = GetComponent<Animator> ();

target = PlayerManager.instance.player.transform;

// Update is called once per frame


void Update () {

float distance = Vector3.Distance (target.position, transform.position);


if (distance <= lookRadius) {
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
if (hit.collider.tag == "Lamp") {
Debug.Log ("Clicked Lamp");
GameObject.Destroy (scroll);
scrollInside.SetActive (true);
celebUI.SetActive (true);
}

}
}
}

void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);

}
}
firstAnimaUI
public class firstAnimaUI : MonoBehaviour {

public GameObject kBoarUI;


public GameObject scrollHolded,oldLamp;
public GameObject questInfo, questInfoLamp;
public void KboarUIAccept()
{

GameObject.Destroy (kBoarUI);
GameObject.Destroy (questInfo);
questInfoLamp.SetActive (true);
scrollHolded.SetActive (true);
oldLamp.SetActive (true);

}
}
ConvertToRegMesh

public class ConvertToRegMesh : MonoBehaviour {


[ContextMenu("Convert to regular mesh")]
void Convert()
{
SkinnedMeshRenderer skinnedMeshRenderer = GetComponent<SkinnedMeshRend
erer> ();
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer> ();
MeshFilter meshFilter = gameObject.AddComponent<MeshFilter> ();
meshFilter.sharedMesh = skinnedMeshRenderer.sharedMesh;
meshRenderer.sharedMaterials = skinnedMeshRenderer.sharedMaterials;

DestroyImmediate (skinnedMeshRenderer);
DestroyImmediate (this);
}
}

Stat

[System.Serializable]
public class Stat{
[SerializeField]
private int baseValue;

private List<int>modifiers = new List <int>();


public int GetValue(){
int finalValue = baseValue;
modifiers.ForEach (x => finalValue += x);

return finalValue;
}

public void AddModifier (int modifier)


{
if (modifier != 0)
modifiers.Add (modifier);
}

public void RemoveModifier (int modifier)


{
if (modifier != 0)
modifiers.Remove (modifier);

}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

Hiding

public class hide : MonoBehaviour {


public GameObject Quest1Panel,pauseButton;
public GameObject Quest2Panel;
public GameObject Quest3Panel;
public GameObject Quest4Panel;
public GameObject Quest5Panel,canvasFT;
public GameObject Quest1;
public GameObject Quest2,Quest3,Quest4;
public GameObject gg;
public GameObject Beetle, Draco, Frog;
public GameObject hashandRizal;
public GameObject SkelWarrior;
public int counter;

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 ();

Debug.Log ("Beetle dafq" + counter);


Beetle.SetActive(false);

}
}
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 ();

Debug.Log ("Draco dafq" + counter);


Draco.SetActive(false);

}
}
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 counterChecker(){


if (counter == 3) {
Quest2Panel.SetActive (true);

}
}
public void Quest1Click(){
Quest1Panel.SetActive (false);
Quest1.SetActive (false);
Quest2.SetActive (true);
Beetle.SetActive (true);
Draco.SetActive (true);
Frog.SetActive (true);

public void Quest2Click()


{
Quest2Panel.SetActive (false);
Quest2.SetActive (false);
Quest3.SetActive (true);
SkelWarrior.SetActive(true);

}
public void Quest3Click()
{
Quest3.SetActive(false);
Quest4.SetActive(true);

public void canvastFT() {


canvasFT.SetActive(false);
pauseButton.SetActive (true);
}
public void hashCLick()
{

hashandRizal.SetActive (true);

}
}

Counter and Listener

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CounterAndListener : MonoBehaviour {

public GameObject gg;

public int counter;


bool draco=false,beetle=false,frog=false;
// Use this for initialization
void Start () {

// Update is called once per frame


void Update () {
if (counter == 3) {
setter ();

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++;

Debug.Log ("Draco 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 == "Frog") {
counter++;
beetle =true;
Debug.Log ("Frog dafq" + counter);

}
}

}
void setter()
{

gg.SetActive (true);
}
}

rapierHit

public class rapierHit : MonoBehaviour {


Animator anim;
public Slider skelHp;
public GameObject canvas;
public GameObject Hashish,swordCollider;

void Start () {
anim = GetComponent<Animator> ();
skelHp.value = 100;
}

// Update is called once per frame

void OnTriggerEnter(Collider other)


{
FindObjectOfType<AudioManager>().Play("PlayerAttacking");

skelHp.value -= 20;
if (skelHp.value <= 0) {
canvas.SetActive (false);
anim.SetBool ("isDead", true);
Hashish.SetActive (true);

Level Loader

public class LevelLoader : MonoBehaviour {

// Use this for initialization


public GameObject loadScreen,hashRizal,cfTop;
public Slider slider;

public void Quest4Click(int sceneIndex)


{
GameObject.Destroy (hashRizal);
GameObject.Destroy (cfTop);
StartCoroutine (LoadAsynchronously (sceneIndex));

IEnumerator LoadAsynchronously (int sceneIndex)


{
AsyncOperation operation=SceneManager.LoadSceneAsync (sceneIndex);

loadScreen.SetActive (true);

while (!operation.isDone) {
float progress = Mathf.Clamp01 (operation.progress / .9f);
slider.value = progress;
yield return null;

}
}
}

AudioManager

public class AudioManager : MonoBehaviour {

public Sound[] sounds;

// Use this for initialization


void Awake () {
foreach (Sound s in sounds) {

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;

}
}

public void Play (string name)


{

Sound s=Array.Find (sounds, sound => sound.name == name);


s.source.Play();

}
}

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

public class BoarEnemyController : MonoBehaviour {

public float lookRadius=10f;


Transform target;
NavMeshAgent agent;

void Start () {

// Update is called once per frame


void Update () {

void OnDrawGizmosSelected ()
{

Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, lookRadius);
}
}

RedDragonAnimator

public class RedDragonAnimator : MonoBehaviour {

NavMeshAgent agent;
Transform target;
Animator anim;
float time;
public GameObject audioManager;
void Start()
{

anim = GetComponent<Animator> ();


agent = GetComponent<NavMeshAgent> ();
target = PlayerManager.instance.player.transform;

void Update()
{

WalkAnimation();

}
public void WalkAnimation()
{

float h = agent.velocity.magnitude / agent.speed;

if (h != 0) {
anim.SetBool ("isRunning", true);

} else {
anim.SetBool ("isRunning", false);

}
}

RapierHitBoar

public class RapierHitBoar : MonoBehaviour {

Animator anim;
public Slider boarHP;
public int PlayerDamage=25;
public GameObject miUltimoAdios;
public GameObject camera1,camera2;

void Start () {
anim = GetComponent<Animator> ();
boarHP.value = 500;
}

// Update is called once per frame

void OnTriggerEnter(Collider other)


{

FindObjectOfType<AudioManager>().Play("PlayerAttackingSFX");

boarHP.value -= PlayerDamage;
if (boarHP.value <= 0) {

anim.SetBool ("isDead", true);

camera1.SetActive (false);
camera2.SetActive (true);

miUltimoAdios.SetActive (true);

}
}

Enemy Stats
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyStats : CharacterStats {

CharacterStats

public class CharacterStats : MonoBehaviour {

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 ();
}

public void TakeDamage(int damage)


{
damage -= armor.GetValue();
damage = Mathf.Clamp (damage, 0, int.MaxValue);
currentHealth -= damage;

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;

// public event System.Action OnAttack;

CharacterStats myStats;

void Start()
{
anim = GetComponent<Animator> ();
myStats=GetComponent<CharacterStats>();

void Update()
{

if (damaged) {

damageImage.color = flashColor;

} else {

damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed *


Time.deltaTime);

}
damaged = false;

attackCooldown -= Time.deltaTime;
}
public void Attack(CharacterStats targetStats)
{

if (playerHP.value <= 0) {

anim.SetBool ("isAttackingBoar", false);


anim.SetBool ("isPlayerDead", true);

}
if (attackCooldown <= 0f) {

StartCoroutine (DoDamage (targetStats, attackDelay));

attackCooldown = 1f / attackSpeed;

}
}

IEnumerator DoDamage(CharacterStats stats,float delay)


{

anim.SetBool ("isAttackingBoar", true);

yield return new WaitForSeconds (delay);

damaged = true;
stats.TakeDamage (myStats.damage.GetValue ());
}

ExitButton

public class ExitButton : MonoBehaviour {

public GameObject infoButton,hashRizal;


public void eButton(){
hashRizal.SetActive (true);
infoButton.SetActive (false);
}
}
showInfo

public class showInfo : MonoBehaviour {

public GameObject hashRizal,infoUI;

public void infoButton()


{
infoUI.SetActive (true);
hashRizal.SetActive (false);

}
}

CameraController

public class CameraController : MonoBehaviour {

public Transform target;

public Vector3 offset;


public float zoomSpeed = 4f;
public float minZoom = 5f;
public float maxZoom=15f;

private float currentZoom = 10f;


public float pitch=2f;
private float yawSpeed= 100f;

private float currentYaw=0f;


void Update()
{
currentZoom -= Input.GetAxis ("Mouse ScrollWheel") * zoomSpeed;
currentZoom = Mathf.Clamp (currentZoom,minZoom,maxZoom);
currentYaw -= Input.GetAxis ("Horizontal") * yawSpeed * Time.deltaTime;
}

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;

public class GameManager : MonoBehaviour {

scrollChecker

public class scrollChecker : MonoBehaviour {


public GameObject cam1,cam2;

void goToCam1 ()
{
cam1.SetActive (true);
cam2.SetActive (false);

}
}

scrollClicked

public class scrollClicked : MonoBehaviour {


public GameObject scroll;

public GameObject killedBoarUI;


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 == "Scroll") {

killedBoarUI.SetActive (true);

scroll.SetActive (false);

}
}
}

}
QuestClicker

public class QuestClicker : MonoBehaviour {


public GameObject questTab;
public GameObject questInfo,qInfoLamp;

public void questTabClick()


{
if (!questInfo.activeSelf) {
questInfo.SetActive (true);

return;
} else {

questInfo.SetActive (false);
return;
}

if (!qInfoLamp.activeSelf) {
qInfoLamp.SetActive (true);

} else {
qInfoLamp.SetActive (false);
}

Resource Persons

Prof. Bill Marlow O. Estibal

IT Special Project Coordinator

Information Technology Department

STI College Lucena

Bestibal@yahoo.com

Mr. Sammir G. Glorioso

IT Special Project Adviser

Information Technology Department

STI College Lucena

smpyan@yahoo.com

Mr. Renzo D. Surell

IT and CS Teacher

CS Department

STI College Lucena

Sure11renzo@yahoo.com
Personal Technical Vitae

FRANZ LAWRENZ A. DE TORRES

09569465881

Pogiato29@gmail.com

Malabanban Sur, Candelaria Quezon

JAYVEE P. EBORA

09973647454

Jayvee.ebora06@gmail.com

Camarines Norte

HARVEY B. ALAYAN

09151246612

alayanharvey@gmail.com

Pitogo, Quezon

ALEXIS PAUL A. PILLONE

09487005003

alexispaulpillone@gmail.com

Sariaya, Quezon

You might also like