root / proj / doc / specifications.tex @ 382
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} |