From a908b5001902bcc1b5f9e84121142377582f8033 Mon Sep 17 00:00:00 2001 From: John Doe Date: Thu, 7 May 2026 20:03:20 +0200 Subject: [PATCH] Add looping gameplay music --- assets/music/Clockwork_Thicket.mp3 | Bin 0 -> 2845479 bytes engine/controls.py | 4 ++ engine/sdl2.py | 77 +++++++++++++++++++++++++++++ rats.py | 11 +++++ 4 files changed, 92 insertions(+) create mode 100644 assets/music/Clockwork_Thicket.mp3 diff --git a/assets/music/Clockwork_Thicket.mp3 b/assets/music/Clockwork_Thicket.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..19bb8f840b347fc70ac9d7acd0a3a67f9fd9f5c8 GIT binary patch literal 2845479 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