Project

General

Profile

Statistics
| Revision:

root / proj / doc / specifications.tex @ 375

History | View | Annotate | Download (8.86 KB)

1
\documentclass{article}
2
% Hyperreferences
3
\usepackage{hyperref}
4
% Margins
5
\usepackage[top=35mm,bottom=35mm,left=25mm,right=25mm]{geometry}
6
% Graphics and images
7
\usepackage{graphicx}
8
% Encodings (to render letters with diacritics and special characters)
9
\usepackage[utf8]{inputenc}
10
% Language
11
\usepackage[english]{babel}
12
% Section pagebreaks
13
\usepackage{titlesec}
14
\newcommand{\sectionbreak}{\clearpage}
15
\newcommand{\sectionnobreak}{% for when I want a section that does not break
16
  \global\toggletrue{afterpart}%
17
  \section
18
}
19
% Source code
20
\usepackage{listings}
21
\usepackage{xcolor}
22
\renewcommand{\lstlistingname}{File}
23
\lstset{
24
    frame=tb, % draw frame at top and bottom of the code
25
    tabsize=4, % tab space width
26
    numbers=left, % display line numbers on the left
27
	showstringspaces=false, % don't mark spaces in strings    
28
    commentstyle=\color{green}, % comment color
29
    keywordstyle=\color{blue}, % keyword color
30
    stringstyle=\color{red} % string color
31
}
32
\lstdefinelanguage{Maxima}{
33
	keywords={log,jacobian,determinant,subst},
34
	sensitive=true,
35
	comment=[n][\itshape]{/*}{*/}
36
}
37
% Tables with bold rows
38
\usepackage{tabularx}
39
\newcommand\setrow[1]{\gdef\rowmac{#1}#1\ignorespaces}
40
\newcommand\clearrow{\global\let\rowmac\relax}
41
\clearrow
42
% Math stuff
43
\usepackage[mathscr]{euscript}
44
\usepackage{amsmath,amssymb}
45
\usepackage{mathtools}
46
\usepackage{enumitem}
47
\newcommand{\expnumber}[2]{{#1}\mathrm{e}{#2}} % scientific notation
48
% Definitions, theorems, remarks,...
49
\usepackage{amsthm}
50
\newtheorem{definition}{Definition}[section]
51
\newtheorem{theorem}{Theorem}[section]
52
\newtheorem{corollary}{Corollary}[theorem]
53
\newtheorem{lemma}[theorem]{Lemma}
54
\renewcommand\qedsymbol{$\blacksquare$}
55
\theoremstyle{remark}
56
\newtheorem*{remark}{Remark}
57
% Contents title
58
\addto\captionsenglish{\renewcommand*\contentsname{Table of contents}}
59
% Headers and footers
60
\usepackage{fancyhdr}
61
\pagestyle{fancyplain}
62
\fancyhf{}
63
\lhead{ \fancyplain{}{LabWars (LCOM 2019/20 final project - Specification)}}
64
\lfoot{ \fancyplain{}{T5G03}}
65
\rfoot{ \fancyplain{}{\thepage} }
66
%
67
\newcommand{\email}[1]{
68
{\texttt{\href{mailto:#1}{#1}} }
69
}
70
\newcommand{\role}[1]{
71
\begin{tabular}{l l}
72
	\begin{minipage}[t]{30mm} \textbf{Roles} \end{minipage} &
73
	\begin{minipage}[t]{125mm} #1 \end{minipage}
74
\end{tabular}\\
75
}
76
\newcommand{\func}[1]{
77
\begin{tabular}{l l}
78
	\begin{minipage}[t]{30mm} \textbf{Functionalities} \end{minipage} &
79
	\begin{minipage}[t]{125mm} #1 \end{minipage}
80
\end{tabular}\\
81
}
82
% Metadata
83
\title{LabWars \\ \vspace*{4pt} \large LCOM 2019/20 final project - Specification}
84
\author{
85
T5G03\\
86
\begin{tabular}{r l}
87
	\email{up201806429@fe.up.pt} & Diogo Miguel Ferreira Rodrigues        \\
88
	\email{up201806554@fe.up.pt} & Telmo Alexandre Espirito Santo Baptista
89
\end{tabular}
90
}
91
\date{25/11/2019}
92
% Document
93
\begin{document}
94
%\begingroup
95
	\maketitle
96
%	\let\clearpage\relax
97
%	\setcounter{tocdepth}{2}
98
	\tableofcontents
99
%\endgroup
100
\section{Description}
101
This project consists of a shooting game in a walled map, where players watch the map from above and have their visibility restricted to their field of view. \par
102
The game will have several modes (single player, cooperative, deathmatch, zombie 1player and 2players), where each mode might have different rules and goals. \par
103
Bullets have a travel time and deal a certain amount of damage to the entities they hit. All entities have a certain health, corresponding to the total damage they can withstand before perishing.\par
104
Entities have a roughly circular \textit{body}, meaning
105
\begin{enumerate}
106
	\item A bullet is considered to hit an entity if it touches its body.
107
	\item Entities take up space in the map, thus making it impossible to have two entities too close to each other.
108
\end{enumerate}
109
\subsection{Autonomous opponents}
110
On some of the modes, players will have to face autonomous opponents, which will abide to one of the following behaviours:
111
\begin{itemize}
112
	\item Walk around the map in a pre-programmed fashion, shooting at players on sight.
113
	\item More sofisticated ways to oppose players, by using some heuristics, the simplest of which is to follow the player after he is detected, and if not on sight trying to guess where the player is.
114
\end{itemize}
115
\subsection{Single player}
116
In single-player mode, the goal is to eliminate all autonomous opponents. Additional prizes are awarded for time limits and health at the end of the match.
117
\subsection{Two players}
118
In two players mode, there are three possible sub-modes.
119
\subsubsection*{Cooperative}
120
In cooperative mode, two players have to eliminate all autonomous opponents. There is friendly fire, which results in a penalty for the infringing player.\par
121
If one of the players loses all his health, he is \textit{downed}, meaning he may not move or shoot but may be revived by the other player, given the other player performs the proper key presses when close enough to the downed player.
122
\subsubsection*{Deathmatch}
123
In deathmatch mode, two players face each other, the last to die wins.
124
\subsection{Zombie}
125
In zombie mode, one or two players have to survive multiple zombie waves of increasing difficulty. In this mode visibility is not limited. Zombies spawn from specific locations on the boundary of the map, and they know exactly where the one or two players are.\par
126
Depending on the success of the implementations, zombies will either move randomly or take the shortest path to the closest player. Zombies attack players with short range attacks.
127
\section{Modules}
128
\subsection{Timer (\texttt{timer})}
129
Module to be developed by Telmo Baptista (this module is almost fully-implemented in lab works).\\
130
\role{Manage screen refresh rate.}
131
\func{Timer periodic interrupts.}
132
\subsection{KBC}
133
\subsubsection{Keyboard (\texttt{kbd})}
134
Module to be developed by Telmo Baptista (this module is partially implemented in lab works).\\
135
\role{
136
Filling text fields.\\
137
In-game pause, other options, character movement.
138
}
139
\func{Keyboard in interrupt mode.}
140
\subsubsection{Mouse (\texttt{mouse})}
141
Module to be developed by Telmo Baptista (this module is partially implemented in lab works).\\
142
\role{
143
Menu items selection.\\
144
In-game weapon aiming.
145
}
146
\func{Mouse buttons and movement in interrupt mode.}
147
\subsection{Graphics (\texttt{graph})}
148
Module to be developed by Diogo Rodrigues (this module is partially implemented in lab works).\\
149
This module will include a generic interface to handle graphics and drawing.\\\\
150
\role{Graphics display on menus and in-game.}
151
\func{Video Card in graphic mode with direct color encoding, dynamic updating of VRAM/screen.}
152
\subsection{Real time clock (\texttt{rtc})}
153
Module to be developed by Telmo Baptista.\\
154
\role{
155
Score dates.\\
156
In-game time since the beginning of the match.
157
}
158
\func{Use of the RTC functionalities needed to implement the requirements stated in the role of the device.}
159
\subsection{UART (\texttt{uart})}
160
Module to be developed by Diogo Rodrigues.\\
161
\role{Two-player matches in distinct physical computers.}
162
\func{Point-to-point communication between two computers.}
163
\subsection{Menus (\texttt{menu})}
164
Module to be developed by Telmo Baptista.\\
165
This module will include all menus of the game.
166
\subsection{Entities (\texttt{ent})}
167
Module to be developed by Diogo Rodrigues.\\
168
This module will include all implementations related to the entities, namely health, weapons, damage, movement algorithms, etc.
169
\section{Development plan}
170
Bottom-up primarily.
171
\subsection{1st week}
172
Diogo will be working mainly on the graphics, such as:
173
\begin{enumerate}
174
	\item Design the main map, differentiating walls and ground to then implement collision.
175
	\item Design sprites for the characters.
176
	\item Work on animation of sprites, simple movement on the xOy plane.
177
	\item Work on the rotation of characters.
178
\end{enumerate}
179
Telmo will be focused on the player input that will command the movement.
180
\begin{enumerate}
181
	\item Work on the keyboard controls that will be the main movement of character.
182
	\item Work on mouse controls which will be used to shoot.
183
	\item Work on mouse movement that will be used for rotation of the characters.
184
\end{enumerate}
185
So each member will be focused on a different set of drivers, thus reducing dependence between each others' parts (modularity) and allowing parallel development.
186
\subsection{2nd week}
187
Diogo will be working mainly on the creation of entities for the game:
188
\begin{enumerate}
189
	\item Implement collision boxes.
190
	\item Add basic entities to use collision boxes.
191
	\item Basic game dynamic (game events), such as being shot and hitting walls preventing movement.
192
\end{enumerate}
193
Telmo will be focused on the integration of past week work.
194
\begin{enumerate}
195
	\item Integration of the character movements with the user controls.
196
\end{enumerate}
197
\subsection{3rd week}
198
Diogo will be mainly finishing and improving entity dynamics.\\
199
Telmo will be focused on the menus.
200
\subsection{After demo}
201
Revision of the development plan to fulfill the project needs.\\
202
Add in-game time.\\
203
Improve entities interaction.\\
204
Work on the communication between computers, to implement two-player modes.\\
205
\end{document}