Teaching IT in the ACT is changing significantly in 2020. Well see the new Digital Technologies subject coming to senior secondary schools and more high schools looking for ways to engage students with the Digital Technologies subject in the Australian Curriculum. I’ve been looking into better ways to teach game design.
What is happening now?
There’s a lot of magic involved…
In most schools, this topic is typically covered using tools like GameMaker, Unity or the Unreal Engine. My main issue with these tools is that they tend to steer students away from developing the technical knowledge we want to instil through the curriculum. Instead, they favour built-in magic and short-cut tools to achieve quite complex tasks. This is great for building a finished product, but I don’t think it serves the purpose of allowing students to really engage with the fundamental ideas behind the technology.
And everything looks the same…
Another major concern I have with the extensive use of Unreal Engine in particular is that it tends to lead to students building your traditional, FPS-style game. That doesn’t generally lead to creative games – in most cases, you end up with a poor clone of some AAA title that a development team of one or two students can’t ever hope to match.
We should be aiming for originality…
Truly interesting games depart from the common formulae. One of my favourite things to do each year is visit the PAX Rising section of the PAX Australia Expo Hall. This is where small development teams get a chance to show off their recent projects and get feedback from gamers. I’ve been consistently impressed by what’s on show in this section, and often spend far more of my time here than any other area of the Expo Hall (and that includes where there are big AAA pre-releases to play, like Marvel’s The Avengers was this year).
Although these games are often built in the previously mentioned game engines, they are products from game developers. There’s a difference in knowledge and skill between a full-time developer working to get a game out the door, and a student who is learning the craft. We also have to remember that our goal is to build technical skills alongside the creative and design aspects that make up a piece of interactive media.
For this reason, I got excited when I had a suggestion from a local member of the Canberra Python Users Group pointed me to the Godot Engine – a free and open source game engine that puts 2D and 3D games on equal footing and has many of the features found in the commercial platforms. Here’s a highlight feature reel:
- Visual editor for 2D and 3D
- Supports instancing and inheritance
- Animation is possible using different techniques
- Includes a tile map editor
- Works in pixels as the unit of measure when working in 2D
- Scripting is available in a range of languages, including Python (which is our language of choice)
- Extensive documentation and tutorials available
- Multi-platform editor with small download footprint
- Simple compilation / packaging tools
- Works well alongside version management like Git
- Truly free – no license required if game is a commercial success
Given my goal has always been to teach the basics of programming with games as a context, the package feels like it’s going to tick a lot of boxes.
There are a stack of tutorials available online for Godot. Here’s a quick snapshot:
It looks as if Python 3 support is still in development, but GDScript is so Python-like that’s probably not an issue. I see that as akin to learning micropython or a GUI framework – there are peculiarities you learn, but the general structure is familiar.
There’s still a bit of magic involved (e.g. built-in Physics models etc.), but those models still require you to define behaviour inside the built-in functions and methods. The general structure of data encourages modularity and class-based design.
I also think that treating 2D as a first-class citizen will help encourage creativity in design. There’s more scope to explore narrative-driven adventure games without worrying too much about world building. It also facilitates development of simpler games with interesting interaction (think Mini Metro, or Duet). Another benefit is it opens the door for digital adaptations of board games – a nice option for some students. Ultimately, it all comes down to more variation in game types. That can only be a good thing!
A suggested program of learning
So the final question I want to address is how you might design a program of learning using Godot. There are a few things to consider here, since we need to assume there are other skills being developed alongside the mechanical process of developing a game. Here’s a high-level suggestion using the four unit structure of the ACT Year 11-12 Digital Technologies course:
This unit aims to develop the skills required for students to build components to be used in larger applications.
In this unit, develop the basic skills needed to design sprites and other elements inside a game. Teach students about the different elements that go into sprite design, like textures and images. Teach the fundamentals of a programming language (e.g. Python), such as structure, syntax and grammar. Use these skills to have students write basic scripts that define the behaviours a game object needs to perform its functions independently. From there, they can build simple games that have minimal interaction, like snake or checkers, with clearly defined rules that can be defined in code.
The goal of this unit is for students to see how different components are interconnected / related to one another, and how they interact.
Further develop student understanding of game design, and how different objects inside the game world are dependent on one another. Explore broader game design concepts, such as the role of narrative and mechanics design. Teach students how mechanics inform the design of code inside scripts, and the programming techniques used to define more complex interactions between objects. With these skills, they can construct games of a more complicated nature. Examples might include platformers like Super Mario Bros., or strategy/board games with more complicated rule interactions.
This unit develops the skills required to manage a design process for developing an integrated solution to a larger problem.
Teach students the techniques for managing larger code bases or projects with multiple assets. This could include version control systems such as Git. Have them work in small development teams to distribute workload across multiple people. Show them how a larger project necessitates things like modular design and clearly defined integration rules. Expose them to a wide variety of game types, and encourage them to think creatively about the player experience. With these skills they should be developing complete games that are engaging and utilise interesting interaction mechanics or narrative, like Duet or an introductory sequence for a Telltale-style adventure game.
In this unit, students define their own project and define the milestones, processes and outputs necessary to deliver it successfully.
Teach students about iterative design processes that encourage regular review of project scope and implementation. Have them define a sequence of deliverables that will allow them to deliver a project in the required timeframe. Encourage the formation of complementary teams and the necessary techniques to manage the development process. The goal should be the completion and [hopefully] launch of their product to a broad audience. The game they develop should be determined by the size of the development team and the skills each team member brings.
I hope this has given you a few things to think about when considering using games as a context in your Digital Technologies courses – not just at senior secondary level, but possibly through Years 7-10. If you do end up using Godot and have something to share, please let us know. It would be fantastic to see more diversity in student projects.
* if you don’t understand the reference in the title of this blog post, go here for an education 😉