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.
Godot’s arrival
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.
Getting started
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:
Digital Assets
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.
Digital Applications
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.
Digital Solutions
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.
Structured Project
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 😉
What a wonderful article Bruce. Thank you for taking the time to write it! I agree with everything you have said.
We are planning to use Godot for high school programming courses next year, and I’ve been enjoying the process of learning to use the engine myself. A major advantage for the use of open source software, apart from the (lack of) cost for the school, is that students can easily acquire and use it for free at home. In the case of Godot, this situation is set to improve even further with the $50 000 grant from the Mozilla foundation to build a web-based version of the software, which is planned to roll out next year.
The scripting language, GDScript, is deceptively simple and seamlessly integrated into the engine. It is, in fact, simpler than Python by design, with proposals for advanced features such as list comprehensions and the like deliberately rejected to make code more readable and thus shareable amongst the community (according to Godot lead programmer Juan Linietsky in a recent speech on “The state of Godot”). Features such as type hints in template code can be turned off in the editor options for further simplicity.
You mentioned the physics engine still being present, which is true (and mostly useful), however, it is possible to bypass this with using a more general node such as “Area2D” for a game object, and manipulating screen position directly, e.g. “position.x = 450”. Area2D nodes especially are useful for this as they allow for simple collision detection that can then be handled by user defined code.
Whilst generally useful, I’ve found some of the tutorials on YouTube a little to advanced for programming beginners, but playing around with the engine over the last few months I’ve found that things can be simplified quite substantially for beginner projects.
Thanks for your comments Steven. May I ask if you’ve managed to get Godot packaged for deployment yet? We had a question come in from a teacher via our Facebook page asking if packaging had been done for deployment on the public schools network, and it would be useful to know if nay progress has been made on that front.
That said, the fact a browser-based version is in the works will go a long way to solving the problem for schools that are all-in on the Chromebook front – it’s been an ongoing issue for us with any kind of development (be it games, programming or web) that students can’t install software like they could in a true BYOD environment, and it limits what they can do significantly.
I see the physics engine as both a blessing and a curse – as you say, you can work around it by using other node types, but in some ways having the students redefine the physics for “normal” behaving objects departs from the overall game logic we potentially want them to focus on. I think being able to use both options is the best approach, and it ultimately will come down to the type of game a student is using – for a platformer getting the physics out of the way is the right approach, but if they are going to build some kind of interesting physics game (think Angry Birds style), it may actually be preferred that they redefine the physics of objects themselves.
There are a range of resources out there and I just threw a few into the article for people to investigate. If you’ve got a stack that you’ve found particularly useful, please send them to us at committee@inteact.act.edu.au and I’ll add them to our resources project that we’re building specifically for the senior secondary schools to support the new courses – as many resources as possible are always appreciated.
Again, thanks for your contribution 🙂
It’s my pleasure. I put in a request for Godot version 3.1.1 to be packaged at the end of last term, which was subsequently completed within the last several weeks. I submitted UAT (user acceptance testing) feedback last week that while most aspects are working well, file system access for saving projects is an issue. This can be worked around by students using USB’s but this is far from ideal. Hopefully they will be able to fix this soon. The software seemed otherwise very stable.
I’m also looking forward to the web-based version of the software. Hopefully, the fact that Godot has a true “2D” mode (as opposed to engines such as unity which seem to still use much of the 3D graphics and physics code for 2D games) will mean that performance is serviceable on Chromebooks. Screen real estate might be an issue but we’ll have to wait and see how design choices are made in that regard.
I noticed that the Australian STEM Video Game Challenge (https://www.stemgames.org.au) is advocating for Godot quite strongly due to it’s open source status. They have an entire category in the competition dedicated to it.
I joined InTEACT recently, and will certainly send you any other resources I find that are helpful, along with any reflections I have after actually using the engine in class. I would certainly be interested to see how it is used in other schools as well.