## Welcome to GameDev at TTLMakerspace!

Playing games is fun. Making games is even more fun - creating everything from simple toys to immersive worlds of your own design.

The Godot game engine is an  incredible open-source project that is free for anyone to use. It is community-maintained and has seen explosive growth in the last three years.

With the arrival of Godot 4, the engine has become a legitimate tool for learning game development and making fun games in both 2D and 3D - and more recently XR.

## Course Description

In this course at TTLMakerspace, you will go from beginner to a working knowledge of game design and development using the open-source engine Godot.

Starting with the basics of the game engine, you’ll learn how to progress from a knowledge of game mechanics to a coherent, engaging game experience.

Outcomes:
At the end of this course you will have achieved the following goals:
* A grasp of planning out fun game-play mechanics
* Familiarity with features of the Godot Game Engine
* Practical knowledge of animation techniques
* Application of physics for game-play mechanics
* Comfort with 2D game development
* Working understanding of UI in games

Following this course, you’ll be welcome to join the growing community of creators and game developers at TTLMakerspace for continued support and encouragement in your game development journey.

Useful for: games, art, installations, animation, interactive experiences

# What to Expect:

## Week1 – Getting Started

    * What is Godot?
    * Why use a game engine?
    * Organization (nodes, resources, scenes)
    * The Big Four game objects
    * Three tiers of a game architecture
    * Local and Global coordinates

Concepts covered:

    * Static bodies
    * Rigid bodies
    * Character bodies
    * Areas (Triggers)
    * Signals
    * Basic forces

Exercise:
Create a basic game scene using the four main types of game objects – static body, rigid body, character body, and area.

By doing this exercise, you’ll learn some of the most important core concepts about creating a game.

## Week2 – Deeper in Code and Bullets

    * How does code work?
    * Variables, Functions
    * Operators, Conditionals

Concepts covered:

    * Forces and Impulses
    * Dynamic Instantiation
    * Object Pooling
    * Code based animation
    * Groups
    * Raycasts

Exercise:

Add melee attacks to the character by applying forces. Additionally add a ranged attack by firing a bullet. Learn to detect what objects are being attacked, and advance your knowledge of signals.


## Week3 – Graphics and Animation, Player Enhancement

    * Three ways to animate graphics
    * How to add images and style our graphics
    * Animating the player character
    * Creating levels, walls, platforms

Concepts covered:

    * Sprites
    * Animated Sprites
    * Tilesets, Tilemap Layers, Terrains
    * Cameras
    * Scaling and Viewport

Exercise:

Create animation states for your player character, add graphics for the bullets. Learn to paint terrains for your world level.

## Week4 – Graphics and Animation 2, Environment Enhancement

    * Enhancing our world
    * Enhancing player animation
    * Using more graphics tools
    * Creating traps

Concepts covered:

    * Animatable objects
    * Animation player
    * Parallax background
    * Scene controller

Exercise:

Enhance your level by learning to use terrains for painting graphics into your game world. Learn to use layers in terrains. And learn to trigger traps or effects based on player interaction.

# OPTIONAL: OPEN GAMES MEETUP
Current students and alumni are invited for an evening of fun and to work together on enhancing the graphics and animation of their games!


## Week5 – Collectibles and Enemies

    * Introducing enemies and obstacles
    * Providing objectives and collectibles
    * Simple AI
    * Player death

Concepts covered:

    * Unique names (scene singletons)
    * Scene loading
    * Enhanced Scene Manager

Exercise:

Introduce enemies to the game, along with objectives and items to collect. Allow the enemies to attack, and for the player character to be harmed. Learn to restart the game.

## Week6 – UI and Game Saving

    * Enhance the player death
    * Add a way to keep track of player and enemy health
    * Keep track of collectibles
    * Create a simple user interface

Concepts covered:

    * Custom resources
    * Game manager
    * Class names
    * Canvas layers
    * Controls
Exercise:
Enhance the game architecture to include any number of enemies and objectives. Create a player health indicator and a score counter.



### Contribute!
Markdown syntax [here](https://www.markdownguide.org/basic-syntax/)

## Helpful Git commands

Export a clean git-free copy of any week:

`git archive -o ../weekX.zip HEAD:weekX`

Set your user name (inside project folder):

`git config user.name "Mona Lisa"`

Set your email:

`git config user.email "mona@lisa.com"`

## Working from a branch

It is a good idea to create a branch each time you are working on a major milestone. For the sake of the course, you should create a branch for each week.

`git checkout -b week2`

As always, you will add and commit your changes into the branch.

`git add .`
`git commit -m "some message"`

And if you wish, you can push the new branch to the remote repository just like you did with the main branch.

`git push origin week2`

Now you can work away without fear of messing up your project. Because if you need to, you can always revert back to the main branch, undoing all your changes. 


`git checkout -b main`

From the main branch, you can merge your updates from the week2 branch by simply using: 

`git merge week2`

And after that, you are free to push the updates up to your repo.

`git push origin main`
