LibreWands/Documentation/3-Developer.tex

235 lines
8.9 KiB
TeX

% This file is part of LibreWands.
% LibreWands is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
% LibreWands is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
% You should have received a copy of the GNU General Public License along with LibreWands. If not, see https://www.gnu.org/licenses/.
% ---
\part{Developer Manual}
\chapter{Work Timeline}
\section{Development cycles}
\subsection{Monthly Themes}
\begin{description}
\item[Jun] Initial planning. Announce on Diode Zone, Venera Social, Lemmy and the Trisquel forums. Get a Fediverse Blog page in circulation. Finally, announce on r/linux.
\item[Jul] World Design, classic. Announce on r/worldbuilding.
\item[Aug] World Design, implementation. Announce on r/programming\_ideas.
\item[Sep] World Design, testing. Announce on r/betatests.
\item[Oct] Battle mechanics design and implementation. Announce on r/gamedesign.
\item[Nov] Battle mechanics implementation and testing. Announce on r/betatests.
\item[Dec] Polish and Publish. Announce on r/freesoftware.
\end{description}
Finally, ideally once the new year rolls around, we'll be finished. Announce this beautiful game on r/linux.
\subsection{Monthly}
Create a new kanban project. Don't forget to review all major files in the project.
\begin{description}
\item[Week 1] Advance the project with new features.
\item[Week 2] Improve quality through feature freezing, bug hunting, quality tools and lowering the barrier of contribution.
\item[Week 3] Package the software for as many distributions as possible.
\item[Week 4] Advertise through carefully chosen media.
\end{description}
\subsection{Weekly}
On Mondays, plan out our week in the newly created monthly kanban project description on Gitea. Check our LiberaPay account for contributions.
\subsection{Daily}
\begin{itemize}
\item Check for issues and pull requests.
\item Check our Peertube channel and Lemmy community for notifications.
\item Work on our project.
\item Push all changes to Gitea when we're finished.
\end{itemize}
\chapter{Battle}
\section{Elemental Damage}
\begin{tabular}{ l | c c c c c }
X vs Y & Water & Fire & Wind & Earth & Aether \\
\hline
Water & 1.0 & 0.3 & 0.5 & 2.0 & 3.0\\
Fire & 3.0 & 1.0 & 0.3 & 0.5 & 2.0\\
Wind & 2.0 & 3.0 & 1.0 & 0.3 & 0.5\\
Earth & 0.5 & 2.0 & 3.0 & 1.0 & 0.3\\
Aether & 0.3 & 0.5 & 2.0 & 3.0 & 1.0\\
\end{tabular}
\section{Possible Monster Types}
\begin{itemize}
\item Pure Water
\item Water Wind
\item Water Earth
\item Pure Fire
\item Fire Earth
\item Fire Aether
\item Pure Wind
\item Wind Water
\item Wind Aether
\item Pure Earth
\item Earth Water
\item Earth Fire
\item Pure Aether
\item Aether Fire
\item Aether Wind
\end{itemize}
\chapter{Engine Design}
\section{Controls}
The controls used in this engine are based solely on the original Gameboy controls for simplicity and compatibility reasons, particularly with the Pinephone. Support for controllers is planned, but can currently be achieved through keybinding. Keyboard controls include the arrow keys, along with the \texttt{Z} and \texttt{X} buttons, as the primary and secondary buttons respectively. Instead of arrow keys, users of exotic keyboards such as on the Pinephone may use the \texttt{IJKL} keys instead of the arrow keys.
\section{Maps}
The best way to understand how maps work in this engine, is to look at the source code, as found in \texttt{engineMaps.h} and \texttt{engineMaps.c} respectively. Maps are stored in a struct array, and each map contains five types of tiles. Every tile has an \texttt{X} and \texttt{Y} coordinate, as well as a \texttt{T} and \texttt{C} attribute, which record the printable character representing the tile, and color code, respectively. See the five types of tiles in the \texttt{Map Editor} chapter in this book. Each tile then contains additional attributes, along with its type.
\subsection{Tile Types and Attributes}
It should be noted that all of these tiles contain an \texttt{active} attribute, that notes whether or not the tile is in use. This is only done in memory, and is to simplify memory management. These states \textit{should not} be saved to external files. For information on color codes, see the \texttt{Color Codes} section of this book.
\subsubsection{Basic Tiles}
Basic tiles are the funamental building blocks of any level. They'll certainly be used the most. They're used for anything that one cannot use another tile type for. They're usede for things such as walls and walkable tiles. These include one-way walls.
\begin{description}
\item[x] The X coordinate where it appears.
\item[y] The Y coordinate where it appears.
\item[t] The printable character that represents this tile.
\item[c] The color code of the tile.
\item[walk] Whether one can walk on this tile or not.
\end{description}
\subsubsection{Information Signs}
Information signs are used to give information to a player.
\begin{description}
\item[x] The X coordinate where it appears.
\item[y] The Y coordinate where it appears.
\item[t] The printable character that represents this tile.
\item[c] The color code of the tile.
\item[dialog] The information that should be displayed to the player.
\end{description}
\subsubsection{Object}
An item on the ground that a player can collect.
\begin{description}
\item[x] The X coordinate where it appears.
\item[y] The Y coordinate where it appears.
\item[t] The printable character that represents this tile.
\item[c] The color code of the tile.
\item[ID] The item ID number.
\end{description}
\subsubsection{Door}
A tile that, if steped on, transports the player to a new place.
\begin{description}
\item[x] The X coordinate where it appears.
\item[y] The Y coordinate where it appears.
\item[t] The printable character that represents this tile.
\item[c] The color code of the tile.
\item[ID] The map number that the player gets transported to.
\item[nx] The X coordinate that the player gets transported to.
\item[nx] The Y coordinate that the player gets transported to.
\end{description}
\subsubsection{Character}
A tile that represents a person. Every person is either passive or aggressive. They may walk or they may not. If they are aggressive, they'll battle the player using the monsters that they have in their inventory.
\begin{description}
\item[x] The X coordinate where it appears.
\item[y] The Y coordinate where it appears.
\item[t] The printable character that represents this tile.
\item[c] The color code of the tile.
\item[type] Whether this character is aggressive or not.
\item[move] Whether this character moves or not.
\item[name] The characters name.
\item[dialog1] What the character says when they are aggressive.
\item[dialog2] What the character says when they are passive.
\item[mon] The monsters that this character carries.
\end{description}
The monsters that a character carries are strored in a struct array with five elements. Each element includes the following attribues.
\begin{description}
\item[type] The ID number of the monster. 0 means there is no monster in this slot.
\item[level] The level of the monster in this slot.
\end{description}
\chapter{World Design}
The information in this chapter are merely suggestions. I've designed the engine to allow for as much creative freedom as possible. Feel free to break the rules, if it creates a more fun and/or interesting gaming experience.
The main concept of the game revolves around the idea of people carrying powerful monsters with them as they travel. They may choose to battle these monsters. The objective of this game is to collect all magic wands, which can be obtained from monster champions. To collect them all, is to become the best monster coach in the region. We focus mainly on early modern Southern European culture, including tarot cards, classical elements, rennaissance and baroque culture.
\section{Cities and Towns}
For every city except Coffee City, the following should be present and accessible.
\begin{itemize}
\item Heal Center per city.
\item Item center per city.
\item Wand Center per city.
\item Storyline quest.
\item Dungeon quest.
\item Amenity quest.
\end{itemize}
\subsection{Coffee City}
\begin{itemize}
\item Heal Center
\item Storyline fetch quest
\item Home
\item friends house
\end{itemize}
\subsection{Route 5}
\subsection{Bay City}
\begin{itemize}
\item Heal Center
\item Item center
\item Wand Center
\item Quest that unlocks dungeon and Wand Center to player.
\item Enemy Hideout Dungeon
\item Town Map Quest
\end{itemize}
\subsection{Bay Forest}
\subsection{Cardamom City}
\subsection{Mt. Cardamom}
\subsection{Vanilla City}
\subsection{Route 2}
\subsection{Cumin City}
\subsection{Rosemary Garden}
\subsection{Rosemary City}