Giter Site home page Giter Site logo

git-learning-game / oh-my-git Goto Github PK

View Code? Open in Web Editor NEW
1.9K 20.0 138.0 46.14 MB

An interactive Git learning game!

Home Page: https://ohmygit.org

License: Other

Makefile 1.32% GDScript 94.55% Perl 4.13%
git learning game visualization teaching godot

oh-my-git's Introduction

Oh My Git! is an open-source game about learning Git!

Play the game!

You can download binaries for Linux, macOS, and Windows from itch.io!

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 3 game engine. Godot 4 is not supported yet.
  2. Clone this repository.
  3. Run the game – the easiest way to do so is to run godot scenes/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 documentation of the format below.
  7. 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.

[cli]

(optional) This text will be shown below the level description in a darker color.

It should give hints to the player about command line usage and also maybe some neat tricks.

[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. The comment above the win check will be shown in the game
# as win condition text.

# 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 remote levels examples.

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?

Contribute code!

To open the game in the Godot editor, run godot project.godot. You can then run the game using F5.

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.

To build your own binaries, you'll need Godot's export templates, and zip, wget, and 7z. Then, run make. On Debian/Ubuntu, the Godot binary is called godot3, you might need to adjust the paths in the Makefile.

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

Thanks

License

Blue Oak Model License 1.0.0 – a modern alternative to the MIT license. It's a a pleasant read! :)

oh-my-git's People

Contributors

artt avatar bleeptrack avatar blinry avatar bytehamster avatar bziemons avatar derniklaas avatar donfede avatar elatronion avatar jayman2000 avatar jspricke avatar kmomberg avatar kunzaatko avatar mk-udue avatar mribeirodantas2 avatar mtreinik avatar mundifex avatar n4mr3g avatar nikopp avatar redxanadu avatar tokugero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oh-my-git's Issues

git gud

I'm sure there's a git gud joke to be made somewhere in here. I trust that developers will manage to find a place for it.

UX: guide focus to file browser for first few levels

For the first few levels (before starting to play cards) all the action happens in the file browser on the right.
The large play area is unused but sort of is the center of attention.
Maybe provide a visual hint (e.g. text or an arrow) in the play area?
Or flash the border of the file browser to draw attention there.

Solution in level index -> compare makes no sense

I may have misunderstood this, but - the book blew out the candle. So - there is no fire. Why would the smoke detector not be silenet anymore? Everything is fine? Or is this talking about the smoke caused by the blown out candle? If yes - I would've never thought of this ;)

git show step-by-step:smoke_detector | grep -v "absolutely silent"

Never able to reach the first level

Hello,

I'm running Ubuntu 20.04.2.

I download the zip file, unzip it, and try ./oh-my-git but I get :

ERROR: make_dir_recursive: Method failed. Returning: err
At: core/os/dir_access.cpp:185.
Godot Engine v3.2.3.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: GeForce GT 1030/PCIe/SSE2
Segmentation fault (core dumped)

I tried with sudo ./oh-my-git and I was able to walk into the menus but when I choose the first level, it crashed:

ERROR: make_dir_recursive: Method failed. Returning: err
At: core/os/dir_access.cpp:185.
Godot Engine v3.2.3.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: GeForce GT 1030/PCIe/SSE2
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ERROR: init_device: Condition "status < 0" is true. Returned: ERR_CANT_OPEN
At: drivers/alsa/audio_driver_alsa.cpp:83.
WARNING: initialize: All audio drivers failed, falling back to the dummy driver.
At: servers/audio_server.cpp:215.

ERROR: call: Refusing to delete directory /root/.local/share/Oh My Git/tmp/repos/yours/ that does not start with /home/root/.local/share/Oh My Git/tmp/
At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: Refusing to delete directory /root/.local/share/Oh My Git/tmp/repos/yours/ that does not start with /home/root/.local/share/Oh My Git/tmp/
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
At: core/object.cpp:2135.
ERROR: clear: Resources still in use at exit (run with --verbose for details).
At: core/resource.cpp:477.
ERROR: cleanup: Condition "allocs_used > 0" is true.
At: core/pool_vector.cpp:69.

Afterwards, even the sudo launch failed directly with a segmentation fault.

Crashes nearly instantly on Windows 10.

I can only get to the first splash screen and menu. Completely fails after that.

PS C:\Program Files (x86)\ohMyGit> .\oh-my-git.exe
Godot Engine v3.2.3.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Intel(R) HD Graphics 520
WARNING: init_render_device: WASAPI: Unsupported number of channels: 1
     At: drivers/wasapi/audio_driver_wasapi.cpp:330

connected!
ERROR: call: Refusing to delete directory C:/Users/user/AppData/Roaming/Oh My Git/tmp/repos/yours/ that does not start with C:/Users/user/AppData/Roaming/Oh My Git/tmp/
   At: modules/gdscript/gdscript_functions.cpp:803
FATAL ERROR: Refusing to delete directory C:/Users/user/AppData/Roaming/Oh My Git/tmp/repos/yours/ that does not start with C:/Users/user/AppData/Roaming/Oh My Git/tmp/
SCRIPT ERROR: crash: Invalid call. Nonexistent function 'fatal_error' in base 'SceneTree'.
          At: res://scenes/helpers.gdc:12
ERROR: ~List: Condition "_first != __null" is true.
   At: ./core/self_list.h:112
ERROR: ~List: Condition "_first != __null" is true.
   At: ./core/self_list.h:112
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
     At: core/object.cpp:2135
ERROR: clear: Resources still in use at exit (run with --verbose for details).
   At: core/resource.cpp:477
ERROR: There are still MemoryPool allocs in use at exit!
   At: core/pool_vector.cpp:69
System Info
Item Value
CPUs Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4 x 2496)
Memory (System) 15.88GB (6.45GB free)
GPU Status 2d_canvas: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
oop_rasterization: enabled
opengl: enabled_on
protected_video_decode: unavailable_off
rasterization: enabled
skia_renderer: enabled_on
video_decode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled

Light Color Scheme/Palette

Would it be possible to include a light color scheme as an alternative to the black background with white text? Something in the spirit of solarized light?

My tired eyes would thank you for it!

CPU usage

