<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Game_Engines_2021W_Lecture_3</id>
	<title>Game Engines 2021W Lecture 3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Game_Engines_2021W_Lecture_3"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_3&amp;action=history"/>
	<updated>2026-05-13T02:39:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_3&amp;diff=22833&amp;oldid=prev</id>
		<title>Soma: Created page with &quot;==Notes==  &lt;pre&gt; Lecture 3 ---------  what is the best game engine?  - and what does this question even mean?  If time and effort are no object, the best game engine is the on...&quot;</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_3&amp;diff=22833&amp;oldid=prev"/>
		<updated>2021-01-19T16:18:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Notes==  &amp;lt;pre&amp;gt; Lecture 3 ---------  what is the best game engine?  - and what does this question even mean?  If time and effort are no object, the best game engine is the on...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Notes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Lecture 3&lt;br /&gt;
---------&lt;br /&gt;
&lt;br /&gt;
what is the best game engine?&lt;br /&gt;
 - and what does this question even mean?&lt;br /&gt;
&lt;br /&gt;
If time and effort are no object, the best game engine is the one you built yourself.&lt;br /&gt;
&lt;br /&gt;
Why?&lt;br /&gt;
&lt;br /&gt;
 - it supports exactly what you want to do with minimum effort&lt;br /&gt;
 - because if you built it, why wouldn&amp;#039;t it be that way? :-)&lt;br /&gt;
&lt;br /&gt;
So, we don&amp;#039;t nowadays build our own game engines because we want to save&lt;br /&gt;
time and money&lt;br /&gt;
 - current game engines are very powerful, would take a huge amount&lt;br /&gt;
   of personal/team effort to duplicate&lt;br /&gt;
&lt;br /&gt;
Nevertheless, some teams do maintain their own engines&lt;br /&gt;
 - licensing&lt;br /&gt;
 - you already have it&lt;br /&gt;
 - it is known to the team&lt;br /&gt;
   - in-house knowledge facilitates customization&lt;br /&gt;
 - it is suited to the type of games your team makes&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;interesting&amp;quot; game development, the most important game engine feature is&lt;br /&gt;
extensibility/customization&lt;br /&gt;
&lt;br /&gt;
games, at their heart, are rule-based systems&lt;br /&gt;
 - the rules are the heart of gameplay&lt;br /&gt;
 - the rest is the interface&lt;br /&gt;
&lt;br /&gt;
game engines inherently limit the kinds of rule-based systems you can build&lt;br /&gt;
 - because they are built with certain assumptions about what a &amp;quot;game&amp;quot; looks like&lt;br /&gt;
 - they have to make those assumptions in order to speed up game development&lt;br /&gt;
&lt;br /&gt;
So using a game engine makes lots of tasks easier, but at the same time&lt;br /&gt;
it gets in your way the moment you want to do something &amp;quot;different&amp;quot;&lt;br /&gt;
 - an interesting game is one that is doing something different from&lt;br /&gt;
   past games&lt;br /&gt;
 - kind of like research, if it is the same as what has happened before,&lt;br /&gt;
   why not just play the old game?&lt;br /&gt;
&lt;br /&gt;
What sort of games/game mechanics will be challenging to implement in&lt;br /&gt;
most game engines (unless there is a specific extension)?&lt;br /&gt;
 - procedural generation (code-generated levels)&lt;br /&gt;
    - you&amp;#039;re going to be doing this on your own mostly&lt;br /&gt;
 - detailed simulation games (beyond physics)&lt;br /&gt;
 - AI based (other than simple rules-based AI)&lt;br /&gt;
 - economic simulations/reactive worlds&lt;br /&gt;
&lt;br /&gt;
Game engines are built to facilitate specific parts of games&lt;br /&gt;
 - graphics and sound&lt;br /&gt;
 - movement of objects/appearance of scenery in 2D/3D&lt;br /&gt;
 - keyboard/mouse/controller input&lt;br /&gt;
 - networking&lt;br /&gt;
&lt;br /&gt;
Note that the assumption of objects moving in 2D/3D space can be limiting&lt;br /&gt;
 - what if the space doesn&amp;#039;t follow normal physics rules?&lt;br /&gt;
    - non-euclidean games&lt;br /&gt;
 - dynamic particle/surface movement?&lt;br /&gt;
 - time as a dimension?&lt;br /&gt;
&lt;br /&gt;
The space of possible 2D/3D images/animations &amp;gt;&amp;gt; 2D/3D easy to build in a game engine&lt;br /&gt;
 - they have assumptions on what you want to build&lt;br /&gt;
&lt;br /&gt;
2 games come to mind&lt;br /&gt;
 - Portal&lt;br /&gt;
   - changes spatial relationships fundamentally w/ portals&lt;br /&gt;
 - Braid&lt;br /&gt;
   - can reverse time, turns platforming into a puzzle game&lt;br /&gt;
     - but is also a game mechanic, because some things don&amp;#039;t reverse&lt;br /&gt;
 - fez&lt;br /&gt;
   - bizzare spatial arrangements&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How do we get game engines?&lt;br /&gt;
 - built to facilitate the creation of specific games&lt;br /&gt;
 - then are slowly generalized to deal with other games&lt;br /&gt;
   - never completely escape their origins, although&lt;br /&gt;
     they can grow beyond them&lt;br /&gt;
