An interactive Git learning game!
Find a file
2020-10-14 01:02:30 +02:00
.github/workflows Update action to deploy to GH pages 2020-10-09 11:26:59 +02:00
fonts Add a theme resource, which applies fonts/styles to all Control elements 2020-09-21 17:00:00 +02:00
levels Add "title" section to the level format 2020-10-12 20:09:51 +02:00
nodes Add pop sound when player adds nodes 2020-09-24 10:52:58 +02:00
scripts Changes for OSX 2020-10-06 16:50:31 +02:00
styles Convert level dropdowns to OptionButtons 2020-09-28 19:02:12 +02:00
.gitignore When exporting for Windows, bundle with PortableGit 2020-09-09 17:04:22 +02:00
arrow.gd Set center of gravity correctly when shrinking Nodes Control 2020-09-24 10:31:41 +02:00
arrow.tscn Use simple pager for long output 2020-09-29 17:05:04 +02:00
button.gd Three example buttons in the terminal 2020-10-13 14:23:14 +02:00
card.gd Add card descriptions 2020-10-14 01:02:30 +02:00
card.tscn Add card descriptions 2020-10-14 01:02:30 +02:00
cardgame.gd Add card descriptions 2020-10-14 01:02:30 +02:00
cardgame.tscn Add card descriptions 2020-10-14 01:02:30 +02:00
chapter.gd Load level information into classes 2020-09-29 19:40:17 +02:00
CODE_OF_CONDUCT.md Add Contributor Covenant v2.0 2020-10-12 20:00:59 +02:00
drop_area.gd Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
drop_area.tscn Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
export_presets.cfg Update action to deploy to GH pages 2020-10-09 11:26:59 +02:00
file_browser.gd Changes for OSX 2020-10-06 16:50:31 +02:00
file_browser.tscn Added File Browser for Repository Scene 2020-09-22 13:19:53 +02:00
game.gd Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
helpers.gd Changes for OSX 2020-10-06 16:50:31 +02:00
level.gd Add "title" section to the level format 2020-10-12 20:09:51 +02:00
level_repo.gd Add LevelRepo class - I forgot :P 2020-10-01 12:24:47 +02:00
levels.gd Load level information into classes 2020-09-29 19:40:17 +02:00
main.gd Add "title" section to the level format 2020-10-12 20:09:51 +02:00
main.tscn Allow having an arbitrary number of repos in a level 2020-09-30 21:36:11 +02:00
Makefile When building a zip of the game, don't include /tmp 2020-09-24 11:09:51 +02:00
node.gd Close completions after running a command 2020-09-27 21:50:14 +02:00
node.tscn Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
player.gd Indent using tabs, which is Godot's default behavior 2020-08-24 16:49:39 +02:00
player.tscn Basic project with export Makefile 2020-01-29 20:25:13 +01:00
project.godot Make the cardgame scene the default scene 2020-10-13 14:23:14 +02:00
README.md Add "title" section to the level format 2020-10-12 20:09:51 +02:00
repository.gd Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
repository.tscn Simple card game prototype in the Cardgame scene 2020-10-13 14:23:14 +02:00
sandbox.gd Fix sandbox mode by connecting the terminal's signal 2020-10-01 10:07:43 +02:00
sandbox.tscn Fix sandbox mode by connecting the terminal's signal 2020-10-01 10:07:43 +02:00
shell.gd Changes for OSX 2020-10-06 16:50:31 +02:00
tcp_server.gd Move exec, crash, and file IO to "helpers" autoload node 2020-09-29 14:54:07 +02:00
tcp_server.tscn Preparations for async commands 2020-09-24 10:10:14 +02:00
terminal.gd Remove some unneeded print statements 2020-10-06 18:53:53 +02:00
terminal.tscn Add tweening to the card arrangement 2020-10-14 01:02:30 +02:00
test.gd Experimental TCP Server node 2020-09-15 09:42:06 +02:00
text_editor.gd Textedit save shortcut 2020-10-06 11:34:12 +02:00
text_editor.tscn Allow multiple level sets, pull out default order into "sequence" file 2020-09-22 16:12:03 +02:00

git-hydra

git-hydra (working title) is an open-source game about learning Git!

The current form is an early prototype, and will change significantly until the end of February 2021.

Play the game!

You can download binaries of the game here:

We'll also have a Windows version soon stay tuned! :)

Report bugs!

If something doesn't work or looks broken, please let us know! You can describe the issue you're having in our issue tracker.

If you have ideas for new features, we'd be excited to hear them! Also in that case, we invite you to open an issue!

Build your own level!

Wanna build your own level? Great! Here's how to do it:

  1. Download the latest version of the Godot game engine.
  2. Clone this repository.
  3. Run the game the easiest way to do so is to run godot main.tscn from the project directory.
  4. Get a bit familiar with the levels which are currently there.
  5. Take a look into the levels directory. It's split into chapters, and each level is a file.
  6. Make a copy of an existing level or start writing your own. See the documention of the format below. Put your level in the contrib chapter.
  7. The dropdowns in the game will automatically refresh to contain your level, you don't need to restart the game.
  8. Write and test your level. If you're happy with it, feel free to send it to us in a pull request! <3

Level format

title = This is the level's title

[description]

This text will be shown when the level starts.

It describes the task or puzzle the player can solve.

[congrats]

This text will be shown after the player has solved the level.

Can contain additional information, or bonus exercises.

[setup]

# Bash commands that set up the initial state of the level. An initial
# `git init` is always done automatically. The default branch is called `main`.

echo You > people_who_are_awesome
git add .
git commit -m "Initial commit"

[win]

# Bash commands that check whether the level is solved. Write these as if you're
# writing the body of a Bash function. Make the function return 0 if it's
# solved, and a non-zero value otherwise. You can use `return`, and also, Bash
# functions return the exit code of the last statement, which sometimes allows
# very succinct checks.

# Check whether the file has at least two lines in the latest commit:
test "$(git show HEAD:people_who_are_awesome | wc -l)" -ge 2

A level can consist of multiple repositories. To have more than one, you can use sections like [setup <name>] and [win <name>], where <name> is the name of the remote. The default name is "yours". All repositories will add each other as remotes. Refer to the experiments/pull-merge-push level for an example.

Level guidelines

At this stage, we're still exploring ourselves which kind of levels would be fun! So feel free to try new things: basic introductions with a little story? Really hard puzzles? Levels where you have to find information? Levels where you need to fix a problem? Levels with three remotes?

Contributing code

Feel free to make improvements to the code and send pull requests! There is one exception: because merge conflicts in Godot's scene files tends to be hard to resolve, before working on an existing *.tscn file, please get in touch with us.

Code of Conduct

We have a Code of Conduct in place that applies to all project contributions, including issues and pull requests.

Funded by

Logo of the German Ministry for Education and Research            Logo of the Prototype Fund            Logo of the Open Knowledge Foundation Germany

License

TBD