├── flore1 ├── engine_locals │ ├── gameFilesHandler.py │ ├── engine_consts │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-37.pyc │ │ │ └── ansiRGB.cpython-37.pyc │ │ └── ansiRGB.py │ ├── engine_assets_lib │ │ └── logo.png │ ├── __pycache__ │ │ ├── refresh.cpython-37.pyc │ │ ├── scene.cpython-37.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── flipbook.cpython-37.pyc │ │ ├── textAsset.cpython-37.pyc │ │ ├── cacheHandler.cpython-37.pyc │ │ ├── inputHandler.cpython-37.pyc │ │ ├── textSprite.cpython-37.pyc │ │ ├── util_functions.cpython-37.pyc │ │ ├── gameFilesHandler.cpython-37.pyc │ │ └── pictureConverter.cpython-37.pyc │ ├── __init__.py │ ├── textSprite.py │ ├── flipbook.py │ ├── inputHandler.py │ ├── textAsset.py │ ├── refresh.py │ ├── pictureConverter.py │ ├── scene.py │ └── util_functions.py ├── __pycache__ │ ├── flore1.cpython-37.pyc │ ├── util.cpython-37.pyc │ ├── __init__.cpython-37.pyc │ └── ansiRGB.cpython-37.pyc └── __init__.py ├── MANIFEST.in ├── demos ├── tutorial4 │ ├── tutorial4_assets │ │ └── explosion │ │ │ ├── frame0000.png │ │ │ ├── frame0001.png │ │ │ ├── frame0002.png │ │ │ ├── frame0003.png │ │ │ ├── frame0004.png │ │ │ ├── frame0005.png │ │ │ ├── frame0006.png │ │ │ ├── frame0007.png │ │ │ ├── frame0008.png │ │ │ ├── frame0009.png │ │ │ ├── frame0010.png │ │ │ ├── frame0011.png │ │ │ ├── frame0012.png │ │ │ ├── frame0013.png │ │ │ ├── frame0014.png │ │ │ ├── frame0015.png │ │ │ ├── frame0016.png │ │ │ ├── frame0017.png │ │ │ ├── frame0018.png │ │ │ ├── frame0019.png │ │ │ ├── frame0020.png │ │ │ ├── frame0021.png │ │ │ ├── frame0022.png │ │ │ ├── frame0023.png │ │ │ ├── frame0024.png │ │ │ ├── frame0025.png │ │ │ ├── frame0026.png │ │ │ ├── frame0027.png │ │ │ ├── frame0028.png │ │ │ ├── frame0029.png │ │ │ ├── frame0030.png │ │ │ ├── frame0031.png │ │ │ ├── frame0032.png │ │ │ ├── frame0033.png │ │ │ ├── frame0034.png │ │ │ ├── frame0035.png │ │ │ ├── frame0036.png │ │ │ ├── frame0037.png │ │ │ ├── frame0038.png │ │ │ ├── frame0039.png │ │ │ ├── frame0040.png │ │ │ ├── frame0041.png │ │ │ ├── frame0042.png │ │ │ ├── frame0043.png │ │ │ ├── frame0044.png │ │ │ ├── frame0045.png │ │ │ ├── frame0046.png │ │ │ ├── frame0047.png │ │ │ ├── frame0048.png │ │ │ ├── frame0049.png │ │ │ ├── frame0050.png │ │ │ ├── frame0051.png │ │ │ ├── frame0052.png │ │ │ ├── frame0053.png │ │ │ ├── frame0054.png │ │ │ ├── frame0055.png │ │ │ ├── frame0056.png │ │ │ ├── frame0057.png │ │ │ ├── frame0058.png │ │ │ ├── frame0059.png │ │ │ ├── frame0060.png │ │ │ ├── frame0061.png │ │ │ ├── frame0062.png │ │ │ └── frame0063.png │ └── tutorial4.py ├── reddit demo │ ├── reddit_demo_assets │ │ ├── credit │ │ │ └── w pandelis.png │ │ ├── wiz │ │ │ ├── frame_0_delay-0.07s.png │ │ │ ├── frame_1_delay-0.07s.png │ │ │ ├── frame_2_delay-0.07s.png │ │ │ ├── frame_3_delay-0.07s.png │ │ │ ├── frame_4_delay-0.07s.png │ │ │ ├── frame_5_delay-0.07s.png │ │ │ ├── frame_6_delay-0.07s.png │ │ │ └── frame_7_delay-0.07s.png │ │ └── floppy_disk │ │ │ ├── frame_0_delay-0.07s.png │ │ │ ├── frame_1_delay-0.07s.png │ │ │ ├── frame_2_delay-0.07s.png │ │ │ ├── frame_3_delay-0.07s.png │ │ │ ├── frame_4_delay-0.07s.png │ │ │ └── frame_5_delay-0.07s.png │ └── reddit_demo.py ├── keyboard demo 1 │ ├── keyboard_demo_1_assets │ │ ├── blue flame │ │ │ ├── tile001.png │ │ │ ├── tile002.png │ │ │ ├── tile003.png │ │ │ ├── tile004.png │ │ │ ├── tile005.png │ │ │ ├── tile006.png │ │ │ ├── tile007.png │ │ │ ├── tile008.png │ │ │ ├── tile009.png │ │ │ ├── tile010.png │ │ │ ├── tile011.png │ │ │ ├── tile012.png │ │ │ ├── tile013.png │ │ │ ├── tile014.png │ │ │ ├── tile015.png │ │ │ ├── tile016.png │ │ │ ├── tile017.png │ │ │ ├── tile018.png │ │ │ ├── tile019.png │ │ │ ├── tile020.png │ │ │ ├── tile021.png │ │ │ ├── tile022.png │ │ │ ├── tile023.png │ │ │ ├── tile024.png │ │ │ ├── tile025.png │ │ │ ├── tile026.png │ │ │ ├── tile027.png │ │ │ ├── tile028.png │ │ │ ├── tile029.png │ │ │ ├── tile030.png │ │ │ ├── tile031.png │ │ │ ├── tile032.png │ │ │ ├── tile033.png │ │ │ ├── tile034.png │ │ │ ├── tile035.png │ │ │ ├── tile036.png │ │ │ ├── tile037.png │ │ │ ├── tile038.png │ │ │ ├── tile039.png │ │ │ ├── tile040.png │ │ │ ├── tile041.png │ │ │ ├── tile042.png │ │ │ ├── tile043.png │ │ │ ├── tile044.png │ │ │ ├── tile045.png │ │ │ ├── tile046.png │ │ │ ├── tile047.png │ │ │ ├── tile048.png │ │ │ ├── tile049.png │ │ │ ├── tile050.png │ │ │ ├── tile051.png │ │ │ ├── tile052.png │ │ │ ├── tile053.png │ │ │ ├── tile054.png │ │ │ ├── tile055.png │ │ │ ├── tile056.png │ │ │ ├── tile057.png │ │ │ ├── tile058.png │ │ │ ├── tile059.png │ │ │ ├── tile060.png │ │ │ ├── tile061.png │ │ │ ├── tile062.png │ │ │ ├── tile063.png │ │ │ ├── tile064.png │ │ │ ├── tile065.png │ │ │ ├── tile066.png │ │ │ ├── tile067.png │ │ │ ├── tile068.png │ │ │ ├── tile069.png │ │ │ ├── tile070.png │ │ │ ├── tile071.png │ │ │ ├── tile072.png │ │ │ ├── tile073.png │ │ │ └── tile074.png │ │ └── explosion │ │ │ ├── frame0000.png │ │ │ ├── frame0001.png │ │ │ ├── frame0002.png │ │ │ ├── frame0003.png │ │ │ ├── frame0004.png │ │ │ ├── frame0005.png │ │ │ ├── frame0006.png │ │ │ ├── frame0007.png │ │ │ ├── frame0008.png │ │ │ ├── frame0009.png │ │ │ ├── frame0010.png │ │ │ ├── frame0011.png │ │ │ ├── frame0012.png │ │ │ ├── frame0013.png │ │ │ ├── frame0014.png │ │ │ ├── frame0015.png │ │ │ ├── frame0016.png │ │ │ ├── frame0017.png │ │ │ ├── frame0018.png │ │ │ ├── frame0019.png │ │ │ ├── frame0020.png │ │ │ ├── frame0021.png │ │ │ ├── frame0022.png │ │ │ ├── frame0023.png │ │ │ ├── frame0024.png │ │ │ ├── frame0025.png │ │ │ ├── frame0026.png │ │ │ ├── frame0027.png │ │ │ ├── frame0028.png │ │ │ ├── frame0029.png │ │ │ ├── frame0030.png │ │ │ ├── frame0031.png │ │ │ ├── frame0032.png │ │ │ ├── frame0033.png │ │ │ ├── frame0034.png │ │ │ ├── frame0035.png │ │ │ ├── frame0036.png │ │ │ ├── frame0037.png │ │ │ ├── frame0038.png │ │ │ ├── frame0039.png │ │ │ ├── frame0040.png │ │ │ ├── frame0041.png │ │ │ ├── frame0042.png │ │ │ ├── frame0043.png │ │ │ ├── frame0044.png │ │ │ ├── frame0045.png │ │ │ ├── frame0046.png │ │ │ ├── frame0047.png │ │ │ ├── frame0048.png │ │ │ ├── frame0049.png │ │ │ ├── frame0050.png │ │ │ ├── frame0051.png │ │ │ ├── frame0052.png │ │ │ ├── frame0053.png │ │ │ ├── frame0054.png │ │ │ ├── frame0055.png │ │ │ ├── frame0056.png │ │ │ ├── frame0057.png │ │ │ ├── frame0058.png │ │ │ ├── frame0059.png │ │ │ ├── frame0060.png │ │ │ ├── frame0061.png │ │ │ ├── frame0062.png │ │ │ └── frame0063.png │ └── keyboard_demo_1.py └── twitch │ ├── away.py │ ├── break.py │ └── rec.py ├── .gitignore ├── setup.py ├── README.md └── LICENSE /flore1/engine_locals/gameFilesHandler.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include flore1/engine_locals/engine_assets_lib/*.png 2 | -------------------------------------------------------------------------------- /flore1/engine_locals/engine_consts/__init__.py: -------------------------------------------------------------------------------- 1 | from .ansiRGB import ANSI_RGB 2 | -------------------------------------------------------------------------------- /flore1/__pycache__/flore1.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/__pycache__/flore1.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/__pycache__/util.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/__pycache__/util.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/__pycache__/ansiRGB.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/__pycache__/ansiRGB.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/engine_assets_lib/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/engine_assets_lib/logo.png -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/refresh.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/refresh.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/scene.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/scene.cpython-37.pyc -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0000.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0001.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0002.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0003.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0004.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0005.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0006.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0007.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0008.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0009.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0010.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0011.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0012.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0013.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0014.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0015.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0016.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0017.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0018.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0019.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0020.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0021.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0022.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0023.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0024.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0025.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0026.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0027.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0028.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0029.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0030.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0031.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0032.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0033.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0034.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0035.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0036.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0037.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0038.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0039.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0040.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0041.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0042.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0043.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0044.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0045.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0046.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0047.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0048.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0049.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0050.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0051.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0052.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0053.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0054.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0055.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0056.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0057.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0058.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0059.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0060.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0061.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0062.png -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4_assets/explosion/frame0063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/tutorial4/tutorial4_assets/explosion/frame0063.png -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/flipbook.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/flipbook.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/textAsset.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/textAsset.cpython-37.pyc -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/credit/w pandelis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/credit/w pandelis.png -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/cacheHandler.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/cacheHandler.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/inputHandler.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/inputHandler.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/textSprite.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/textSprite.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/util_functions.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/util_functions.cpython-37.pyc -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_0_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_0_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_1_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_1_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_2_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_2_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_3_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_3_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_4_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_4_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_5_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_5_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_6_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_6_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/wiz/frame_7_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/wiz/frame_7_delay-0.07s.png -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/gameFilesHandler.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/gameFilesHandler.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/__pycache__/pictureConverter.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/__pycache__/pictureConverter.cpython-37.pyc -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile001.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile002.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile003.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile004.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile005.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile006.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile007.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile008.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile009.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile010.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile011.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile012.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile013.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile014.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile015.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile016.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile017.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile018.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile019.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile020.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile021.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile022.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile023.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile024.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile025.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile026.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile027.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile028.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile029.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile030.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile031.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile032.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile033.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile034.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile035.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile036.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile037.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile038.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile039.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile040.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile041.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile042.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile043.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile044.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile045.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile046.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile047.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile048.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile049.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile050.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile051.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile052.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile053.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile054.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile055.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile056.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile057.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile058.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile059.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile060.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile061.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile062.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile063.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile064.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile065.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile066.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile067.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile068.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile069.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile070.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile071.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile072.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile073.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/blue flame/tile074.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /assets/* 2 | /build/* 3 | /dist/* 4 | /flore1.egg-info/* 5 | /twitch/* 6 | /__flore1cache__/* 7 | /demos/* 8 | /palette/* 9 | /test/* 10 | /twitch/* 11 | /.vs/* 12 | main.py -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0000.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0001.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0002.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0003.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0004.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0005.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0006.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0007.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0008.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0009.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0010.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0011.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0012.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0013.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0014.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0015.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0016.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0017.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0018.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0019.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0020.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0021.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0022.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0023.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0024.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0025.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0026.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0027.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0028.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0029.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0030.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0031.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0032.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0033.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0034.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0035.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0036.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0037.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0038.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0039.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0040.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0041.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0042.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0043.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0044.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0045.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0046.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0047.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0048.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0049.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0050.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0051.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0052.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0053.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0054.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0055.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0056.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0057.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0058.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0059.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0060.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0061.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0062.png -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/keyboard demo 1/keyboard_demo_1_assets/explosion/frame0063.png -------------------------------------------------------------------------------- /flore1/engine_locals/engine_consts/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/engine_consts/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /flore1/engine_locals/engine_consts/__pycache__/ansiRGB.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/flore1/engine_locals/engine_consts/__pycache__/ansiRGB.cpython-37.pyc -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_0_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_0_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_1_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_1_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_2_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_2_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_3_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_3_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_4_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_4_delay-0.07s.png -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo_assets/floppy_disk/frame_5_delay-0.07s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AnicetNgrt/flore1/HEAD/demos/reddit demo/reddit_demo_assets/floppy_disk/frame_5_delay-0.07s.png -------------------------------------------------------------------------------- /flore1/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: __init__.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | name = "flore1" 8 | 9 | """ 10 | Importing the engine's source 11 | """ 12 | 13 | from .engine_locals import * 14 | -------------------------------------------------------------------------------- /flore1/engine_locals/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: engine_locals/__init__.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | from .flipbook import Flipbook 8 | from .inputHandler import InputHandler 9 | from .refresh import Refresh 10 | from .scene import Scene 11 | from .textAsset import TextAsset 12 | from .textSprite import TextSprite 13 | from .pictureConverter import PictureConverter 14 | from .util_functions import * 15 | -------------------------------------------------------------------------------- /demos/tutorial4/tutorial4.py: -------------------------------------------------------------------------------- 1 | import flore1 2 | 3 | Graphics = flore1.Graphics(auto_scale=True, win_mode=False) 4 | Refresh = flore1.Refresh(fps=60) 5 | 6 | Scene = Graphics.new_scene('main', res_x=100, res_y=100, coord_x=1, coord_y=1, layer_count=10) 7 | 8 | explosion_sprt = Graphics.new_sprite() 9 | explosion_fb = flore1.Flipbook(Graphics, Refresh, explosion_sprt, path='assets/explosion/', size=[100, 100], transparent_rgb=(0, 0, 0), fps=60, sync=True) 10 | Scene.put(explosion_sprt, 1, 1, 3) 11 | explosion_fb.start() 12 | 13 | Refresh.feed(Scene.show,*(),**{}) 14 | 15 | while True: 16 | Refresh.run() 17 | -------------------------------------------------------------------------------- /demos/twitch/away.py: -------------------------------------------------------------------------------- 1 | from flore1 import * 2 | import time 3 | 4 | bm = [ 5 | "fc:75" 6 | " ::: ::: ::: ::: ::: :::", 7 | " :+: :+: :+: :+: :+: :+: :+: :+:", 8 | " +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+", 9 | " +#++:++#++: +#+ +:+ +#+ +#++:++#++: +#++:", 10 | " +#+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+", 11 | " #+# #+# #+#+# #+#+# #+# #+# #+#", 12 | "### ### ### ### ### ### ###" 13 | ] 14 | 15 | ta = TextAsset(bm) 16 | sp = TextSprite(asset=ta) 17 | scene = Scene(1, 1, 50, 22, 10) 18 | 19 | scene.put(sp, 20, 6, 1) 20 | 21 | print_crd("See you soon...", 30, 15) 22 | 23 | scene.show() 24 | 25 | time.sleep(25) 26 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import setuptools 2 | 3 | setuptools.setup( 4 | include_package_data=True, 5 | name="flore1", 6 | version="1.5.4", 7 | author="Anicet Nougaret", 8 | author_email="anicet.nougaret@zohomail.eu", 9 | description="The first 2D python game engine rendering in the terminal.", 10 | url="https://github.com/AnicetNgrt/flore1", 11 | packages=setuptools.find_packages(), 12 | install_requires=[ 13 | 'pillow', 14 | 'keyboard', 15 | 'clipboard' 16 | ], 17 | classifiers=[ 18 | "Development Status :: 2 - Pre-Alpha", 19 | "Programming Language :: Python :: 3", 20 | "Environment :: Console :: Curses", 21 | "Intended Audience :: Developers" 22 | ], 23 | python_requires=' >= 3.7', 24 | ) 25 | -------------------------------------------------------------------------------- /demos/twitch/break.py: -------------------------------------------------------------------------------- 1 | from flore1 import * 2 | import time 3 | 4 | bm = [ 5 | "fc:160", 6 | "@@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@ @@@ @@@", 7 | "@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@", 8 | "@@! @@@ @@! @@@ @@! @@! @@@ @@! !@@", 9 | "!@ @!@ !@! @!@ !@! !@! @!@ !@! @!!", 10 | "@!@!@!@ @!@!!@! @!!!:! @!@!@!@! @!@@!@! ", 11 | "!!: !!! !!: :!! !!: !!: !!! !!: :!! ", 12 | ":!: !:! :!: !:! :!: :!: !:! :!: !:!", 13 | " :: :::: :: ::: :: :::: :: ::: :: :::", 14 | ":: : :: : : : : :: :: : : : : :::" 15 | ] 16 | 17 | ta = TextAsset(bm) 18 | sp = TextSprite(asset=ta) 19 | scene = Scene(1, 1, 50, 22, 10) 20 | scene.put(sp, 24, 2, 1) 21 | 22 | bm2 = [ 23 | "fc:214", 24 | " _ _ _ ", 25 | " ___ |_| ___ | |_ | |_ ___ ___ _ _ _ ", 26 | " | _|| || . || || _| | || . || | | | ", 27 | " |_| |_||_ ||_|_||_| |_|_||___||_____| ", 28 | " |___| cc:0" 29 | ] 30 | ta2 = TextAsset(bm2) 31 | sp2 = TextSprite(asset=ta2) 32 | scene.put(sp2, 24, 12, 1) 33 | 34 | print_crd("Coming back soon...", 30, 20) 35 | 36 | scene.show() 37 | 38 | time.sleep(25) 39 | -------------------------------------------------------------------------------- /flore1/engine_locals/textSprite.py: -------------------------------------------------------------------------------- 1 | """///////////////////////// 2 | /// 3 | /// File: TEXTASSET/TEXTSPRITE/textSprite.py 4 | /// Author: Anicet Nougaret 5 | /// QuickDesc: The Text Asset's "text sprite" subclass 6 | /// License: CC BY-SA (see FLORE1/license.txt) 7 | /// 8 | /////////////////////////""" 9 | 10 | 11 | # ------------------------------------------------------------ 12 | # ------------------ TextSprite Class --------------------- 13 | # ------------------------------------------------------------ 14 | class TextSprite: 15 | def __init__(self, asset=None): 16 | self.x = 0 17 | self.y = 0 18 | self.layer = None 19 | self.scene = None 20 | self.chart = None 21 | self.prtcrd = set() 22 | self.act_prtcrd = set() 23 | 24 | if asset != None: 25 | self.set_asset(asset) 26 | 27 | # ------------------------------------------------------------ 28 | 29 | def set_asset(self,asset): 30 | self.chart = asset.chart 31 | 32 | if self.scene != None: 33 | self.scene.frame_event = True 34 | 35 | if (int(self.x) != 0 or int(self.y) != 0) and asset.prtcrd != self.prtcrd: 36 | self.prtcrd = asset.prtcrd.copy() 37 | self.act_prtcrd = set() 38 | 39 | if self.scene != None: 40 | for px in self.prtcrd: 41 | x, y = px 42 | 43 | if 0 < x + int(self.x) < self.scene.res_x and 0 < y + int(self.y) < self.scene.res_y: 44 | self.act_prtcrd.add((x+int(self.x),y+int(self.y))) 45 | else: 46 | self.prtcrd = set(asset.prtcrd) 47 | # ------------------------------------------------------------ 48 | -------------------------------------------------------------------------------- /demos/twitch/rec.py: -------------------------------------------------------------------------------- 1 | from flore1 import * 2 | import time 3 | 4 | bm = [ 5 | "fc:160_________________________________________", 6 | "_________________________________________", 7 | "__fc:15ª8888888b.fc:160___fc:15ª8888888888fc:160__fc:15ª.d8888b.fc:160____", 8 | "__fc:15ª888fc:160___fc:15ªY88bfc:160_fc:15ª888fc:160________fc:15ªd88Pfc:160__fc:15ªY88bfc:160__", 9 | "__fc:15ª888fc:160____fc:15ª888fc:160_fc:15ª888fc:160________fc:15ª888fc:160____fc:15ª888fc:160__", 10 | "__fc:15ª888fc:160___fc:15ªd88Pfc:160_fc:15ª8888888fc:160____fc:15ª888fc:160__________", 11 | "__fc:15ª8888888P\"fc:160___fc:15ª888fc:160________fc:15ª888fc:160__________", 12 | "__fc:15ª888fc:160_fc:15ªT88bfc:160___fc:15ª888fc:160________fc:15ª888fc:160____fc:15ª888fc:160__", 13 | "__fc:15ª888fc:160__fc:15ªT88bfc:160__fc:15ª888fc:160________fc:15ªY88bfc:160__fc:15ªd88Pfc:160__", 14 | "__fc:15ª888fc:160___fc:15ªT88bfc:160_fc:15ª8888888888fc:160__fc:15ª\"Y8888P\"fc:160____", 15 | "_________________________________________", 16 | "_________________________________________" 17 | ] 18 | 19 | ta = TextAsset(bm) 20 | sp = TextSprite(asset=ta) 21 | scene = Scene(1, 1, 50, 22, 10) 22 | 23 | circle_bm = [ 24 | "fc:160", 25 | "ªªªªªªªªªª_.:nnnnnn:._", 26 | "ªªªªªªª.o%%%%%%%%%%%%%%o.", 27 | "ªªªªª/n%%%%%%%%%%%%%%%%%%n\\", 28 | "ªªªª/%%%%%%%%%%%%%%%%%%%%%%\\", 29 | "ªªª,%%%%%%%%%%%%%%%%%%%%%%%%,", 30 | "ªªª|%%%%%%%%%%%%%%%%%%%%%%%%|", 31 | "ªªª'%%%%%%%%%%%%%%%%%%%%%%%%'", 32 | "ªªªª\\%%%%%%%%%%%%%%%%%%%%%%/", 33 | "ªªªªª\\u%%%%%%%%%%%%%%%%%%u/", 34 | "ªªªªªªª'o%%%%%%%%%%%%%%o'", 35 | "ªªªªªªªªªª\"°~uuuuuu~°\"" 36 | ] 37 | 38 | circle_ta = TextAsset(circle_bm) 39 | circle_sp = TextSprite(asset=circle_ta) 40 | 41 | scene.put(sp, 15, 3, 1) 42 | scene.put(circle_sp, 60, 3, 2) 43 | 44 | print_crd("Live starting soon...", 30, 20) 45 | 46 | scene.show() 47 | 48 | time.sleep(25) 49 | -------------------------------------------------------------------------------- /demos/reddit demo/reddit_demo.py: -------------------------------------------------------------------------------- 1 | import flore1 2 | 3 | Graphics = flore1.Graphics(auto_scale=True, win_mode=False) 4 | Refresh = flore1.Refresh(fps=60) 5 | 6 | Scene = Graphics.new_scene('main', res_x=150, res_y=85, coord_x=10, coord_y=10, layer_count=10) 7 | 8 | username_manual = [ 9 | 'bc:0', 10 | ' fc:15 88 88 dP 88b 88 dP"Yb dP"Yb 8888b. 88 888888 .dP"Y8 888888 888888 db 88 dP', 11 | ' fc:15 88 88 dP 88Yb88 dP Yb dP Yb 8I Yb 88 88__ `Ybo." 88 88__ dPYb 88odP ', 12 | ' fc:15 Y8 8P dP 88 Y88 Yb dP Yb dP 8I dY 88 .o 88"" o.`Y8b 88 88"" dP__Yb 88"Yb ', 13 | ' fc:15 `YbodP\' dP 88 Y8 YbodP YbodP 8888Y" 88ood8 888888 8bodP\' 88 888888 dP""""Yb 88 Yb' 14 | ] 15 | username_asset = Graphics.TextAsset(username_manual) 16 | user_sprt = username_asset.to_sprite() 17 | Scene.put(user_sprt, 1, 65, 4) 18 | 19 | credit_asset = Graphics.pic_to_textAsset(path='reddit_demo_assets/credit/w pandelis.png', new_size=[128, 32], transparent_rgb=(41, 57, 65)) 20 | credit_sprt = credit_asset.to_sprite() 21 | Scene.put(credit_sprt, 1, -260, 5) 22 | 23 | fb_sprt = Graphics.new_sprite() 24 | flipbook = flore1.Flipbook(Graphics, Refresh, fb_sprt, path='reddit_demo_assets/wiz/', size=[128, 64], transparent_rgb=(-1, -1, -1), fps=12, sync=True) 25 | Scene.put(fb_sprt, 1, 1, 2) 26 | flipbook.start() 27 | 28 | fb_sprt_2 = Graphics.new_sprite() 29 | flipbook2 = flore1.Flipbook(Graphics, Refresh, fb_sprt_2, path='reddit_demo_assets/floppy_disk/', size=[60, 60], transparent_rgb=(103, 103, 103), fps=30, sync=False) 30 | Scene.put(fb_sprt_2, 50, 10, 3) 31 | flipbook2.start() 32 | 33 | 34 | def loop(Scene): 35 | if loop.i <= 640: 36 | Scene.put(credit_sprt, 1, -260 + round(loop.i * 0.5), 5) 37 | else: 38 | Scene.put(fb_sprt_2, 50 + round((loop.i - 320) * 0.1), 10, 3) 39 | Scene.show(debug=True) 40 | 41 | 42 | my_loop = (loop, Scene) 43 | Refresh.feed(*my_loop) 44 | 45 | while True: 46 | Refresh.run(debug=True) 47 | -------------------------------------------------------------------------------- /demos/keyboard demo 1/keyboard_demo_1.py: -------------------------------------------------------------------------------- 1 | import flore1 2 | 3 | # You could totally have a JSON settings file for this 4 | profile = { 5 | "start": ['p','enter'], 6 | "pause": ['m','space'], 7 | "up": ['up arrow','z'], 8 | "down": ['down arrow','s'], 9 | "left": ['left arrow','q'], 10 | "right": ['right arrow','d'] 11 | } 12 | 13 | # Engine Initialisation 14 | Input = flore1.InputHandler(keys = profile) 15 | Graphics = flore1.Graphics(auto_scale=True, win_mode=False) 16 | Scene = Graphics.new_scene('main', res_x=100, res_y=100, coord_x=1, coord_y=1, layer_count=10) 17 | Refresh = flore1.Refresh(fps=60) 18 | 19 | # Assets Initialisation 20 | fb = {} 21 | sprt = {} 22 | 23 | sprt["explosion"] = Graphics.new_sprite() 24 | Scene.put(sprt["explosion"], -10, -5, 0) 25 | fb["explosion"] = flore1.Flipbook(Graphics, Refresh, sprt["explosion"], path='keyboard_demo_1_assets/explosion/', size=[100, 100], transparent_rgb=(0, 0, 0), fps=60, sync=True) 26 | fb["explosion"].start() 27 | 28 | sprt["flame"] = Graphics.new_sprite() 29 | Scene.put(sprt["flame"], -10, -5, 1) 30 | fb["flame"] = flore1.Flipbook(Graphics, Refresh, sprt["flame"], path='keyboard_demo_1_assets/blue flame/', size=[100, 100], transparent_rgb=(0, 0, 0), fps=60, sync=True) 31 | fb["flame"].start() 32 | 33 | # Game loop 34 | def loop(Scene, Input, fb, sprt): 35 | speed = 3*(loop.i-loop.last_i) 36 | 37 | if Input.is_pressed("pause"): 38 | fb["explosion"].stop() 39 | fb["flame"].stop() 40 | if Input.is_pressed("start"): 41 | fb["explosion"].start() 42 | fb["flame"].start() 43 | 44 | x = sprt["flame"].x 45 | y = sprt["flame"].y 46 | 47 | if Input.is_pressed("up"): 48 | Scene.put(sprt["flame"], x, y-speed/2, 1) 49 | if Input.is_pressed("down"): 50 | Scene.put(sprt["flame"], x, y+speed/2, 1) 51 | if Input.is_pressed("left"): 52 | Scene.put(sprt["flame"], x-speed, y, 1) 53 | if Input.is_pressed("right"): 54 | Scene.put(sprt["flame"], x+speed, y, 1) 55 | 56 | Scene.show() 57 | 58 | # Running the game 59 | Refresh.feed(loop, *(Scene, Input, fb, sprt), **{}) 60 | 61 | while True: 62 | Refresh.run() 63 | -------------------------------------------------------------------------------- /flore1/engine_locals/engine_consts/ansiRGB.py: -------------------------------------------------------------------------------- 1 | """///////////////////////// 2 | /// 3 | /// File: ansiRGB.py 4 | /// Author: Anicet Nougaret 5 | /// QuickDesc: An array of all the RGB codes of the shell's 255 6 | /// colors in their Id's order. 7 | /// License: CC BY-SA (see FLORE1/license.txt) 8 | /// 9 | /////////////////////////""" 10 | 11 | # I'm so dumb for gathering all of them manually 12 | 13 | ANSI_RGB = [[0,0,0],[199,30,18],[0,193,32],[199,195,39],[10,47,196],[200,57,197],[1,197,198],[199,199,199],[104,104,104],[255,111,107],[103,248,111],[255,250,114],[106,118,253],[255,124,253],[104,253,254],[255,255,255],[0,0,0],[2,17,93],[4,28,133],[7,40,172],[12,51,211],[16,63,251],[8,94,11],[10,95,95],[11,96,133],[13,97,173],[15,99,212],[18,101,251],[17,134,20],[18,134,96],[18,135,134],[20,136,173],[21,137,212],[23,138,251],[25,173,29],[26,174,98],[26,174,136],[27,175,174],[28,175,213],[30,176,252],[33,213,38],[34,213,101],[34,214,137],[35,214,175],[36,215,214],[37,215,253],[42,247,45],[42,247,103],[42,248,139],[43,249,177],[44,251,215],[45,252,254],[94,9,4],[94,22,94],[94,32,133],[94,43,172],[95,53,212],[95,64,251],[95,94,14],[95,95,95],[95,96,134],[95,97,173],[96,99,212],[96,101,251],[96,134,22],[96,134,96],[96,135,135],[97,136,173],[97,137,212],[97,138,252],[98,173,30],[98,174,98],[98,174,136],[98,175,174],[98,176,213],[99,177,252],[100,213,39],[100,213,101],[100,214,138],[100,214,176],[101,215,214],[101,215,253],[103,247,46],[103,248,104],[103,248,140],[103,250,177],[103,251,215],[104,253,254],[133,17,9],[133,27,94],[134,36,133],[134,45,173],[134,56,212],[134,66,251],[134,94,18],[134,95,96],[134,96,134],[134,97,173],[135,99,212],[135,101,251],[135,134,25],[135,134,97],[135,135,135],[135,136,174],[135,137,213],[136,138,252],[136,173,32],[136,174,99],[136,174,136],[136,175,175],[136,176,213],[137,177,252],[137,213,40],[137,213,102],[138,214,138],[138,214,176],[138,215,214],[138,216,253],[139,247,48],[139,248,104],[139,249,140],[139,250,177],[140,251,216],[140,253,254],[173,25,16],[173,33,95],[173,40,134],[173,49,173],[173,59,212],[174,69,251],[173,95,22],[174,95,96],[174,96,135],[174,98,173],[174,99,212],[174,101,252],[174,134,28],[174,135,98],[174,135,136],[174,136,174],[174,137,213],[175,139,252],[175,174,35],[175,174,100],[175,174,137],[175,175,175],[175,176,214],[175,177,253],[176,213,43],[176,213,102],[176,214,139],[176,214,176],[176,215,215],[176,216,253],[177,248,50],[177,249,105],[177,249,141],[177,250,178],[178,252,216],[178,254,254],[213,33,22],[213,40,96],[213,46,135],[213,54,173],[213,62,212],[213,72,252],[213,95,27],[213,96,97],[213,97,135],[213,98,174],[213,100,213],[213,102,252],[213,134,32],[213,135,99],[213,135,136],[214,136,175],[214,137,213],[214,139,252],[214,174,38],[214,174,101],[214,175,138],[214,175,176],[214,176,214],[214,177,253],[215,213,45],[215,214,103],[215,214,139],[215,214,177],[215,215,215],[215,216,254],[216,249,52],[216,249,106],[216,250,141],[216,251,178],[216,252,216],[216,254,255],[252,41,28],[252,47,98],[252,52,136],[252,59,174],[252,67,213],[252,76,252],[252,96,32],[252,96,99],[252,97,136],[253,99,175],[253,100,213],[253,102,252],[253,135,36],[253,135,100],[253,136,137],[253,137,175],[253,138,214],[253,139,253],[253,174,42],[253,174,102],[253,175,138],[253,175,176],[253,176,215],[254,177,253],[254,213,48],[254,214,105],[254,214,140],[254,215,177],[254,215,216],[254,216,254],[254,249,55],[255,250,107],[255,251,142],[255,252,179],[255,253,217],[255,255,255],[8,8,8],[18,18,18],[28,28,28],[38,38,38],[48,48,48],[58,58,58],[68,68,68],[78,78,78],[88,88,88],[98,98,98],[108,108,108],[118,118,118],[128,128,128],[138,138,138],[148,148,148],[158,158,158],[168,168,168],[178,178,178],[188,188,188],[198,198,198],[208,208,208],[218,218,218],[228,228,228],[238,238,238]] 14 | -------------------------------------------------------------------------------- /flore1/engine_locals/flipbook.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: engine_locals/flipbook.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | import math 8 | 9 | class Flipbook: 10 | """The class for TextSprite animation. 11 | 12 | The Flipbook object applies a collection of TextAsset objects to a TextSprite 13 | object one by one at a rythm in order to animate the TextSprite 14 | object. 15 | 16 | Attributes: 17 | Refresh (:obj:''): 18 | The Refresh object that will handle animation speed and speed 19 | stabilization. 20 | asset_list (:obj:'list []'): 21 | Assets list (frames) for the animation. 22 | material (:obj:'tuple (function, *args)'): 23 | Tuple containing the animation's play function and all it's params. 24 | The Flipbook object's Refresh has it added to it's execution stack 25 | for rythmed execution. 26 | """ 27 | 28 | def __init__(self, Refresh, Sprite, assets, fps=24, sync=True): 29 | """Inits the Flipbook object. 30 | 31 | Args: 32 | Refresh (:obj:''): 33 | The Refresh object that will handle animation speed and speed 34 | stabilization. 35 | Sprite (:obj:''): 36 | The TextSprite object which will be animated. 37 | assets (:obj:'list []'): 38 | Assets list (frames) for the animation. 39 | fps (int, optional): 40 | Animation's frame per second goal. Defaults to 24. 41 | sync (bool, optional): 42 | Speed stabilization on/off. Defaults to True. 43 | """ 44 | 45 | self.Refresh = Refresh 46 | self.asset_list = assets 47 | 48 | def play(Sprite, asset_list, fps): 49 | """Animation's function for running in a Refresh object's stack.""" 50 | 51 | if not hasattr(play, "last_frame"): 52 | play.last_frame = -1 53 | if not hasattr(play, "frame"): 54 | play.frame = 0 55 | if not hasattr(play, "speed"): 56 | fps_ratio = play.refresh.fps / fps 57 | if fps_ratio > 1: 58 | play.speed = 1 / fps_ratio 59 | else: 60 | play.speed = fps_ratio 61 | 62 | #print("\033["+str(len(asset_list)-1)+";1H "+("%2s" % str(play.speed))) 63 | #print("\033["+str(len(asset_list))+";1H "+("%2s" % str(play.last_frame))) 64 | 65 | play.frame = play.speed * play.i 66 | crt_frame = math.floor(play.frame) % len(asset_list) 67 | 68 | if crt_frame != play.last_frame: 69 | Sprite.set_asset(asset_list[crt_frame]) 70 | 71 | play.last_frame = crt_frame 72 | 73 | play.sync = sync 74 | self.material = (play, Sprite, self.asset_list, fps) 75 | 76 | # ------------------------------------------------------------ 77 | 78 | def start(self): 79 | """Starts the animation from where it stopped last time""" 80 | 81 | if not self.Refresh.is_fed_with(*self.material): 82 | self.Refresh.feed(*self.material) 83 | return True 84 | else: 85 | return False 86 | 87 | # ------------------------------------------------------------ 88 | 89 | def stop(self): 90 | """Stops the animation""" 91 | 92 | if self.Refresh.is_fed_with(*self.material): 93 | self.Refresh.terminate(*self.material) 94 | return True 95 | else: 96 | return False 97 | # ------------------------------------------------------------ 98 | -------------------------------------------------------------------------------- /flore1/engine_locals/inputHandler.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: engine_locals/flipbook.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | import keyboard 8 | """Module for handling keyboard inputs""" 9 | 10 | import time 11 | import sys 12 | 13 | class InputHandler: 14 | """The class for game input handling and keyboard profiles handling 15 | 16 | The InputHandler object can compare user inputs and the game's keyboard controls 17 | profile in order to modify the keyboard profile, detect actions intended by the 18 | player and handling actions delays. 19 | 20 | Attributes: 21 | keys (:obj:'dict |str: list[str]|'): 22 | A dictionnary of all the different actions for the user with all 23 | their corresponding keys. 24 | delays (:obj:'dict |str: int|): 25 | A dictionnary of all the different actions for the users with their 26 | repeat delay. 27 | 28 | The '__default__' entry of this dictionnary lets you set a default delay 29 | for all the actions you didn't added to the delays dict. 30 | """ 31 | 32 | def __init__(self, keys={}, delays={}): 33 | """Inits the InputHandler object. 34 | 35 | Args: 36 | keys (:obj:'dict |str: list[str]|', optional): 37 | A dictionnary of all the different actions for the user with all 38 | their corresponding keys. Defaults to empty dict. 39 | delays (:obj:'dict |str: int|, optional): 40 | A dictionnary of all the different actions for the users with their 41 | repeat delay. Defaults to empty dict. 42 | 43 | The '__default__' entry of this dictionnary lets you set a default delay 44 | for all the actions you didn't added to the delays dict. 45 | """ 46 | 47 | self.delays = delays 48 | if not ("__default__" in self.delays): 49 | self.delays["__default__"] = 0.1 50 | self.keys = keys 51 | self.last = { 52 | "name": None, 53 | "delay": 0, 54 | "time": time.time() 55 | } 56 | 57 | # ------------------------------------------------------------ 58 | 59 | def user_set_key(self, name): 60 | """Records a hotkey from the keyboard and adds it for a specified action. 61 | 62 | Args: 63 | name (str): Name of the action to add a key to. 64 | """ 65 | try: 66 | self.keys[name].append(keyboard.read_hotkey(suppress=True)) 67 | except: 68 | pass 69 | 70 | # ------------------------------------------------------------ 71 | 72 | def del_key(self, name, key): 73 | """Removes one key for an action. 74 | 75 | Args: 76 | name (str): Name of the action. 77 | key (str): Name of the key. 78 | """ 79 | try: 80 | self.keys[name].remove(key) 81 | except: 82 | pass 83 | 84 | # ------------------------------------------------------------ 85 | 86 | def is_pressed(self, name): 87 | """Tells if an action has one of its corresponding keys pressed. 88 | 89 | Note: 90 | Takes input delays into account. 91 | 92 | Args: 93 | name (str): Name of the action to check. 94 | 95 | Returns: 96 | True if one of the correspinding keys is pressed, False otherwise. 97 | """ 98 | 99 | try: 100 | for key in self.keys[name]: 101 | if keyboard.is_pressed(key): 102 | if self.last["name"] == name and time.time() - self.last["time"] < self.last["delay"]: 103 | return False 104 | self.last["name"] = name 105 | if name in self.delays: 106 | self.last["delay"] = self.delays[name] 107 | else: 108 | self.last["delay"] = self.delays["__default__"] 109 | self.last["time"] = time.time() 110 | return True 111 | except: 112 | pass 113 | 114 | return False 115 | # ------------------------------------------------------------ 116 | -------------------------------------------------------------------------------- /flore1/engine_locals/textAsset.py: -------------------------------------------------------------------------------- 1 | """///////////////////////// 2 | /// 3 | /// File: TEXTASSET/textAsset.py 4 | /// Author: Anicet Nougaret 5 | /// QuickDesc: The Engine's subclass managing text assets 6 | /// License: CC BY-SA (see FLORE1/license.txt) 7 | /// 8 | /////////////////////////""" 9 | 10 | #import time 11 | import os 12 | import sys 13 | 14 | # ------------------------------------------------------------ 15 | # ------------------ UTIL FUNCTIONS --------------------- 16 | # ------------------------------------------------------------ 17 | def represents_int(s): 18 | try: 19 | int(s) 20 | return True 21 | except ValueError: 22 | return False 23 | 24 | # ------------------------------------------------------------ 25 | 26 | def extract_ansi(word, datalock): 27 | if word.startswith("bc:"): 28 | if word[3:] != 256: 29 | datalock["bc"] = "\u001b[48;5;" + word[3:] + "m \b" 30 | else: 31 | datalock["bc"] = None 32 | if datalock["cc"] == "\33[0m \b": 33 | datalock["cc"] = None 34 | return datalock 35 | 36 | if word.startswith("fc:"): 37 | if word[3:] != 256: 38 | datalock["fc"] = "\u001b[38;5;" + word[3:] + "m \b" 39 | else: 40 | datalock["fc"] = None 41 | if datalock["cc"] == "\33[0m \b": 42 | datalock["cc"] = None 43 | return datalock 44 | 45 | if word.startswith("cc:"): 46 | if word[3:] == "0": 47 | datalock["bc"] = None 48 | datalock["fc"] = None 49 | datalock["cc"] = "\33[0m \b" 50 | return datalock 51 | 52 | else: 53 | datalock["cc"] = "\33[" + word[3:] + "m \b" 54 | return datalock 55 | 56 | # ------------------------------------------------------------ 57 | 58 | def is_escape_code(word): 59 | if len(word) > 6: return False 60 | 61 | is_bc = word.startswith("bc:") 62 | is_fc = word.startswith("fc:") 63 | is_cc = word.startswith("cc:") 64 | a = True if is_bc or is_fc or is_cc else False 65 | if a == False: return False 66 | 67 | b = True 68 | 69 | for char in word[3:]: 70 | if represents_int(char) == False: b = False 71 | 72 | if b == False: return False 73 | 74 | if (is_bc or is_fc) and not 0 <= int(word[3:]) <= 256: return False 75 | if (is_cc) and not 0 <= int(word[3:]) <= 1: return False 76 | 77 | return True 78 | # ------------------------------------------------------------ 79 | 80 | 81 | # ------------------------------------------------------------ 82 | # ------------------ TextAsset Class --------------------- 83 | # ------------------------------------------------------------ 84 | class TextAsset: 85 | def __init__(self, building_manual=""): 86 | self.building_manual = building_manual 87 | 88 | if building_manual != "": self.generate_chart() 89 | 90 | # ------------------------------------------------------------ 91 | 92 | def generate_chart(self): 93 | self.chart = {} 94 | self.prtcrd = set() 95 | x = 0 96 | y = 0 97 | self.datalock = {"bc": None, "fc": None, "cc": None} 98 | 99 | for line in self.building_manual: 100 | i = -1 101 | 102 | while i < len(line) - 1: 103 | found_escape = False 104 | i += 1 105 | if line[i] != "ª": 106 | 107 | if i + 6 <= len(line): 108 | if is_escape_code(line[i:i + 6]): 109 | self.datalock = extract_ansi(line[i:i + 6], self.datalock) 110 | i += 5 111 | found_escape = True 112 | 113 | if i + 5 <= len(line) and found_escape == False: 114 | if is_escape_code(line[i:i + 5]): 115 | self.datalock = extract_ansi(line[i:i + 5], self.datalock) 116 | i += 4 117 | found_escape = True 118 | 119 | if i + 4 <= len(line) and found_escape == False: 120 | if is_escape_code(line[i:i + 4]): 121 | self.datalock = extract_ansi(line[i:i + 4], self.datalock) 122 | i += 3 123 | found_escape = True 124 | 125 | if found_escape == False: 126 | char = line[i] 127 | self.prtcrd.add((x, y)) 128 | crd = str(x) + "|" + str(y) 129 | self.chart[crd] = (char, self.datalock["bc"], self.datalock["fc"], self.datalock["cc"]) 130 | 131 | if self.datalock["bc"] != None: 132 | pass 133 | #print("\033["+str(y)+";"+str(x)+"H"+self.datalock["bc"]+char) 134 | 135 | x += 1 136 | 137 | else: 138 | x += 1 139 | 140 | x = 0 141 | y += 1 142 | 143 | # ------------------------------------------------------------ 144 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌸 Flore 1 [Not updated anymore] 2 | This is the first **python** 2D-ANSI game engine **rendering in the terminal**. 3 | This library features the engine class itself, along with some utilitary classes for a more efficient use of it. 4 | ``` 5 | pip install flore1 6 | ``` 7 | 8 | # Table of contents: 9 | 10 | 1. [**Features**](#features) 11 | 2. [**Roadmap**](#roadmap) 12 | 3. [**Compatibility**](#compat) 13 | 4. [**Examples**](#examples) 14 | 5. [**Documentation**](#doc) 15 | 6. [**Tools**](#tools) 16 | 7. [**License**](#license) 17 | 18 | # What can it do ? 19 | 20 | #### Graphics: 21 | - Interpret an easy syntax for creating text based sprites with color. 22 | - Convert pictures to text based sprites. 23 | - Manage picture's transparency. 24 | - Create scenes with defined resolution, position and frame rate. 25 | - Render sprites in a scene. 26 | - Move sprites in a scene. 27 | - Convert all the pictures in a directory to a flipbook. 28 | - Display sprites with layers, transparency and depth management. 29 | - Add custom functions to the game loop. 30 | - Sync/unsync the looped functions with render speed (fps stabilisation). 31 | - Play flibook in a scene at a desired frame rate. 32 | 33 | #### Input handling: 34 | - Input profiles for easy key customization 35 | - Tell if one of the actions in the input profile has one of its corresponding key pressed. 36 | - `alt_input()` Alternative to `input()` which is very customizable 37 | - Simultaneous keys / shortcut detection support 38 | # What is planned ? 39 | - `Gradually` Documentation and tutorials 40 | - `Gradually` Quality of life improvements 41 | - `Gradually` Optimization 42 | - `High priority` Mouse handler 43 | - `High priority` UI helper classes 44 | - `Medium priority` Basic server/client fonctionnalities 45 | - `Low priority` Sound management 46 | - `Low priority` Remote SSH rendering 47 | 48 | 49 | # Known compatible terminals 50 | **According to the latest tests**: 51 | 1. `fast` `good rendering` `Windows 10` `CPU`- **cmd.exe** 52 | 2. `fast` `good rendering` `Windows 10` `CPU`- **Powershell** 53 | 3. `fast` `bad rendering` `Windows 10` `GPU`- **new terminal** 54 | 4. `slow` `good rendering` `Linux` `CPU`- **repl.it terminal emulator** 55 | 56 | **Notes**: 57 | - It has great probability of rendering well on any modern terminal which supports the following escapes codes: 58 | ```python 59 | "\033[;H" 60 | "\33[0m" 61 | "\u001b[49;5;m" 62 | "\u001b[39;5;m" 63 | ``` 64 | - Terminals that do not support thoses will never be compatibles. 65 | - Flore1 is not using ncurses 66 | 67 | # Examples 68 | ### ⏳ Refresh example 1 : 69 | #### Description: 70 | Prints `1`, `test` and `3.14` 2 times per second. 71 | #### Code: 72 | ```python 73 | from flore1 import * 74 | 75 | # Creating the Refresh instance 76 | # and initializing its call frequency (fps) 77 | refr = Refresh(fps=2) 78 | 79 | # Function we want to be called 80 | def example(arg1, arg2, arg3='something'): 81 | print(arg1) 82 | print(arg2) 83 | print(arg3) 84 | 85 | # asking to add the function to the calling queue 86 | refr.feed(example, (1, 'test'), {'arg3':3.14}) 87 | # (function, *args, **kwargs) 88 | # How example will be called then: 89 | # example(1, 'test', 3.14) 90 | 91 | # Repeatedly asking the Refresh Instance to 92 | # check if it is time to call all the function 93 | # in its calling queue. 94 | while True: 95 | refr.run() 96 | ``` 97 | # Documentation 98 | Flore1 only features documentation with Google-style docstrings in the code. Markdown documentation is coming soon. 99 | # Tools 100 | - [flore1-paint](https://github.com/AnicetNgrt/flore1-paint) An open source paint software for drawing and animating flore1 TextAssets 101 | 102 | # License 103 | This library is distributed under a CC-BY-SA license: 104 | - You can: 105 | - **Share** — copy and redistribute the material in any medium or format 106 | - **Adapt** — remix, transform, and build upon the material for any purpose, **even commercially.** 107 | - Under the following terms: 108 | - **Attribution** — You must give [appropriate credit](https://creativecommons.org/licenses/by-sa/2.0/fr/deed.en#), provide a link to the license, and [indicate if changes were made](https://creativecommons.org/licenses/by-sa/2.0/fr/deed.en#). You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. 109 | - **ShareAlike** — If you remix, transform, or build upon the material, **you must distribute your contributions under the [same license](https://creativecommons.org/licenses/by-sa/2.0/fr/deed.en#) as the original.** 110 | 111 | #### More info at: https://creativecommons.org/licenses/by-sa/2.0/fr/deed.en 112 | ___ 113 | ### Any kind of collaboration on this project is welcomed ! 114 | 115 | ##### Thanks for reading ! 116 | 117 | 126 | -------------------------------------------------------------------------------- /flore1/engine_locals/refresh.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: engine_locals/refresh.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | import time 8 | 9 | class Refresh: 10 | """Calls, pokes, and times functions for rythmed, frame-aware and frame-synchronized function/methods executions. 11 | 12 | Note: 13 | You need to run the refresh in a loop with little to no latency involved 14 | for it to work properly. 15 | 16 | Example: 17 | from flore1 import * 18 | def example(arg1, arg2, arg3='something'): 19 | print(arg1) 20 | print(arg2) 21 | print(arg3) 22 | 23 | refr = Refresh(fps=2) 24 | refr.feed(example, (1, 'test'), {'arg3':3.14}) 25 | 26 | while True: 27 | refr.run() 28 | 29 | Attributes: 30 | fps (int): 31 | Frames per second goal, or function refresh rythm. 32 | stack: 33 | List of tuples containing functions and their arguments that the 34 | Refresh object has to call. 35 | """ 36 | 37 | def __init__(self, fps=24): 38 | """Inits the Refresh object and all its attributes. 39 | 40 | Args: 41 | fps (int, optional): 42 | Frames per second goal, or function refresh rythm. Defaults to 24. 43 | """ 44 | self.fps = fps 45 | self.pv_i = 0 46 | self.i = 0 47 | self.pv_frame = 0 48 | self.frame = 0 49 | self.stack = [] 50 | 51 | # ------------------------------------------------------------ 52 | 53 | def terminate(self, func, *args, **kwargs): 54 | """Removes a (function, *args, **kwargs) tuple from the Refresh object's execution stack. 55 | 56 | Args: 57 | func (:obj:'function' or :obj:'method'): 58 | Function in the tuple to remove. 59 | ``*args``: 60 | Tuple of args in the tuple to remove. 61 | ``**kwargs``: 62 | Dictionnary of keyworded args in the tuple to remove. 63 | """ 64 | 65 | self.stack.remove((func, args, kwargs)) 66 | 67 | # ------------------------------------------------------------ 68 | 69 | def is_fed_with(self, func, *args, **kwargs): 70 | if (func, args, kwargs) in self.stack: 71 | return True 72 | else: 73 | return False 74 | 75 | # ------------------------------------------------------------ 76 | 77 | def feed(self, func, *args, **kwargs): 78 | """Adds a (function, *args, **kwargs) tuple to the Refresh object's execution stack. 79 | 80 | Args: 81 | func (:obj:'function' or :obj:'method'): 82 | Function in the tuple to add. 83 | ``*args``: 84 | Tuple of args in the tuple to add. 85 | ``**kwargs``: 86 | Dictionnary of keyworded args in the tuple to add. 87 | 88 | Note: 89 | You can set `.sync` to `False` if you don't want your function to 90 | have its speed stabilized. 91 | """ 92 | 93 | self.stack.append((func, args, kwargs)) 94 | 95 | # ------------------------------------------------------------ 96 | 97 | def do(self): 98 | for func, args, kwargs in self.stack: 99 | if hasattr(func, "refresh") == False: 100 | func.__dict__["refresh"] = self 101 | if hasattr(func, "sync") == False: 102 | func.__dict__["sync"] = True 103 | if not hasattr(func, "i"): 104 | func.__dict__["i"] = 0 105 | if not hasattr(func, "last_i"): 106 | func.__dict__["last_i"] = 0 107 | else: 108 | func.__dict__["last_i"] = func.__dict__["i"] 109 | 110 | if func.sync == True and (self.frame-self.pv_frame) > 0: 111 | func.__dict__["i"] += self.frame-self.pv_frame 112 | func(*args, **kwargs) 113 | elif func.sync == False: 114 | func.__dict__["i"] += 1 115 | func(*args, **kwargs) 116 | 117 | 118 | 119 | # ------------------------------------------------------------ 120 | 121 | def run(self, debug=False): 122 | required_fps = self.fps 123 | 124 | start_time = time.time() 125 | 126 | self.do() 127 | 128 | exec_time = time.time() 129 | latency = exec_time - start_time 130 | 131 | if latency < 0.0001: latency = 0.0001 132 | 133 | fps = 1 / latency 134 | 135 | self.pv_frame = self.frame 136 | self.pv_i = self.i 137 | 138 | if fps > required_fps: 139 | time.sleep(((1 / required_fps) - latency)/1.1) 140 | self.i += 1 141 | 142 | if required_fps >= fps: 143 | self.i += required_fps / fps 144 | 145 | self.frame = round(self.i) 146 | #print(self.i) 147 | 148 | if debug: 149 | otp = "\33[0m\033[1;0H| >>>> Refresh.\33[34mrun \33[33mdebug" 150 | print(otp) 151 | 152 | otp = "\033[2;0H\33[0m|\u001b[38;5;15m\u001b[48;5;16m INVERTED_LATENCY_CAP: " 153 | print(otp + str(self.fps)) 154 | 155 | otp = "\33[0m\033[3;0H|\u001b[48;5;16m\u001b[38;5;15m LATENCY: " 156 | print("%s%1.2f " % (otp, latency)) 157 | 158 | otp = "\033[4;0H\33[0m|\u001b[38;5;16m" 159 | if fps >= self.fps: 160 | otp += "\u001b[48;5;85m" 161 | elif self.fps * 0.8 <= fps < self.fps: 162 | otp += "\u001b[48;5;87m" 163 | elif self.fps * 0.5 <= fps < self.fps * 0.8: 164 | otp += "\u001b[48;5;221m" 165 | elif self.fps * 0.2 <= fps < self.fps * 0.5: 166 | otp += "\u001b[48;5;202m" 167 | else: 168 | otp += "\u001b[48;5;9m" 169 | otp += " EXECUTION_FREQUENCY: " 170 | print("%s%1.2f " % (otp, fps)) 171 | 172 | otp = "\33[0m\033[5;0H|\u001b[48;5;16m\u001b[38;5;15m FRAME_DIFF: " 173 | print("%s%1.2f " % (otp, self.frame-self.pv_frame)) 174 | 175 | otp = "\33[0m\033[6;0H|\u001b[48;5;16m\u001b[38;5;15m ACCUMULATOR_DIFF: " 176 | print("%s%1.2f " % (otp, self.i-self.pv_i)) 177 | 178 | final_time = time.time() 179 | total_latency = final_time - start_time 180 | otp = "\33[0m\033[7;0H|\u001b[38;5;15m\u001b[48;5;16m STABILISED_FREQUENCY: " 181 | print("%s%1.2f " % (otp, (self.i - self.pv_i)/total_latency)) 182 | 183 | # ------------------------------------------------------------ 184 | -------------------------------------------------------------------------------- /flore1/engine_locals/pictureConverter.py: -------------------------------------------------------------------------------- 1 | """ 2 | File: engine_locals/pictureConverter.py 3 | Author: Anicet Nougaret 4 | Version: 19.11.2019.A 5 | """ 6 | 7 | import os 8 | 9 | from PIL import Image 10 | """module for image manipulation""" 11 | 12 | # local 13 | from .engine_consts import ANSI_RGB 14 | from .textAsset import TextAsset 15 | 16 | 17 | class PictureConverter: 18 | """Contains methods for converting pictures to TextAssets and caching results.""" 19 | 20 | def __init__(self): 21 | """inits the PictureConverter instance and creates cache's directory.""" 22 | 23 | self._cache_path = os.path.join("__flore1cache__","_pic_cache.jus") 24 | 25 | if not os.path.exists("__flore1cache__"): 26 | os.makedirs("__flore1cache__", exist_ok=True) 27 | 28 | open(self._cache_path, 'a').close() 29 | 30 | with open(self._cache_path, "r+") as f: 31 | if os.path.getsize(self._cache_path) == 0: 32 | f.write(str(dict())) 33 | self._cache = dict() 34 | else: 35 | self._cache = eval(f.read()) 36 | 37 | def pics2assets(self, dir, size="AUTO", alpha=(-1, -1, -1)): 38 | """Converts all pictures in a directory to TextAssets objects an returns them. 39 | 40 | Note: 41 | Converts all the pictures file according their name's lexicographical order. 42 | 43 | Supports PNG, JPG/JPEG, SVG and single-framed GIF 44 | 45 | Args: 46 | dir (str): 47 | Directory which contains all the pictures to convert. 48 | size (:obj:'list[int, int]', optional): 49 | Width and Heigth of the TextAsset objects generated. Defaults to "AUTO" 50 | (resizes until it fits within 128*128px). 51 | alpha (:obj:'tuple(int, int, int)'): 52 | RGB code of the color meant to be transparent in all the pictures. 53 | Defaults to (-1, -1, -1), which is an impossible color. Therefore 54 | no transparency is applied. 55 | 56 | Returns: 57 | (:obj:'list[]'): A list containing all the 58 | TextAsset objects converted.in order. 59 | """ 60 | 61 | assets = [] 62 | if not os.path.exists(dir): return assets 63 | 64 | for file in sorted(os.listdir(dir)): 65 | filename = os.fsdecode(file) 66 | if filename.endswith(".png") or filename.endswith(".jpg") or filename.endswith(".gif"): 67 | asset_path = os.path.join(dir, filename) 68 | assets.append(self.pic2asset(asset_path, size, alpha)) 69 | 70 | return assets 71 | 72 | # ------------------------------------------------------------ 73 | 74 | def pic2asset(self, path, size="AUTO", alpha=(-1, -1, -1)): 75 | """Converts a picture to TextAssets objects an returns them. 76 | 77 | Note: 78 | Supports PNG, JPG/JPEG, SVG and single-framed GIF 79 | 80 | Args: 81 | path (str): 82 | Path to the picture file. 83 | size (:obj:'list[int, int]', optional): 84 | Width and Heigth of the TextAsset generated. Defaults to "AUTO" 85 | (resizes until it fits within 128*128px). 86 | alpha (:obj:'tuple(int, int, int)'): 87 | RGB code of the color meant to be transparent in the picture. 88 | Defaults to (-1, -1, -1), which is an impossible color. Therefore 89 | no transparency is applied. 90 | 91 | Returns: 92 | (:obj:''): The TextAsset object resulting of 93 | the conversion. 94 | """ 95 | 96 | key = str((path, size, alpha)) 97 | if key in self._cache.keys(): 98 | return TextAsset(self._cache[key]) 99 | 100 | img_file = Image.open(path) 101 | [xs, ys] = img_file.size 102 | building_manual = [] 103 | 104 | scale_filt = Image.NEAREST 105 | if not path.endswith(".png"): 106 | scale_filt = Image.LANCZOS 107 | 108 | if size == "AUTO": 109 | while (xs > 128 * (xs / ys) and ys > 128): 110 | xs = int(xs / 1.3) 111 | ys = int(ys / 1.3) 112 | else: 113 | xs = int(size[0]) 114 | ys = int(size[1]) 115 | 116 | img_file = img_file.resize((int(xs), int(ys)), scale_filt) 117 | img = img_file.convert("P") 118 | rgb_palette = self.get_palette_in_rgb(img) 119 | 120 | trsprt_index = self.find_trsprt_index(rgb_palette, alpha) 121 | 122 | if len(rgb_palette) < 255: 123 | found_black = False 124 | i = 0 125 | while i < len(rgb_palette): 126 | if rgb_palette[i] == (0, 0, 0) and found_black == False: 127 | found_black = True 128 | elif rgb_palette[i] == (0, 0, 0) and found_black == True: 129 | del rgb_palette[i] 130 | i -= 1 131 | i += 1 132 | 133 | img = img.load() 134 | ansi_palette = [] 135 | for color in rgb_palette: 136 | r, g, b = color 137 | c_array = [r, g, b] 138 | nearest = self.nearest_rgb_to_ansi(c_array, ANSI_RGB) 139 | ansi_palette.append(nearest) 140 | 141 | pv_code = -1 142 | code = 0 143 | for y in range(0, ys): 144 | building_manual.append("") 145 | for x in range(0, xs): 146 | ci = img[x, y] 147 | code = ansi_palette[ci] 148 | #print("%s%2s" % (("\33["+str(y)+";"+str((x*2)+1)+"H"),"\33[38;5;"+str(ci)+"m@@")) 149 | 150 | if code != pv_code: 151 | pixel = "bc:" + str(code) + " " 152 | else: 153 | pixel = " " 154 | 155 | if trsprt_index is not None: 156 | if rgb_palette[ci] == alpha: 157 | pixel = "ªª" 158 | 159 | pv_code = code 160 | building_manual[y] += pixel 161 | 162 | pv_code = -1 163 | 164 | self._cache[key] = building_manual 165 | 166 | with open(self._cache_path, "w") as f: 167 | f.truncate(0) 168 | f.write(str(self._cache)) 169 | 170 | return TextAsset(building_manual) 171 | 172 | # ------------------------------------------------------------ 173 | 174 | def find_trsprt_index(self, rgb_palette, transparent_RGB): 175 | if transparent_RGB in rgb_palette: 176 | return rgb_palette.index(transparent_RGB) 177 | else: 178 | return None 179 | 180 | # ------------------------------------------------------------ 181 | 182 | def nearest_rgb_to_ansi(self, c, ref): 183 | dist_list = [] 184 | c[0] -= 0 # in case you want to filter things up 185 | c[1] += 0 186 | c[2] += 0 187 | for c2 in ref: 188 | distR = abs(c2[0] - c[0]) 189 | distG = abs(c2[1] - c[1]) 190 | distB = abs(c2[2] - c[2]) 191 | dist_list.append(distR + distG + distB) 192 | return dist_list.index(min(dist_list)) 193 | 194 | # ------------------------------------------------------------ 195 | 196 | # note: def chunk and def get_palette_in_rgb found on stackoverflow, not my code 197 | def chunk(self, seq, size, group_by_list=True): 198 | func = tuple 199 | if group_by_list: 200 | func = list 201 | return [func(seq[i:i + size]) for i in range(0, len(seq), size)] 202 | 203 | # ------------------------------------------------------------ 204 | 205 | def get_palette_in_rgb(self, img): 206 | assert img.mode == 'P' 207 | pal = img.getpalette() 208 | colors = self.chunk(pal, 3, False) 209 | return colors 210 | 211 | # ------------------------------------------------------------ 212 | -------------------------------------------------------------------------------- /flore1/engine_locals/scene.py: -------------------------------------------------------------------------------- 1 | """///////////////////////// 2 | /// 3 | /// File: VIRTUALSCENE/virtualScene.py 4 | /// Author: Anicet Nougaret 5 | /// License: CC BY-SA (see FLORE1/license.txt) 6 | /// 7 | /////////////////////////""" 8 | 9 | import os 10 | import time 11 | import sys 12 | 13 | 14 | def print_crd(content, col, row): 15 | sys.stdout.write("\33[0m\033["+str(row)+";"+str(col)+"H") 16 | sys.stdout.write(content) 17 | sys.stdout.flush() 18 | 19 | 20 | def extract_color_code(string): 21 | if not (string.startswith("\u001b[48;5;") or string.startswith("\u001b[38;5;")) or not string.endswith("m"): return 22 | return int(string[12:len(string)-2]) 23 | 24 | # ------------------------------------------------------------ 25 | # ------------------ VirtualScene Class --------------------- 26 | # ------------------------------------------------------------ 27 | class Scene: 28 | def __init__(self, coord_x=0, coord_y=0, res_x=64, res_y=64, layer_count=10, scale=True): 29 | self.layers = [] 30 | 31 | for l in range(0, layer_count): 32 | self.layers.append([]) 33 | 34 | self.coord_x = int(coord_x) 35 | self.coord_y = int(coord_y) 36 | self.res_x = int(res_x * 2) 37 | self.res_y = int(res_y) 38 | 39 | self.prtcrd = set() 40 | self.prtcrd_rv = set() 41 | self.pv_prtcrd = set() 42 | self.pv_prtcrd_rv = set() 43 | self.chart = set() 44 | self.pv_chart = set() 45 | 46 | self.frame_event = False 47 | 48 | if scale == True: 49 | os.system('mode con: cols=' + str(res_x * 2 + coord_x * 4) + ' lines=' + str(res_y + coord_y * 2) + '') 50 | 51 | # ------------------------------------------------------------ 52 | 53 | def put(self, sprite, crd_x, crd_y, layer): 54 | 55 | self.frame_event = True 56 | 57 | if layer >= len(self.layers): 58 | return 59 | 60 | if sprite.scene == self: 61 | self.erase(sprite) 62 | 63 | sprite.x = crd_x 64 | sprite.y = crd_y 65 | sprite.scene = self 66 | sprite.layer = int(layer) 67 | 68 | sprite.act_prtcrd = set() 69 | 70 | for px in sprite.prtcrd: 71 | x, y = px 72 | if 0 < (x + int(sprite.x)) < self.res_x and 0 < (y + int(sprite.y)) < self.res_y: 73 | sprite.act_prtcrd.add((x + int(sprite.x), y + int(sprite.y))) 74 | 75 | self.layers[layer].append(sprite) 76 | 77 | # ------------------------------------------------------------ 78 | 79 | def erase(self, sprite): 80 | self.layers[sprite.layer].remove(sprite) 81 | self.frame_event = True 82 | sprite.x = None 83 | sprite.y = None 84 | sprite.layer = None 85 | sprite.scene = None 86 | 87 | # ------------------------------------------------------------ 88 | 89 | def gen_stream(self, debug, repeat_color, filter): 90 | self.stream = "\33[0m" 91 | self.prtcrd = set() 92 | self.prtcrd_rv = set() 93 | self.chart = set() 94 | 95 | start_time = time.time() 96 | 97 | sprite_id = 0 98 | 99 | for layer in reversed(self.layers): 100 | for sprite in layer: 101 | px_set = sprite.act_prtcrd.copy() 102 | 103 | if not px_set.issubset(self.prtcrd): 104 | is_dis = px_set.isdisjoint(self.prtcrd) 105 | 106 | if not is_dis: px_set.difference_update(self.prtcrd) 107 | 108 | for px in px_set: 109 | x, y = px 110 | 111 | xp = (y, x) 112 | 113 | self.prtcrd.add(px) 114 | self.prtcrd_rv.add(xp) 115 | 116 | crd = str(x - int(sprite.x)) + "|" + str(y - int(sprite.y)) 117 | 118 | self.chart.add((xp, sprite.chart[crd])) 119 | 120 | chart_time = time.time() 121 | 122 | self.datalock = { 123 | "x": None, 124 | "y": None, 125 | "bc": None, 126 | "fc": None, 127 | "cc": None 128 | } 129 | 130 | for el in sorted(self.chart - self.pv_chart): 131 | xp, data = el 132 | y, x = xp 133 | 134 | char, bc, fc, cc = data 135 | 136 | if x - 1 != self.datalock["x"] or y != self.datalock["y"]: 137 | self.stream += "\033[" + str(y + self.coord_y) + ";" + str( 138 | x + self.coord_x) + "H" 139 | if repeat_color == False: 140 | if bc is not None and bc != self.datalock["bc"]: 141 | self.stream += bc 142 | if fc is not None and fc != self.datalock["fc"]: 143 | self.stream += fc 144 | if cc is not None and cc != self.datalock["cc"]: 145 | self.stream += cc 146 | else: 147 | if bc is not None: 148 | self.stream += bc 149 | if fc is not None: 150 | self.stream += fc 151 | if cc is not None: 152 | self.stream += cc 153 | 154 | self.datalock["x"] = x 155 | self.datalock["y"] = y 156 | self.datalock["bc"] = bc 157 | self.datalock["fc"] = fc 158 | self.datalock["cc"] = cc 159 | 160 | self.stream += char 161 | 162 | stream_time = time.time() 163 | 164 | self.pv_x = None 165 | self.pv_y = None 166 | 167 | for xp in sorted(self.pv_prtcrd_rv - self.prtcrd_rv): 168 | y, x = xp 169 | 170 | if True: 171 | self.stream += "\33[0m" + "\033[" + str( 172 | y + self.coord_y) + ";" + str(x + self.coord_x) + "H" + " " 173 | else: 174 | self.stream += "\33[0m" + " " 175 | 176 | self.pv_x = x 177 | self.pv_y = y 178 | 179 | self.pv_prtcrd_rv = self.prtcrd_rv.copy() 180 | self.pv_chart = self.chart.copy() 181 | 182 | end_time = time.time() 183 | 184 | if debug: 185 | print("\33[0m\033[1;40H| >>>> Scene \33[33mdebug") 186 | print("\33[0m\033[2;40H| \33[40m\33[37m FRAME_COMPUTING: %.3f s" % ((chart_time - start_time))) 187 | print("\33[0m\033[3;40H| \33[40m\33[37m STREAM_COMPUTING: %.3f s" % ((stream_time - chart_time))) 188 | print("\33[0m\033[4;40H| \33[40m\33[37m ERASE_COMPUTING: %.3f s" % ((end_time - stream_time))) 189 | print("\33[0m\033[5;40H| \33[40m\33[33m TOTAL_COMPUTING_LATENCY: %.3f s" % ((end_time - start_time))) 190 | 191 | # ------------------------------------------------------------ 192 | 193 | def show(self, force=False, debug=False, repeat_color=False, filter={"r":0,"g":0,"b":0}): 194 | if self.frame_event == True or force == True: 195 | genesis_time = time.time() 196 | 197 | if force == True: 198 | self.pv_prtcrd = set() 199 | self.pv_prtcrd_rv = set() 200 | self.pv_chart = set() 201 | 202 | self.gen_stream(debug, repeat_color, filter) 203 | 204 | start_time = time.time() 205 | 206 | sys.stdout.write(self.stream) 207 | sys.stdout.flush() 208 | end_time = time.time() 209 | latency = (end_time - genesis_time) 210 | if latency == 0: latency = 0.00001 211 | 212 | if debug: 213 | print("\33[0m\033[6;40H| \33[45m\33[37m SYS.STDOUT.WRITE: %9f s" % ((end_time - start_time))) 214 | print("\33[0m\033[7;40H| \33[45m\33[37m EXPECTED_FPS: %.2f " % (round(1 / latency))) 215 | 216 | self.frame_event = False 217 | 218 | # ------------------------------------------------------------ 219 | 220 | def hide(self): 221 | self.frame_event = True 222 | x1 = self.coord_x 223 | y1 = self.coord_y 224 | x2 = self.coord_x + self.res_x 225 | y2 = self.coord_y + self.res_y 226 | 227 | for y in range(y1, y1 + (y2 - y1)): 228 | string = "" 229 | for x in range(x1, x1 + (x2 - x1)): 230 | string += " " 231 | print_crd(string, x1, y) 232 | # ------------------------------------------------------------ 233 | 234 | """ 235 | Hey dear stranger, 236 | Thanks for reviewing my code. I hope you will find good use of it. 237 | cheers 238 | 239 | Anicet 240 | ___ 241 | ,~####~, __/__/_ 242 | (S O-oO)S ' , -=o>)', []-(0_ 0 )--|>>>>> . , ~ '~ .\(^ o.o^) 243 | 244 | """ 245 | -------------------------------------------------------------------------------- /flore1/engine_locals/util_functions.py: -------------------------------------------------------------------------------- 1 | # Python native 2 | import ctypes 3 | import sys 4 | import math 5 | import time 6 | import os 7 | 8 | # pypI 9 | import keyboard 10 | import clipboard 11 | 12 | # local 13 | from .engine_consts import * 14 | from .flipbook import Flipbook 15 | from .inputHandler import InputHandler 16 | from .refresh import Refresh 17 | from .scene import Scene 18 | from .textAsset import TextAsset 19 | from .textSprite import TextSprite 20 | from .pictureConverter import PictureConverter 21 | 22 | # ----------------------------------------------------------- 23 | 24 | def resize_console(col, row): 25 | os.system('mode con: cols=' + str(col) + ' lines=' + str(row) + '') 26 | 27 | def create_dir_and_file(dir, name): 28 | path = os.path.join(dir, name) 29 | if not os.path.exists(dir): 30 | os.makedirs(dir, exist_ok=True) 31 | open(path, 'a').close() 32 | return path 33 | 34 | def save_var_as(var, dir, filename, ext): 35 | if not filename.endswith(ext): 36 | path = create_dir_and_file(dir, filename+ext) 37 | else: 38 | path = create_dir_and_file(dir, filename) 39 | with open(path, "r+") as f: 40 | if os.path.getsize(path) == 0: 41 | f.write(str(var)) 42 | return path 43 | 44 | def load_var_from(path): 45 | if not os.path.exists(path): 46 | print("PATH DOES NOT EXIST") 47 | time.sleep(2) 48 | return None 49 | with open(path, "r") as f: 50 | if os.path.getsize(path) <= 999999999: 51 | return eval(f.read()) 52 | else: 53 | print("FILE TOO BIG") 54 | time.sleep(2) 55 | return None 56 | 57 | def save_asset_as(asset, folder, name): 58 | path = os.path.join(folder, name) 59 | if not hasattr(asset, "chart") or not hasattr(asset, "prtcrd"): return 60 | save_var_as((asset.chart, asset.prtcrd), folder, name, ".jus") 61 | 62 | def load_asset_from(path): 63 | chart, prtcrd = load_var_from(path) 64 | if chart != None: 65 | ta = TextAsset() 66 | ta.chart = chart 67 | ta.prtcrd = prtcrd 68 | return ta 69 | else: return TextAsset("") 70 | 71 | def load_assets_from(folder): 72 | assets = [] 73 | if not os.path.exists(folder): return [] 74 | for file in sorted(os.listdir(folder)): 75 | if not file.endswith(".jus"): continue 76 | path = os.path.join(folder, file) 77 | chart, prtcrd = load_var_from(path) 78 | if chart != None: 79 | ta = TextAsset() 80 | ta.chart = chart 81 | ta.prtcrd = prtcrd 82 | assets.append(ta) 83 | else: continue 84 | return assets 85 | 86 | def fix_color(): 87 | kernel32 = ctypes.windll.kernel32 88 | kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) 89 | 90 | def show_logo(duration=5): 91 | dirname = os.path.dirname(__file__) 92 | filename = os.path.join(dirname, 'engine_assets_lib\logo.png') 93 | PicConv = PictureConverter() 94 | scene = Scene(1 , 1, 64, 40, 1) 95 | logo_asset = PicConv.pic2asset(filename, size=[32,32], alpha=(0,0,0)) 96 | logo_sprt = TextSprite(asset=logo_asset) 97 | scene.put(logo_sprt,32,4,0) 98 | scene.show() 99 | print_crd("\033[38;5;8mmade with \033[38;5;198m F L O R E 1 E N G I N E ", 43, 3) 100 | time.sleep(duration) 101 | print("\33[0m") 102 | 103 | def clear_screen(): 104 | print(chr(27) + "[H" + chr(27) + "[J") 105 | 106 | def cursor_to_crd(col, row): 107 | sys.stdout.write("\33[0m\033["+str(row)+";"+str(col)+"H") 108 | 109 | def print_crd(content, col, row): 110 | sys.stdout.write("\33[0m\033["+str(row)+";"+str(col)+"H") 111 | sys.stdout.write(content) 112 | sys.stdout.flush() 113 | 114 | def save_cursor(): 115 | sys.stdout.write("\033[s") 116 | sys.stdout.flush() 117 | 118 | def restore_cursor(): 119 | sys.stdout.write("\033[u") 120 | sys.stdout.flush() 121 | 122 | def extract_ints(string): 123 | list = [] 124 | el = "" 125 | for char in string: 126 | if char.isdigit(): 127 | el += char 128 | if not char.isdigit(): 129 | if el != "": 130 | list.append(int(el)) 131 | el = "" 132 | return list 133 | 134 | def draw_rectangle(char, topleft_x, topleft_y, bottright_x, bottright_y): 135 | x1 = int(topleft_x) 136 | y1 = int(topleft_y) 137 | x2 = int(bottright_x) 138 | y2 = int(bottright_y) 139 | 140 | for y in range(y1, y1 + (y2 - y1)): 141 | string = "" 142 | for x in range(x1, x1 + (x2 - x1)): 143 | string += char 144 | print_crd(string, x1, y) 145 | 146 | def draw_line(char, xa, ya, xb, yb): 147 | xa = int(xa); ya = int(ya); xb = int(xb); yb = int(yb) 148 | if xa == xb and ya == yb: return print_crd(char, xa, ya) 149 | 150 | xa, xb, ya, yb = (xa, xb, ya, yb) if xa < xb else (xb, xa, yb, ya) 151 | 152 | a = (yb - ya) / (xb - xa) if xb != xa else -2 153 | 154 | if -1 <= a <= 1: 155 | for x in range(0, xb - xa): 156 | print_crd(char, x+xa, math.floor(x*a + ya)) 157 | 158 | if a < -1 or a > 1: 159 | xa, xb, ya, yb = (xa, xb, ya, yb) if ya > yb else (xb, xa, yb, ya) 160 | 161 | a = (xa - xb) / (ya - yb) 162 | 163 | for y in range(0, ya - yb): 164 | print_crd(char, math.floor(y*a + xb), y+yb) 165 | 166 | def sys_print(string): 167 | sys.stdout.write(string) 168 | sys.stdout.flush() 169 | 170 | def get_hotkey(): 171 | if not hasattr(get_hotkey, "last"): 172 | get_hotkey.last = { 173 | "hotkey": None, 174 | "delay": 0, 175 | "time": time.time() 176 | } 177 | hotkey = str(keyboard.read_hotkey(suppress=False)) 178 | 179 | if hotkey == get_hotkey.last["hotkey"]: 180 | if get_hotkey.last["time"] + get_hotkey.last["delay"] > time.time(): 181 | return None 182 | else: 183 | get_hotkey.last["time"] = time.time() 184 | get_hotkey.last["delay"] /= 1.5 185 | else: 186 | get_hotkey.last["hotkey"] = hotkey 187 | get_hotkey.last["delay"] = 0.3 188 | get_hotkey.last["time"] = time.time() 189 | 190 | return hotkey 191 | 192 | def get_last_hotkey(): 193 | if not hasattr(get_hotkey, "last"): 194 | get_hotkey.last = { 195 | "hotkey": None, 196 | "delay": 0, 197 | "time": time.time() 198 | } 199 | return get_hotkey.last["hotkey"] 200 | 201 | 202 | def get_key(): 203 | if not hasattr(get_key, "last"): 204 | get_key.last = { 205 | "key": None, 206 | "delay": 0, 207 | "time": time.time() 208 | } 209 | key = str(keyboard.read_key(suppress=False)) 210 | 211 | if key == get_key.last["key"]: 212 | if get_key.last["time"] + get_key.last["delay"] > time.time(): 213 | return None 214 | else: 215 | get_key.last["time"] = time.time() 216 | get_key.last["delay"] /= 1.5 217 | else: 218 | get_key.last["key"] = key 219 | get_key.last["delay"] = 0.3 220 | get_key.last["time"] = time.time() 221 | 222 | return key 223 | 224 | def get_last_key(): 225 | if not hasattr(get_key, "last"): 226 | get_key.last = { 227 | "key": None, 228 | "delay": 0, 229 | "time": time.time() 230 | } 231 | return get_key.last["key"] 232 | 233 | def alt_input(x, y, prompt="", maxline=999, maxchar=99999, digit_only=False, max_width=9999): 234 | string = "" 235 | key = "" 236 | crt_y = y 237 | crt_x = x 238 | clip = "" 239 | last = { 240 | "key": None, 241 | "delay": 0, 242 | "time": time.time() 243 | } 244 | cursor_to_crd(x, y) 245 | 246 | def line_count(string): 247 | count = 1 248 | for char in string: 249 | if char == "\n": count += 1 250 | return count 251 | 252 | def longest_line(string): 253 | max = 0 254 | count = 0 255 | for char in string: 256 | count += 1 257 | if char == "\n": 258 | if count > max: max += count - max 259 | count = 0 260 | return max 261 | 262 | sys.stdout.write(prompt) 263 | sys.stdout.flush() 264 | 265 | while key != "enter": 266 | time.sleep(0.05) 267 | 268 | if keyboard.is_pressed("ctrl+c"): 269 | clipboard.copy(clip) 270 | continue 271 | if keyboard.is_pressed("ctrl+v"): 272 | pasted = clipboard.paste() 273 | if len(pasted) + len(string) > maxchar: continue 274 | string += pasted 275 | crt_x += len(pasted) 276 | sys.stdout.write(pasted) 277 | sys.stdout.flush() 278 | time.sleep(0.2) 279 | continue 280 | 281 | key = str(keyboard.read_key(suppress=False)) 282 | 283 | if key == last["key"]: 284 | if last["time"] + last["delay"] > time.time(): 285 | continue 286 | else: 287 | last["time"] = time.time() 288 | last["delay"] /= 1.5 289 | else: 290 | last["key"] = key 291 | if last["key"] == "backspace": 292 | last["delay"] = 0.15 293 | else: 294 | last["delay"] = 0.3 295 | last["time"] = time.time() 296 | 297 | if key == "backspace": 298 | if crt_x == x: continue 299 | crt_x -= 1 300 | if len(string) >= 1: string = string[:len(string)-1] 301 | sys.stdout.write("\b \b") 302 | sys.stdout.flush() 303 | elif key == "suppr": 304 | while string[len(string)-1] != " " and crt_x > x+1: 305 | crt_x -= 1 306 | string = string[:len(string)-1] 307 | sys.stdout.write("\b \b") 308 | sys.stdout.flush() 309 | elif key == "right shift" and line_count(string) < maxline: 310 | string += "\n" 311 | crt_y += 1 312 | crt_x = x 313 | cursor_to_crd(x, crt_y) 314 | sys.stdout.flush() 315 | elif key == "space" and len(string) < maxchar: 316 | crt_x += 1 317 | string += " " 318 | sys.stdout.write(" ") 319 | sys.stdout.flush() 320 | elif len(key) == 1 and len(string) < maxchar: 321 | if digit_only == True and key.isdigit() == False: continue 322 | crt_x += 1 323 | string += key 324 | sys.stdout.write(key) 325 | sys.stdout.flush() 326 | 327 | draw_rectangle(" ", x, y, x+longest_line(string), y+line_count(string)) 328 | return string 329 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public 411 | licenses. Notwithstanding, Creative Commons may elect to apply one of 412 | its public licenses to material it publishes and in those instances 413 | will be considered the “Licensor.” The text of the Creative Commons 414 | public licenses is dedicated to the public domain under the CC0 Public 415 | Domain Dedication. Except for the limited purpose of indicating that 416 | material is shared under a Creative Commons public license or as 417 | otherwise permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the 425 | public licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. 428 | --------------------------------------------------------------------------------