&lt;br /&gt;
How does this compare with general software development?&lt;br /&gt;
 - this is exactly what has happened with mainstream software development&lt;br /&gt;
 - we have tools/libraries/frameworks to support standand applications&lt;br /&gt;
   - really, facilitate key interface and functional pieces&lt;br /&gt;
   - as developers, you often more assemble pieces than code components&lt;br /&gt;
&lt;br /&gt;
When you make a GUI, you use standard libraries/frameworks&lt;br /&gt;
 - get consistent interfaces this way, users know how they work&lt;br /&gt;
 - don&amp;#039;t want to change the rules&lt;br /&gt;
&lt;br /&gt;
But with games, we often *want* to change the rules&lt;br /&gt;
 - if it is completely predictable, it&amp;#039;s boring&lt;br /&gt;
 - learning is key to games&lt;br /&gt;
   - simple games have replay value because we&amp;#039;re learning about other people&lt;br /&gt;
     as well as the rules&lt;br /&gt;
   - basis of competitions&lt;br /&gt;
&lt;br /&gt;
speed running is all about testing the limits of the rules of games&lt;br /&gt;
 - exploit the bugs!&lt;br /&gt;
&lt;br /&gt;
when you make a game, you are playing with rules&lt;br /&gt;
 - game engines implement specific rules&lt;br /&gt;
 - you&amp;#039;re going to want to change some of them to make an &amp;quot;interesting&amp;quot; game&lt;br /&gt;
 - changing rules =&amp;gt; extending the engine&lt;br /&gt;
&lt;br /&gt;
What does software engineering tell us about extensible systems?&lt;br /&gt;
 - we know that dealing with legacy code is hard&lt;br /&gt;
   - legacy code =&amp;gt; code we didn&amp;#039;t write (or forgot about)&lt;br /&gt;
 - modifying any software system means dealing with some degree of legacy&lt;br /&gt;
   code, i.e., other people&amp;#039;s code&lt;br /&gt;
 - true for game engines as for anything else&lt;br /&gt;
&lt;br /&gt;
We have a strategy for working with other people&amp;#039;s code, abstraction&lt;br /&gt;
 - just have to learn the interface, not the implementation&lt;br /&gt;
 - but all interfaces are leaky&lt;br /&gt;
   - reveal details of implementation&lt;br /&gt;
   - constrained by implementation&lt;br /&gt;
   - huge source of bugs&lt;br /&gt;
&lt;br /&gt;
So, if you can&amp;#039;t write your own engine, the best engine is the one that&lt;br /&gt;
 - makes standard things easy&lt;br /&gt;
 - facilitates doing custom things in the easiest way possible&lt;br /&gt;
&lt;br /&gt;
Note these two requirements can be contradictory&lt;br /&gt;
&lt;br /&gt;
What are the arguments in favor of dynamic typing?&lt;br /&gt;
(Static typing is so much better because it catches errors, right?)&lt;br /&gt;
 - JavaScript, LISP, Python&lt;br /&gt;
 - quick development of prototypes&lt;br /&gt;
   - why?&lt;br /&gt;
&lt;br /&gt;
Dynamically-typed systems are inherently more extensible&lt;br /&gt;
 - because they don&amp;#039;t assume anything about data types&lt;br /&gt;
 - will just try, and throw errors if something doesn&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
Static typing&lt;br /&gt;
 - the type of all symbols is known at compile time&lt;br /&gt;
&lt;br /&gt;
dynamic typing&lt;br /&gt;
 - type of data associated with symbols is only known at runtime&lt;br /&gt;
 - a symbol can refer to any data&lt;br /&gt;
&lt;br /&gt;
Dynamic typing facilitates programs that adapt and change to new tasks&lt;br /&gt;
&lt;br /&gt;
Statically-typed languages have very complex mechanisms to try and get&lt;br /&gt;
the benefits of dynamic typing with more safety&lt;br /&gt;
 - templates, generics&lt;br /&gt;
&lt;br /&gt;
Godot does use dynamic typing natively&lt;br /&gt;
 - but supports statically-typed languages&lt;br /&gt;
&lt;br /&gt;
But I&amp;#039;m thinking more philosophically&lt;br /&gt;
&lt;br /&gt;
Lisp is the ancestor of most dynamically-typed languages&lt;br /&gt;
 - JavaScript is, roughly, just Lisp in drag (C-style syntax)&lt;br /&gt;
&lt;br /&gt;
What was Lisp used for?&lt;br /&gt;
 - artificial intelligence&lt;br /&gt;
&lt;br /&gt;
Why?&lt;br /&gt;
 - flexible representations/rules&lt;br /&gt;
&lt;br /&gt;
With game engines, we ideally want as few constraints on what we can create&lt;br /&gt;
 - should be flexibly extensible&lt;br /&gt;
 - so, we should be able to adapt existing facilities to new purposes&lt;br /&gt;
&lt;br /&gt;
This sort of flexibility is facilitated by uniform building blocks&lt;br /&gt;
 - think legos&lt;br /&gt;
&lt;br /&gt;
For game development, you want to deal with legos as much as possbile&lt;br /&gt;
 - avoid melting plastic when you can&lt;br /&gt;
&lt;br /&gt;
Godot is more flexible than most game engines because of key design choices&lt;br /&gt;
 - focus on generic nodes&lt;br /&gt;
 - dynamically-typed extension language&lt;br /&gt;
 - editor built in game engine&lt;br /&gt;
    - editor itself is extensible/modifiable in same way as games&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
</feed>