Skip to content
Snippets Groups Projects
hack.tex 5.05 KiB
Newer Older
\subtitle{\textbf{Lab} - Game Design Hack}
\date{Monday (PM), 14 May 2018}

\begin{document}
	
	\begin{frame}
	\titlepage
	\end{frame}

	\section{Intro}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	
	\begin{frame}{CE810 game engine}
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Remember we mentioned that we built you a game engine...
			\item well, here it is.
		\end{itemize}
	\end{frame}
	
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\begin{frame}{Limitations}
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Games take place on a hex grid
			\item Games are turn-based
			\item No randomness \note{\item In fairness, it is the UI and AI that do not support it} 
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
		\end{itemize}

		\uncover<4>{We originally designed it for Civilization style games, but it's much more general than that.}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\end{frame}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\section{Game Engine}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\begin{frame}{Key Parts}
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item A game has Entity Types, Resources and Terrain
			\item Entity types have actions, costs and properties
			\item Resources and Terrain make up the maps
			\item Victory conditions tell you how to win (or lose)
		\end{itemize}
	\end{frame}
	
	\begin{frame}{Entity Types}
		\begin{itemize}[<+->]
			\item Used to \textbf{define} entities
			\item \textbf{Every} entity has a type
			\item Entity Types can \textbf{extend} other types
			\item Defines:
			\begin{itemize}
				\item Graphics
				\item Actions
				\item Properties
			\end{itemize}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
		\end{itemize}
	\end{frame}
	\begin{frame}[fragile]{Example: EntityType}
		\begin{minted}[breaklines,tabsize=4]{javascript}
{
	"name": "abstract_civilian",
	"properties": {
		"movement": 1,
		"health": 5,
		"attackRange": 1,
		"atkMelee": 1,
		"ter-grass": 1
	},
	"cost": {
		"food": 10
	},
		\end{minted}
	\end{frame}

	\begin{frame}[fragile]{Example: EntityType}
		\begin{minted}[breaklines,tabsize=4]{javascript}
		
	"_actions": [
		"Move",
		"MeleeAttackAction",
		"Build[farm]",
		"BuildOnResource[lumber_mill:wood]",
		"BuildOnResource[gold_mine:gold]",
		"Build[marketplace]"
	]
},
		\end{minted}
	\end{frame}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\begin{frame}{Entities}
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Have an entity type
			\item Has properties
		\end{itemize}
	\end{frame}

	\begin{frame}{Actions}
		\begin{block}{Actions}
			\textbf{What} an Entity can do
		\end{block}
		\begin{itemize}[<+->]
			\item 0 or more
			\item Parameterisable
			\item Inherited
		\end{itemize}
	\end{frame}

	\begin{frame}{Orders}
		\begin{block}{Order}
			An order is \textbf{generated} when an Action is used on a \textbf{particular} location	
		\end{block}
		\begin{itemize}[<+->]
			\item What an Entity actually does in its turn
			\item Used to \textbf{update} the game state
			\item Move Action $\rightarrow$ \textbf{multiple} possible Move Orders
		\end{itemize}
	\end{frame}

	\begin{frame}{Properties}
		\begin{itemize}[<+->]
			\item String $\rightarrow$ Integer mapping
			\item Used by default actions as well as custom ones
			\item Two sets per Entity
			\item Inherited	
		\end{itemize}
	\end{frame}

	\begin{frame}{Extensions}
		\begin{itemize}[<+->]
			\item The game is \textbf{extendible}
			\item You can \textbf{change} the json files \textbf{defining} the game
			\item You can \textbf{add} your own code
			\begin{itemize}
				\item It will be detected on the classpath
				\item Use the same as the built in items
			\end{itemize}
			\item You can add \textbf{new}:
			\begin{itemize}
				\item Actions
				\item Orders
				\item AI
				\item Victory Conditions
			\end{itemize}
		\end{itemize}
	\end{frame}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\section{Example - Hexxagon}

	\begin{frame}{Hexxagon}
		\begin{center}
			\only<1>{\includegraphics[width=0.8\linewidth]{images/gd_hexxagon}\\}
			\uncover<2->{\includegraphics[width=0.7\linewidth]{images/gd_hexxagon}\\}
			\only<2>{Entity types: piece, piece-p1, piece-p2}
			\only<3>{Terrain types: board}
			\only<4>{Actions: jump and clone}
			\only<5>{Resources: ticks (used to permit moving only one piece)}
			\only<6>{Victory conditions: LastManStanding, MostPiecesLock}
		\end{center}
	\end{frame}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed

\begin{frame}[fragile]{Entity Definition}
\begin{minted}[breaklines]{javascript}
  "name": "piece", // it's called 'piece'
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
  "properties": {
    "ter-playzone": 1, // it can 'walk' on playzone tiles
    "health": 1 // it has 1 health (things with no health die)
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
  },
  "_actions":[
    "Jump[tick]", // Jump Action (defined in Java)
    "Clone[tick]" // Clone action (defined in Java)
\end{minted}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
\end{frame}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\section{Patterns}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\begin{frame}{Movement Lock}
		Allow the player to only move one piece on their go
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Resource: time
			\item Only allow a move if the resource < current tick
			\item After a move is made, update the resource to tick + 1
		\end{itemize}
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
	\begin{frame}{Timers}
		You can define a timer by doing the following:
		
		\begin{itemize}[<+->]
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Create an automatic action that performs the effect that you'd like to achieve.
			\item Set requirements to be ``timeProperty $\geq$ timeRequired''
Joseph Walton-Rivers's avatar
Joseph Walton-Rivers committed
			\item Create an automatic action that generates 1 timeProperty
			\item Define the automatic actions as [generateAction, doneAction]
		\end{itemize}
Piers Williams's avatar
Piers Williams committed
\end{document}