Game Engines 2021W Lecture 8

From Soma-notes
Jump to navigation Jump to search
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) with co-op multiplayer?

Challenges
 - co-op mechanics
 - handicapping?


In polytopia, on a move, you can do the following:
 - build units that become available next turn
 - expand cities using available resources
 - move units
    - one move/attack per unit, or move then attack
 - buy tech

When you encounter a new player for the first time, you typically trade tech
or get resources (peaceful encounter)

These mechanics are so simple, not much room to subdivide
 - you really want every player doing everything

What makes this fun is in part the restrictions
 - use your units
 - invest

never have enough stars to do too much on any turn, takes multiple turns to really build up

For co-op, we really want alliances
 - work together to defeat enemies
 - but still be playing individually

Because movement and visibility is so limited in the game, hard to cooperate
 - can't see the whole world
 - and even if you could, you can't get most places in reasonable amounts of time

If you and your teammate are on separate parts of the map, you may never encounter each other before one of you dies
 - we literally share screencaps to collaborate

So, maybe alliances have to be geographically close
 - you choose allies at start, and world generation ensures you share borders
 - but then this would limit expansion options

Communication is the hard mechanic
 - fun comes from limited interactions with other players
 - how to allow co-op without complicating mechanics?

Want to add as few mechanics as possible to formula

One mechanic they have is "explorers"
 - does a random walk across territories
 - meet other players, can get tech from them

messengers who can go back and forth between players who have encountered each other
 - would happen once "diplomatic relations" have been opened up
 - messengers could be used to share tech that was close to what the other has
    - one tech tree move


So changed mechanics are
 - messengers, to share tech on an ongoing basis
    - not really units, just a mechanic
    - but maybe require a "peaceful path" to get there and back?
    - otherwise, could be captured
 - unified visibility as long as there is peaceful path between
 - game start, can ask for alliances so will be placed close together
    - not necessarily fun, because then you have to also compete for
      resources
 - can't attack allies units without cancelling alliance
    - clear notice of friend/foe encounter
 - Maybe expand trade routes to allies
    - I don't understand that mechanic so well

messengers would be sent by one player, received by another on their turn
 - really, functions more like mail
 - animated pigeon?

In polytopia, all mechanics are deterministic
 - only randomness is in initial board layout and in bot players


How do I go about building this game?  Where to start?

One approach - start with visuals
 - make the tiles
 - make your units
 - draw the world

Don't do that.  Instead, start with the mechanics, and how to implement the mechanics in your game engine

Godot has (multiple) full-fledged programming languages, so could just build "from scratch" first then integrate with engine later
 - make data structures for units, tiles, and players
 - create methods for actions on players and tiles, 
 - implement AI

Probably don't do this, unless you already had the code written
 - because the engine offers so much, and if you use it you get stuff for free

Goal: make an extremely minimal version of the game that has core mechanics and is playable
 - expand mechanics and visuals after

Godot does support isometric tiles

In the spirit of Godot, we want to make everything we can into a nodes & scenes
 - player is a node
 - units are each nodes
 - every tile is a node

Remember, not all nodes need to be visible, they can just exist to do something

Will have to manipulate most nodes programmatically
 - procedural generation of the world
 - movement is very restricted - select then act

So will probably need to create custom nodes of some kind

Define your objects/data structures using tools given to you by the game engine
 - nice that Godot has a very flexible system, so less effort going into fitting
   square pegs into round holes

Key reason to make custom nodes is you can then make custom interfaces

Challenging part is we can't just "draw" the world
 - but we can construct one manually first, and then develop tools
   to manipulate the construct

Maybe rather than custom nodes, you can just do custom scenes that get combined
 - but I'm thinking it would get unwieldy quickly, lack of encapsulation

So, you could treat the nodes as a pure presentation level
 - have a more traditional internal representation that is used to generate the board

Big question: How and where are you managing your game state
 - integrated or separate from game engine abstractions
 - mapping between your concepts and game engine concepts