On my laptop Dell latitude 7490 running Debian 10, as soon as the game is launched I see high CPU usage using top.

The oh-my-git process uses 20% of a CPU on main screen.
I saw it going up to 60% during one level.

Crashes in windows

When I open the game, I see the opening screen but than a crash occurs.
Exit Code 127
SCRIPT ERROR: crash: Invalid call. Nonexistent function 'fatal_error' in base 'SceneTree'.
At: res://scenes/helpers.gdc:12
ERROR: File must be opened before use.
At: core/bind/core_bind.cpp:2195
ERROR: call: OS.execute failed: dependencies\windows\git\bin\bash.exe [C:/Users/tomdemoor/AppData/Roaming/git-hydra/tmp/command3154986942] Output: /usr/bin/bash: C:/Users/tomdemoor/AppData/Roaming/git-hydra/tmp/command3154986942: No such file or directory

Exit Code 127
At: modules/gdscript/gdscript_functions.cpp:803
FATAL ERROR: OS.execute failed: dependencies\windows\git\bin\bash.exe [C:/Users/tomdemoor/AppData/Roaming/git-hydra/tmp/command3154986942] Output: /usr/bin/bash: C:/Users/tomdemoor/AppData/Roaming/git-hydra/tmp/command3154986942: No such file or directory

Exit Code 127
SCRIPT ERROR: crash: Invalid call. Nonexistent function 'fatal_error' in base 'SceneTree'.
At: res://scenes/helpers.gdc:12
ERROR: ~List: Condition "_first != __null" is true.
At: ./core/self_list.h:112
ERROR: ~List: Condition "_first != __null" is true.
At: ./core/self_list.h:112
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
At: core/object.cpp:2135
ERROR: clear: Resources still in use at exit (run with --verbose for details).
At: core/resource.cpp:477
ERROR: There are still MemoryPool allocs in use at exit!
At: core/pool_vector.cpp:69

graphics are not visible in "Enter the time machine" level on Windows 10

Game buttons (Back, Reload, Toggle music) are not visible in "Enter the time machine" level on Windows 10.

This is all I see:

image

I can click where the buttons should be in the upper left to "Toggle music", or go "Back" to the previous menu, but I never see the buttons.

Also, the terminal graphics are missing.

Obviously, "Drag that blue card up to play it!" does not make any sense. What blue card?

However, when I just happen to move the mouse over the bottom-center of the screen, everything shows up.

image

System Info
Item Value
CPUs Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4 x 2496)
Memory (System) 15.88GB (6.45GB free)
GPU Status 2d_canvas: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
oop_rasterization: enabled
opengl: enabled_on
protected_video_decode: unavailable_off
rasterization: enabled
skia_renderer: enabled_on
video_decode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled

Environment viewer should update state for opened files

When clicking on a file in the environment view part of the game and switching to a different commit via the git checkout card the content displayed in the viewer should reflect the current contents of the viewed file.

At the moment, when selecting the first revision of the piggy bank file from level 2 and trying to see the changes by checking out different commits, the displayed content stays the same. Only after you close the viewer and reopen the file the new contents are shown.

UX: draw attention to commit message editor

After playing the git add .; git commit card, it is not immediately obvious that you have to type a message in the editor in the bottom right (probably even more so, if you've never used git before). Maybe draw attention to the editor window by animating/flashing its border?

Git warning in level "working together"

Using version 0.6.2 on Arch Linux (git version: 2.30.1-1), the git pull command generates a pretty long warning in the command window. I think it would be better to not confuse beginners with that and set the config automatically.

warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:

  git config pull.rebase false  # merge (the default strategy)
  git config pull.rebase true   # rebase
  git config pull.ff only       # fast-forward only

You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.

Add a checkbox to display all Git objects, and have the arrows point in the proper direction

Hi! First of all, thanks a lot for this great project. I'm working as a teacher in a bootcamp and i'm considering giving it as a tool for learning git.

One little detail that can be missleading and it's not really correct, is that the arrows between commits are reversed.
In this picture I explain it.
image

I think this could be missleading for students understanding how git works.

What do you think?

UX: color of "next level" button

The red color of the "next level" button to me communicates "warning" or "cancel". I would suggest to either go with green (as for example in "green traffic light"), or maybe silver or gold, to communicate a sense of achievement ("trophy" for unlocking the next level).

Taking any action makes the game not respond for a few seconds on Windows

Platform: Windows 10
Game version: 0.6.0

On taking certain actions, the game's UI does not respond for 1-3 seconds. The music still plays, so do sound effects. After the freeze, the animations play smoothly mostly

Actions with which I can reproduce this:

  • Closing a file without saving it
  • Saving a file
  • Playing a card
  • Saving the git commit comment
  • Pressing "Next Level" (about 4-5 seconds)
  • After pressing enter when entering a command. Can be any command, even ls takes this amount of time

If this cannot be helped due to mingw or something, one solution might be to make it appear smoother to play the animation(s) already while waiting for the work to be done.

Readme

Pls provide a Readme or a Release.

Kind Regards
sythys

App crashes on mac

ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H114

Run App

Click "Levels"
Click "Living Dangerously"

what looks like a level pops up... and then the app closes.

If I run the app from the command line, I get the same behavior and this trace:

$ /Applications/Oh\ My\ Git\!.app/Contents/MacOS/Oh\ My\ Git\!
arguments
0: /Applications/Oh My Git!.app/Contents/MacOS/Oh My Git!
Godot Engine v3.2.3.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Intel Iris OpenGL Engine

ERROR: call: Refusing to delete directory /Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/ that does not start with /Users/coke/Library/Application Support/Oh My Git/tmp/
   At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: Refusing to delete directory /Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/ that does not start with /Users/coke/Library/Application Support/Oh My Git/tmp/
ERROR: call: OS.execute failed: bash [-c, "'export HOME='"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/'"'"';export PATH='"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/:'"'"'"$PATH";cd '"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/'"'"' || exit 1;mkdir '"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/'"'"''"] Output: mkdir: /Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/: File exists

Exit Code 1
   At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: OS.execute failed: bash [-c, "'export HOME='"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/'"'"';export PATH='"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/:'"'"'"$PATH";cd '"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/'"'"' || exit 1;mkdir '"'"'/Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/'"'"''"] Output: mkdir: /Volumes/BUKKIT/Users/coke/Library/Application Support/Oh My Git/tmp/repos/yours/: File exists

Exit Code 1
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
   At: core/object.cpp:2135.
ERROR: clear: Resources still in use at exit (run with --verbose for details).
   At: core/resource.cpp:477.
ERROR: cleanup: Condition "allocs_used > 0" is true.
   At: core/pool_vector.cpp:69.

Add hint to show "right-click" on a yellow commit in the tree window, will paste hash into console

The game has a useful CLI feature, where the Git hashes associated with each yellow commit icon in the tree sub-window will be pasted into the console by right clicking. This feature makes completing the game via CLI achievable. However, this feature is not explained anywhere.

Not sure if that documentation might best be in a separate "CLI power user popup" hint window, or maybe one of the initial green hint boxes, or some other way. Granted, this is a relatively minor issue.

UX: visually show if music is muted

There currently is no visual feedback whether the music is muted.
Maybe add a little mute/unmute icon (speaker symbol) that indicates the current state.
Or change the text accordingly (i.e. change the button to "mute music" when the music is playing and "unmute music" when the music is muted).

Release a flatpak version

Flatpak is a great way to distribute a game in Linux nowadays. Flathub é being used even from the app stores in different Linux distributions. Having the game distributed to flatpak would be easier for some Linux users to play the game :)

