<?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_8</id>
	<title>Game Engines 2021W Lecture 8 - 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_8"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_8&amp;action=history"/>
	<updated>2026-04-08T03:15:38Z</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_8&amp;diff=22908&amp;oldid=prev</id>
		<title>Soma at 15:07, 4 February 2021</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_8&amp;diff=22908&amp;oldid=prev"/>
		<updated>2021-02-04T15:07:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:07, 4 February 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lecture 8&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lecture 8&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---------&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l138&quot;&gt;Line 138:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 139:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  - integrated or separate from game engine abstractions&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  - integrated or separate from game engine abstractions&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  - mapping between your concepts and game engine concepts&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  - mapping between your concepts and game engine concepts&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_8&amp;diff=22907&amp;oldid=prev</id>
		<title>Soma: Created page with &quot;Lecture 8 ---------  Idea: Polytopia is fun, but has poor support for co-op multiplayer  - no in-game support for teams  Can we make a polytopia-like game (simplified civ game...&quot;</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_8&amp;diff=22907&amp;oldid=prev"/>
		<updated>2021-02-04T15:07:30Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Lecture 8 ---------  Idea: Polytopia is fun, but has poor support for co-op multiplayer  - no in-game support for teams  Can we make a polytopia-like game (simplified civ game...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Lecture 8&lt;br /&gt;
---------&lt;br /&gt;
&lt;br /&gt;
Idea: Polytopia is fun, but has poor support for co-op multiplayer&lt;br /&gt;
 - no in-game support for teams&lt;br /&gt;
&lt;br /&gt;
Can we make a polytopia-like game (simplified civ game) with co-op multiplayer?&lt;br /&gt;
&lt;br /&gt;
Challenges&lt;br /&gt;
 - co-op mechanics&lt;br /&gt;
 - handicapping?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In polytopia, on a move, you can do the following:&lt;br /&gt;
 - build units that become available next turn&lt;br /&gt;
 - expand cities using available resources&lt;br /&gt;
 - move units&lt;br /&gt;
    - one move/attack per unit, or move then attack&lt;br /&gt;
 - buy tech&lt;br /&gt;
&lt;br /&gt;
When you encounter a new player for the first time, you typically trade tech&lt;br /&gt;
or get resources (peaceful encounter)&lt;br /&gt;
&lt;br /&gt;
These mechanics are so simple, not much room to subdivide&lt;br /&gt;
 - you really want every player doing everything&lt;br /&gt;
&lt;br /&gt;
What makes this fun is in part the restrictions&lt;br /&gt;
 - use your units&lt;br /&gt;
 - invest&lt;br /&gt;
&lt;br /&gt;
never have enough stars to do too much on any turn, takes multiple turns to really build up&lt;br /&gt;
&lt;br /&gt;
For co-op, we really want alliances&lt;br /&gt;
 - work together to defeat enemies&lt;br /&gt;
 - but still be playing individually&lt;br /&gt;
&lt;br /&gt;
Because movement and visibility is so limited in the game, hard to cooperate&lt;br /&gt;
 - can&amp;#039;t see the whole world&lt;br /&gt;
 - and even if you could, you can&amp;#039;t get most places in reasonable amounts of time&lt;br /&gt;
&lt;br /&gt;
If you and your teammate are on separate parts of the map, you may never encounter each other before one of you dies&lt;br /&gt;
 - we literally share screencaps to collaborate&lt;br /&gt;
&lt;br /&gt;
So, maybe alliances have to be geographically close&lt;br /&gt;
 - you choose allies at start, and world generation ensures you share borders&lt;br /&gt;
 - but then this would limit expansion options&lt;br /&gt;
&lt;br /&gt;
Communication is the hard mechanic&lt;br /&gt;
 - fun comes from limited interactions with other players&lt;br /&gt;
 - how to allow co-op without complicating mechanics?&lt;br /&gt;
&lt;br /&gt;
Want to add as few mechanics as possible to formula&lt;br /&gt;
&lt;br /&gt;
One mechanic they have is &amp;quot;explorers&amp;quot;&lt;br /&gt;
 - does a random walk across territories&lt;br /&gt;
 - meet other players, can get tech from them&lt;br /&gt;
&lt;br /&gt;
messengers who can go back and forth between players who have encountered each other&lt;br /&gt;
 - would happen once &amp;quot;diplomatic relations&amp;quot; have been opened up&lt;br /&gt;
 - messengers could be used to share tech that was close to what the other has&lt;br /&gt;
    - one tech tree move&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So changed mechanics are&lt;br /&gt;
 - messengers, to share tech on an ongoing basis&lt;br /&gt;
    - not really units, just a mechanic&lt;br /&gt;
    - but maybe require a &amp;quot;peaceful path&amp;quot; to get there and back?&lt;br /&gt;
    - otherwise, could be captured&lt;br /&gt;
 - unified visibility as long as there is peaceful path between&lt;br /&gt;
 - game start, can ask for alliances so will be placed close together&lt;br /&gt;
    - not necessarily fun, because then you have to also compete for&lt;br /&gt;
      resources&lt;br /&gt;
 - can&amp;#039;t attack allies units without cancelling alliance&lt;br /&gt;
    - clear notice of friend/foe encounter&lt;br /&gt;
 - Maybe expand trade routes to allies&lt;br /&gt;
    - I don&amp;#039;t understand that mechanic so well&lt;br /&gt;
&lt;br /&gt;
messengers would be sent by one player, received by another on their turn&lt;br /&gt;
 - really, functions more like mail&lt;br /&gt;
 - animated pigeon?&lt;br /&gt;
&lt;br /&gt;
In polytopia, all mechanics are deterministic&lt;br /&gt;
 - only randomness is in initial board layout and in bot players&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How do I go about building this game?  Where to start?&lt;br /&gt;
&lt;br /&gt;
One approach - start with visuals&lt;br /&gt;
 - make the tiles&lt;br /&gt;
 - make your units&lt;br /&gt;
 - draw the world&lt;br /&gt;
&lt;br /&gt;
Don&amp;#039;t do that.  Instead, start with the mechanics, and how to implement the mechanics in your game engine&lt;br /&gt;
&lt;br /&gt;
Godot has (multiple) full-fledged programming languages, so could just build &amp;quot;from scratch&amp;quot; first then integrate with engine later&lt;br /&gt;
 - make data structures for units, tiles, and players&lt;br /&gt;
 - create methods for actions on players and tiles, &lt;br /&gt;
 - implement AI&lt;br /&gt;
&lt;br /&gt;
Probably don&amp;#039;t do this, unless you already had the code written&lt;br /&gt;
 - because the engine offers so much, and if you use it you get stuff for free&lt;br /&gt;
&lt;br /&gt;
Goal: make an extremely minimal version of the game that has core mechanics and is playable&lt;br /&gt;
 - expand mechanics and visuals after&lt;br /&gt;
&lt;br /&gt;
Godot does support isometric tiles&lt;br /&gt;
&lt;br /&gt;
In the spirit of Godot, we want to make everything we can into a nodes &amp;amp; scenes&lt;br /&gt;
 - player is a node&lt;br /&gt;
 - units are each nodes&lt;br /&gt;
 - every tile is a node&lt;br /&gt;
&lt;br /&gt;
Remember, not all nodes need to be visible, they can just exist to do something&lt;br /&gt;
&lt;br /&gt;
Will have to manipulate most nodes programmatically&lt;br /&gt;
 - procedural generation of the world&lt;br /&gt;
 - movement is very restricted - select then act&lt;br /&gt;
&lt;br /&gt;
So will probably need to create custom nodes of some kind&lt;br /&gt;
&lt;br /&gt;
Define your objects/data structures using tools given to you by the game engine&lt;br /&gt;
 - nice that Godot has a very flexible system, so less effort going into fitting&lt;br /&gt;
   square pegs into round holes&lt;br /&gt;
&lt;br /&gt;
Key reason to make custom nodes is you can then make custom interfaces&lt;br /&gt;
&lt;br /&gt;
Challenging part is we can&amp;#039;t just &amp;quot;draw&amp;quot; the world&lt;br /&gt;
 - but we can construct one manually first, and then develop tools&lt;br /&gt;
   to manipulate the construct&lt;br /&gt;
&lt;br /&gt;
Maybe rather than custom nodes, you can just do custom scenes that get combined&lt;br /&gt;
 - but I&amp;#039;m thinking it would get unwieldy quickly, lack of encapsulation&lt;br /&gt;
&lt;br /&gt;
So, you could treat the nodes as a pure presentation level&lt;br /&gt;
 - have a more traditional internal representation that is used to generate the board&lt;br /&gt;
&lt;br /&gt;
Big question: How and where are you managing your game state&lt;br /&gt;
 - integrated or separate from game engine abstractions&lt;br /&gt;
 - mapping between your concepts and game engine concepts&lt;/div&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
</feed>