
최범근 - Technical Director
- Main System of Engine
Making Entire structure of the engine - StateManager StateManager which manages all of states in the engine. There are various functions such as "AddState,MoveState,RestartState".
- Json File IO System
- Object Factory based on Components Object Factory based on components like unity, unreal engines. Each Objects have different components.
- Fmod SoundManager There is a soundmanager which uses FMOD. There are various functions such as "PlaySound, StopSound,PauseSound"
- Replaying System
- Pause System
- Option State
- Game Logic Game Logic manager which manages various game logics such as win condition, lose condition and the triggers
Using Jsoncpp Libary, I made a Json FileIO Class which utilizes reading and writing the JSON Files
In the game level, the system saves player's position, animation information per frame and replay the save data.
When the escape button is pressed,the previous state is saved and current state is changed to pause state.The game stops, Pause UIs appear. There are "Return the game, Restart the stage, Go to Level Select State".
Basic Option State, Player can adjust Fullscreen mode, sound on / off and there is credits. Logging System
- Main System of Engine
- Intergrated Imgui
- Game Launcher
- Archetype Editor
- Map Editor

To check the difficulty of the level, there is logging system, which records whole play time , death count, the time player consumes to clear certain level.

Using Imgui Libary, Efficient debugging is available. ObjectManager can adjust property of all objects. LevelManager can load and save the level during the run-time. SoundManager can play the music in the game.

Game Launcher using C#. Before Starting the game, the launcher will be run. In the Launcher, Adjusting Resolution, switching full screen ,language are supported.

Archetype Editor using C#. Making Archetype which will be used in the game is available.

Map Editor using C#. Easy Making level is available with the map editor.
유현준 - Producer
Graphics
- Animation
- Sprites
- Camera
- Scheduling
박경욱 - Lead Designer
Physics
- Player Controller
- Map Editor
- Gravity
- Scheduling

Project Duration : 2017.9 ~ 2018.6
Game Genre :2D Platformer Puzzle Game- Used Game Engine : ThumbUp Engine (Custom 2D Game Engine)
- Used Programming Language : C++, C
- Supported Platform : Windows PC
- Milestone : Beta
High Concept
“ RoteRote is 2D Platformer puzzle game where a player has to rotate to solve puzzles.
Detail Concept
Player should rotate the world 90 degrees or 180 degrees to escape the restricted area. .
Player should be careful because there are many hazards such as fallen boxes, sharp things and blue razer .
Game Flow
Splash Screen
When the game starts, Digipen logo, Team ThumbUp logo and Fmod logo appear on the screen. .
Option
In the Option State, Player can turn on or off the sound and set the fullscreen mode. There is also credits. .
Menu
RoteRote has 20 levels. In the level select, player can see the pre-view of the level. .
Game Screen
When the level starts, player's position is set as the level. Each level, there are different triggers which helps player clear the level. And also, there are many hazards which bother player to clear the level. To clear the level, Player should arrive at a certain area. .
Game Mechanism
Physics
The main physics for this game is focused on gravity, collision and accelerationness. The gravity will help game play by making objects to work like real life. The gravity will be applied on cannon balls and several obstacles. If there is no gravity, the game will not be fun because it is not realistic and the ball will go straight without deflection. .
Controls
RoteRote's Control is very simple. With Arrow Keys and SpaceBar, player can controls all movements. .
Win Condition
Win Condition is very simple. Player should arrive a certain area. However,in the difficult level, it is very hard to clear that there are many obstacles .
Lose Condition
If Player collides with obstacles,player dies..
Game Design
Game Level
In the level, there are various objects such as 90,180 degrees Rotation Trigger, Thorn, Blue Razer and Limited Trigger\ .
Life
There is no limited life in the game. Player can challenge the hard level whenever player want to play. .
HUD
HUD indicates the number of stage which player plays and background image also rotates by the Rotation triggers. This can help player notice that the world is rotated .
Sound
Basic Background Music is played.As the player moves, various sounds are played. All Sounds are from Digipen Sound Assests. .

