├── .github └── workflows │ ├── autoblack.yml │ ├── pythonlint.yml │ └── pythonlint_master.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── screenshot.png ├── snake_games ├── README.md ├── __init__.py ├── circlez │ ├── __init__.py │ └── circ.py ├── gamemenu.py ├── snake │ ├── README.txt │ ├── __init__.py │ └── sgame.py └── snakepaint │ ├── README.txt │ ├── __init__.py │ └── snakepaint.py ├── snakeware ├── .gitignore ├── README.md ├── build.sh ├── configure.sh └── external │ ├── Config.in │ ├── configs │ ├── rpi4_defconfig │ └── x86-64_defconfig │ ├── external.desc │ ├── external.mk │ ├── overlay │ ├── etc │ │ └── init.d │ │ │ └── S50startpy │ └── usr │ │ └── share │ │ └── snakeware │ │ └── startup.py │ ├── package │ ├── python-pygame-gui │ │ ├── Config.in │ │ ├── python-pygame-gui.hash │ │ └── python-pygame-gui.mk │ └── python-pyttsx3 │ │ ├── Config.in │ │ ├── python-pyttsx3.hash │ │ └── python-pyttsx3.mk │ ├── package_configs │ └── busybox.config │ ├── patches │ └── cdrkit │ │ └── gcc10.patch │ ├── pip_modules.txt │ ├── platforms │ └── x86-64 │ │ └── kernel.config │ ├── post-build.sh │ ├── rpi4-firmware.sh │ └── rpi4-firmware │ ├── cmdline.txt │ └── config.txt └── snakewm ├── .gitignore ├── README.md ├── __init__.py ├── appmenu ├── __init__.py └── appmenupanel.py ├── apps ├── clocks │ ├── aclock │ │ ├── README.md │ │ ├── __init__.py │ │ └── aclock.py │ ├── berlin │ │ ├── README.md │ │ ├── __init__.py │ │ └── berlin.py │ ├── clock │ │ ├── README.md │ │ ├── __init__.py │ │ └── clock.py │ ├── stopwatch │ │ ├── README.md │ │ ├── __init__.py │ │ └── stopwatch.py │ └── tix │ │ ├── README.md │ │ ├── __init__.py │ │ └── tix.py ├── fun │ ├── bus │ │ ├── __init__.py │ │ ├── dance.py │ │ └── frames │ │ │ ├── frame-0.png │ │ │ ├── frame-1.png │ │ │ ├── frame-10.png │ │ │ ├── frame-100.png │ │ │ ├── frame-101.png │ │ │ ├── frame-102.png │ │ │ ├── frame-103.png │ │ │ ├── frame-104.png │ │ │ ├── frame-105.png │ │ │ ├── frame-106.png │ │ │ ├── frame-107.png │ │ │ ├── frame-108.png │ │ │ ├── frame-109.png │ │ │ ├── frame-11.png │ │ │ ├── frame-110.png │ │ │ ├── frame-111.png │ │ │ ├── frame-112.png │ │ │ ├── frame-113.png │ │ │ ├── frame-114.png │ │ │ ├── frame-115.png │ │ │ ├── frame-116.png │ │ │ ├── frame-117.png │ │ │ ├── frame-118.png │ │ │ ├── frame-119.png │ │ │ ├── frame-12.png │ │ │ ├── frame-120.png │ │ │ ├── frame-121.png │ │ │ ├── frame-122.png │ │ │ ├── frame-123.png │ │ │ ├── frame-124.png │ │ │ ├── frame-125.png │ │ │ ├── frame-126.png │ │ │ ├── frame-127.png │ │ │ ├── frame-128.png │ │ │ ├── frame-129.png │ │ │ ├── frame-13.png │ │ │ ├── frame-130.png │ │ │ ├── frame-131.png │ │ │ ├── frame-132.png │ │ │ ├── frame-133.png │ │ │ ├── frame-134.png │ │ │ ├── frame-135.png │ │ │ ├── frame-136.png │ │ │ ├── frame-137.png │ │ │ ├── frame-138.png │ │ │ ├── frame-139.png │ │ │ ├── frame-14.png │ │ │ ├── frame-140.png │ │ │ ├── frame-141.png │ │ │ ├── frame-142.png │ │ │ ├── frame-143.png │ │ │ ├── frame-144.png │ │ │ ├── frame-145.png │ │ │ ├── frame-146.png │ │ │ ├── frame-147.png │ │ │ ├── frame-148.png │ │ │ ├── frame-149.png │ │ │ ├── frame-15.png │ │ │ ├── frame-150.png │ │ │ ├── frame-151.png │ │ │ ├── frame-152.png │ │ │ ├── frame-153.png │ │ │ ├── frame-154.png │ │ │ ├── frame-155.png │ │ │ ├── frame-156.png │ │ │ ├── frame-157.png │ │ │ ├── frame-158.png │ │ │ ├── frame-159.png │ │ │ ├── frame-16.png │ │ │ ├── frame-160.png │ │ │ ├── frame-161.png │ │ │ ├── frame-162.png │ │ │ ├── frame-163.png │ │ │ ├── frame-164.png │ │ │ ├── frame-165.png │ │ │ ├── frame-166.png │ │ │ ├── frame-167.png │ │ │ ├── frame-168.png │ │ │ ├── frame-169.png │ │ │ ├── frame-17.png │ │ │ ├── frame-170.png │ │ │ ├── frame-171.png │ │ │ ├── frame-172.png │ │ │ ├── frame-173.png │ │ │ ├── frame-174.png │ │ │ ├── frame-175.png │ │ │ ├── frame-176.png │ │ │ ├── frame-177.png │ │ │ ├── frame-178.png │ │ │ ├── frame-179.png │ │ │ ├── frame-18.png │ │ │ ├── frame-19.png │ │ │ ├── frame-2.png │ │ │ ├── frame-20.png │ │ │ ├── frame-21.png │ │ │ ├── frame-22.png │ │ │ ├── frame-23.png │ │ │ ├── frame-24.png │ │ │ ├── frame-25.png │ │ │ ├── frame-26.png │ │ │ ├── frame-27.png │ │ │ ├── frame-28.png │ │ │ ├── frame-29.png │ │ │ ├── frame-3.png │ │ │ ├── frame-30.png │ │ │ ├── frame-31.png │ │ │ ├── frame-32.png │ │ │ ├── frame-33.png │ │ │ ├── frame-34.png │ │ │ ├── frame-35.png │ │ │ ├── frame-36.png │ │ │ ├── frame-37.png │ │ │ ├── frame-38.png │ │ │ ├── frame-39.png │ │ │ ├── frame-4.png │ │ │ ├── frame-40.png │ │ │ ├── frame-41.png │ │ │ ├── frame-42.png │ │ │ ├── frame-43.png │ │ │ ├── frame-44.png │ │ │ ├── frame-45.png │ │ │ ├── frame-46.png │ │ │ ├── frame-47.png │ │ │ ├── frame-48.png │ │ │ ├── frame-49.png │ │ │ ├── frame-5.png │ │ │ ├── frame-50.png │ │ │ ├── frame-51.png │ │ │ ├── frame-52.png │ │ │ ├── frame-53.png │ │ │ ├── frame-54.png │ │ │ ├── frame-55.png │ │ │ ├── frame-56.png │ │ │ ├── frame-57.png │ │ │ ├── frame-58.png │ │ │ ├── frame-59.png │ │ │ ├── frame-6.png │ │ │ ├── frame-60.png │ │ │ ├── frame-61.png │ │ │ ├── frame-62.png │ │ │ ├── frame-63.png │ │ │ ├── frame-64.png │ │ │ ├── frame-65.png │ │ │ ├── frame-66.png │ │ │ ├── frame-67.png │ │ │ ├── frame-68.png │ │ │ ├── frame-69.png │ │ │ ├── frame-7.png │ │ │ ├── frame-70.png │ │ │ ├── frame-71.png │ │ │ ├── frame-72.png │ │ │ ├── frame-73.png │ │ │ ├── frame-74.png │ │ │ ├── frame-75.png │ │ │ ├── frame-76.png │ │ │ ├── frame-77.png │ │ │ ├── frame-78.png │ │ │ ├── frame-79.png │ │ │ ├── frame-8.png │ │ │ ├── frame-80.png │ │ │ ├── frame-81.png │ │ │ ├── frame-82.png │ │ │ ├── frame-83.png │ │ │ ├── frame-84.png │ │ │ ├── frame-85.png │ │ │ ├── frame-86.png │ │ │ ├── frame-87.png │ │ │ ├── frame-88.png │ │ │ ├── frame-89.png │ │ │ ├── frame-9.png │ │ │ ├── frame-90.png │ │ │ ├── frame-91.png │ │ │ ├── frame-92.png │ │ │ ├── frame-93.png │ │ │ ├── frame-94.png │ │ │ ├── frame-95.png │ │ │ ├── frame-96.png │ │ │ ├── frame-97.png │ │ │ ├── frame-98.png │ │ │ └── frame-99.png │ ├── cell │ │ ├── README.md │ │ ├── __init__.py │ │ └── cell.py │ ├── dazzler │ │ ├── README.md │ │ ├── __init__.py │ │ └── dazzler.py │ ├── earth │ │ ├── README.md │ │ ├── __init__.py │ │ ├── d.jpg │ │ ├── earth.py │ │ └── n.jpg │ ├── midi │ │ ├── README.md │ │ ├── __init__.py │ │ ├── goldberg │ │ │ ├── bwv-988-v01.mid │ │ │ ├── bwv-988-v02.mid │ │ │ ├── bwv-988-v03.mid │ │ │ ├── bwv-988-v04.mid │ │ │ ├── bwv-988-v05.mid │ │ │ ├── bwv-988-v06.mid │ │ │ ├── bwv-988-v07.mid │ │ │ ├── bwv-988-v08.mid │ │ │ ├── bwv-988-v09.mid │ │ │ ├── bwv-988-v10.mid │ │ │ ├── bwv-988-v11.mid │ │ │ ├── bwv-988-v12.mid │ │ │ ├── bwv-988-v13.mid │ │ │ ├── bwv-988-v14.mid │ │ │ ├── bwv-988-v15.mid │ │ │ ├── bwv-988-v16.mid │ │ │ ├── bwv-988-v17.mid │ │ │ ├── bwv-988-v18.mid │ │ │ ├── bwv-988-v19.mid │ │ │ ├── bwv-988-v20.mid │ │ │ ├── bwv-988-v21.mid │ │ │ ├── bwv-988-v22.mid │ │ │ ├── bwv-988-v23.mid │ │ │ ├── bwv-988-v24.mid │ │ │ ├── bwv-988-v25.mid │ │ │ ├── bwv-988-v26.mid │ │ │ ├── bwv-988-v27.mid │ │ │ ├── bwv-988-v28.mid │ │ │ ├── bwv-988-v29.mid │ │ │ └── bwv-988-v30.mid │ │ ├── midi.py │ │ └── midisnd │ │ │ ├── midi01.ogg │ │ │ ├── midi02.ogg │ │ │ ├── midi03.ogg │ │ │ ├── midi04.ogg │ │ │ ├── midi05.ogg │ │ │ ├── midi06.ogg │ │ │ ├── midi07.ogg │ │ │ ├── midi08.ogg │ │ │ ├── midi09.ogg │ │ │ ├── midi10.ogg │ │ │ ├── midi11.ogg │ │ │ ├── midi12.ogg │ │ │ ├── midi13.ogg │ │ │ ├── midi14.ogg │ │ │ ├── midi15.ogg │ │ │ ├── midi16.ogg │ │ │ ├── midi17.ogg │ │ │ ├── midi18.ogg │ │ │ ├── midi19.ogg │ │ │ ├── midi20.ogg │ │ │ ├── midi21.ogg │ │ │ ├── midi22.ogg │ │ │ ├── midi23.ogg │ │ │ ├── midi24.ogg │ │ │ ├── midi25.ogg │ │ │ ├── midi26.ogg │ │ │ ├── midi27.ogg │ │ │ ├── midi28.ogg │ │ │ ├── midi29.ogg │ │ │ ├── midi30.ogg │ │ │ ├── midi31.ogg │ │ │ ├── midi32.ogg │ │ │ ├── midi33.ogg │ │ │ ├── midi34.ogg │ │ │ ├── midi35.ogg │ │ │ ├── midi36.ogg │ │ │ ├── midi37.ogg │ │ │ ├── midi38.ogg │ │ │ ├── midi39.ogg │ │ │ ├── midi40.ogg │ │ │ ├── midi41.ogg │ │ │ ├── midi42.ogg │ │ │ ├── midi43.ogg │ │ │ ├── midi44.ogg │ │ │ ├── midi45.ogg │ │ │ ├── midi46.ogg │ │ │ ├── midi47.ogg │ │ │ ├── midi48.ogg │ │ │ ├── midi49.ogg │ │ │ ├── midi50.ogg │ │ │ ├── midi51.ogg │ │ │ ├── midi52.ogg │ │ │ ├── midi53.ogg │ │ │ ├── midi54.ogg │ │ │ ├── midi55.ogg │ │ │ ├── midi56.ogg │ │ │ ├── midi57.ogg │ │ │ ├── midi58.ogg │ │ │ ├── midi59.ogg │ │ │ ├── midi60.ogg │ │ │ ├── midi61.ogg │ │ │ ├── midi62.ogg │ │ │ ├── midi63.ogg │ │ │ ├── midi64.ogg │ │ │ ├── midi65.ogg │ │ │ ├── midi66.ogg │ │ │ ├── midi67.ogg │ │ │ ├── midi68.ogg │ │ │ ├── midi69.ogg │ │ │ ├── midi70.ogg │ │ │ ├── midi71.ogg │ │ │ ├── midi72.ogg │ │ │ ├── midi73.ogg │ │ │ ├── midi74.ogg │ │ │ ├── midi75.ogg │ │ │ ├── midi76.ogg │ │ │ ├── midi77.ogg │ │ │ ├── midi78.ogg │ │ │ ├── midi79.ogg │ │ │ ├── midi80.ogg │ │ │ ├── midi81.ogg │ │ │ ├── midi82.ogg │ │ │ ├── midi83.ogg │ │ │ ├── midi84.ogg │ │ │ ├── midi85.ogg │ │ │ ├── midi86.ogg │ │ │ ├── midi87.ogg │ │ │ └── midi88.ogg │ ├── musicplayer │ │ ├── __init__.py │ │ ├── mixer.py │ │ ├── musicplayer.py │ │ └── musics │ │ │ └── Adventures - A Himitsu (No Copyright Music).ogg │ ├── piano │ │ ├── README.md │ │ ├── __init__.py │ │ ├── img │ │ │ └── piano.png │ │ ├── piano.py │ │ └── snd │ │ │ ├── buzz.ogg │ │ │ ├── piano_00.ogg │ │ │ ├── piano_01.ogg │ │ │ ├── piano_02.ogg │ │ │ ├── piano_03.ogg │ │ │ ├── piano_04.ogg │ │ │ ├── piano_05.ogg │ │ │ ├── piano_06.ogg │ │ │ ├── piano_07.ogg │ │ │ ├── piano_08.ogg │ │ │ ├── piano_09.ogg │ │ │ ├── piano_10.ogg │ │ │ ├── piano_11.ogg │ │ │ ├── piano_12.ogg │ │ │ ├── piano_high_00.ogg │ │ │ ├── piano_high_01.ogg │ │ │ ├── piano_high_02.ogg │ │ │ ├── piano_high_03.ogg │ │ │ ├── piano_high_04.ogg │ │ │ ├── piano_high_05.ogg │ │ │ ├── piano_high_06.ogg │ │ │ ├── piano_high_07.ogg │ │ │ ├── piano_high_08.ogg │ │ │ ├── piano_high_09.ogg │ │ │ ├── piano_high_10.ogg │ │ │ ├── piano_high_11.ogg │ │ │ ├── piano_high_12.ogg │ │ │ ├── piano_high_sustain_00.ogg │ │ │ ├── piano_high_sustain_01.ogg │ │ │ ├── piano_high_sustain_02.ogg │ │ │ ├── piano_high_sustain_03.ogg │ │ │ ├── piano_high_sustain_04.ogg │ │ │ ├── piano_high_sustain_05.ogg │ │ │ ├── piano_high_sustain_06.ogg │ │ │ ├── piano_high_sustain_07.ogg │ │ │ ├── piano_high_sustain_08.ogg │ │ │ ├── piano_high_sustain_09.ogg │ │ │ ├── piano_high_sustain_10.ogg │ │ │ ├── piano_high_sustain_11.ogg │ │ │ ├── piano_high_sustain_12.ogg │ │ │ ├── piano_low_00.ogg │ │ │ ├── piano_low_01.ogg │ │ │ ├── piano_low_02.ogg │ │ │ ├── piano_low_03.ogg │ │ │ ├── piano_low_04.ogg │ │ │ ├── piano_low_05.ogg │ │ │ ├── piano_low_06.ogg │ │ │ ├── piano_low_07.ogg │ │ │ ├── piano_low_08.ogg │ │ │ ├── piano_low_09.ogg │ │ │ ├── piano_low_10.ogg │ │ │ ├── piano_low_11.ogg │ │ │ ├── piano_low_12.ogg │ │ │ ├── piano_low_sustain_00.ogg │ │ │ ├── piano_low_sustain_01.ogg │ │ │ ├── piano_low_sustain_02.ogg │ │ │ ├── piano_low_sustain_03.ogg │ │ │ ├── piano_low_sustain_04.ogg │ │ │ ├── piano_low_sustain_05.ogg │ │ │ ├── piano_low_sustain_06.ogg │ │ │ ├── piano_low_sustain_07.ogg │ │ │ ├── piano_low_sustain_08.ogg │ │ │ ├── piano_low_sustain_09.ogg │ │ │ ├── piano_low_sustain_10.ogg │ │ │ ├── piano_low_sustain_11.ogg │ │ │ ├── piano_low_sustain_12.ogg │ │ │ ├── piano_sustain_00.ogg │ │ │ ├── piano_sustain_01.ogg │ │ │ ├── piano_sustain_02.ogg │ │ │ ├── piano_sustain_03.ogg │ │ │ ├── piano_sustain_04.ogg │ │ │ ├── piano_sustain_05.ogg │ │ │ ├── piano_sustain_06.ogg │ │ │ ├── piano_sustain_07.ogg │ │ │ ├── piano_sustain_08.ogg │ │ │ ├── piano_sustain_09.ogg │ │ │ ├── piano_sustain_10.ogg │ │ │ ├── piano_sustain_11.ogg │ │ │ └── piano_sustain_12.ogg │ └── speaknspell │ │ ├── __init__.py │ │ └── speak.py ├── games │ ├── maze │ │ ├── README.txt │ │ ├── __init__.py │ │ ├── assets │ │ │ ├── floor0.png │ │ │ ├── floor1.png │ │ │ ├── floor2.png │ │ │ ├── player_down.jpg │ │ │ ├── player_left.jpg │ │ │ ├── player_right.jpg │ │ │ ├── player_up.jpg │ │ │ └── wall.png │ │ ├── maze.py │ │ └── mazewindow.py │ ├── maze3D │ │ ├── README.txt │ │ ├── __init__.py │ │ ├── assets │ │ │ ├── maze_bg.png │ │ │ ├── wall1_dark.png │ │ │ ├── wall1_light.png │ │ │ ├── wall2_dark.png │ │ │ ├── wall2_light.png │ │ │ ├── wall3_dark.png │ │ │ └── wall3_light.png │ │ ├── maze3d.py │ │ └── maze3dwindow.py │ ├── pong │ │ ├── README.txt │ │ ├── __init__.py │ │ ├── ball.py │ │ ├── bat.py │ │ ├── pong.py │ │ ├── pongwindow.py │ │ ├── score.py │ │ └── wall.py │ └── zap │ │ ├── README.md │ │ ├── __init__.py │ │ ├── img │ │ ├── fighter.png │ │ ├── numbers.png │ │ ├── photon.png │ │ ├── satellite.png │ │ ├── station.png │ │ ├── text.png │ │ └── title.png │ │ ├── snd │ │ ├── enemy.ogg │ │ ├── fanfare.ogg │ │ ├── photon.ogg │ │ ├── photondest.ogg │ │ ├── sat.ogg │ │ ├── shot.ogg │ │ ├── start.ogg │ │ └── stationdest.ogg │ │ └── zap.py ├── system │ ├── exit snakewm │ │ └── __init__.py │ ├── fps │ │ ├── README.md │ │ ├── __init__.py │ │ └── fps.py │ ├── help │ │ ├── README.md │ │ ├── __init__.py │ │ └── help.py │ ├── rammon │ │ ├── README.md │ │ ├── __init__.py │ │ ├── rammon.py │ │ └── ramproc.py │ ├── reboot │ │ └── __init__.py │ ├── shutdown │ │ └── __init__.py │ └── sysmon │ │ ├── README.md │ │ ├── __init__.py │ │ ├── cpuproc.py │ │ ├── ramproc.py │ │ └── sysmon.py └── tools │ ├── Background Color │ └── __init__.py │ ├── Background Image │ ├── Big Flower.jpg │ ├── Fallen Log.jpg │ ├── Flower Field.jpg │ ├── The Moon.jpg │ └── __init__.py │ ├── snakecalc │ ├── __init__.py │ └── calc.py │ └── snaketerm │ ├── __init__.py │ ├── default_hotkeys.json │ ├── term.py │ └── user_hotkeys.json ├── snakebg ├── __init__.py ├── backgrounds │ ├── __init__.py │ ├── cyber.py │ └── fade.py ├── bg.py └── bgmenu.py └── wm.py /.github/workflows/autoblack.yml: -------------------------------------------------------------------------------- 1 | # GitHub Action that uses Black to reformat Python code (if needed) when doing a git push. 2 | # If all Python code in the repo is compliant with Black then this Action does nothing. 3 | # Otherwise, Black is run and its changes are committed to the repo. 4 | # https://github.com/cclauss/autoblack 5 | 6 | name: autoblack_push 7 | on: [push] 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 # Use v1, NOT v2 13 | - uses: actions/setup-python@v2 14 | - run: pip install black 15 | - run: black --check . 16 | - name: If needed, commit black changes to a new pull request 17 | if: failure() 18 | run: | 19 | black . 20 | git config --global user.name github-actions 21 | git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' 22 | git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY 23 | git commit -am "fixup! Format Python code with psf/black push" 24 | git push --force origin HEAD:$GITHUB_REF 25 | -------------------------------------------------------------------------------- /.github/workflows/pythonlint.yml: -------------------------------------------------------------------------------- 1 | name: PythonLint 2 | on: [pull_request] 3 | 4 | jobs: 5 | Flask8Test: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | - name: Set up Python 3.8 10 | uses: actions/setup-python@v2 11 | with: 12 | python-version: 3.8 13 | 14 | - name: Install dependencies 15 | run: | 16 | python -m pip install --upgrade pip 17 | pip install flake8 18 | 19 | - name: Lint with flake8 20 | run: | 21 | # stop the build if there are Python syntax errors or undefined names 22 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 23 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 24 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 25 | -------------------------------------------------------------------------------- /.github/workflows/pythonlint_master.yml: -------------------------------------------------------------------------------- 1 | name: PythonLint 2 | on: 3 | push: 4 | branches: 5 | - master 6 | 7 | jobs: 8 | Flask8Test: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: Set up Python 3.8 13 | uses: actions/setup-python@v2 14 | with: 15 | python-version: 3.8 16 | 17 | - name: Install dependencies 18 | run: | 19 | python -m pip install --upgrade pip 20 | pip install flake8 21 | 22 | - name: Lint with flake8 23 | run: | 24 | # stop the build if there are Python syntax errors or undefined names 25 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 26 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 27 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | venv/ 3 | .idea/ 4 | 5 | __pycache__/ 6 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Joshua Moore 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/screenshot.png -------------------------------------------------------------------------------- /snake_games/README.md: -------------------------------------------------------------------------------- 1 | # snake_games 2 | 3 | This is the user-made games repository for snakeware. These games come shipped 4 | standard with every snakeware release. We are only going to include fun free 5 | games made by amateurs here. 6 | 7 | To run these games, boot into snakeware and enter these commands: 8 | 9 | ``` 10 | >>> import snake_games 11 | >>> snake_games.menu() 12 | ``` 13 | 14 | This will launch an interactive menu where you can select a game to play. Also, 15 | if you already know the name of the game you want, you can import and run it 16 | directly like this: 17 | 18 | ``` 19 | >>> import snake_games.snake 20 | >>> snake_games.snake.load() 21 | ``` 22 | 23 | ## Contributing 24 | 25 | If you would like to include your game in snake_games, please send a PR adding 26 | it to this directory! However, it's important to note that you will need to 27 | make some changes to your game before it will run in the snakeware environment. 28 | PRs will be approved if they meet the following guidelines: 29 | 30 | * Your game must be written in Python. 31 | 32 | * Your game must have an `__init__.py` with a `load()` function which creates 33 | an instance of your game and launches it. Please see existing games in this 34 | directory for examples of how this works. 35 | 36 | * Your game must be fullscreen, and it must draw directly to the framebuffer. 37 | You can set pygame to fbdev mode by adding `os.putenv('SDL_FBDEV', '/dev/fb0')` 38 | right before your call to `pygame.display.init()`. 39 | 40 | * You should not try to set the dimensions of the pygame window, but should 41 | instead get the dimensions of the full-screen display after calling 42 | `pygame.display.init()` like so: 43 | 44 | ``` 45 | DIMS = ( 46 | pygame.display.Info().current_w, 47 | pygame.display.Info().current_h 48 | ) 49 | ``` 50 | You should write your game so that it handles these varying screen dimensions 51 | gracefully. 52 | 53 | * Your game must have a way for the user to immediately exit and return to 54 | snakeware at any time, preferably by pressing the `ESC` key. 55 | 56 | * Please test your game before submitting a PR. At minimum, you should try 57 | launching your game as root from a different TTY to verify that your game works 58 | as expected without X Windows running. 59 | 60 | Feel free to reach out if you have any questions while you're modifying your 61 | game to run on snakeware! 62 | 63 | Also, your game does not have to be based on pygame. We will accept other 64 | libraries as long as they allow you to draw directly to the framebuffer, and 65 | your game meets the above guidelines. 66 | 67 | We would be happy to accept text-based/console games as well! 68 | -------------------------------------------------------------------------------- /snake_games/__init__.py: -------------------------------------------------------------------------------- 1 | def menu(): 2 | from .gamemenu import SnakeGameMenu 3 | 4 | SnakeGameMenu().menu() 5 | -------------------------------------------------------------------------------- /snake_games/circlez/__init__.py: -------------------------------------------------------------------------------- 1 | from .circ import CirclezApp 2 | 3 | 4 | def load(): 5 | CirclezApp().run() 6 | -------------------------------------------------------------------------------- /snake_games/circlez/circ.py: -------------------------------------------------------------------------------- 1 | """ 2 | A simple little demo app for snakeware, it draws circles. 3 | 4 | Josh Moore 2020 5 | """ 6 | 7 | import pygame 8 | 9 | import random 10 | import os 11 | 12 | 13 | class CirclezApp: 14 | def __init__(self): 15 | pygame.init() 16 | 17 | # set pygame to fbdev mode 18 | os.putenv("SDL_FBDEV", "/dev/fb0") 19 | pygame.display.init() 20 | 21 | # get screen dimensions 22 | self.DIMS = (pygame.display.Info().current_w, pygame.display.Info().current_h) 23 | 24 | # init screen 25 | self.SCREEN = pygame.display.set_mode(self.DIMS, pygame.FULLSCREEN) 26 | 27 | # init background 28 | self.BG = pygame.Surface((self.DIMS)) 29 | self.BG.fill((0, 0, 0)) 30 | 31 | pygame.mouse.set_visible(False) 32 | pygame.display.update() 33 | 34 | def run(self): 35 | clock = pygame.time.Clock() 36 | 37 | while True: 38 | for event in pygame.event.get(): 39 | if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 40 | exit() 41 | 42 | pygame.draw.circle( 43 | self.BG, 44 | ( 45 | random.randint(0, 255), 46 | random.randint(0, 255), 47 | random.randint(0, 255), 48 | ), 49 | (random.randint(0, self.DIMS[0]), random.randint(0, self.DIMS[1])), 50 | random.randint(10, 100), 51 | ) 52 | self.SCREEN.blit(self.BG, (0, 0)) 53 | pygame.display.flip() 54 | clock.tick(30) 55 | -------------------------------------------------------------------------------- /snake_games/gamemenu.py: -------------------------------------------------------------------------------- 1 | import os 2 | import importlib 3 | 4 | 5 | class SnakeGameMenu: 6 | GAMENUMS = "0123456789" 7 | 8 | def __init__(self): 9 | self.GAMEPATH = os.path.dirname(os.path.abspath(__file__)) 10 | self.LIST = [] 11 | self.cur_page = 0 12 | 13 | for file in os.listdir(self.GAMEPATH): 14 | if os.path.isdir(self.GAMEPATH + "/" + file) and os.path.isfile( 15 | self.GAMEPATH + "/" + file + "/__init__.py" 16 | ): 17 | self.LIST.append(file) 18 | 19 | def list_page(self): 20 | """ 21 | List all of the games on the current page. 22 | """ 23 | page_idx = self.cur_page * 10 24 | 25 | for i in range(10): 26 | if i + page_idx >= len(self.LIST): 27 | break 28 | print(" " + str(i) + ". " + self.LIST[i + page_idx]) 29 | print("") 30 | 31 | def list_games(self): 32 | """ 33 | Render the full current page for the games list, including the 34 | header and prompt for user input. 35 | """ 36 | os.system("clear") 37 | 38 | print("\n\n~~~~~ SNAKE GAMES ~~~~~\n") 39 | print(" Page {0}/{1}:".format(self.cur_page + 1, int(len(self.LIST) / 10 + 1))) 40 | 41 | self.list_page() 42 | 43 | print(" 0-9: Select Game") 44 | print(" + : Next Page") 45 | print(" - : Prev Page") 46 | print(" q : Quit\n") 47 | 48 | resp = input(" >") 49 | 50 | if resp == "q": 51 | # quit 52 | exit() 53 | elif resp == "+": 54 | # next page 55 | if self.cur_page < int(len(self.LIST) / 10): 56 | self.cur_page = self.cur_page + 1 57 | elif resp == "-": 58 | # prev page 59 | if self.cur_page > 0: 60 | self.cur_page = self.cur_page - 1 61 | elif len(resp) == 1 and resp in self.GAMENUMS: 62 | # load selected game 63 | sidx = self.cur_page * 10 + int(resp) 64 | 65 | if sidx >= len(self.LIST): 66 | return 67 | 68 | print("Loading " + self.LIST[sidx] + "...") 69 | 70 | game = "snake_games." + self.LIST[sidx] 71 | _game = importlib.import_module(game) 72 | _game.load() 73 | 74 | exit() 75 | 76 | def menu(self): 77 | while True: 78 | self.list_games() 79 | -------------------------------------------------------------------------------- /snake_games/snake/README.txt: -------------------------------------------------------------------------------- 1 | Snake game shamelessly copied from https://pythonspot.com/snake-with-pygame/ 2 | and adapated to work on snakeware. Please let me know if you would like it 3 | removed from the distro. 4 | -------------------------------------------------------------------------------- /snake_games/snake/__init__.py: -------------------------------------------------------------------------------- 1 | from .sgame import SnakeApp 2 | 3 | 4 | def load(): 5 | app = SnakeApp() 6 | app.on_execute() 7 | del app 8 | -------------------------------------------------------------------------------- /snake_games/snakepaint/README.txt: -------------------------------------------------------------------------------- 1 | SnakePaint 2 | 3 | Ported and adapted to OOP by: Mochidaz 4 | github: https://github.com/mochidaz 5 | 6 | Original: https://www.instagram.com/p/CBGDdp4gVH-/ 7 | 8 | How to use: 9 | -Hold left/right mouse button to paint 10 | -Use scroll to paint dots 11 | -Press D to toggle eraser, press d again to switch back to paint -------------------------------------------------------------------------------- /snake_games/snakepaint/__init__.py: -------------------------------------------------------------------------------- 1 | from .snakepaint import SnakePaint 2 | 3 | 4 | def load(): 5 | app = SnakePaint() 6 | app.on_execute() 7 | del app 8 | -------------------------------------------------------------------------------- /snakeware/.gitignore: -------------------------------------------------------------------------------- 1 | buildroot*/ 2 | *.img 3 | *.iso 4 | 5 | run.sh 6 | -------------------------------------------------------------------------------- /snakeware/README.md: -------------------------------------------------------------------------------- 1 | # snakeware build docs 2 | The snakeware build system is based on buildroot and the process is almost entirely automated. 3 | 4 | The build will take quite a long time the first time you do it, but it will only take a couple 5 | minutes each subsequent time (unless you do a `make clean` in the buildroot directory). 6 | 7 | Currently supported platforms: 8 | * x86-64 9 | * rpi4 10 | 11 | ## Build Process 12 | 13 | ### 1. Run `./build.sh ` 14 | `` should be one of the supported platforms from the above list. 15 | 16 | This script is the longest part of the process, as it makes a clone of buildroot, which then downloads 17 | and makes all the necessary sources. 18 | 19 | ### 2. Done! 20 | If the build is successful, a `snakeware.iso` file will be generated and placed in this directory. 21 | 22 | You can run this image in QEMU, or dd it to a flash drive to try running it on real hardware. 23 | 24 | ## Other info 25 | TODO 26 | 27 | ## Ports 28 | snakeware will always be primarily focused on x86-64, but buildroot makes it possible to build for 29 | other platforms. 30 | 31 | You can try porting snakeware to other platforms by creating a kernel config and a buildroot config that 32 | both match the platform you're targeting. For example, if you were making an ARM port, you will add 33 | the files `config/arm-buildroot-config` and `config/arm-kernel-config` and then run `./build.sh arm`. 34 | 35 | It may be very difficult to create configs that work for the platform you're targeting, and this is not 36 | a task for inexperienced Linux users. I do not guarantee that cross-building will work because I haven't 37 | tried it, and you shouldn't try it unless you're pretty knowledgeable about the Linux kernel and about 38 | buildroot. 39 | 40 | I would be interested to hear your results if you try this, and please send a PR if you get some working configs. 41 | -------------------------------------------------------------------------------- /snakeware/build.sh: -------------------------------------------------------------------------------- 1 | # This script builds a snakeware image using buildroot. 2 | # The first and only argument should be the platform (ie x86-64) 3 | 4 | if [ $# != 1 ]; then 5 | echo "Invalid number of parameters." 6 | echo "Usage: ./build.sh " 7 | exit 8 | fi 9 | 10 | BUILDROOT_VERSION=2021.08 11 | 12 | SNAKEWARE=$PWD 13 | IMG=snakeware.img 14 | 15 | if [ ! -d buildroot_$1 ]; then 16 | git clone -b $BUILDROOT_VERSION https://github.com/buildroot/buildroot.git buildroot_$1 --depth 1 17 | fi 18 | 19 | if [ ! -f "$SNAKEWARE/external/configs/$1_defconfig" ]; then 20 | echo "Unsupported platform: $1" 21 | exit 22 | fi 23 | 24 | # run build 25 | cd buildroot_$1 26 | make BR2_EXTERNAL="$SNAKEWARE/external" "$1_defconfig" 27 | make 28 | 29 | cd $SNAKEWARE 30 | 31 | if [ $1 == x86-64 ]; then 32 | # look for x86-64 ISO 33 | if [ ! -f buildroot_$1/output/images/rootfs.iso9660 ]; then 34 | echo "Failed to generate rootfs.iso." 35 | exit 36 | fi 37 | 38 | cp buildroot_$1/output/images/rootfs.iso9660 snakeware_x86-64.iso 39 | echo "snakeware_x86-64.iso SUCCESS :)" 40 | elif [ $1 == rpi4 ]; then 41 | # look for rpi4 SD card image 42 | if [ ! -f buildroot_$1/output/images/sdcard.img ]; then 43 | echo "Failed to generate sdcard.img." 44 | exit 45 | fi 46 | 47 | cp buildroot_$1/output/images/sdcard.img snakeware_rpi4.img 48 | echo "snakeware_rpi4.img SUCCESS :)" 49 | fi 50 | -------------------------------------------------------------------------------- /snakeware/configure.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | # This script is used for configuring Buildroot & other components that 5 | # have configuration in the ./external directory. It is not neccesary to 6 | # run, and can safely be disregarded if you're doing a regular build. 7 | 8 | # Get script path 9 | snakeware="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 10 | 11 | external="$snakeware/external" 12 | buildroot="$snakeware/buildroot_$2" 13 | 14 | # https://buildroot.org/downloads/manual/manual.html#_configuration_of_other_components 15 | buildroot() { 16 | platform="$1" 17 | 18 | pushd "$buildroot" 19 | make "BR2_EXTERNAL=$external" "${platform}_defconfig" 20 | 21 | make menuconfig 22 | make savedefconfig "DEFCONFIG=$external/configs/${platform}_defconfig" 23 | popd 24 | } 25 | 26 | linux() { 27 | platform="$1" 28 | 29 | pushd "$buildroot" 30 | make "BR2_EXTERNAL=$external" "${platform}_defconfig" 31 | 32 | make linux-menuconfig 33 | make linux-update-defconfig 34 | popd 35 | } 36 | 37 | busybox() { 38 | platform="$1" 39 | 40 | pushd "$buildroot" 41 | make "BR2_EXTERNAL=$external" "${platform}_defconfig" 42 | 43 | make busybox-menuconfig 44 | popd 45 | } 46 | 47 | platforms=( $external/configs/*_defconfig ) # List all configs in external/configs 48 | platforms=( "${platforms[@]%_defconfig}" ) # Remove suffix 49 | platforms=( "${platforms[@]##*/}" ) # Remove paths 50 | 51 | if [ "$#" -lt 2 ]; then 52 | exec cat < 54 | 55 | Known components: 56 | buildroot 57 | linux 58 | busybox 59 | 60 | Known platforms: 61 | $(for file in "${platforms[@]}"; do echo " $file"; done) 62 | EOF 63 | fi 64 | 65 | sel_component="$1" 66 | sel_platform="$2" 67 | 68 | if [[ ! " ${platforms[@]} " =~ " ${sel_platform} " ]]; then 69 | exec echo "Unknown platform $sel_platform. Run without arguments for help." 70 | fi 71 | 72 | case "$sel_component" in 73 | "buildroot") 74 | buildroot "$sel_platform" 75 | ;; 76 | "linux") 77 | linux "$sel_platform" 78 | ;; 79 | "busybox") 80 | busybox "$sel_platform" 81 | ;; 82 | *) 83 | echo "Unknown component $sel_component. Run without arguments for help." 84 | esac 85 | -------------------------------------------------------------------------------- /snakeware/external/Config.in: -------------------------------------------------------------------------------- 1 | source "$BR2_EXTERNAL_SNAKEWARE_PATH/package/python-pygame-gui/Config.in" 2 | source "$BR2_EXTERNAL_SNAKEWARE_PATH/package/python-pyttsx3/Config.in" 3 | -------------------------------------------------------------------------------- /snakeware/external/external.desc: -------------------------------------------------------------------------------- 1 | name: SNAKEWARE 2 | desc: Snakeware Configuration 3 | -------------------------------------------------------------------------------- /snakeware/external/external.mk: -------------------------------------------------------------------------------- 1 | include $(sort $(wildcard $(BR2_EXTERNAL_SNAKEWARE_PATH)/package/*/*.mk)) 2 | -------------------------------------------------------------------------------- /snakeware/external/overlay/etc/init.d/S50startpy: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | amixer sset Master unmute 4 | amixer sset Headphones unmute 5 | amixer sset Speaker unmute 6 | 7 | amixer sset Master 100% 8 | 9 | # create snakeuser directory in root dir 10 | mkdir /snakeuser 11 | 12 | # attempt to mount SNAKEUSER partition to /snakeuser 13 | # this will fail if no SNAKEUSER partition exists, which is fine, 14 | # we will just be in the "live" environment with no persistence 15 | 16 | for i in $(seq 1 5); do 17 | if [ -e /dev/disk/by-label/SNAKEUSER ]; then 18 | echo "persistent storage found" 19 | sleep 1 20 | mount -t ext4 /dev/disk/by-label/SNAKEUSER /snakeuser 21 | break 22 | else 23 | echo "Waiting for persistent storage (try $i)" 24 | sleep 1 25 | fi 26 | done 27 | 28 | cd /snakeuser 29 | 30 | # PYTHON THREE FOREVER BABY! 31 | while [ 1 ] 32 | do 33 | clear >/dev/tty1 34 | printf "SNAKEWARE READY.\n\n" >/dev/tty1 35 | PYTHONSTARTUP=/usr/share/snakeware/startup.py /usr/bin/python3 /dev/tty1 2>&1 36 | done 37 | -------------------------------------------------------------------------------- /snakeware/external/overlay/usr/share/snakeware/startup.py: -------------------------------------------------------------------------------- 1 | class Command: 2 | """Defines a command which is run when repr(self) is evaluated.""" 3 | 4 | def run(self): 5 | raise NotImplementedError 6 | 7 | def __repr__(self): 8 | """Execute the command.""" 9 | return self.run() 10 | 11 | 12 | class SnakeWMCommand(Command): 13 | def run(self): 14 | """Start SnakeWM.""" 15 | from snakewm.wm import SnakeWM 16 | 17 | return SnakeWM().run() 18 | 19 | 20 | class ShutdownCommand(Command): 21 | def run(self): 22 | import os 23 | 24 | os.system("/sbin/poweroff -f") 25 | 26 | 27 | class RebootCommand(Command): 28 | def run(self): 29 | import os 30 | 31 | os.system("/sbin/reboot -f") 32 | 33 | 34 | snakewm = SnakeWMCommand() 35 | shutdown = ShutdownCommand() 36 | reboot = RebootCommand() 37 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pygame-gui/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_PYTHON_PYGAME_GUI 2 | bool "python-pygame-gui" 3 | select BR2_PACKAGE_PYTHON_PYGAME # runtime 4 | help 5 | A GUI module for pygame 2. 6 | 7 | https://github.com/MyreMylar/pygame_gui 8 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pygame-gui/python-pygame-gui.hash: -------------------------------------------------------------------------------- 1 | # md5, sha256 from https://pypi.org/pypi/pygame_gui/json 2 | md5 1a488365037488f1abbe91c4e56d7d8b pygame_gui-0.5.6.tar.gz 3 | sha256 e8c4e0e050603a1e4369f66010cd294bd5ef40a7955cf139921bf8d0fe9ec7ea pygame_gui-0.5.6.tar.gz 4 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pygame-gui/python-pygame-gui.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # python-pygame-gui 4 | # 5 | ################################################################################ 6 | 7 | PYTHON_PYGAME_GUI_VERSION = 0.5.6 8 | PYTHON_PYGAME_GUI_SOURCE = pygame_gui-$(PYTHON_PYGAME_GUI_VERSION).tar.gz 9 | PYTHON_PYGAME_GUI_SITE = https://files.pythonhosted.org/packages/b9/13/02b9e546e072497b510f9fd4480e420bba0da8e7999a8fc5e5daa2aa70bd 10 | PYTHON_PYGAME_GUI_SETUP_TYPE = setuptools 11 | PYTHON_PYGAME_GUI_LICENSE = MIT 12 | 13 | $(eval $(python-package)) 14 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pyttsx3/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_PYTHON_PYTTSX3 2 | bool "python-pyttsx3" 3 | help 4 | Text to Speech (TTS) library for Python 2 and 3. Works without 5 | internet connection or delay. Supports multiple TTS engines, 6 | including Sapi5, nsss, and espeak. 7 | 8 | https://github.com/nateshmbhat/pyttsx3 9 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pyttsx3/python-pyttsx3.hash: -------------------------------------------------------------------------------- 1 | sha256 34b7b525b69ab21e36c875b49b4315b510132dd4fef86d08b18fce8ce34e5689 v2.87.tar.gz 2 | -------------------------------------------------------------------------------- /snakeware/external/package/python-pyttsx3/python-pyttsx3.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # python-pyttsx3 4 | # 5 | ################################################################################ 6 | 7 | PYTHON_PYTTSX3_VERSION = 2.87 8 | PYTHON_PYTTSX3_SOURCE = v$(PYTHON_PYTTSX3_VERSION).tar.gz 9 | PYTHON_PYTTSX3_SITE = https://github.com/nateshmbhat/pyttsx3/archive 10 | PYTHON_PYTTSX3_SETUP_TYPE = setuptools 11 | PYTHON_PYTTSX3_LICENSE = GPL-3.0 12 | 13 | $(eval $(python-package)) 14 | -------------------------------------------------------------------------------- /snakeware/external/patches/cdrkit/gcc10.patch: -------------------------------------------------------------------------------- 1 | --- a/genisoimage/CMakeLists.txt 2020-06-17 02:05:22.199829107 +0300 2 | +++ b/genisoimage/CMakeLists.txt 2020-06-17 02:05:17.745829324 +0300 3 | @@ -57,6 +57,7 @@ 4 | 5 | 6 | SET_TARGET_PROPERTIES(genisoimage devdump isodebug isodump isoinfo isovfy PROPERTIES SKIP_BUILD_RPATH TRUE) 7 | +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcommon") 8 | 9 | INSTALL(TARGETS genisoimage devdump isodebug isodump isoinfo isovfy DESTINATION bin) 10 | INSTALL(FILES 11 | -------------------------------------------------------------------------------- /snakeware/external/pip_modules.txt: -------------------------------------------------------------------------------- 1 | pygame_gui 2 | pyttsx3 3 | -------------------------------------------------------------------------------- /snakeware/external/post-build.sh: -------------------------------------------------------------------------------- 1 | # This script is run by buildroot after it has finished building the rootfs, but before 2 | # packing the final image. 3 | 4 | # set this to the current Python 3.x version 5 | PYLIBVER=python3.9 6 | 7 | SNAKEWARE=$PWD/.. 8 | 9 | # copy snakewm 10 | rm -rf output/target/usr/lib/$PYLIBVER/snakewm 11 | cp -r $SNAKEWARE/../snakewm output/target/usr/lib/$PYLIBVER/ 12 | 13 | # copy snake-games 14 | rm -rf output/target/usr/lib/$PYLIBVER/snake_games 15 | cp -r $SNAKEWARE/../snake_games output/target/usr/lib/$PYLIBVER/ 16 | -------------------------------------------------------------------------------- /snakeware/external/rpi4-firmware.sh: -------------------------------------------------------------------------------- 1 | # override rpi4 firmware configs with custom configs 2 | 3 | SNAKEWARE=$PWD/.. 4 | 5 | # copy firmware config 6 | cp -r $SNAKEWARE/external/rpi4-firmware/* $SNAKEWARE/buildroot_rpi4/output/images/rpi-firmware/ 7 | -------------------------------------------------------------------------------- /snakeware/external/rpi4-firmware/cmdline.txt: -------------------------------------------------------------------------------- 1 | root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA0,115200 loglevel=3 quiet logo.nologo 2 | -------------------------------------------------------------------------------- /snakeware/external/rpi4-firmware/config.txt: -------------------------------------------------------------------------------- 1 | # See http://buildroot.org/manual.html#rootfs-custom 2 | # and http://elinux.org/RPiconfig for a description of config.txt syntax 3 | 4 | kernel=zImage 5 | 6 | # To use an external initramfs file 7 | #initramfs rootfs.cpio.gz 8 | 9 | # Disable overscan assuming the display supports displaying the full resolution 10 | # If the text shown on the screen disappears off the edge, comment this out 11 | disable_overscan=1 12 | 13 | # How much memory in MB to assign to the GPU on Pi models having 14 | # 256, 512 or 1024 MB total memory 15 | gpu_mem_256=100 16 | gpu_mem_512=100 17 | gpu_mem_1024=100 18 | 19 | # fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console 20 | dtoverlay=miniuart-bt 21 | 22 | 23 | # disable color splash 24 | disable_splash=1 25 | 26 | # enable audio 27 | dtparam=audio=on 28 | -------------------------------------------------------------------------------- /snakewm/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | -------------------------------------------------------------------------------- /snakewm/README.md: -------------------------------------------------------------------------------- 1 | # Snake Window Manager 2 | snakewm is a basic window manager built using the pygame and pygame-gui packages. 3 | 4 | **Keyboard-mappings:** 5 | + Open/close App Menu: `SUPER` 6 | + Exit snakewm: `ALT+ESC` 7 | + Toggle dynamic backgrounds: `ALT+D` 8 | + snakepaint mappings 9 | + Toggle paint mode `ALT+P` 10 | + Change brush size `SCROLL` 11 | + Change colour `ALT+SCROLL` 12 | + Change brush shape `CTRL+SCROLL` 13 | 14 | ## Running snakewm on snakeware 15 | To launch snakewm in snakeware Python shell, there are 2 ways: 16 | 17 | 1. Run the custom snakeware shell command (release 0.0.3+) 18 | ``` 19 | >>> snakewm 20 | ``` 21 | 2. Run Python import manually 22 | ``` 23 | >>> from snakewm.wm import SnakeWM 24 | >>> SnakeWM().run() 25 | ``` 26 | ## Running snakewm on other OSs 27 | snakewm can also be run independently of snakeware on other operating systems with python3 installed. This can be used to develop and 28 | test new snakeware compatible apps without building a new distro image for every change. 29 | 30 | To run snakewm on macOS and Linux distributions: 31 | 32 | ```/.../snakewm$ sudo python3 wm.py``` 33 | 34 | To run snakewm on Windows: 35 | 36 | ```PS C:\...\snakewm> python3 wm.py``` 37 | 38 | To escape snakewm press `ALT-ESC`, or go to `system>exit snakewm` from the App Menu. 39 | 40 | **Note for running snakewm on macOS:** 41 | macOS comes with Python2.7 preinstalled, not Python3. snakewm is required to be run on Python3. Latest version of Python3 can be 42 | downloaded [here.](https://www.python.org/downloads/mac-osx/) 43 | 44 | **Note for running snakewm on Windows:** 45 | The App Menu in snakewm is mapped to the `SUPER Key (Start/Win key)`. When running snakewm over Windows, to open the 46 | App Menu without triggering the Start Menu press `ALT+SUPER`. 47 | 48 | ## Dependencies 49 | 50 | To run snakewm properly on other OSs you will need to have several PIP packages installed. It is recommended this is done within 51 | a [Python virtual environment](https://docs.python.org/3/library/venv.html), to avoid package dependency 52 | clashes with other projects. 53 | 54 | To install PIP packages type command `python3 -m pip install ` 55 | 56 | **Required PIP Packages** 57 | + For window manager 58 | + [pygame](https://pypi.org/project/pygame/) 59 | + [pygame-gui](https://pypi.org/project/pygame-gui/) 60 | + For speaknspell 61 | + [pyttsx3](https://pypi.org/project/pyttsx3/) 62 | + [pywin32](https://pypi.org/project/pywin32/) (if on Windows) 63 | + [comtypes](https://pypi.org/project/comtypes/) (if on Windows) 64 | + (list will likely increase as more apps use PIP packages) 65 | -------------------------------------------------------------------------------- /snakewm/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /snakewm/appmenu/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/appmenu/__init__.py -------------------------------------------------------------------------------- /snakewm/apps/clocks/aclock/README.md: -------------------------------------------------------------------------------- 1 | # SnakeAClock 2 | 3 | SnakeAClock is an analog clock that displays the current time in a small window. It is based on my AmigaClock code, but with a modified dial design and caching of the empty dial image for better performance. The pygame_gui-related stuff is taken from dance.py. 4 | 5 | # Authors 6 | 7 | Analog clock by Martin C. Doege 8 | 9 | + github: https://github.com/mdoege 10 | 11 | + date: 5 Jun 2020 12 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/aclock/__init__.py: -------------------------------------------------------------------------------- 1 | from .aclock import SnakeAClock 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeAClock. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeAClock(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/berlin/README.md: -------------------------------------------------------------------------------- 1 | # Berlin 2 | 3 | A PyGame version of the [Berlin clock](https://en.wikipedia.org/wiki/Berlin_Clock) (aka set theory clock) which was installed in a central location in Berlin on June 17, 1975. In 1996 it was moved to a new slightly more hidden location where it still stands today. You could (and still can) also buy official tabletop reproductions of it in Berlin souvenir shops. 4 | 5 | This is a 24 hour clock. How to read: 6 | 7 | * hour = 5 * lights in first row + lights in second row 8 | * minute = 5 * lights in third row + lights in fourth row 9 | * Seconds are even when top light is lit. 10 | 11 | # Author 12 | 13 | Martin C. Doege 14 | 15 | + github: https://github.com/mdoege 16 | 17 | + date: 13 Jun 2020 18 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/berlin/__init__.py: -------------------------------------------------------------------------------- 1 | from .berlin import Berlin 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Berlin. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Berlin(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/clock/README.md: -------------------------------------------------------------------------------- 1 | # SnakeClock 2 | SnakeClock displays the current date and time in a small window. 3 | 4 | # Authors 5 | 6 | Clock by Abdur-Rahmaan Janhangeer 7 | 8 | + github: https://github.com/Abdur-rahmaanJ 9 | 10 | + mail: arj.python@gmail.com 11 | 12 | + date: 30 May 2020 13 | 14 | Date functionality added by pavo 15 | 16 | + github: https://github.com/callmepavo/ 17 | 18 | + date: 2 Jun 2020 19 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/clock/__init__.py: -------------------------------------------------------------------------------- 1 | from .clock import SnakeClock 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeClock. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeClock(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/clock/clock.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | 4 | import datetime 5 | 6 | 7 | class SnakeClock(pygame_gui.elements.UIWindow): 8 | def __init__(self, pos, manager): 9 | super().__init__( 10 | pygame.Rect(pos, (195, 100)), 11 | manager=manager, 12 | window_display_title="clock", 13 | object_id="#clockterm", 14 | resizable=False, 15 | ) 16 | 17 | self.textbox = pygame_gui.elements.UITextBox( 18 | "", 19 | relative_rect=pygame.Rect(0, 1, 163, 40), 20 | manager=manager, 21 | container=self, 22 | anchors={ 23 | "left": "left", 24 | "right": "right", 25 | "top": "top", 26 | "bottom": "bottom", 27 | }, 28 | ) 29 | 30 | def process_event(self, event): 31 | super().process_event(event) 32 | 33 | def update(self, time_delta): 34 | super().update(time_delta) 35 | 36 | dt = datetime.datetime.now() 37 | # %X formatted clock, %x formatted date 38 | current_time = dt.strftime("%X %x") 39 | 40 | self.set_text(current_time) 41 | 42 | def set_text(self, text): 43 | self.textbox.html_text = text 44 | self.textbox.rebuild() 45 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/stopwatch/README.md: -------------------------------------------------------------------------------- 1 | # Stopwatch 2 | A basic stopwatch that counts up in seconds. `start/pause` button stops and starts counting, `reset` button returns count to 0. 3 | 4 | # Authors 5 | Stopwatch by pavo. 6 | 7 | + github: https://github.com/callmepavo/ 8 | 9 | + date: 16 Jun 2020 10 | 11 | Based on SnakeClock by Abdur-Rahmaan Janhangeer. 12 | 13 | + github: https://github.com/Abdur-rahmaanJ 14 | 15 | + mail: arj.python@gmail.com 16 | 17 | + date: 30 May 2020 18 | 19 | Slight edits to SnakeClock made by pavo. 20 | 21 | + github: https://github.com/callmepavo 22 | 23 | + date: 10 May 2020 24 | 25 | Upgraded by Mochida 26 | 27 | Added split time or save time or whatever it is called and also added milliseconds 28 | 29 | + github: https://github/mochidaz 30 | + mail: rahmanhakim2435@gmail.com 31 | + date: 29 July 2020 -------------------------------------------------------------------------------- /snakewm/apps/clocks/stopwatch/__init__.py: -------------------------------------------------------------------------------- 1 | from .stopwatch import Stopwatch 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Stopwatch. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Stopwatch(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/tix/README.md: -------------------------------------------------------------------------------- 1 | # TIX 2 | 3 | TIX is a TIX clock, based on my old PyTIX code. TIX is a novelty clock that was available from sites such as thinkgeek.com about a decade ago. 4 | 5 | How to read: Each colored group of squares represents one digit of the current time. So if there are (from left to right) one red, two green, three blue and four red squares, that means it's 12:34 right now. 6 | 7 | The display updates every four seconds by default and the window is resizable. The script also has command line options for 24 hour mode and custom update intervals. 8 | 9 | # Author 10 | 11 | Martin C. Doege 12 | 13 | + github: https://github.com/mdoege 14 | 15 | + date: 12 Jun 2020 16 | -------------------------------------------------------------------------------- /snakewm/apps/clocks/tix/__init__.py: -------------------------------------------------------------------------------- 1 | from .tix import TIX 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of TIX. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | TIX(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/__init__.py: -------------------------------------------------------------------------------- 1 | from .dance import BusDance 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instal of BusDance. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | BusDance(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/dance.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import pygame 4 | import pygame_gui 5 | 6 | from pygame_gui.elements.ui_image import UIImage 7 | 8 | 9 | class BusDance(pygame_gui.elements.UIWindow): 10 | DIMS = (320, 240) 11 | 12 | FRAMES = [] 13 | FRAMES_LEN = 0 14 | FRAME_INDEX = 0 15 | 16 | def __init__(self, pos, manager): 17 | super().__init__( 18 | pygame.Rect(pos, (self.DIMS[0] + 32, self.DIMS[1] + 60)), 19 | manager=manager, 20 | window_display_title="BusDance", 21 | object_id="#busdance", 22 | ) 23 | 24 | self.dsurf = UIImage( 25 | pygame.Rect((0, 0), self.DIMS), 26 | pygame.Surface(self.DIMS).convert(), 27 | manager=manager, 28 | container=self, 29 | parent_element=self, 30 | ) 31 | 32 | app_path = os.path.dirname(os.path.abspath(__file__)) 33 | frames_path = app_path + "/frames/" 34 | 35 | for x in range(180): 36 | # load each frame from the GIF into the frame list 37 | frame = pygame.image.load(frames_path + "frame-" + str(x) + ".png") 38 | frame = pygame.transform.scale(frame, self.DIMS) 39 | 40 | # add each frame twice for half speed 41 | self.FRAMES.append(frame) 42 | self.FRAMES.append(frame) 43 | 44 | self.FRAMES_LEN = len(self.FRAMES) 45 | 46 | # \TODO find fun, groovin, royalty-free tune to play 47 | # load and play the song 48 | # pygame.mixer.init() 49 | # pygame.mixer.music.load(app_path + "/party.ogg") 50 | # pygame.mixer.music.play(loops=-1) 51 | 52 | def update(self, delta): 53 | super().update(delta) 54 | self.dsurf.image.blit(self.FRAMES[self.FRAME_INDEX], (0, 0)) 55 | self.FRAME_INDEX = (self.FRAME_INDEX + 1) % self.FRAMES_LEN 56 | 57 | # def kill(self): 58 | # pygame.mixer.music.stop() 59 | # super().kill() 60 | -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-0.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-1.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-10.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-100.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-101.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-102.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-103.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-104.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-105.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-106.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-107.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-108.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-109.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-11.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-110.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-111.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-112.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-113.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-114.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-115.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-116.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-117.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-118.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-119.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-12.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-120.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-121.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-122.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-123.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-124.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-125.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-126.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-127.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-128.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-129.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-13.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-130.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-131.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-132.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-133.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-134.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-135.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-136.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-137.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-138.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-139.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-14.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-140.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-141.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-142.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-143.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-144.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-145.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-146.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-147.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-148.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-149.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-15.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-150.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-151.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-152.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-153.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-153.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-154.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-155.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-156.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-156.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-157.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-158.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-159.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-16.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-160.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-161.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-161.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-162.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-162.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-163.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-163.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-164.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-165.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-166.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-166.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-167.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-168.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-169.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-17.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-170.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-171.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-172.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-173.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-174.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-174.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-175.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-176.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-177.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-177.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-178.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-178.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-179.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-18.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-19.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-2.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-20.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-21.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-22.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-23.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-24.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-25.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-26.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-27.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-28.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-29.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-3.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-30.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-31.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-32.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-33.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-34.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-35.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-36.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-37.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-38.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-39.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-4.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-40.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-41.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-42.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-43.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-44.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-45.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-46.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-47.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-48.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-49.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-5.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-50.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-51.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-52.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-53.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-54.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-55.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-56.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-57.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-58.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-59.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-6.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-60.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-61.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-62.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-63.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-64.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-65.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-66.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-67.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-68.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-69.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-7.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-70.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-71.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-72.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-73.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-74.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-75.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-76.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-77.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-78.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-79.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-8.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-80.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-81.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-82.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-83.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-84.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-85.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-86.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-87.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-88.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-89.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-9.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-90.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-91.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-92.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-93.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-94.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-95.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-96.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-97.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-98.png -------------------------------------------------------------------------------- /snakewm/apps/fun/bus/frames/frame-99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/bus/frames/frame-99.png -------------------------------------------------------------------------------- /snakewm/apps/fun/cell/README.md: -------------------------------------------------------------------------------- 1 | # Cell 2 | 3 | Cell runs an [elementary cellular automaton](https://en.wikipedia.org/wiki/Elementary_cellular_automaton), selecting the rule, colors, and initial conditions randomly. 4 | 5 | The program uses the EGA/Sega Master System color palette (64 colors, 4 levels per channel). The window is resizable and will start a new automaton on each resize event. 6 | 7 | # Further reading 8 | 9 | * Wolfram, Stephen (2002): [A New Kind of Science](https://www.wolframscience.com/nks/) 10 | 11 | # Author 12 | 13 | Martin C. Doege 14 | 15 | + github: https://github.com/mdoege 16 | 17 | + date: 16 Jun 2020 18 | -------------------------------------------------------------------------------- /snakewm/apps/fun/cell/__init__.py: -------------------------------------------------------------------------------- 1 | from .cell import Cell 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Cell. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Cell(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/dazzler/README.md: -------------------------------------------------------------------------------- 1 | # Snazzler 2 | 3 | Snazzler is a kaleidoscope similar to the one for the Cromemco Dazzler (1976) (see https://www.youtube.com/watch?v=W-481UnBl_w and https://en.wikipedia.org/wiki/Cromemco_Dazzler). 4 | 5 | The program uses the EGA/Sega Master System color palette (64 colors, 4 levels per channel). 6 | 7 | The window is resizable, press Space to pause, "." to advance one frame. 8 | 9 | # Author 10 | 11 | Martin C. Doege 12 | 13 | + github: https://github.com/mdoege 14 | 15 | + date: 7 Jun 2020 16 | -------------------------------------------------------------------------------- /snakewm/apps/fun/dazzler/__init__.py: -------------------------------------------------------------------------------- 1 | from .dazzler import Snazzler 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Snazzler. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Snazzler(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/earth/README.md: -------------------------------------------------------------------------------- 1 | # Earth 2 | 3 | Earth displays an image of the current day and night regions on Earth based on NASA Blue Marble images. (This map generator used to be part of an old Python 2 project of mine called RSS-Planet.) 4 | 5 | # Author 6 | 7 | Martin C. Doege 8 | 9 | + github: https://github.com/mdoege 10 | 11 | + date: 11 Jun 2020 12 | 13 | -------------------------------------------------------------------------------- /snakewm/apps/fun/earth/__init__.py: -------------------------------------------------------------------------------- 1 | from .earth import Earth 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Earth. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Earth(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/earth/d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/earth/d.jpg -------------------------------------------------------------------------------- /snakewm/apps/fun/earth/n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/earth/n.jpg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/README.md: -------------------------------------------------------------------------------- 1 | # midi 2 | 3 | Midi is a MIDI synthesizer that plays Bach's [Goldberg Variations](https://en.wikipedia.org/wiki/Goldberg_Variations) using PySynth B piano samples. Notes are shown on a scrolling piano roll view as they are played, based on the standard 88 piano keys with the treble at the top. Playback automatically advances to the next song on the list. 4 | 5 | Press the right and left cursor keys to go to the next/previous track. Adjust playback speed with the up and down cursor keys. Press Space to pause playback. 6 | 7 | The Bach MIDI files are from [Mutopia Project](https://www.mutopiaproject.org/) under the Creative Commons Attribution-ShareAlike license. The Python MIDI file reading code is 2-clause BSD-licensed, which is compatible with Snakeware's MIT license. 8 | 9 | # Author 10 | 11 | Martin C. Doege 12 | 13 | + github: https://github.com/mdoege 14 | 15 | + date: 19 Jun 2020 16 | -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/__init__.py: -------------------------------------------------------------------------------- 1 | from .midi import MIDI 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Midi. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | MIDI(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v01.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v01.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v02.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v02.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v03.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v03.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v04.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v04.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v05.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v05.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v06.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v06.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v07.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v07.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v08.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v08.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v09.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v09.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v10.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v10.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v11.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v11.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v12.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v12.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v13.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v13.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v14.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v14.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v15.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v15.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v16.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v16.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v17.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v17.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v18.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v18.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v19.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v19.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v20.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v20.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v21.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v21.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v22.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v22.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v23.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v23.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v24.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v24.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v25.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v25.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v26.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v26.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v27.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v27.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v28.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v28.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v29.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v29.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/goldberg/bwv-988-v30.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/goldberg/bwv-988-v30.mid -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi13.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi13.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi14.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi14.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi15.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi15.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi16.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi16.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi17.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi17.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi18.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi18.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi19.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi19.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi20.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi20.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi21.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi21.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi22.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi22.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi23.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi23.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi24.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi24.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi25.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi25.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi26.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi26.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi27.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi27.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi28.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi28.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi29.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi29.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi30.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi30.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi31.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi31.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi32.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi32.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi33.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi33.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi34.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi34.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi35.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi35.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi36.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi36.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi37.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi37.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi38.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi38.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi39.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi39.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi40.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi40.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi41.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi41.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi42.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi42.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi43.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi43.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi44.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi44.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi45.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi45.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi46.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi46.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi47.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi47.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi48.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi48.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi49.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi49.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi50.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi50.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi51.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi51.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi52.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi52.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi53.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi53.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi54.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi54.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi55.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi55.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi56.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi56.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi57.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi57.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi58.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi58.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi59.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi59.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi60.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi60.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi61.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi61.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi62.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi62.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi63.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi63.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi64.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi64.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi65.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi65.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi66.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi66.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi67.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi67.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi68.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi68.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi69.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi69.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi70.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi70.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi71.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi71.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi72.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi72.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi73.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi73.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi74.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi74.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi75.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi75.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi76.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi76.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi77.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi77.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi78.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi78.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi79.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi79.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi80.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi80.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi81.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi81.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi82.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi82.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi83.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi83.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi84.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi84.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi85.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi85.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi86.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi86.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi87.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi87.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/midi/midisnd/midi88.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/midi/midisnd/midi88.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/musicplayer/__init__.py: -------------------------------------------------------------------------------- 1 | from .musicplayer import MusicPlayer 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of MusicPlayer. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | MusicPlayer(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/musicplayer/mixer.py: -------------------------------------------------------------------------------- 1 | import os 2 | from pygame import mixer 3 | 4 | 5 | class Mixer(object): 6 | 7 | # init pygame mixer 8 | def __init__(self): 9 | mixer.init() 10 | 11 | # load selected music 12 | @classmethod 13 | def load(cls, file): 14 | mixer.music.load(file) 15 | 16 | # play music 17 | @classmethod 18 | def play(cls): 19 | mixer.music.play() 20 | 21 | # pause music 22 | @classmethod 23 | def pause(cls): 24 | cls.isPaused = True 25 | mixer.music.pause() 26 | 27 | # resume music 28 | @classmethod 29 | def resume(cls): 30 | mixer.music.unpause() 31 | 32 | # rewind music 33 | @classmethod 34 | def rewind(cls): 35 | mixer.music.rewind() 36 | 37 | # stop music 38 | @classmethod 39 | def stop(cls): 40 | mixer.music.stop() 41 | 42 | # change volume - 0.0 to 1.0 43 | @classmethod 44 | def set_volume(cls, value): 45 | mixer.music.set_volume(value) 46 | 47 | # show the music volume 48 | @classmethod 49 | def get_volume(cls): 50 | return float(mixer.music.get_volume()) 51 | -------------------------------------------------------------------------------- /snakewm/apps/fun/musicplayer/musics/Adventures - A Himitsu (No Copyright Music).ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/musicplayer/musics/Adventures - A Himitsu (No Copyright Music).ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/README.md: -------------------------------------------------------------------------------- 1 | # Piano 2 | 3 | Piano is combination of a toy piano which you can play with your mouse or keyboard and a Hasbtro Simon/Atari Touch Me game in which you have to repeat a sequence of notes the computer plays. 4 | 5 | The keys on the keyboard's home row (S to L) play the white keys, the black keys are on E, R, Y/Z, U, I. (So this should work with QWERTY, QWERTZ, and AZERTY keyboard layouts.) The C mjaor chord keys needed for Simon mode can also be played with the 1, 2, 3, 4 and cursor keys. 6 | 7 | Volume can be adjusted with the V and B keys, the octave can be changed with N and M. C toggles sustain mode. 8 | 9 | Press Space to stop all sounds. If you click a key with the mouse, move the mouse away and release the button, you can create a note that plays permanently. 10 | 11 | There is no way to really win or lose in Simon mode, your score in the title bar simply keeps increasing if you get a sequence right. If you want to generate a different melody, just switch to piano mode and back again. 12 | 13 | # Author 14 | 15 | Martin C. Doege 16 | 17 | + github: https://github.com/mdoege 18 | 19 | + date: 10 Jun 2020 20 | 21 | # Credits 22 | 23 | * Sound effects created by PySynth (https://github.com/mdoege/PySynth) 24 | * Graphics created with GIMP (https://www.gimp.org/) 25 | * OGG conversion with SOX (http://sox.sourceforge.net/) 26 | 27 | -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/__init__.py: -------------------------------------------------------------------------------- 1 | from .piano import Piano 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Piano. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Piano(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/img/piano.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/img/piano.png -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/buzz.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/buzz.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_high_sustain_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_high_sustain_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_low_sustain_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_low_sustain_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_00.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_01.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_02.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_03.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_04.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_04.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_05.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_05.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_06.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_06.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_07.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_07.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_08.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_08.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_09.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_09.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_10.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_10.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_11.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_11.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/piano/snd/piano_sustain_12.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/fun/piano/snd/piano_sustain_12.ogg -------------------------------------------------------------------------------- /snakewm/apps/fun/speaknspell/__init__.py: -------------------------------------------------------------------------------- 1 | from .speak import SpeakSpell 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SpeakSpell. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SpeakSpell(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/games/maze/README.txt: -------------------------------------------------------------------------------- 1 | This Maze game was adapted by ChasoKid42 from this: 2 | https://github.com/ChaosKid42/python-maze/ 3 | 4 | Player moves with left/right/up. 5 | -------------------------------------------------------------------------------- /snakewm/apps/games/maze/__init__.py: -------------------------------------------------------------------------------- 1 | from .mazewindow import MazeWindow 2 | 3 | 4 | def load(manager, params): 5 | pos = (100, 100) 6 | 7 | if params is not None and len(params) > 0: 8 | pos = params[0] 9 | 10 | MazeWindow(pos, manager) 11 | -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/floor0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/floor0.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/floor1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/floor1.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/floor2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/floor2.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/player_down.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/player_down.jpg -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/player_left.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/player_left.jpg -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/player_right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/player_right.jpg -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/player_up.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/player_up.jpg -------------------------------------------------------------------------------- /snakewm/apps/games/maze/assets/wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze/assets/wall.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze/mazewindow.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | 4 | from pygame_gui.ui_manager import UIManager 5 | from pygame_gui.elements.ui_window import UIWindow 6 | from pygame_gui.elements.ui_image import UIImage 7 | 8 | from .maze import Maze 9 | 10 | 11 | class MazeWindow(UIWindow): 12 | def __init__(self, position, ui_manager): 13 | super().__init__( 14 | pygame.Rect(position, (640, 480)), 15 | ui_manager, 16 | window_display_title="maze", 17 | object_id="#maze_window", 18 | ) 19 | 20 | game_surface_size = self.get_container().get_size() 21 | self.game_surface_element = UIImage( 22 | pygame.Rect((0, 0), game_surface_size), 23 | pygame.Surface(game_surface_size).convert(), 24 | manager=ui_manager, 25 | container=self, 26 | parent_element=self, 27 | ) 28 | 29 | self.maze = Maze(game_surface_size) 30 | 31 | def process_event(self, event): 32 | super().process_event(event) 33 | return self.maze.process_event(event) 34 | 35 | def update(self, time_delta): 36 | super().update(time_delta) 37 | self.maze.draw(self.game_surface_element.image) 38 | -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/README.txt: -------------------------------------------------------------------------------- 1 | 3D Maze. 2 | 3 | Find the end. You'll know when you find it ;) 4 | Use the arrow keys to move. 5 | 6 | If it is laggy, try to reduce the number of rays in maze3d.py 7 | 8 | 9 | ♡2020 by Koxinga. Copying is an act of love. Please copy, modify and share as you like. -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/__init__.py: -------------------------------------------------------------------------------- 1 | from .maze3dwindow import Maze3DWindow 2 | 3 | 4 | def load(manager, params): 5 | pos = (100, 100) 6 | 7 | if params is not None and len(params) > 0: 8 | pos = params[0] 9 | 10 | Maze3DWindow(pos, manager) 11 | -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/maze_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/maze_bg.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall1_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall1_dark.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall1_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall1_light.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall2_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall2_dark.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall2_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall2_light.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall3_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall3_dark.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/assets/wall3_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/maze3D/assets/wall3_light.png -------------------------------------------------------------------------------- /snakewm/apps/games/maze3D/maze3dwindow.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | 4 | from pygame_gui.ui_manager import UIManager 5 | from pygame_gui.elements.ui_window import UIWindow 6 | from pygame_gui.elements.ui_image import UIImage 7 | 8 | from .maze3d import Maze3D 9 | 10 | 11 | class Maze3DWindow(UIWindow): 12 | def __init__(self, position, ui_manager): 13 | super().__init__( 14 | pygame.Rect(position, (640, 480)), 15 | ui_manager, 16 | window_display_title="Maze 3D", 17 | object_id="#maze3d_window", 18 | ) 19 | 20 | game_surface_size = self.get_container().get_size() 21 | self.game_surface_element = UIImage( 22 | pygame.Rect((0, 0), game_surface_size), 23 | pygame.Surface(game_surface_size).convert(), 24 | manager=ui_manager, 25 | container=self, 26 | parent_element=self, 27 | ) 28 | 29 | self.maze3d = Maze3D(game_surface_size) 30 | 31 | def process_event(self, event): 32 | super().process_event(event) 33 | return self.maze3d.process_event(event) 34 | 35 | def update(self, time_delta): 36 | super().update(time_delta) 37 | self.maze3d.updatePos() 38 | self.maze3d.draw(self.game_surface_element.image) 39 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/README.txt: -------------------------------------------------------------------------------- 1 | This Pong game was adapted from MyreMylar's pygame_gui_examples repo. 2 | https://github.com/MyreMylar/pygame_gui_examples/ 3 | 4 | Left player moves with W/S, right player moves with Up/Down. 5 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/__init__.py: -------------------------------------------------------------------------------- 1 | from .pongwindow import PongWindow 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create Pong game and add it to the UI manager. 7 | params[0] should be the desired position. A default 8 | position will be used if a pos is not provided. 9 | """ 10 | # default position 11 | pos = (50, 50) 12 | 13 | if params is not None and len(params) > 0: 14 | pos = params[0] 15 | 16 | PongWindow(pos, manager) 17 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/ball.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import math 3 | import random 4 | 5 | 6 | class Ball: 7 | def __init__(self, start_position): 8 | self.rect = pygame.Rect(start_position, (5, 5)) 9 | self.colour = pygame.Color(255, 255, 255) 10 | self.position = [float(start_position[0]), float(start_position[1])] 11 | self.start_position = [self.position[0], self.position[1]] 12 | self.ball_speed = 120.0 13 | self.max_bat_bounce_angle = 5.0 * math.pi / 12.0 14 | self.collided = False 15 | 16 | self.velocity = [0.0, 0.0] 17 | self.create_random_start_vector() 18 | 19 | def render(self, screen): 20 | pygame.draw.rect(screen, self.colour, self.rect) 21 | 22 | def create_random_start_vector(self): 23 | y_random = random.uniform(-0.5, 0.5) 24 | x_random = 1.0 - abs(y_random) 25 | if random.randint(0, 1) == 1: 26 | x_random = x_random * -1.0 27 | self.velocity = [x_random * self.ball_speed, y_random * self.ball_speed] 28 | 29 | def reset(self): 30 | self.position = [self.start_position[0], self.start_position[1]] 31 | self.create_random_start_vector() 32 | 33 | def update(self, dt, bats, walls): 34 | self.position[0] += self.velocity[0] * dt 35 | self.position[1] += self.velocity[1] * dt 36 | self.rect.x = self.position[0] 37 | self.rect.y = self.position[1] 38 | 39 | collided_this_frame = False 40 | for wall in walls: 41 | if self.rect.colliderect(wall.rect): 42 | collided_this_frame = True 43 | if not self.collided: 44 | self.collided = True 45 | self.velocity[1] = self.velocity[1] * -1 46 | 47 | for bat in bats: 48 | if self.rect.colliderect(bat.rect): 49 | collided_this_frame = True 50 | if not self.collided: 51 | self.collided = True 52 | bat_y_centre = bat.position[1] + (bat.length / 2) 53 | ball_y_centre = self.position[1] + 5 54 | relative_intersect_y = ( 55 | bat_y_centre - ball_y_centre 56 | ) # should be in 'bat space' between -50 and +50 57 | normalized_relative_intersect_y = relative_intersect_y / ( 58 | bat.length / 2 59 | ) 60 | bounce_angle = ( 61 | normalized_relative_intersect_y * self.max_bat_bounce_angle 62 | ) 63 | 64 | self.velocity[0] = self.velocity[0] * -1 65 | self.velocity[1] = self.ball_speed * -math.sin(bounce_angle) 66 | 67 | if not collided_this_frame: 68 | self.collided = False 69 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/bat.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | from pygame.locals import * 3 | 4 | 5 | class ControlScheme: 6 | def __init__(self): 7 | self.up = K_UP 8 | self.down = K_DOWN 9 | 10 | 11 | class Bat: 12 | def __init__(self, start_pos, control_scheme, court_size): 13 | self.control_scheme = control_scheme 14 | self.move_up = False 15 | self.move_down = False 16 | self.move_speed = 450.0 17 | 18 | self.court_size = court_size 19 | 20 | self.length = 30.0 21 | self.width = 5.0 22 | 23 | self.position = [float(start_pos[0]), float(start_pos[1])] 24 | 25 | self.rect = pygame.Rect((start_pos[0], start_pos[1]), (self.width, self.length)) 26 | self.colour = pygame.Color("#FFFFFF") 27 | 28 | def process_event(self, event): 29 | if event.type == KEYDOWN: 30 | if event.key == self.control_scheme.up: 31 | self.move_up = True 32 | if event.key == self.control_scheme.down: 33 | self.move_down = True 34 | 35 | if event.type == KEYUP: 36 | if event.key == self.control_scheme.up: 37 | self.move_up = False 38 | if event.key == self.control_scheme.down: 39 | self.move_down = False 40 | 41 | def update(self, dt): 42 | if self.move_up: 43 | self.position[1] -= dt * self.move_speed 44 | 45 | if self.position[1] < 10.0: 46 | self.position[1] = 10.0 47 | 48 | self.rect.y = self.position[1] 49 | 50 | if self.move_down: 51 | self.position[1] += dt * self.move_speed 52 | 53 | if self.position[1] > self.court_size[1] - self.length - 10: 54 | self.position[1] = self.court_size[1] - self.length - 10 55 | 56 | self.rect.y = self.position[1] 57 | 58 | def render(self, screen): 59 | pygame.draw.rect(screen, self.colour, self.rect) 60 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/pong.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | from pygame.locals import * 3 | 4 | from .wall import Wall 5 | from .bat import Bat, ControlScheme 6 | from .ball import Ball 7 | from .score import Score 8 | 9 | 10 | class PongGame: 11 | def __init__(self, size): 12 | self.size = size 13 | self.background = pygame.Surface(size) # make a background surface 14 | self.background = self.background.convert() 15 | self.background.fill((0, 0, 0)) 16 | 17 | font = pygame.font.Font(None, 24) 18 | 19 | self.score = Score(font) 20 | 21 | self.walls = [ 22 | Wall((5, 5), (size[0] - 10, 10)), 23 | Wall((5, size[1] - 10), (size[0] - 10, size[1] - 5)), 24 | ] 25 | 26 | self.bats = [] 27 | 28 | control_scheme_1 = ControlScheme() 29 | control_scheme_1.up = K_w 30 | control_scheme_1.down = K_s 31 | 32 | control_scheme_2 = ControlScheme() 33 | control_scheme_2.up = K_UP 34 | control_scheme_2.down = K_DOWN 35 | 36 | self.bats.append(Bat((5, int(size[1] / 2)), control_scheme_1, self.size)) 37 | self.bats.append( 38 | Bat((size[0] - 10, int(size[1] / 2)), control_scheme_2, self.size) 39 | ) 40 | 41 | self.ball = Ball((int(size[0] / 2), int(size[1] / 2))) 42 | 43 | def process_event(self, event): 44 | for bat in self.bats: 45 | bat.process_event(event) 46 | 47 | def update(self, time_delta): 48 | for bat in self.bats: 49 | bat.update(time_delta) 50 | 51 | self.ball.update(time_delta, self.bats, self.walls) 52 | 53 | if self.ball.position[0] < 0: 54 | self.ball.reset() 55 | self.score.increase_player_2_score() 56 | elif self.ball.position[0] > self.size[0]: 57 | self.ball.reset() 58 | self.score.increase_player_1_score() 59 | 60 | def draw(self, surface): 61 | surface.blit(self.background, (0, 0)) 62 | 63 | for wall in self.walls: 64 | wall.render(surface) 65 | 66 | for bat in self.bats: 67 | bat.render(surface) 68 | 69 | self.ball.render(surface) 70 | self.score.render(surface, self.size) 71 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/pongwindow.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | 4 | from pygame_gui.ui_manager import UIManager 5 | from pygame_gui.elements.ui_window import UIWindow 6 | from pygame_gui.elements.ui_image import UIImage 7 | 8 | from .pong import PongGame 9 | 10 | 11 | class PongWindow(UIWindow): 12 | def __init__(self, position, ui_manager): 13 | super().__init__( 14 | pygame.Rect(position, (320, 240)), 15 | ui_manager, 16 | window_display_title="pong", 17 | object_id="#pong_window", 18 | ) 19 | 20 | game_surface_size = self.get_container().get_size() 21 | self.game_surface_element = UIImage( 22 | pygame.Rect((0, 0), game_surface_size), 23 | pygame.Surface(game_surface_size).convert(), 24 | manager=ui_manager, 25 | container=self, 26 | parent_element=self, 27 | ) 28 | 29 | self.pong_game = PongGame(game_surface_size) 30 | 31 | self.is_active = False 32 | 33 | def focus(self): 34 | self.is_active = True 35 | 36 | def unfocus(self): 37 | self.is_active = False 38 | 39 | def process_event(self, event): 40 | handled = super().process_event(event) 41 | if ( 42 | event.type == pygame.USEREVENT 43 | and event.user_type == pygame_gui.UI_BUTTON_PRESSED 44 | and event.ui_object_id == "#pong_window.#title_bar" 45 | and event.ui_element == self.title_bar 46 | ): 47 | handled = True 48 | event_data = { 49 | "user_type": "window_selected", 50 | "ui_element": self, 51 | "ui_object_id": self.most_specific_combined_id, 52 | } 53 | window_selected_event = pygame.event.Event(pygame.USEREVENT, event_data) 54 | pygame.event.post(window_selected_event) 55 | if self.is_active: 56 | handled = self.pong_game.process_event(event) 57 | return handled 58 | 59 | def update(self, time_delta): 60 | if self.alive() and self.is_active: 61 | self.pong_game.update(time_delta) 62 | 63 | super().update(time_delta) 64 | 65 | self.pong_game.draw(self.game_surface_element.image) 66 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/score.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | 3 | 4 | class Score: 5 | def __init__(self, font): 6 | self.player_1_score = 0 7 | self.player_2_score = 0 8 | self.font = font 9 | 10 | self.score_string = None 11 | self.score_text_render = None 12 | 13 | self.update_score_text() 14 | 15 | def update_score_text(self): 16 | self.score_string = str(self.player_1_score) + " - " + str(self.player_2_score) 17 | self.score_text_render = self.font.render( 18 | self.score_string, True, pygame.Color(200, 200, 200) 19 | ) 20 | 21 | def render(self, screen, size): 22 | screen.blit( 23 | self.score_text_render, 24 | self.score_text_render.get_rect(centerx=size[0] / 2, centery=size[1] / 10), 25 | ) 26 | 27 | def increase_player_1_score(self): 28 | self.player_1_score += 1 29 | self.update_score_text() 30 | 31 | def increase_player_2_score(self): 32 | self.player_2_score += 1 33 | self.update_score_text() 34 | -------------------------------------------------------------------------------- /snakewm/apps/games/pong/wall.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | 3 | 4 | class Wall: 5 | def __init__(self, top_left, bottom_right): 6 | self.rect = pygame.Rect( 7 | top_left, (bottom_right[0] - top_left[0], bottom_right[1] - top_left[1]) 8 | ) 9 | self.colour = pygame.Color("#C8C8C8") 10 | 11 | def render(self, screen): 12 | pygame.draw.rect(screen, self.colour, self.rect) 13 | -------------------------------------------------------------------------------- /snakewm/apps/games/zap/README.md: -------------------------------------------------------------------------------- 1 | # Zap 2 | 3 | Zap is a Python version of Space Zap (Midway 1980, see https://www.arcade-museum.com/game_detail.php?game_id=9692) running at a resolution of 160x120. Guard the space station from enemy fighters and occasional evil killer satellites. Play with the cursor keys and press Space to fire. 4 | 5 | The player is awarded a bonus base every 75,000 points. It is easier than the arcade original because difficulty does not ramp up, on the other hand the enemy can also fire from off screen in this version. Then again, you can also shoot off-screen enemies. 6 | 7 | The window is resizable, press "p" to pause, "." to advance one frame. 8 | 9 | # Author 10 | 11 | Martin C. Doege 12 | 13 | + github: https://github.com/mdoege 14 | 15 | + date: 8 Jun 2020 16 | 17 | # Credits 18 | * Sound effects created with sfxr (http://www.drpetter.se/project_sfxr.html) 19 | * Intro fanfare created with PySynth (https://github.com/mdoege/PySynth) 20 | * Graphics created with GrafX2 (http://grafx2.chez.com/) and GIMP (https://www.gimp.org/) 21 | * OGG conversion with SOX (http://sox.sourceforge.net/) 22 | 23 | 24 | -------------------------------------------------------------------------------- /snakewm/apps/games/zap/__init__.py: -------------------------------------------------------------------------------- 1 | from .zap import Zap 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Zap. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Zap(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/fighter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/fighter.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/numbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/numbers.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/photon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/photon.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/satellite.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/station.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/station.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/text.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/img/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/img/title.png -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/enemy.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/enemy.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/fanfare.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/fanfare.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/photon.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/photon.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/photondest.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/photondest.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/sat.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/sat.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/shot.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/shot.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/start.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/start.ogg -------------------------------------------------------------------------------- /snakewm/apps/games/zap/snd/stationdest.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/games/zap/snd/stationdest.ogg -------------------------------------------------------------------------------- /snakewm/apps/system/exit snakewm/__init__.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | 3 | 4 | def load(manager, params): 5 | pygame.quit() 6 | exit() 7 | -------------------------------------------------------------------------------- /snakewm/apps/system/fps/README.md: -------------------------------------------------------------------------------- 1 | # FPS 2 | FPS displays the current, average, minimum, and maximum frame rate. By default, the last 300 samples are used for average/min/max. 3 | 4 | # Authors 5 | 6 | Martin C. Doege 7 | 8 | + github: https://github.com/mdoege 9 | 10 | + date: 7 Jun 2020 11 | 12 | Based on Clock by Abdur-Rahmaan Janhangeer 13 | 14 | + github: https://github.com/Abdur-rahmaanJ 15 | 16 | + mail: arj.python@gmail.com 17 | 18 | + date: 30 May 2020 19 | 20 | Slight edits made by pavo 21 | 22 | + github: https://github.com/callmepavo 23 | 24 | + date: 10 May 2020 25 | -------------------------------------------------------------------------------- /snakewm/apps/system/fps/__init__.py: -------------------------------------------------------------------------------- 1 | from .fps import SnakeFPS 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeFPS. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeFPS(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/system/fps/fps.py: -------------------------------------------------------------------------------- 1 | # FPS counter for Snakeware 2 | 3 | import pygame 4 | import pygame_gui 5 | 6 | import time, statistics 7 | 8 | MAXSAMP = 300 9 | 10 | 11 | class SnakeFPS(pygame_gui.elements.UIWindow): 12 | def __init__(self, pos, manager): 13 | super().__init__( 14 | pygame.Rect(pos, (370, 100)), 15 | manager=manager, 16 | window_display_title="fps", 17 | object_id="#fps", 18 | resizable=False, 19 | ) 20 | 21 | self.textbox = pygame_gui.elements.UITextBox( 22 | "", 23 | relative_rect=pygame.Rect(0, 1, 338, 40), 24 | manager=manager, 25 | container=self, 26 | anchors={ 27 | "left": "left", 28 | "right": "right", 29 | "top": "top", 30 | "bottom": "bottom", 31 | }, 32 | ) 33 | self.last = 0 34 | self.samp = [] 35 | 36 | def process_event(self, event): 37 | super().process_event(event) 38 | 39 | def update(self, time_delta): 40 | super().update(time_delta) 41 | 42 | fps = 1 / (time.time() - self.last) 43 | self.samp.append(fps) 44 | if len(self.samp) > MAXSAMP: 45 | self.samp = self.samp[-MAXSAMP:] 46 | self.last = time.time() 47 | self.set_text( 48 | "FPS: %3u AVG: %3u MIN: %3u MAX: %3u" 49 | % (fps, statistics.mean(self.samp), min(self.samp), max(self.samp)) 50 | ) 51 | 52 | def set_text(self, text): 53 | self.textbox.html_text = text 54 | self.textbox.rebuild() 55 | -------------------------------------------------------------------------------- /snakewm/apps/system/help/README.md: -------------------------------------------------------------------------------- 1 | # Help 2 | 3 | A simple help browser 4 | 5 | # Authors 6 | 7 | Martin C. Doege 8 | 9 | + github: https://github.com/mdoege 10 | 11 | + date: 14 Jun 2020 12 | 13 | Based on Clock by Abdur-Rahmaan Janhangeer 14 | 15 | + github: https://github.com/Abdur-rahmaanJ 16 | 17 | + mail: arj.python@gmail.com 18 | 19 | + date: 30 May 2020 20 | 21 | -------------------------------------------------------------------------------- /snakewm/apps/system/help/__init__.py: -------------------------------------------------------------------------------- 1 | from .help import Help 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of Help. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | Help(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/system/help/help.py: -------------------------------------------------------------------------------- 1 | # Help browser for Snakeware 2 | 3 | import pygame 4 | import pygame_gui 5 | from pygame_gui.elements.ui_drop_down_menu import UIDropDownMenu 6 | 7 | import os, time 8 | 9 | 10 | path = os.path.dirname(os.path.abspath(__file__)) 11 | 12 | 13 | def appname(x): 14 | l = x.split("/") 15 | return l[-2] 16 | 17 | 18 | def gethelp(): 19 | d = path + "/../.." 20 | h = [] 21 | for root, dirs, files in os.walk(d, topdown=False): 22 | for name in files: 23 | if "README" in name: 24 | h.append((appname(os.path.join(root, name)), os.path.join(root, name))) 25 | h.sort(key=lambda r: r[0]) 26 | return h 27 | 28 | 29 | class Help(pygame_gui.elements.UIWindow): 30 | def __init__(self, pos, manager): 31 | super().__init__( 32 | pygame.Rect(pos, (630, 490)), 33 | manager=manager, 34 | window_display_title="help", 35 | object_id="#help", 36 | resizable=False, 37 | ) 38 | 39 | self.files = gethelp() 40 | self.last = self.files[0][0] 41 | 42 | self.menu = UIDropDownMenu( 43 | options_list=[p for p, q in self.files], 44 | starting_option=self.last, 45 | relative_rect=pygame.Rect(100, 0, 400, 30), 46 | manager=manager, 47 | container=self, 48 | ) 49 | 50 | self.menu.current_state.should_transition = True 51 | 52 | self.textbox = pygame_gui.elements.UITextBox( 53 | "", 54 | relative_rect=pygame.Rect(0, 31, 600, 400), 55 | manager=manager, 56 | container=self, 57 | anchors={ 58 | "left": "left", 59 | "right": "right", 60 | "top": "top", 61 | "bottom": "bottom", 62 | }, 63 | ) 64 | self.last = 0 65 | 66 | def process_event(self, event): 67 | super().process_event(event) 68 | 69 | def update(self, time_delta): 70 | super().update(time_delta) 71 | 72 | n = self.menu.selected_option 73 | if n == self.last: 74 | return 75 | self.last = n 76 | s = "" 77 | for i in range(len(self.files)): 78 | if self.files[i][0] == n: 79 | for l in open(self.files[i][1]): 80 | x = l.strip() 81 | if len(x) > 1 and x[0] == "#": 82 | x = "" + x[1:] + " " 83 | s += x + "
" 84 | 85 | self.set_text(s) 86 | 87 | def set_text(self, text): 88 | self.textbox.html_text = text 89 | self.textbox.rebuild() 90 | -------------------------------------------------------------------------------- /snakewm/apps/system/rammon/README.md: -------------------------------------------------------------------------------- 1 | # rammon 2 | Displays a bar graph of RAM usage. 3 | 4 | The graph goes from 0% at the bottom to 100% at the top, showing combined RAM use of all cores/threads. It's 100 px high, so each pixel vertically equals one percent. 5 | 6 | Horizontally, the graph is 200px wide, so being set to 4 FPS, it shows the last 50 s. 7 | 8 | Data is read directly ``/proc/meminfo`` (only works on Linux), using ``MemTotal`` and ``MemAvailable`` entries. This is forked from cpumon, and shares the majority of its code with it. 9 | 10 | # Author 11 | 12 | Based heavily on cpumon Martin C. Doege 13 | 14 | + github: https://github.com/mdoege 15 | 16 | + date: 5 Jun 2020 17 | 18 | Change from CPU usage to RAM made by pavo 19 | 20 | + github: https://github.com/callmepavo 21 | 22 | + date: 9 July 2020 -------------------------------------------------------------------------------- /snakewm/apps/system/rammon/__init__.py: -------------------------------------------------------------------------------- 1 | from .rammon import SnakeMon 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeMon. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeMon(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/system/rammon/rammon.py: -------------------------------------------------------------------------------- 1 | # RAM usage monitor 2 | 3 | import time 4 | import pygame 5 | import pygame_gui 6 | from pygame_gui.elements.ui_image import UIImage 7 | 8 | from .ramproc import ramproc 9 | 10 | BLUE = 68, 174, 220 11 | GRAY = 76, 80, 82 12 | 13 | 14 | class SnakeMon(pygame_gui.elements.UIWindow): 15 | DIMS = (200, 100) 16 | 17 | def __init__(self, pos, manager): 18 | super().__init__( 19 | pygame.Rect(pos, (self.DIMS[0] + 32, self.DIMS[1] + 60)), 20 | manager=manager, 21 | window_display_title="rammon", 22 | object_id="#rammonterm", 23 | resizable=False, 24 | ) 25 | 26 | self.dsurf = UIImage( 27 | pygame.Rect((0, 0), self.DIMS), 28 | pygame.Surface(self.DIMS).convert(), 29 | manager=manager, 30 | container=self, 31 | parent_element=self, 32 | ) 33 | self.ram = pygame.Surface(self.DIMS) 34 | self.ram.fill(GRAY) 35 | self.last_time = 0 36 | 37 | def process_event(self, event): 38 | super().process_event(event) 39 | 40 | def update(self, delta): 41 | super().update(delta) 42 | # limit frame rate to 4 FPS 43 | if time.time() - self.last_time > 0.25: 44 | self.draw_ram() 45 | self.last_time = time.time() 46 | self.dsurf.image.blit(self.ram, (0, 0)) 47 | 48 | def draw_ram(self): 49 | ram_perc = ramproc() 50 | self.ram.scroll(dx=-1) 51 | pygame.draw.line( 52 | self.ram, 53 | GRAY, 54 | ((self.DIMS[0] - 1), self.DIMS[1] - 1), 55 | ((self.DIMS[0] - 1), 0), 56 | 1, 57 | ) 58 | pygame.draw.line( 59 | self.ram, 60 | BLUE, 61 | ((self.DIMS[0] - 1), self.DIMS[1] - 1), 62 | ((self.DIMS[0] - 1), self.DIMS[1] - ram_perc), 63 | 1, 64 | ) 65 | -------------------------------------------------------------------------------- /snakewm/apps/system/rammon/ramproc.py: -------------------------------------------------------------------------------- 1 | # Read RAM usage in percent from /proc/meminfo 2 | # (only works on Linux) 3 | 4 | import time 5 | 6 | 7 | def isolate_num(text): 8 | digits = "" 9 | for c in text: 10 | if c in "0123456789": 11 | digits += c 12 | return int(digits) 13 | 14 | 15 | def ramproc(): 16 | file = open("/proc/meminfo").read().split("\n") 17 | 18 | total = isolate_num(file[0]) 19 | used = total - isolate_num(file[2]) # uses memavaiable line 20 | perc = round((used / total) * 100) 21 | return perc 22 | 23 | 24 | # Test the module 25 | if __name__ == "__main__": 26 | while True: 27 | print(ramproc()) 28 | time.sleep(1) 29 | -------------------------------------------------------------------------------- /snakewm/apps/system/reboot/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pygame 3 | 4 | 5 | def load(manager, params): 6 | pygame.quit() 7 | os.system("/sbin/reboot -f") 8 | -------------------------------------------------------------------------------- /snakewm/apps/system/shutdown/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pygame 3 | 4 | 5 | def load(manager, params): 6 | pygame.quit() 7 | os.system("/sbin/poweroff -f") 8 | -------------------------------------------------------------------------------- /snakewm/apps/system/sysmon/README.md: -------------------------------------------------------------------------------- 1 | # cpumon 2 | Displays a bar graph of CPU usage. 3 | 4 | The graph goes from 0% at the bottom to 100% at the top, showing combined CPU use of all cores/threads. It's 100 px high, so each pixel vertically equals one percent. This is for all threads combined, so e.g. if on a system with 16 threads there are 8 threads running at 100% and the other 8 are idle, the graph would show 50% total CPU use. 5 | 6 | Horizontally, the graph is 200px wide, so being set to 4 FPS, it shows the last 50 s. 7 | 8 | Data is either read via ``psutil`` if available or directly from ``/proc/stat`` (only works on Linux). 9 | 10 | # Author 11 | 12 | Martin C. Doege 13 | 14 | + github: https://github.com/mdoege 15 | 16 | + date: 5 Jun 2020 17 | 18 | 19 | # rammon 20 | Displays a bar graph of RAM usage. 21 | 22 | The graph goes from 0% at the bottom to 100% at the top, showing combined RAM use of all cores/threads. It's 100 px high, so each pixel vertically equals one percent. 23 | 24 | Horizontally, the graph is 200px wide, so being set to 4 FPS, it shows the last 50 s. 25 | 26 | Data is read directly ``/proc/meminfo`` (only works on Linux), using ``MemTotal`` and ``MemAvailable`` entries. This is forked from cpumon, and shares the majority of its code with it. 27 | 28 | # Author 29 | 30 | Based heavily on cpumon Martin C. Doege 31 | 32 | + github: https://github.com/mdoege 33 | 34 | + date: 5 Jun 2020 35 | 36 | Change from CPU usage to RAM made by pavo 37 | 38 | + github: https://github.com/callmepavo 39 | 40 | + date: 9 July 2020 41 | 42 | 43 | # Sysmon (System Monitor) 44 | Displays two bars of cpu and ram usage, and displays the usages in numbers too 45 | 46 | To see the details, scroll up to cpumon and rammon 47 | 48 | # Author 49 | 50 | Combined from cpumon by Martin C. Doege, and rammon by pavo. 51 | 52 | Combined by mochidaz 53 | 54 | + github: https://github.com/mochidaz 55 | 56 | + date 27 July 2020 -------------------------------------------------------------------------------- /snakewm/apps/system/sysmon/__init__.py: -------------------------------------------------------------------------------- 1 | from .sysmon import SnakeMon 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeMon. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeMon(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/system/sysmon/cpuproc.py: -------------------------------------------------------------------------------- 1 | # Read CPU usage in percent from /proc/stat 2 | # (only works on Linux) 3 | 4 | import time 5 | 6 | o = 0 7 | t = time.time() 8 | numcpu = 1 9 | for l in open("/proc/stat"): 10 | x = l.split() 11 | if l[:3] == "cpu" and len(x[0]) > 3: 12 | numcpu = 1 + int(x[0][3:]) 13 | 14 | 15 | def cpuproc(): 16 | global o, t 17 | f = open("/proc/stat").readline().split() 18 | q = 0.01 * (int(f[4]) - o) / (time.time() - t) 19 | q = 100 * (1 - q / numcpu) 20 | q = max(0, min(100, q)) 21 | t = time.time() 22 | o = int(f[4]) 23 | return int(q) 24 | 25 | 26 | def cpuproc2(): 27 | return str("CPU Usage:
{}/100".format(cpuproc())) 28 | 29 | 30 | # Test the module 31 | if __name__ == "__main__": 32 | while True: 33 | print(cpuproc()) 34 | time.sleep(1) 35 | -------------------------------------------------------------------------------- /snakewm/apps/system/sysmon/ramproc.py: -------------------------------------------------------------------------------- 1 | # Read RAM usage in percent from /proc/meminfo 2 | # (only works on Linux) 3 | 4 | import time 5 | 6 | 7 | def isolate_num(text): 8 | digits = "" 9 | for c in text: 10 | if c in "0123456789": 11 | digits += c 12 | return int(digits) 13 | 14 | 15 | def ramproc(): 16 | file = open("/proc/meminfo").read().split("\n") 17 | 18 | total = isolate_num(file[0]) 19 | used = total - isolate_num(file[2]) # uses memavaiable line 20 | perc = round((used / total) * 100) 21 | return perc 22 | 23 | 24 | def ramproc2(): 25 | file = open("/proc/meminfo").read().split("\n") 26 | 27 | total = isolate_num(file[0]) 28 | used = total - isolate_num(file[2]) # uses memavaiable line 29 | return "Ram Usage:
{}/{}".format(used, total) 30 | 31 | 32 | # Test the module 33 | if __name__ == "__main__": 34 | while True: 35 | print(ramproc2()) 36 | print(ramproc()) 37 | time.sleep(1) 38 | -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Color/__init__.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | 4 | 5 | def load(manager, params): 6 | """ 7 | Launch a Colour Picker dialog to change the desktop background color. 8 | """ 9 | 10 | # default position 11 | pos = (100, 100) 12 | 13 | if params is not None and len(params) > 0: 14 | pos = params[0] 15 | 16 | pygame_gui.windows.UIColourPickerDialog( 17 | rect=pygame.Rect(pos, (600, 400)), 18 | manager=manager, 19 | window_title="Set Background Color", 20 | object_id="#desktop_colour_picker", 21 | ) 22 | -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Image/Big Flower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/tools/Background Image/Big Flower.jpg -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Image/Fallen Log.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/tools/Background Image/Fallen Log.jpg -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Image/Flower Field.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/tools/Background Image/Flower Field.jpg -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Image/The Moon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/apps/tools/Background Image/The Moon.jpg -------------------------------------------------------------------------------- /snakewm/apps/tools/Background Image/__init__.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import pygame_gui 3 | import os 4 | 5 | 6 | def load(manager, params): 7 | """ 8 | Launch a file dialog to change the desktop background. 9 | """ 10 | 11 | # default position 12 | pos = (30, 30) 13 | 14 | if params is not None and len(params) > 0: 15 | pos = params[0] 16 | 17 | pygame_gui.windows.UIFileDialog( 18 | rect=pygame.Rect(pos, (600, 400)), 19 | manager=manager, 20 | window_title="Set Background Image", 21 | initial_file_path=os.path.dirname(os.path.realpath(__file__)), 22 | object_id="#background_picker", 23 | ) 24 | -------------------------------------------------------------------------------- /snakewm/apps/tools/snakecalc/__init__.py: -------------------------------------------------------------------------------- 1 | from .calc import SnakeCalc 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create and launch a new instance of SnakeCalc. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeCalc(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/tools/snaketerm/__init__.py: -------------------------------------------------------------------------------- 1 | from .term import SnakeTerm 2 | 3 | 4 | def load(manager, params): 5 | """ 6 | Create an launch a new instance of SnakeTerm. 7 | """ 8 | # default position 9 | pos = (100, 100) 10 | 11 | if params is not None and len(params) > 0: 12 | pos = params[0] 13 | 14 | SnakeTerm(pos, manager) 15 | -------------------------------------------------------------------------------- /snakewm/apps/tools/snaketerm/default_hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "ctrl" : { 3 | "l" : "clear_text", 4 | "left" : "jump_left", 5 | "right" : "jump_right", 6 | "backspace" : "jump_backspace" 7 | } 8 | } -------------------------------------------------------------------------------- /snakewm/apps/tools/snaketerm/user_hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "ctrl" : { 3 | "l" : "clear_text", 4 | "left" : "jump_left", 5 | "right" : "jump_right", 6 | "backspace" : "jump_backspace" 7 | } 8 | } -------------------------------------------------------------------------------- /snakewm/snakebg/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/snakebg/__init__.py -------------------------------------------------------------------------------- /snakewm/snakebg/backgrounds/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshiemoore/snakeware/a5fdac4d5c2298e889eb32824ac01d1d04dd02af/snakewm/snakebg/backgrounds/__init__.py -------------------------------------------------------------------------------- /snakewm/snakebg/backgrounds/fade.py: -------------------------------------------------------------------------------- 1 | """ 2 | Fading color background for SnakeBG 3 | 4 | Joshua Moore 2020 5 | """ 6 | 7 | FCOLOR_R = 0 8 | FCOLOR_G = 0 9 | FCOLOR_B = 0 10 | FCOLOR_STEP = 1 11 | 12 | 13 | def drawbg(surface): 14 | global FCOLOR_R 15 | global FCOLOR_G 16 | global FCOLOR_B 17 | global FCOLOR_STEP 18 | 19 | surface.fill((FCOLOR_R, FCOLOR_G, FCOLOR_B)) 20 | 21 | if FCOLOR_STEP > 0: 22 | if FCOLOR_R < 255: 23 | FCOLOR_R = FCOLOR_R + FCOLOR_STEP 24 | elif FCOLOR_G < 255: 25 | FCOLOR_G = FCOLOR_G + FCOLOR_STEP 26 | elif FCOLOR_B < 255: 27 | FCOLOR_B = FCOLOR_B + FCOLOR_STEP 28 | else: 29 | FCOLOR_STEP = -FCOLOR_STEP 30 | elif FCOLOR_STEP < 0: 31 | if FCOLOR_R > 0: 32 | FCOLOR_R = FCOLOR_R + FCOLOR_STEP 33 | elif FCOLOR_G > 0: 34 | FCOLOR_G = FCOLOR_G + FCOLOR_STEP 35 | elif FCOLOR_B > 0: 36 | FCOLOR_B = FCOLOR_B + FCOLOR_STEP 37 | else: 38 | FCOLOR_STEP = -FCOLOR_STEP 39 | -------------------------------------------------------------------------------- /snakewm/snakebg/bg.py: -------------------------------------------------------------------------------- 1 | """ 2 | SnakeBG - dynamic backgrounds for SnakeWM! 3 | 4 | Joshua Moore 2020 5 | """ 6 | 7 | import importlib 8 | 9 | 10 | class SnakeBG: 11 | # reference to the imported background 12 | _BG = None 13 | 14 | def __init__(self, bgname, testmode): 15 | bgmod = "snakebg.backgrounds." + bgname 16 | if not testmode: 17 | bgmod = "snakewm." + bgmod 18 | 19 | # actually import the background 20 | self._BG = importlib.import_module(bgmod) 21 | 22 | def draw(self, surface): 23 | # draw the background if the _BG module is set 24 | if self._BG is None: 25 | return 26 | 27 | self._BG.drawbg(surface) 28 | -------------------------------------------------------------------------------- /snakewm/snakebg/bgmenu.py: -------------------------------------------------------------------------------- 1 | """ 2 | Background picker menu for SnakeBG 3 | 4 | Joshua Moore 2020 5 | """ 6 | 7 | import os 8 | 9 | import pygame 10 | import pygame_gui 11 | 12 | from pygame_gui.elements import UIWindow 13 | from pygame_gui.elements import UIButton 14 | 15 | 16 | class SnakeBGMenu(UIWindow): 17 | # size of each menu button 18 | BSIZE = (200, 20) 19 | 20 | def __init__(self, manager): 21 | # load bg module names 22 | bgdir = os.path.dirname(os.path.abspath(__file__)) + "/backgrounds/" 23 | self.BGLIST = [] 24 | for f in os.listdir(bgdir): 25 | if "__" in f or ".pyc" in f: 26 | continue 27 | self.BGLIST.append(f.split(".")[0]) 28 | self.BGLIST = sorted(self.BGLIST) 29 | 30 | # create window 31 | super().__init__( 32 | pygame.Rect( 33 | (100, 100), (self.BSIZE[0] + 32, self.BSIZE[1] * len(self.BGLIST)) 34 | ), 35 | manager=manager, 36 | window_display_title="SnakeBG", 37 | object_id="#bgmenu", 38 | resizable=False, 39 | ) 40 | 41 | # add buttons 42 | for i in range(len(self.BGLIST)): 43 | UIButton( 44 | relative_rect=pygame.Rect((0, self.BSIZE[1] * i), self.BSIZE), 45 | text=self.BGLIST[i], 46 | manager=manager, 47 | container=self, 48 | parent_element=self, 49 | object_id=self.BGLIST[i], 50 | ) 51 | --------------------------------------------------------------------------------