Crash when switching to "Your first commit" on Git 2.17.1

After finishing the level "The command line" and clicking "Next level", the game crashed. Here's the terminal output (running with LANG= ./oh-my-git to get English error messages):

$ LANG= ./oh-my-git
Godot Engine v3.2.3.stable.official - https://godotengine.org
WARNING: initialize: XOpenIM failed
   At: platform/x11/os_x11.cpp:195.
WARNING: initialize: XCreateIC couldn't create xic
   At: platform/x11/os_x11.cpp:497.
OpenGL ES 3.0 Renderer: GeForce 8300/integrated/SSE2
 
ERROR: get_language_code: Condition "p_locale.length() < 2" is true. Returned: p_locale
   At: core/translation.cpp:945.
ERROR: set_locale: Unsupported locale '', falling back to 'en'.
   At: core/translation.cpp:969.
ERROR: call: OS.execute failed: bash [-c, "'export HOME='"'"'/home/oliver/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/oliver/.local/share/Oh My Git/tmp/:'"'"'"$PATH";cd '"'"'/home/oliver/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git log --graph --oneline --all --no-abbrev'"] Output: fatal: your current branch 'main' does not have any commits yet
 
Exit Code 128
   At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: OS.execute failed: bash [-c, "'export HOME='"'"'/home/oliver/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/oliver/.local/share/Oh My Git/tmp/:'"'"'"$PATH";cd '"'"'/home/oliver/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git log --graph --oneline --all --no-abbrev'"] Output: fatal: your current branch 'main' does not have any commits yet
 
Exit Code 128
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
   At: core/object.cpp:2135.
ERROR: clear: Resources still in use at exit (run with --verbose for details).
   At: core/resource.cpp:477.
ERROR: cleanup: Condition "allocs_used > 0" is true.
   At: core/pool_vector.cpp:69.

This crash happens on Ubuntu 16.04, with Git 2.7.4. It does not happen on Ubuntu 18.04, with Git 2.17.1.
According to https://blinry.itch.io/oh-my-git where I downloaded the game, this should be OMG 0.6.0.

When I go into /home/oliver/.local/share/Oh My Git/tmp/repos/yours/ on Ubuntu 16.04 and run git log --graph --oneline --all --no-abbrev, I get that same error message, and the command exits with code 128.
On Ubuntu 18.04 the same command works fine, however. I guess the behavior of git log --all has changed between these two Git versions.

Btw. in my opinion it's OK if such old Git versions are not supported any more.

Not clear instructions on the "Your first commit" level

An error is reported if the user tries to only input git commit as they will need to provide a commit message with the -m flag, or git will have to open an editor. However, in Windows, the git you are using for this game cannot open an editor.

UX: no cursor for empty command line

When focusing the command line input field the cursor only shows up after typing some text. It would be nice to have the blinking cursor appear as soon as the text field is focused.

Font is kinda blocky

The font (especially on the right) is kinda hard to read due to the missing anti-aliasing.

image

Graphics for tags and branches are the same : it's misleading

image

It would help the user to differentiate between tags like 'v1' .. 'v3' and 'main' which is a branch, not a tag.
You can't run "git tag -d main" although main and vx tags show exactly the same in the graph view.

I believe that it would add some readability to introduce a difference in the way they show for UX comfort.

Crash when git is not available

I tried to run it on NixOS with steam-run to have a common FHS environment for games. It crashes, because there is no git.

It starts, i can see the menu, but when i start a level, it crashes.

A solution would be to show a message at start, that git has to be installed on the system. Also, document needed external dependencies. Not sure if it would make sense to include it. When this game is the very first step with git, it might makes sense to not even have to install it. That might be a barrier to some.

[davidak@gaming:~/Downloads]$ steam-run ./oh-my-git --verbose
Godot Engine v3.2.3.stable.official - https://godotengine.org
XInput: Refreshing devices.
XInput: No touch devices found.
Custom libGL override detected. Skipping GPU detection
Custom libGL override detected. Skipping GPU detection
Failed loading custom cursor: size_bdiag
Failed loading custom cursor: size_fdiag
Using GLES3 video driver
OpenGL ES 3.0 Renderer: AMD Radeon (TM) RX 480 Graphics (POLARIS10, DRM 3.39.0, 5.9.16, LLVM 9.0.1)
PulseAudio: detected 2 channels
PulseAudio: audio buffer frames: 512 calculated latency: 11ms
 
Loading resource: res://default_bus_layout.tres
CORE API HASH: 0
EDITOR API HASH: 0
Loading resource: res://scenes/helpers.gdc
Loading resource: res://scenes/levels.gdc
Loading resource: res://scenes/chapter.gdc
Loading resource: res://scenes/level.gdc
Loading resource: res://scenes/level_repo.gdc
Loading resource: res://scenes/game.tscn
Loading resource: res://scenes/game.gdc
Loading resource: res://scenes/notification.tscn
Loading resource: res://fonts/default.tres
Loading resource: res://fonts/cabin-regular.ttf
Loading resource: res://styles/theme.tres
Loading resource: res://fonts/monospace.tres
Loading resource: res://fonts/iosevka-regular.ttf
Loading resource: res://scenes/notification.gdc
Loading resource: res://scenes/shell.gdc
Loading resource: res://scenes/shell_command.gdc
Loading resource: res://music/gigantic-greasy-giraffe.ogg
Loading resource: res://scenes/title.tscn
Loading resource: res://images/oh-my-git.png
Loading resource: res://scenes/title.gdc
Loading resource: res://scenes/level_select.tscn
Loading resource: res://scenes/level_select.gdc
Loading resource: res://fonts/big.tres
Loading resource: res://fonts/cabin-bold.ttf
Loading resource: res://scenes/cli_badge.tscn
Loading resource: res://images/cli-badge.svg
Loading resource: res://scenes/cli_badge.gdc
Loading resource: res://styles/alert_button.tres
Loading resource: res://scenes/main.tscn
Loading resource: res://scenes/terminal.tscn
Loading resource: res://sounds/typewriter_ding.wav
Loading resource: res://scenes/terminal.gdc
Loading resource: res://scenes/text_editor.tscn
Loading resource: res://scenes/text_editor.gdc
Loading resource: res://scenes/tcp_server.tscn
Loading resource: res://scenes/tcp_server.gdc
Loading resource: res://sounds/buzzer.wav
Loading resource: res://scenes/main.gdc
Loading resource: res://scenes/repository.tscn
Loading resource: res://scenes/repository.gdc
Loading resource: res://scenes/node.tscn
Loading resource: res://scenes/node.gdc
Loading resource: res://scenes/arrow.tscn
Loading resource: res://scenes/arrow.gdc
Loading resource: res://nodes/blob.svg
Loading resource: res://nodes/tree.svg
Loading resource: res://nodes/commit.svg
Loading resource: res://nodes/ref.svg
Loading resource: res://nodes/head3.svg
Loading resource: res://nodes/pop.wav
Loading resource: res://scenes/drop_area.tscn
Loading resource: res://scenes/drop_area.gdc
Loading resource: res://scenes/cards.tscn
Loading resource: res://scenes/cards.gdc
Loading resource: res://scenes/card.tscn
Loading resource: res://scenes/card.gdc
Loading resource: res://scenes/input_dialog.tscn
Loading resource: res://scripts/input_dialog.gdc
Loading resource: res://scenes/card_particles.tscn
Loading resource: res://sounds/swish.wav
Loading resource: res://sounds/swoosh.wav
Loading resource: res://sounds/poof.wav
Loading resource: res://fonts/small.tres
Loading resource: res://scenes/file_browser.tscn
Loading resource: res://scenes/file_browser.gdc
Loading resource: res://scenes/file_browser_item.tscn
Loading resource: res://scenes/file_browser_item.gdc
Loading resource: res://nodes/document.svg
Loading resource: res://sounds/success.wav
Loading resource: res://scenes/cursor.gdc
ERROR: call: OS.execute failed: bash [-c, "'export HOME='"'"'/home/davidak/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/davidak/.local/share/Oh My Git/tmp/:/usr/bin:/bin:/mingw64/bin/'"'"';cd '"'"'/home/davidak/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git init'"] Output: bash: git: command not found
 
Exit Code 127
   At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: OS.execute failed: bash [-c, "'export HOME='"'"'/home/davidak/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/davidak/.local/share/Oh My Git/tmp/:/usr/bin:/bin:/mingw64/bin/'"'"';cd '"'"'/home/davidak/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git init'"] Output: bash: git: command not found
 
Exit Code 127
ERROR: call: OS.execute failed: bash [-c, "'export HOME='"'"'/home/davidak/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/davidak/.local/share/Oh My Git/tmp/:/usr/bin:/bin:/mingw64/bin/'"'"';cd '"'"'/home/davidak/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git symbolic-ref HEAD refs/heads/main'"] Output: bash: git: command not found
 
Exit Code 127
   At: modules/gdscript/gdscript_functions.cpp:803.
FATAL ERROR: OS.execute failed: bash [-c, "'export HOME='"'"'/home/davidak/.local/share/Oh My Git/tmp/'"'"';export PATH='"'"'/home/davidak/.local/share/Oh My Git/tmp/:/usr/bin:/bin:/mingw64/bin/'"'"';cd '"'"'/home/davidak/.local/share/Oh My Git/tmp/repos/yours/'"'"' || exit 1;git symbolic-ref HEAD refs/heads/main'"] Output: bash: git: command not found
 
Exit Code 127
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
   At: core/object.cpp:2135.
Leaked instance: Node:3062 - Node name: 
Leaked instance: Node:1453 - Node name: 
Leaked instance: Node:10426 - Node name: 
Leaked instance: Node:5886 - Node name: 
Leaked instance: Node:7139 - Node name: 
Leaked instance: Node:8011 - Node name: 
Leaked instance: Node:4633 - Node name: 
Leaked instance: Node:6202 - Node name: 
Leaked instance: Node:2799 - Node name: 
Leaked instance: Node:3739 - Node name: 
Leaked instance: Node:3853 - Node name: 
Leaked instance: Node:5100 - Node name: 
Leaked instance: Node:8689 - Node name: 
Leaked instance: Node:9425 - Node name: 
Leaked instance: Node:2638 - Node name: 
Leaked instance: Node:4742 - Node name: 
Leaked instance: Node:7019 - Node name: 
Leaked instance: Node:5212 - Node name: 
Leaked instance: Node:7504 - Node name: 
Leaked instance: Node:9374 - Node name: 
Leaked instance: Node:1670 - Node name: 
Leaked instance: Node:8902 - Node name: 
Leaked instance: Node:4956 - Node name: 
Leaked instance: Node:10500 - Node name: 
Leaked instance: Node:4011 - Node name: 
Leaked instance: Node:10445 - Node name: 
Leaked instance: Node:4520 - Node name: 
Leaked instance: Node:6911 - Node name: 
Leaked instance: Node:5942 - Node name: 
Leaked instance: Node:5214 - Node name: 
Leaked instance: GDScript:1153 - Resource path: res://scenes/level.gd
Leaked instance: Node:2015 - Node name: 
Leaked instance: Node:4630 - Node name: 
Leaked instance: Node:8240 - Node name: 
Leaked instance: Node:10446 - Node name: 
Leaked instance: Node:5590 - Node name: 
Leaked instance: Node:5075 - Node name: 
Leaked instance: Node:5220 - Node name: 
Leaked instance: Node:5726 - Node name: 
Leaked instance: Node:1818 - Node name: 
Leaked instance: Node:4852 - Node name: 
Leaked instance: Node:1317 - Node name: 
Leaked instance: Node:6203 - Node name: 
Leaked instance: Node:10498 - Node name: 
Leaked instance: Node:7844 - Node name: 
Leaked instance: GDScript:1154 - Resource path: res://scenes/level_repo.gd
Leaked instance: Node:3852 - Node name: 
Leaked instance: Node:3229 - Node name: 
Leaked instance: Node:6812 - Node name: 
Leaked instance: Node:8381 - Node name: 
Leaked instance: Node:5101 - Node name: 
Leaked instance: Node:2107 - Node name: 
Leaked instance: Node:9353 - Node name: 
Leaked instance: Node:2372 - Node name: 
Leaked instance: Node:8377 - Node name: 
Leaked instance: Node:10407 - Node name: 
Leaked instance: Node:7898 - Node name: 
Leaked instance: Node:3234 - Node name: 
Leaked instance: Node:2206 - Node name: 
Leaked instance: Node:1406 - Node name: 
Leaked instance: Node:2746 - Node name: 
Leaked instance: GDScript:1152 - Resource path: res://scenes/chapter.gd
Leaked instance: Node:6287 - Node name: 
Leaked instance: Node:8688 - Node name: 
Leaked instance: Node:3158 - Node name: 
Leaked instance: Node:6380 - Node name: 
Leaked instance: Node:9015 - Node name: 
Leaked instance: Node:2373 - Node name: 
Leaked instance: Node:4298 - Node name: 
Leaked instance: Node:9373 - Node name: 
Leaked instance: Node:7140 - Node name: 
Leaked instance: Node:4104 - Node name: 
Leaked instance: Node:2641 - Node name: 
Leaked instance: Node:1516 - Node name: 
Leaked instance: Node:3059 - Node name: 
Leaked instance: Node:4108 - Node name: 
Leaked instance: Node:5788 - Node name: 
Leaked instance: Node:10470 - Node name: 
Leaked instance: Node:5219 - Node name: 
Leaked instance: Node:10497 - Node name: 
Leaked instance: Node:7335 - Node name: 
Leaked instance: Node:2014 - Node name: 
Leaked instance: Node:3625 - Node name: 
Leaked instance: Node:8287 - Node name: 
Leaked instance: Node:5885 - Node name: 
Leaked instance: Node:10475 - Node name: 
Leaked instance: Node:3410 - Node name: 
Leaked instance: Node:5210 - Node name: 
Leaked instance: Node:5890 - Node name: 
Leaked instance: Node:2376 - Node name: 
Leaked instance: GDScriptNativeClass:679
Leaked instance: Node:8242 - Node name: 
Leaked instance: Node:1733 - Node name: 
Leaked instance: Node:5216 - Node name: 
Leaked instance: Node:8187 - Node name: 
Leaked instance: Node:5887 - Node name: 
Leaked instance: Node:2205 - Node name: 
Leaked instance: Node:8474 - Node name: 
Leaked instance: Node:3967 - Node name: 
Leaked instance: Node:2745 - Node name: 
Leaked instance: Node:8570 - Node name: 
Leaked instance: Node:3159 - Node name: 
Leaked instance: Node:4743 - Node name: 
Leaked instance: Node:9424 - Node name: 
Leaked instance: Node:9350 - Node name: 
Leaked instance: Node:4415 - Node name: 
Leaked instance: Node:6009 - Node name: 
Leaked instance: Node:2538 - Node name: 
Leaked instance: Node:7507 - Node name: 
Leaked instance: Node:3969 - Node name: 
Leaked instance: Node:3968 - Node name: 
Leaked instance: Node:5725 - Node name: 
Leaked instance: Node:8903 - Node name: 
Leaked instance: Node:2637 - Node name: 
Leaked instance: Node:6914 - Node name: 
Leaked instance: Node:3411 - Node name: 
Leaked instance: Node:6645 - Node name: 
Leaked instance: Node:7502 - Node name: 
Leaked instance: Node:9423 - Node name: 
Leaked instance: Node:5080 - Node name: 
Leaked instance: Node:5151 - Node name: 
Leaked instance: Node:10401 - Node name: 
Leaked instance: Node:10400 - Node name: 
Leaked instance: Node:5077 - Node name: 
Leaked instance: Node:6005 - Node name: 
Leaked instance: Node:7503 - Node name: 
Leaked instance: Node:5076 - Node name: 
Leaked instance: Node:10495 - Node name: 
Leaked instance: Node:7946 - Node name: 
Leaked instance: Node:3672 - Node name: 
Leaked instance: Node:1612 - Node name: 
Leaked instance: Node:4201 - Node name: 
Leaked instance: Node:1613 - Node name: 
Leaked instance: Node:2947 - Node name: 
Leaked instance: Node:8124 - Node name: 
Leaked instance: Node:10406 - Node name: 
Leaked instance: Node:9125 - Node name: 
Leaked instance: Node:2866 - Node name: 
Leaked instance: Node:2800 - Node name: 
Leaked instance: Node:1732 - Node name: 
Leaked instance: Node:6288 - Node name: 
Leaked instance: Node:3571 - Node name: 
Leaked instance: Node:1736 - Node name: 
Leaked instance: Node:3572 - Node name: 
Leaked instance: Node:8183 - Node name: 
Leaked instance: Node:6811 - Node name: 
Leaked instance: Node:7945 - Node name: 
Leaked instance: Node:9483 - Node name: 
Leaked instance: Node:7845 - Node name: 
Leaked instance: Node:5789 - Node name: 
Leaked instance: Node:7220 - Node name: 
Leaked instance: Node:9016 - Node name: 
Leaked instance: Node:3230 - Node name: 
Leaked instance: Node:4519 - Node name: 
Leaked instance: Node:1405 - Node name: 
Leaked instance: Node:7683 - Node name: 
Leaked instance: Node:10448 - Node name: 
Leaked instance: Node:4853 - Node name: 
Leaked instance: Node:5679 - Node name: 
Leaked instance: Node:8906 - Node name: 
Leaked instance: Node:3911 - Node name: 
Leaked instance: Node:1617 - Node name: 
Leaked instance: Node:4957 - Node name: 
Leaked instance: Node:1226 - Node name: 
Leaked instance: Node:9126 - Node name: 
Leaked instance: Node:10450 - Node name: 
Leaked instance: Node:4416 - Node name: 
Leaked instance: Node:6006 - Node name: 
Leaked instance: Node:6649 - Node name: 
Leaked instance: Node:1614 - Node name: 
Leaked instance: Node:6478 - Node name: 
Leaked instance: Node:1229 - Node name: 
Leaked instance: Node:9230 - Node name: 
Leaked instance: Node:6379 - Node name: 
Leaked instance: Node:10471 - Node name: 
Leaked instance: Node:8792 - Node name: 
Leaked instance: Node:3058 - Node name: 
Leaked instance: Node:7332 - Node name: 
Leaked instance: Node:3914 - Node name: 
Leaked instance: Node:5152 - Node name: 
Leaked instance: Node:5150 - Node name: 
Leaked instance: Node:10399 - Node name: 
Leaked instance: Node:7018 - Node name: 
Leaked instance: Node:8475 - Node name: 
Leaked instance: Node:3738 - Node name: 
Leaked instance: Node:6091 - Node name: 
Leaked instance: Node:8241 - Node name: 
Leaked instance: Node:10402 - Node name: 
Leaked instance: Node:9348 - Node name: 
Leaked instance: Node:2539 - Node name: 
Leaked instance: Node:3624 - Node name: 
Leaked instance: Node:4202 - Node name: 
Leaked instance: Node:7072 - Node name: 
Leaked instance: Node:1930 - Node name: 
Leaked instance: Node:4297 - Node name: 
Leaked instance: Node:4629 - Node name: 
Leaked instance: Node:7073 - Node name: 
Leaked instance: Node:8378 - Node name: 
Leaked instance: Node:5211 - Node name: 
Leaked instance: Node:3910 - Node name: 
Leaked instance: Node:1669 - Node name: 
Leaked instance: Node:7848 - Node name: 
Leaked instance: Node:10476 - Node name: 
Leaked instance: Node:8571 - Node name: 
Leaked instance: Node:4014 - Node name: 
Leaked instance: Node:1452 - Node name: 
Leaked instance: Node:6910 - Node name: 
Leaked instance: Node:2946 - Node name: 
Leaked instance: GDScript:1196 - Resource path: res://scenes/shell_command.gd
Leaked instance: Node:7431 - Node name: 
Leaked instance: Node:5502 - Node name: 
Leaked instance: Node:7432 - Node name: 
Leaked instance: Node:3160 - Node name: 
Leaked instance: Node:8184 - Node name: 
Leaked instance: Node:8793 - Node name: 
Leaked instance: Node:10447 - Node name: 
Leaked instance: GDScript:1195 - Resource path: res://scenes/shell.gd
Leaked instance: Node:5499 - Node name: 
Leaked instance: Node:7433 - Node name: 
Leaked instance: Node:6646 - Node name: 
Leaked instance: Node:1819 - Node name: 
Leaked instance: Node:8126 - Node name: 
Leaked instance: Node:10398 - Node name: 
Leaked instance: Node:2106 - Node name: 
Leaked instance: Node:7897 - Node name: 
Leaked instance: Node:1929 - Node name: 
Leaked instance: Node:8284 - Node name: 
Leaked instance: Node:3575 - Node name: 
Leaked instance: Node:1515 - Node name: 
Leaked instance: Node:6092 - Node name: 
Leaked instance: Node:8012 - Node name: 
Leaked instance: Node:9349 - Node name: 
Leaked instance: Node:10499 - Node name: 
Leaked instance: Node:5678 - Node name: 
Leaked instance: Node:7684 - Node name: 
Leaked instance: Node:5943 - Node name: 
Leaked instance: Node:6479 - Node name: 
Leaked instance: Node:9229 - Node name: 
Leaked instance: Node:10496 - Node name: 
Leaked instance: Node:7219 - Node name: 
Leaked instance: Node:7331 - Node name: 
Leaked instance: Node:10449 - Node name: 
Leaked instance: Node:3673 - Node name: 
Leaked instance: Node:8125 - Node name: 
Leaked instance: Node:1316 - Node name: 
Leaked instance: Node:3231 - Node name: 
Leaked instance: Node:5217 - Node name: 
Leaked instance: Node:3851 - Node name: 
Leaked instance: Node:5589 - Node name: 
Leaked instance: Node:4010 - Node name: 
Leaked instance: Node:2867 - Node name: 
Leaked instance: Node:8283 - Node name: 
Leaked instance: Node:4105 - Node name: 
Hint: Leaked instances typically happen when nodes are removed from the scene tree (with `remove_child()`) but not freed (with `free()` or `queue_free()`).
ERROR: clear: Resources still in use at exit (run with --verbose for details).
   At: core/resource.cpp:477.
Resource still in use: res://scenes/shell.gd (GDScript)
Resource still in use: res://scenes/level.gd (GDScript)
Resource still in use: res://scenes/level_repo.gd (GDScript)
Resource still in use: res://scenes/shell_command.gd (GDScript)
Resource still in use: res://scenes/chapter.gd (GDScript)
Orphan StringName: compile
Orphan StringName: run_async
Orphan StringName: push_back
Orphan StringName: _unused
Orphan StringName: read_file
Orphan StringName: global_shell
Orphan StringName: res://scenes/level.gd
Orphan StringName: _shell_binary
Orphan StringName: tipp_level
Orphan StringName: res://scenes/shell.gd
Orphan StringName: res://scenes/chapter.gd
Orphan StringName: _to_string
Orphan StringName: construct
Orphan StringName: get_available_bytes
Orphan StringName: new
Orphan StringName: levels
Orphan StringName: exit_code
Orphan StringName: GDScriptNativeClass
Orphan StringName: congrats
Orphan StringName: HOME
Orphan StringName: get_utf8_string
Orphan StringName: _os
Orphan StringName: check_win
Orphan StringName: split
Orphan StringName: path
Orphan StringName: get_name
Orphan StringName: strip_edges
Orphan StringName: sort
Orphan StringName: res://scenes/level_repo.gd
Orphan StringName: get
Orphan StringName: begins_with
Orphan StringName: repos
Orphan StringName: run
Orphan StringName: cd
Orphan StringName: open
Orphan StringName: description
Orphan StringName: careful_delete
Orphan StringName: action_commands
Orphan StringName: read_from
Orphan StringName: res://scenes/shell_command.gd
Orphan StringName: get_next
Orphan StringName: append
Orphan StringName: crash
Orphan StringName: command
Orphan StringName: setup_commands
Orphan StringName: emit_signal
Orphan StringName: keys
Orphan StringName: start
Orphan StringName: list_dir_end
Orphan StringName: slug
Orphan StringName: erase
Orphan StringName: title
Orphan StringName: has
Orphan StringName: Node
Orphan StringName: length
Orphan StringName: write_file
Orphan StringName: file_exists
Orphan StringName: sub
Orphan StringName: done
Orphan StringName: _cwd
Orphan StringName: crash_on_fail
Orphan StringName: list_dir_begin
Orphan StringName: cards
Orphan StringName: PATH
Orphan StringName: output
Orphan StringName: parse
Orphan StringName: load
Orphan StringName: exec
Orphan StringName: _init
Orphan StringName: substr
Orphan StringName: size
Orphan StringName: replace
Orphan StringName: GDScript
Orphan StringName: win_conditions
Orphan StringName: run_async_thread
Orphan StringName: tmp_prefix
Orphan StringName: thread
StringName: 77 unclaimed string names at exit.
ERROR: cleanup: Condition "allocs_used > 0" is true.
   At: core/pool_vector.cpp:69.

Command Line History should not respond to arrow keys when not in focus

When opening a file in the viewer and trying to navigate the file contents using the arrow up/down keys does not as expected move the cursor to a different line in the file contents, but rather navigates the command prompt history, even if both mouse and keyboard focus are on the content viewer.

Interior design: Color case-sensitive

If I add a chair with description Yellow chair, it is not considered to be of the same color as the bed. I think the color equivalence test should be case-insensitive.

BTW: Thanks for the game!

Explain or remove need for incoming network connections

When starting the Mac app, I am asked to allow incoming connections, but I can't find any explanation for this. Disallowing them does not seem to affect the working of the game.

Could you explain or remove the (apparent) need for incoming network connections?

Consider a dual licensing with an OSI-approved license instead of just Blue Oak ?

It seems that the Blue Oak license is nice and offers a more modern replacement to MIT/BSD/X etc.

However, it seems that it's not yet endorsed by the FSF or OSI.

That's not such a big deal. But I wonder if this may be detrimental to the the distribution, if some are worried about the free/non-free status of the game.

Maybe some form of dual licensing could offer more comfort ?

That's probably not an urgent issue vs developping the game.

Thanks for your views on this.

UX: colors of instructions

The instructions are printed as white on red, which kind of reads like a warning. A more neutral background would be better suited imho.
Also you could add bullet points of some sort, to make it more clear that that is a list of steps. Right now it has the same "rectangle with rounded corners" look as buttons or the file browser.

Give visual clue for cards that can be dragged anywhere

The cards in the first levels (git init, etc) can be dragged anywhere in the window. When dragging such a card and hovering over a commit, it displays the commit message. That made me think that even "generic" cards that are unrelated to a commit need to be dragged onto a commit. I think it would be better to just highlight the whole main area when a card is dragged there (similar to what is done when dragging a card that can be applied to a specific commit).

Small mock-up how it could look like:

For reference, visual clue when dragging checkout:

Support for i18n ?

It looks like the game is merely in english at the moment. Or I've just overlooked how to change language.

At least the git command messages are translated already ;-)

I guess it might be better to have versions in the user's native language, given that it seems to aim beginners.

Would it be feasable to translate it / adapt it (puns and stuff) ?

Thanks in advance.

Crash in level 2

When using git revert HEAD~to solve level 2 (the big sister's piggy bank) the game crashes:

$ godot3 scenes/main.tscn
Godot Engine v3.2.stable.custom_build - https://godotengine.org
OpenGL ES 3.0 Renderer: Mesa DRI Intel(R) HD Graphics 4000 (IVB GT2)
 
handle_crash: Program crashed with signal 11
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7f1d41c3a210] (??:0)
[2] godot3() [0x1d3f345] (??:?)
[3] godot3() [0x1d3fe68] (??:?)
[4] godot3() [0x1c99851] (??:?)
[5] godot3() [0x1c998f5] (??:?)
[6] godot3() [0x1c72867] (??:?)
[7] godot3() [0x1c99851] (??:?)
[8] godot3() [0x1c998f5] (??:?)
[9] godot3() [0x1c99f26] (??:?)
[10] godot3() [0x1c9df1a] (??:?)
[11] godot3() [0x83e606] (??:?)
[12] godot3() [0x2c42eb8] (??:?)
[13] godot3() [0x20c89ef] (??:?)
[14] godot3() [0x83e059] (??:?)
[15] godot3() [0x2c4915a] (??:?)
[16] godot3() [0x2c3d54c] (??:?)
[17] godot3() [0x2c3d840] (??:?)
[18] godot3() [0x1c1e5df] (??:?)
[19] godot3() [0x7ca064] (??:?)
[20] godot3() [0x7afd99] (??:?)
[21] godot3(main+0xf1) [0x79da31] (??:?)
[22] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0x7f1d41c1b0b3] (??:0)
[23] godot3() [0x7a039e] (??:?)
-- END OF BACKTRACE --
Abgebrochen

It seems as if previous to this crash the level is detected as solved (at least the associated sound starts to play).

Crash: Stash levels hang on Windows build

Running Windows Version 20H2 (OS Build 19042.844), game Version 0.6.2. Reproducible with both packaged game downloaded from itch.io and within Godot engine editor running latest source from GitHub. Using the provided 'dependencies' folder in both instances.

Issuing the following command in level 'stash' causes the game to hang indefinitely:
git stash push

Loading level 'stash-pop' also hangs the game due to command git stash push in setup.

Function terminal::command_done plays $OkSound and emits signal "command_done" so the command itself appears to be completing successfully, at least on the backend. But something else never recovers and the game hangs to the point where it must be force killed.

no information provided for the remote URL in git clone level

I just took a look at the game to see if I can use it with my students.

The game looks very nice to learn git.

However, on the level where I need to clone the teacher repo, this is no information regarding the remote, thus I could not continue.
Looks like the information is missing.

I will check regularly the status of the projet in the upcoming weeks. Looks quite a nice idea.

UX: guide focus to next level button

The next level button is fairly small and all the way at the top of the screen, yet all the interaction in the first levels happens in the bottom right corner of the screen. It is not immediately obvious where to click, to progress to the next level.
Maybe animate the button, when it gets unlocked, to visually draw attention.

NixOS: cannot execute binary file

What I did:

On NixOS I downloaded the Zip linked in the README. Unzipped it and checked if the execution flag is set correctly. Typed ./git-hydra.

What I got:

The output I got is: bash: ./git-hydra: No such file or directory

Question:

What are the dependencies to run the game from the binary?

Crashes on level start [Windows]

I just downloaded this to my work laptop, which is running Windows 10 20H2.
On the first start it threw an error that seems to be related to the C:\Users\username\AppData\Roaming\Oh My Git directory - deleting it will trigger the error once more. However, the directory is successfully created, including a savegame.json and a tmp subdirectory.

image

I just mention this if it is somehow related to my actual issue.

Now - the game is running. I select Levels -> Living dangerously... it hangs for a few seconds, make a "success" sound and then just closes. You can see this in the command line:

image

What is noteworthy is that in the error message that i partially pixelated, it says:
Refusing to delete directory C: /Users/username/AppData/Roaming/Oh my that does not start with C: /Users/USERNAME/AppData/Roaming/Oh my Git/tmp/
Note that the first occurence of username is in small letters, while the second one is in capital letters. I assume this is a Windows nuisance (because on Windows these paths are the same), so if you do any path comparison, I guess lowercasing both paths on Windows might already solve that problem.
The actual folder is displayed by Windows to be completely lowercase, however the environment variable %USERNAME% has my username in all caps.

Oh, and on the next start of the game, the first level has a golden marker as if I had gotten some achievement.

Summary:

  • Error message that doesn't seem to cause any real issue on screenshot #1
  • Error messages that seem to be core of the problem in screenshot #2, likely related to lowercase/uppercase paths
  • Got achievement also the game crashed while loading the level.

Thanks for your work though :)

[Question] Is there any plan for i18n?

I am a student from China and I found the game very interesting and helpful for learning git.

Is there any plan for internationalization? Or is it feasible, I think I can help to translate the game into Chinese.

Thanks again for the great work!

FTBTS on Ubuntu 20.04

Trying to build the source on Lubuntu 20.04 I run into several build issues.

First of, it would be nice if the README or some build instruction file would detail the required dependencies for building. Going by the inevitable error messages when these failed, I noticed, this list should contain at least: godot, wget, zip (on Linux) and 7z (on Windows).

With this out of the way, there's unfortunately no package on Ubuntu 20.04 providing /usr/bin/godotbut only /usr/bin/godot3. Thus modifying the Makefile accordingly you run into yet another build issue straight away:

$ make
mkdir -p build/"git-hydra"-linux
\godot3 --export "Linux" "build/"git-hydra"-linux/"git-hydra""
Godot Engine v3.2.stable.custom_build - https://godotengine.org
OpenGL ES 3.0 Renderer: Mesa DRI Intel(R) HD Graphics 4000 (IVB GT2)
 
reimport: begin: Importiere Nutzerinhalte erneut steps: 31
        reimport: step 0: typewriter_ding.wav
        reimport: step 1: swoosh.wav
        reimport: step 2: swish.wav
        reimport: step 3: success.wav
        reimport: step 4: poof.wav
        reimport: step 5: buzzer.wav
        reimport: step 6: tree.svg
        reimport: step 7: ref.svg
        reimport: step 8: pop.wav
        reimport: step 9: head.svg
        reimport: step 10: document.svg
        reimport: step 11: commit.svg
        reimport: step 12: blob.svg
        reimport: step 13: untracked.svg
        reimport: step 14: removed.svg
        reimport: step 15: new.svg
        reimport: step 16: modified.svg
        reimport: step 17: conflict.svg
        reimport: step 18: reset-hard.svg
        reimport: step 19: rebase.svg
        reimport: step 20: rebase-interactive.svg
        reimport: step 21: push.svg
        reimport: step 22: pull.svg
        reimport: step 23: merge.svg
        reimport: step 24: init.svg
        reimport: step 25: commit-auto.svg
        reimport: step 26: cherry-pick.svg
        reimport: step 27: checkout.svg
        reimport: step 28: bisect-start.svg
        reimport: step 29: bisect-good.svg
        reimport: step 30: bisect-bad.svg
ERROR: _fs_changed: Cannot export project with preset 'Linux' due to configuration errors:
Keine Exportvorlagen am erwarteten Pfad gefunden:
/home/user/.local/share/godot/templates/3.2.stable/linux_x11_64_debug
Keine Exportvorlagen am erwarteten Pfad gefunden:
/home/user/.local/share/godot/templates/3.2.stable/linux_x11_64_release

   At: editor/editor_node.cpp:611.
ERROR: _fs_changed: Project export failed for preset 'Linux', the export template appears to be missing.
   At: editor/editor_node.cpp:634.
reimport: end
make: *** [Makefile:7: linux] Fehler 1

Apart from this, it'd be great, if the internal calls in the build process respected LC_ALL, thus error traces without l10n could easily be created.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.