TECHNICAL OVERVIEW
Systems:
Application, GameLogic, ObjectFactory, Physics, Graphics, StateManager and Sound Manager
Components
Transform, Controller, Sprite, Body, Button, Trigger and Animation
Technologies
SOIL, GLM, OpenGL, FMOD, custom 2D Physics, Jsoncpp and Imgui
Overview of Engine Architecture
Graphics
It renders all objects
Application:
Window is opened by application, and it control window events. For example, minimizing the window, alt+tab, control + shift + delete.
It detects and manages input.
StateManager
Controls all states
All states are loaded as json file, and json file loading is easily executed by json class.
Loaded level information are automatically added on object factory and it allows easy access to objects.
Object Factory
It controls all object in the game with ObjectID
Physics
It calculates all the physics and collisions in the game
Sound Manager
It handles all sounds in the game
CODING METHODS
There are some regulations that team has made in order to have some kind of cod standard for the team.
any member variables should begin with letter ‘m’
any parameter variables should begin with letter ‘p’
comment if variable names are not obvious
File naming conventions.
Filenames need to be related with code. If a file contains Vector class and its file purpose is only for Vector class, then the filename should be named as vector.cpp.
Almost of all files are named after the purpose code.
ThumbUp is using git as source control.
DEBUGGING TOOLS
ThumbUp Engine has a simple console to print out data and debug information and there is also debug assert which can stop player to go further if some bugs happen.
Using crtdbg, memory leaks are checked every debug times and this will be printed out in the output.
In the Imgui in our game’s debug mode, there are some controlling functions on the Imgui such as sound manager, camera manager, object manager, level manager and archetype editor.
On Sound manager, any types of sound files in sound folder can be played and muted. On the camera manager, changing all values of camera is available.
In the object manager, all objects are appeared and all of property of objects will be appeared as components they have. For example, in the transform, there are position, scale, rotation, in the sprite, there are colors, texture.
In the level manager, all of levels in the levels folder will be appeared. Saving current state is available and loading other level is also available.
In the archetype editor, many types of archetype can be made. Archetype’s name, object style, components can be set.
GRAPHICS

