|
@@ -29,7 +29,7 @@
|
29
|
29
|
\end{frame}
|
30
|
30
|
|
31
|
31
|
\begin{frame}
|
32
|
|
- \frametitle{Get it here!}
|
|
32
|
+ \frametitle{Get my presentation here!}
|
33
|
33
|
\href{https://gitlab.com/azrazalea/lisp-game-dev-presentation}{https://gitlab.com/azrazalea/lisp-game-dev-presentation}
|
34
|
34
|
\end{frame}
|
35
|
35
|
\section{What is lisp?}
|
|
@@ -41,6 +41,25 @@
|
41
|
41
|
\end{center}
|
42
|
42
|
\end{frame}
|
43
|
43
|
|
|
44
|
+\begin{frame}
|
|
45
|
+ \frametitle{History}
|
|
46
|
+ \begin{itemize}
|
|
47
|
+ \item Lisp (not Common Lisp) was originally implemented in the early 1960s.
|
|
48
|
+ \item Really took off in the 1970s and 1980s.
|
|
49
|
+ \item Lots of differing implementations with their own ideas and features during this time period.
|
|
50
|
+ \item Common Lisp became an ANSI standard in 1994.
|
|
51
|
+ \item Historically used primarily for Artificial Intelligence.
|
|
52
|
+ \item Use drastically lowered after the decline of AI funding when the world realized ``true AI'' was further off than they thought.
|
|
53
|
+ \end{itemize}
|
|
54
|
+\end{frame}
|
|
55
|
+
|
|
56
|
+\begin{frame}
|
|
57
|
+ \frametitle{Made with Secret Alien Technology}
|
|
58
|
+ \begin{center}
|
|
59
|
+ \includegraphics[scale=0.75]{lisplogo_256}
|
|
60
|
+ \end{center}
|
|
61
|
+\end{frame}
|
|
62
|
+
|
44
|
63
|
\begin{frame}[fragile]
|
45
|
64
|
\frametitle{An example}
|
46
|
65
|
\begin{minted}[gobble=4,fontsize=\footnotesize]{cl}
|
|
@@ -67,7 +86,7 @@
|
67
|
86
|
\begin{itemize}
|
68
|
87
|
\item Quicklisp is the library manager for Lisp. \href{https://beta.quicklisp.org}{https://beta.quicklisp.org}.
|
69
|
88
|
\item While still marked as ``beta'' it is stable and usable. It just lacks some features the author wants to add before considering it released.
|
70
|
|
- \item Coolest feature is the ability to install + load libraries completely from the Lisp repl without restarting the process.
|
|
89
|
+ \item Coolest feature is the ability to install + load libraries completely from the Lisp REPL without restarting the process.
|
71
|
90
|
\end{itemize}
|
72
|
91
|
\end{frame}
|
73
|
92
|
|
|
@@ -120,7 +139,7 @@
|
120
|
139
|
\end{frame}
|
121
|
140
|
|
122
|
141
|
\begin{frame}
|
123
|
|
- \frametitle{Object System}
|
|
142
|
+ \frametitle{Object Oriented programming}
|
124
|
143
|
\begin{itemize}
|
125
|
144
|
\item Classes have slots (``instance variables'')
|
126
|
145
|
\item Methods are defined in terms of generic functions.
|
|
@@ -156,4 +175,103 @@
|
156
|
175
|
)
|
157
|
176
|
\end{minted}
|
158
|
177
|
\end{frame}
|
|
178
|
+
|
|
179
|
+\begin{frame}
|
|
180
|
+ \frametitle{Package System}
|
|
181
|
+ \begin{itemize}
|
|
182
|
+ \item Basically a namespace/module system. Using it may seem similar to clojure or javascript's ES6 modules.
|
|
183
|
+ \item The way it actually works under the hood is super cool and different from most others.
|
|
184
|
+ \item See \href{http://www.gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html}{Practical Common Lisp} for more info.
|
|
185
|
+ \end{itemize}
|
|
186
|
+\end{frame}
|
|
187
|
+
|
|
188
|
+\begin{frame}[fragile]
|
|
189
|
+ \frametitle{C Foreign Function Interface}
|
|
190
|
+ \begin{itemize}
|
|
191
|
+ \item Lisp has an excellent CFFI library found at \href{https://common-lisp.net/project/cffi/}{https://common-lisp.net/project/cffi/}. It is in quicklisp.
|
|
192
|
+ \item The CFFI is used heavily for game development, as OpenGL and other libraries are C.
|
|
193
|
+ \item Cool library \href{https://github.com/rpav/cl-autowrap}{https://github.com/rpav/cl-autowrap} makes making a new CFFI wrapper super easy.
|
|
194
|
+ \end{itemize}
|
|
195
|
+\end{frame}
|
|
196
|
+
|
|
197
|
+\begin{frame}
|
|
198
|
+ \frametitle{The REPL}
|
|
199
|
+ \begin{itemize}
|
|
200
|
+ \item The sheer power of the Common Lisp REPL is greater than any other REPL I know of.
|
|
201
|
+ \item REPL driven development is THE primary paradigm for common lisp (no this is not really at odds with TDD).
|
|
202
|
+ \item You can do practically anything in the REPL that you could do in a file, all without having to restart your process.
|
|
203
|
+ \item For a user friendly REPL experience you will want to use Emacs + Slime, Vim + slimv, or one of the few lisp specific IDEs.
|
|
204
|
+ \item The default command line REPLs for most implementations have a rather bad user experience compared to the above.
|
|
205
|
+ \end{itemize}
|
|
206
|
+\end{frame}
|
|
207
|
+
|
|
208
|
+\section{Lisp game tools}
|
|
209
|
+\begin{frame}
|
|
210
|
+ \frametitle{Lispgames Group}
|
|
211
|
+ \begin{itemize}
|
|
212
|
+ \item \href{https://github.com/lispgames}{https://github.com/lispgames}
|
|
213
|
+ \item Benevolent leader rpav/oGMo \href{https://github.com/rpav}{https://github.com/rpav}
|
|
214
|
+ \item Freenode IRC channel \#lispgames
|
|
215
|
+ \item In progress wiki/site \href{http://lispgames.org}{http://lispgames.org}
|
|
216
|
+ \item Focused on Common Lisp but all lispers welcome including Scheme, Clojure, and others.
|
|
217
|
+ \end{itemize}
|
|
218
|
+\end{frame}
|
|
219
|
+
|
|
220
|
+\begin{frame}
|
|
221
|
+ \frametitle{Libraries}
|
|
222
|
+ \begin{itemize}
|
|
223
|
+ \item For the most part if you don't want to use a pre-built engine/framework you probably want to use lispgames glkit which uses cl-sdl2, cl-sdl2kit, and cl-opengl. Find it at \href{https://github.com/lispgames/glkit}{https://github.com/lispgames/glkit}. They are all in quicklisp.
|
|
224
|
+ \item A cool 2D graphics library called sketch can be found at \href{https://github.com/vydd/sketch}{https://github.com/vydd/sketch}. It is not yet in quicklisp.
|
|
225
|
+ \item There are a variety of other libraries in various locations, if you are looking for something in particular ask about it on \#lispgames.
|
|
226
|
+ \end{itemize}
|
|
227
|
+\end{frame}
|
|
228
|
+
|
|
229
|
+\begin{frame}
|
|
230
|
+ \frametitle{Game Engines}
|
|
231
|
+ \begin{itemize}
|
|
232
|
+ \item CEPL by baggers, \href{https://github.com/cbaggers/cepl}{https://github.com/cbaggers/cepl}. Active work in progress.
|
|
233
|
+ \item CLINCH by warweasle, \href{https://github.com/BradWBeer/CLinch}{https://github.com/BradWBeer/CLinch}. Alpha, should soon be ready as a general purpose engine.
|
|
234
|
+ \item Xelf by dto (see dto-games on youtube), GPLv3, \href{http://xelf.me/}{http://xelf.me/}. Has been used by dto to create several games.
|
|
235
|
+ \end{itemize}
|
|
236
|
+\end{frame}
|
|
237
|
+
|
|
238
|
+\section{Learning resources}
|
|
239
|
+\begin{frame}
|
|
240
|
+ \frametitle{Books}
|
|
241
|
+ \begin{itemize}
|
|
242
|
+ \item The de facto primary learning book is ``Practical Common Lisp'' and is free online at \href{http://www.gigamonkeys.com/book/}{http://www.gigamonkeys.com/book/}
|
|
243
|
+ \item There is a brand new (not free) book being hailed as an excellent follow up called ``Common Lisp Recipes'' at \href{http://www.apress.com/9781484211779?gtmf=s}{http://www.apress.com/9781484211779?gtmf=s}
|
|
244
|
+ \item A list of other Lisp books can be found at \href{http://cliki.net/Lisp+Books}{http://cliki.net/Lisp+Books}
|
|
245
|
+ \end{itemize}
|
|
246
|
+\end{frame}
|
|
247
|
+
|
|
248
|
+\begin{frame}
|
|
249
|
+ \frametitle{Videos}
|
|
250
|
+ \begin{itemize}
|
|
251
|
+ \item \href{https://www.youtube.com/channel/UCKfZ9JfFgg7cxa2hYfC5O0A}{dto-games} channel on youtube, live coding and commentary.
|
|
252
|
+ \item cbaggers user \href{https://www.youtube.com/user/CBaggers}{https://www.youtube.com/user/CBaggers} on youtube. Demonstrations of the CEPL game engine, general tutorials.
|
|
253
|
+ \item Axed Code (axion) short progress videos \href{https://www.youtube.com/playlist?list=PLcdTh590GDjFgdM8JVSBqFl4vJBrh8P_l}{playlist} on youtube.
|
|
254
|
+ \end{itemize}
|
|
255
|
+\end{frame}
|
|
256
|
+
|
|
257
|
+\begin{frame}
|
|
258
|
+ \frametitle{Websites}
|
|
259
|
+ \begin{itemize}
|
|
260
|
+ \item Common Lisp \href{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}{Hyperspec}
|
|
261
|
+ \item \href{http://articulate-lisp.com/}{http://articulate-lisp.com/}
|
|
262
|
+ \item Common Lisp wiki \href{http://www.cliki.net/}{http://www.cliki.net}
|
|
263
|
+ \item Common Lisp official site \href{https://common-lisp.net/}{https://common-lisp.net/}
|
|
264
|
+ \item Common Lisp gitlab instance \href{https://gitlab.common-lisp.net}{https://gitlab.common-lisp.net}
|
|
265
|
+ \end{itemize}
|
|
266
|
+\end{frame}
|
|
267
|
+
|
|
268
|
+\section{Demonstration}
|
|
269
|
+\begin{frame}
|
|
270
|
+ \frametitle{Demonstration}
|
|
271
|
+ \begin{itemize}
|
|
272
|
+ \item I will be running and modifying \href{https://github.com/k-stz/picking-sticks}{https://github.com/k-stz/picking-sticks}.
|
|
273
|
+ \item You will need a lisp implementation, \href{https://www.quicklisp.org/beta/}{quicklisp}, libsdl2, libfreetype, working OpenGL drivers, and to put \href{https://github.com/rpav/texatl}{https://github.com/rpav/texatl} and \href{https://github.com/rpav/laconic}{https://github.com/rpav/laconic} in \texttildelow/quicklisp/local-projects.
|
|
274
|
+ \item Unless you've already got most of this setup I would recommend not trying to set this up during my presentation.
|
|
275
|
+ \end{itemize}
|
|
276
|
+\end{frame}
|
159
|
277
|
\end{document}
|