Graphics Pipeline receives all objects’ sprite and animation information.
It sends vertex data to shaders.
It also sends camera matrix information to vertex Shader.
On Vertex Shader, it process graphics rendering so that objects can be displayed on world coordination.
Order of how objects are rendered.
On ThumbUp Engine, Graphics Engine receives data from sprite and animation in order to render objects.
Graphics system is processed right after all systems are performed so that rendering will not interfere of objects’ movements.
Camera
Camera works as global variable and its member variables can be accessed so that it is easy to control Camera’s features.
ThumbUp Engine is using SDL to have API and OpenGL to render it on window.
Loading Assets
Sprites and animations are added through ObjectFactory and textures are loaded through ObjectFactory as well. And Level Manager has control over ObjectFactory, so it knows when objects can be created depending on levels.
On the level manager, it reads json file and levels with using json class. On the json class, converting json file to c++ stream and factory will spawn objects as json files
PHYSICS
What techniques will be used to implement the physics design?
Physics checks every each object collision, and resolve collision through the loop.
Explicit Euler integrator is used to calculate acceleration and velocity of objects.
Broad phase is function that only calculates colliding objects, but for now it works same as narrow phase.
What type of integration will you use (Euler, Improved Euler, Verlet, Runge-Kutta)?
ThumbUp Engine is currently using Explicit Euler Integrator
(v1 = v0 + a0Δt, x1 = x0 + v0Δt), these equations are called explicit Euler equations. These equations maintains the motion of the an object and calculates acceleration as force affected by mass.
What type of space partitioning will you use?
Since our game only uses axis-aligned bounding box (AABB), we do need space partitioning tree. Also, since map editor is grid based, space is automatically partitioned.
What type of collision detection will you use?
AABB collision check, using edges of two rectangular, calculates distance of Two Objects and compare whether it is inside of range or not.
PLAYER CONTROL
Rote Rote is a single player game.
The Keyboard is used as player control for the whole game.
Mouse is not applicable in game.
For option, level selection and pause states, arrow keys are used for selection and spacebar for decision.
On games, left and right arrows are used for direction keys and spacebar enables player to jump.
Player is able to attach on the walls, hold onto wall and jump wall to wall.
EDITOR
There are two editors in our game.
One is Imgui and the other is in game editor.
On the Imgui, all of objects can be adjusted with slide bar and keyboard input by pressing control and mouse left click
Another game editor can be spawned by pressing F7.
Map editor can load its level and level objects can be fixed with mouse control.
Pressing no.1 can spawn a box object.
Objects can be selected by clicking left button of mouse and it becomes editable.
Locations of objects can be fixed by moving mouse.
While object is editable, scale can be adjusted by pressing right click of mouse and dragging it.
Location and scale will be fixed when mouse button is released.
AUDIO
ThumbUp game engine’s sound manager is operated in the system.
To play sound, sound system must be created and sound files must be loaded.
Each sound has its own sound id.
With sound ID, multiple sounds can be played and paused or resumed.
Adjusting volume is also supported. Using Drag and drop , sound files can be added in the sounds folder.
Appendix A
Tools and Editor Instructions
Map Editor
Instruction : Map editor is only available in DEBUG MODE and it is only for developer not users.
F7 : Launch Map editor, and turn off Map editor
F5 : Launch IMGUI EDITOR
Mouse left click : making object editable.
Mouse right click : making object editable.
Translation : when object is editable, it can be moved by mouse based on grid.
Scale : While pressing left control key, pressing left mouse click, move mouse and releasing mouse click can scale objects on scale of grid.
Rotate: While pressing R, press mouse left click, move mouse and releasing mouse click can rotate object.
Create Object:
Press 1, create box
Press 2, create wall
Press 3, create trigger 180
Press 4, create trigger 90
Press 5, create button
Delete Object : make object editable and press backspace. (In Map editor state, Imgui deleting should not be used)
Level load & save : load and save level by using Imgui.
How to use Imgui
On the Imgui, there is object manager, all of object's’ property can be changed
On the Imgui, there is archetype editor, archetype can be added easily based on components
On the Imgui, there is level manager, saving all object in the level is available and loading json level file is also supported
On the Imgui, there is sound manger, playing all sounds in the sound folder is available
PNG file and MP3 file Drag and Drop is supported, if the file is dropped , the file will be copied in the texture or sound folder

Introduction
2D platformer puzzle game where a player has to rotate the world to solve puzzles.
Development Team
Team Thumbup was borned by students who wanted to improve coding skills through cooperating each other. BeomGeun and HyunJun decided to work together since both live in a apartment and worked together on previous semester. Team Thumbup decided that to get KyungOok on the team since he had similar opinion as well. We decided to work together because no one was exceedingly better than others. We believe that this would challenge ourselves to do more works and develop ourselves as game developers.
In addition to that we have worked on making game Engine during summer vacation which gave us basic structure of the Engine.
Tools
Paint.net was used to modify textures.
Power Point was used to create menus and HUD
Visual Studio 2015 and custom ThumbUp Engine were used.
Imgui was a debugging tool for the game
Jsoncpp was a parser for reading json file.
OpenGL to support rendering
GLM to support math libraries
What went Right:
Communication
We talked a lot during summer vacation what game we are going to make for the next semester. Through a lot of discussions and watching a lot of video games on YouTube, we got inspirations from Megaman Antonion and we decided to make game where the world rotates.
We have promised that we would have to discuss what we had to do for each milestone and made specific plans. Whenever we had trouble understanding goals for each milestone, we learned that it was really great to discuss with professor because questions that he gave us really helped us to see details of the game.
Also, we talked to each other to check status of the game. Where were we heading and why we were heading toward the goal.
Since we lived close to each other, communication became easier because we can talk whenever we can in person
Plans and Schedules
Since all team members have little experiences in making game, we grew our insights to estimate of what we can do in a week. In addition, we have worked on project before, we made clear and specific goals for each week and schedules it better than last semester.
Lesson that we learned from last semester is that prepare everything in ahead. BeomGeun and HyunJun had trouble making installation before submission. It was definitely our faults however, this time we wanted to make sure that we are not making same mistakes again.
We looked over the rubric table early. We could know our status very easily. This enabled our team to make a huge progress on the game. This also was veryful when we made some schedules of our game.
Simplicity
We believe that RoteRote mechanism is very simple but it was cumbersome to design how we were going to implement how we are going to make the game. Once, mechanism was developed making game became easier.
Since its solving puzzles by rotating the world, it was easy to implement levels and come up with ideas to design levels.
Since the game design is very simple, when main game logic was implemented,developing speed of our game was rapidly accelerated.
Map editor is not fully developed but we had a simple one, it was enough to make some levels because our game is so simple
PlayTesting
We learned that having a bunch of playtest definitely help developers to have better games. So we made small playtests and surveys whenever we added new features on game. There were many feedbacks that we did expect however, it definitely made it clear for teammates to see what we can work on it
Based on playtests and getting feedbacks from normal people made us think new features that we have not considered it before.
Feedbacks helped us what direction we had to work on it and even though we worked on satisfying users’ feedbacks there were more feedbacks and dissatisfaction from players. On this part, we learned that there is never ending on developing a game.
Professor David
Professor David definitely helped us find out detail/specific goals for the game.
From splash screen, window resolution, location of player, blocks, jumps and etc… He mentioned that we never consider it was that important. We learned that these little things can have huge impact on player to learn about game.
Also, he helped us push toward to become professional when making a game.
What went Wrong:
Communication
Even though we had a good communication at first, because of busy individual schedules, we sometime had a hard time with the communication between team members.
We hesitated to point out the flaw that each member has. It caused our game slow progress.
Time management
We did not utilize time very well. We worked really hard at the last week because we had to focus on finishing assignments. If we managed our time more efficiently, we believe that RoteRote would turn out more delicately.
Also, this affected final exams as well. Due to the accumulated assignments we had little time to study for finals.
Relying too much on summer workshop engine
During the summer vacation, professors and upper classmates helped us build simple Engine structure. We thought that it was perfect to add more features on it. However, we found out that it had problems with custom matrix class and had trouble with it for while.
made more features and polished better for the project.
for levels and saved data.
Too much talking with each other
Since we are very close to each other, we often joke a lot while working on a project. This might make our game’s progress slow.
We believe that this has affected on other teams as well.
Theme (Level Design)
We did not have a consistent game theme, game character was astronaut but, however, game menu was icon based theme.
For this semester, we were not able to make various levels that uses our game concept since we focused on implementing game concept.
How we managed to solve problems:
Whenever we encountered problems with technical issues, we always asked TA and professor. With this help, we were able to solve many problems that we have faced. Also, we got many useful tips whenever we asked for help so that we would not make mistakes
To solve problem of theme, we will recruit someone for the artist. This will be very helpful to parts of arts.
In terms of understanding, at the beginning we relied on summer workshop engine too much because of this we had to go through Engine system again.
Future
Generally, we learned many lessons through this engine/game development.
We believe that we definitely need to work on time management so that we can evenly work on project, assignment and study for class. Also, we learned that communication is very important among team members, we are glad that we did not neglect communication among team members.
Also, we learned that we need to respect other people in a lab, we need to consider that this place is not granted for us.
© This webpage is formatted by TEMPLATED.co