├── RLcraft └── __init__.py ├── img ├── maze.png ├── model.png ├── nopca.png ├── pca.png └── agent-view.png ├── requirements.txt ├── .gitignore ├── missions ├── old │ ├── cliff_walking1.xml │ ├── lava_maze.xml │ ├── lvl3.xml │ ├── maze_1.xml │ ├── medium.xml │ ├── basic.xml │ ├── hard.xml │ ├── lure_creeper.xml │ ├── maze_2.xml │ ├── lvl1.xml │ └── lvl2.xml └── mazes │ ├── maze16.xml │ ├── maze17.xml │ ├── maze18.xml │ ├── maze19.xml │ ├── maze28.xml │ ├── maze29.xml │ ├── maze30.xml │ ├── maze31.xml │ ├── maze136.xml │ ├── maze137.xml │ ├── maze138.xml │ ├── maze139.xml │ ├── maze152.xml │ ├── maze153.xml │ ├── maze154.xml │ ├── maze155.xml │ ├── maze48.xml │ ├── maze49.xml │ ├── maze50.xml │ ├── maze51.xml │ ├── maze60.xml │ ├── maze61.xml │ ├── maze62.xml │ ├── maze63.xml │ ├── maze64.xml │ ├── maze65.xml │ └── maze66.xml ├── demo_load_world.ipynb ├── configs └── mazes.yml └── demo_no_RL.py /RLcraft/__init__.py: -------------------------------------------------------------------------------- 1 | from .maze_env import MalmoMazeEnv -------------------------------------------------------------------------------- /img/maze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drkostas/Minecraft-AI/HEAD/img/maze.png -------------------------------------------------------------------------------- /img/model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drkostas/Minecraft-AI/HEAD/img/model.png -------------------------------------------------------------------------------- /img/nopca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drkostas/Minecraft-AI/HEAD/img/nopca.png -------------------------------------------------------------------------------- /img/pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drkostas/Minecraft-AI/HEAD/img/pca.png -------------------------------------------------------------------------------- /img/agent-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drkostas/Minecraft-AI/HEAD/img/agent-view.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | tensorflow==2.6.2 2 | pandas 3 | numpy 4 | ray[default]==2.1.0 5 | ray[rllib]==2.1.0 6 | ray[tune]==2.1.0 7 | attrs==19.1.0 8 | gym 9 | lxml 10 | pillow 11 | jupyter==1.0.0 12 | yaml-config-wrapper==1.0.4 13 | GPUtil 14 | --extra-index-url https://test.pypi.org/simple/ 15 | malmo==0.36.0 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # celery beat schedule file 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # dotenv 105 | .env 106 | 107 | # virtualenv 108 | .venv 109 | env/ 110 | venv/ 111 | ENV/ 112 | env.bak/ 113 | venv.bak/ 114 | 115 | # Spyder project settings 116 | .spyderproject 117 | .spyproject 118 | 119 | # Rope project settings 120 | .ropeproject 121 | 122 | # mkdocs documentation 123 | /site 124 | 125 | # mypy 126 | .mypy_cache/ 127 | .dmypy.json 128 | dmypy.json 129 | 130 | # Pyre type checker 131 | .pyre/ 132 | 133 | # IDE settings 134 | .vscode/ 135 | /.idea 136 | 137 | # Tmp files 138 | *tmp*.* 139 | 140 | # Tars 141 | *.gz 142 | *.tar 143 | *.bz2 144 | *.zip 145 | *.7z 146 | 147 | # Malmo folder (should be downloaded manually) 148 | MalmoPlatform 149 | 150 | # Custom 151 | .DS_Store 152 | tmp* 153 | logs 154 | minex86 -------------------------------------------------------------------------------- /missions/old/cliff_walking1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Cliff walking mission based on Sutton and Barto. 6 | 7 | 8 | 9 | {PLACEHOLDER_MSPERTICK} 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Cristina 39 | 40 | 41 | 42 | 43 | 44 | 45 | {PLACEHOLDER_WIDTH} 46 | {PLACEHOLDER_HEIGHT} 47 | 48 | 49 | 50 | attack 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /missions/old/lava_maze.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lava Maze 5 | 6 | 7 | 8 | 9 | {PLACEHOLDER_MSPERTICK} 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {PLACEHOLDER_MAZESEED} 31 | 32 | 33 | 34 | 35 | 36 | 37 | 0.6 38 | false 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Agent0 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | {PLACEHOLDER_WIDTH} 59 | {PLACEHOLDER_HEIGHT} 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /missions/old/lvl3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Lure Creeper 4 | 5 | 6 | 7 | 8 | {PLACEHOLDER_MSPERTICK} 9 | 10 | 11 | 12 | 13 | 17 | clear 18 | false 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | MineRLAgent 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | {PLACEHOLDER_WIDTH} 57 | {PLACEHOLDER_HEIGHT} 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /missions/old/maze_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Run the maze! 6 | 7 | 8 | 9 | 10 | 14 | clear 15 | false 16 | 17 | 18 | 19 | 20 | 21 | 0.9 22 | random 23 | random 24 | false 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Jason Bourne 39 | 40 | 41 | 42 | 43 | 44 | 45 | {PLACEHOLDER_WIDTH} 46 | {PLACEHOLDER_HEIGHT} 47 | 48 | 49 | 50 | attack 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /missions/old/medium.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Find the goal! This is Hotel California! 5 | 6 | 7 | 8 | 9 | true 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 25 26 | 10 27 | 25 28 | 14 29 | 30 | 2 31 | 2 32 | 1 33 | 34 | 35 | 1 36 | 1 37 | 1 38 | 1 39 | 1 40 | 41 | 42 | 1 43 | 1 44 | 1 45 | 46 | 1 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | James Bond 56 | 57 | 58 | 59 | 60 | 61 | 320 62 | 240 63 | 64 | 65 | 66 | 67 | attack 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /missions/old/basic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Find the goal! 5 | 6 | 7 | 8 | 9 | true 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 7 26 | 7 27 | 7 28 | 0 29 | 30 | 0 31 | 0 32 | 0 33 | 34 | 35 | 0 36 | 0 37 | 0 38 | 0 39 | 0 40 | 41 | 42 | 0 43 | 0 44 | 0 45 | 46 | 1 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | James Bond 56 | 57 | 58 | 59 | 60 | 61 | 320 62 | 240 63 | 64 | 65 | 66 | 67 | attack 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /missions/old/hard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Find the goal! Welcome to the Buckingham Palace! 5 | 6 | 7 | 8 | 9 | true 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 32 26 | 20 27 | 32 28 | 32 29 | 30 | 3 31 | 3 32 | 2 33 | 34 | 35 | 0 36 | 0 37 | 0 38 | 0 39 | 0 40 | 41 | 42 | 0 43 | 0 44 | 0 45 | 46 | 0.5 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | James Bond 56 | 57 | 58 | 59 | 60 | 61 | 320 62 | 240 63 | 64 | 65 | 66 | 67 | attack 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /missions/old/lure_creeper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lure Creeper 5 | 6 | 7 | 8 | 9 | {PLACEHOLDER_MSPERTICK} 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {PLACEHOLDER_MAZESEED} 31 | 32 | 33 | 34 | 35 | 36 | 37 | 0.1 38 | false 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Agent0 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | {PLACEHOLDER_WIDTH} 59 | {PLACEHOLDER_HEIGHT} 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /missions/old/maze_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Run the maze! 6 | 7 | 8 | 9 | 10 | 14 | clear 15 | false 16 | 17 | 18 | 19 | 20 | 21 | 0.5 22 | random 23 | random 24 | false 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Jason Bourne 39 | 40 | 41 | 42 | 43 | 44 | 320 45 | 240 46 | 47 | 48 | 49 | attack 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /demo_load_world.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "#automatically reload modules when they have changed\n", 10 | "%reload_ext autoreload\n", 11 | "from pathlib import Path\n", 12 | "import random\n", 13 | "import os\n", 14 | "\n", 15 | "from yaml_config_wrapper import Configuration\n", 16 | "from RLcraft import MalmoMazeEnv" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 6, 22 | "metadata": {}, 23 | "outputs": [ 24 | { 25 | "name": "stdout", 26 | "output_type": "stream", 27 | "text": [ 28 | "Configuration file loaded successfully from path: /Users/gkos/Insync/Gdrive/Projects/UTK/Minecraft-AI/configs/mazes.yml\n", 29 | "Configuration Tag: mazes-v1\n", 30 | "Generating new seed ...\n", 31 | "Loading environment ...\n", 32 | "Resetting environment ...\n", 33 | "Environment Loaded!\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "try:\n", 39 | " env.close()\n", 40 | "except:\n", 41 | " pass\n", 42 | "\n", 43 | "yml_path = 'configs/mazes.yml'\n", 44 | "# Load YML config file\n", 45 | "c = Configuration(config_src=yml_path)\n", 46 | "# Load configs from config class\n", 47 | "general_config = c.get_config('general')\n", 48 | "train_config = c.get_config('train')[0]['config']\n", 49 | "env_config = train_config['env_config']\n", 50 | "\n", 51 | "# Set Schema path\n", 52 | "os.environ['MALMO_XSD_PATH'] = '/Users/gkos/Insync/Gdrive/Projects/UTK/Minecraft-AI/MalmoPlatform/Schemas'\n", 53 | "# Generate a seed for maze \n", 54 | "print(\"Generating new seed ...\")\n", 55 | "maze_seed = random.randint(1, 9999)\n", 56 | "print(\"Loading environment ...\")\n", 57 | "env = MalmoMazeEnv(\n", 58 | " mazeseed=maze_seed,\n", 59 | " xml=env_config[\"xml\"],\n", 60 | " width=env_config[\"width\"],\n", 61 | " height=env_config[\"height\"],\n", 62 | " millisec_per_tick=env_config['millisec_per_tick'],\n", 63 | " mission_timeout_ms=env_config['mission_timeout_ms'],\n", 64 | " step_reward=env_config['step_reward'],\n", 65 | " win_reward=env_config['win_reward'],\n", 66 | " lose_reward=env_config['lose_reward'],\n", 67 | " action_space=env_config['action_space'],\n", 68 | " client_port=env_config['client_port'],\n", 69 | " time_wait=env_config['time_wait'],\n", 70 | " max_loop=env_config['max_loop'])\n", 71 | "print(\"Resetting environment ...\")\n", 72 | "_ = env.reset()\n", 73 | "print(\"Environment Loaded!\")\n" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 7, 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "env.close()" 83 | ] 84 | } 85 | ], 86 | "metadata": { 87 | "kernelspec": { 88 | "display_name": "minerl", 89 | "language": "python", 90 | "name": "python3" 91 | }, 92 | "language_info": { 93 | "codemirror_mode": { 94 | "name": "ipython", 95 | "version": 3 96 | }, 97 | "file_extension": ".py", 98 | "mimetype": "text/x-python", 99 | "name": "python", 100 | "nbconvert_exporter": "python", 101 | "pygments_lexer": "ipython3", 102 | "version": "3.6.15" 103 | }, 104 | "orig_nbformat": 4, 105 | "vscode": { 106 | "interpreter": { 107 | "hash": "75234d1335ff66cfe5d0bc1388cf2cdd424fb0816c3e6a45c858cda25df5e6da" 108 | } 109 | } 110 | }, 111 | "nbformat": 4, 112 | "nbformat_minor": 2 113 | } 114 | -------------------------------------------------------------------------------- /configs/mazes.yml: -------------------------------------------------------------------------------- 1 | tag: mazes-v1 2 | general: 3 | config: 4 | name: Mazes 5 | log_path: ./logs 6 | evaluation_interval: 1 7 | checkpoint_path: ./checkpoints 8 | save_freq: 5 9 | train_epochs: 30 10 | num_gpus: 1 11 | train: # Every config is a different training agent 12 | # --- Agent 1 --- # 13 | - config: 14 | env_config: 15 | xml: missions/mazes/maze*.xml 16 | width: 84 17 | height: 84 18 | millisec_per_tick: 1 19 | maze_seed: 1 # will be replaced by the code 20 | mission_timeout_ms: 300000 # This is a good timeout for the maze 21 | step_reward: -1 22 | win_reward: 85 23 | lose_reward: -100 24 | action_space: # The order of the actions is rettained in the action space 25 | - move 1 # move forward 26 | - move -1 # move backward 27 | - strafe 1 # move right 28 | - strafe -1 # move left 29 | - turn 1 # turn right 30 | - turn -1 # turn left 31 | client_port: 10000 # malmo port 32 | time_wait: 0.05 # time to wait for retreiving world state (when MsPerTick=20) 33 | max_loop: 50 # wait till TIME_WAIT * MAX_LOOP seconds for each action 34 | num_workers: 1 35 | framework: tf 36 | model: 37 | fcnet_hiddens: 38 | - 64 39 | - 64 40 | conv_filters: null # will be replaced by the code 41 | fcnet_activation: relu 42 | grayscale: True 43 | #disable_env_checking: True 44 | #evaluation_config: 45 | #render_env: False 46 | # --- Agent 2 --- # [No Turning left or right] 47 | - config: 48 | env_config: 49 | xml: missions/mazes/maze*.xml 50 | width: 84 51 | height: 84 52 | millisec_per_tick: 50 53 | maze_seed: 1 # will be replaced by the code 54 | mission_timeout_ms: 300000 # This is a good timeout for the maze 55 | step_reward: -1 56 | win_reward: 85 57 | lose_reward: -100 58 | action_space: # The order of the actions is rettained in the action space 59 | - move 1 # move forward 60 | - move -1 # move backward 61 | - strafe 1 # move right 62 | - strafe -1 # move left 63 | client_port: 10000 # malmo port 64 | time_wait: 0.05 # time to wait for retreiving world state (when MsPerTick=20) 65 | max_loop: 50 # wait till TIME_WAIT * MAX_LOOP seconds for each action 66 | num_workers: 1 67 | framework: tf 68 | model: 69 | fcnet_hiddens: 70 | - 64 71 | - 64 72 | conv_filters: null # will be replaced by the code 73 | fcnet_activation: relu 74 | grayscale: True 75 | #disable_env_checking: True 76 | #evaluation_config: 77 | #render_env: False 78 | # --- Agent 3 --- # [No side ways moving (should turn instead)] 79 | - config: 80 | env_config: 81 | xml: missions/mazes/maze*.xml 82 | width: 140 83 | height: 140 84 | millisec_per_tick: 5 85 | maze_seed: 1 # will be replaced by the code 86 | mission_timeout_ms: 90000 # This is a good timeout for the maze 87 | step_reward: -1 88 | win_reward: 85 89 | lose_reward: -100 90 | action_space: # The order of the actions is rettained in the action space 91 | - move 1 # move forward 92 | - move -1 # move backward 93 | - turn 1 # turn right 94 | - turn -1 # turn left 95 | client_port: 9000 # malmo port 96 | time_wait: 0.05 # time to wait for retreiving world state (when MsPerTick=20) 97 | max_loop: 50 # wait till TIME_WAIT * MAX_LOOP seconds for each action 98 | num_workers: 1 99 | framework: tf 100 | model: 101 | fcnet_hiddens: 102 | - 64 103 | - 64 104 | conv_filters: null # will be replaced by the code 105 | fcnet_activation: relu 106 | grayscale: True 107 | disable_env_checking: True 108 | #disable_env_checking: True 109 | evaluation_config: 110 | render_env: False -------------------------------------------------------------------------------- /demo_no_RL.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | from pathlib import Path 3 | import random 4 | import json 5 | from typing import Dict 6 | import time 7 | from yaml_config_wrapper import Configuration 8 | from RLcraft import MalmoMazeEnv 9 | 10 | 11 | def get_args(): 12 | parser = argparse.ArgumentParser() 13 | # Required Args 14 | required_args = parser.add_argument_group('Required Arguments') 15 | config_file_params = { 16 | 'type': argparse.FileType('r'), 17 | 'required': True, 18 | 'help': "The configuration yml file" 19 | } 20 | required_args.add_argument('-c', '--config-file', **config_file_params) 21 | # Optional args 22 | optional_args = parser.add_argument_group('Optional Arguments') 23 | optional_args.add_argument("--num_gpus", 24 | type=int, 25 | required=False, 26 | default=0, 27 | help="number of gpus to use for training") 28 | args = parser.parse_args() 29 | return args 30 | 31 | 32 | def create_env(config: Dict): 33 | """ Create a custom OpenAI gym environment (custom MalmoMazeEnv). 34 | """ 35 | maze_seed = random.randint(1, 9999) 36 | env = MalmoMazeEnv( 37 | mazeseed=maze_seed, 38 | xml=config["xml"], 39 | width=config["width"], 40 | height=config["height"], 41 | millisec_per_tick=config['millisec_per_tick'], 42 | mission_timeout_ms=config['mission_timeout_ms'], 43 | step_reward=config['step_reward'], 44 | win_reward=config['win_reward'], 45 | lose_reward=config['lose_reward'], 46 | action_space=config['action_space'], 47 | client_port=config['client_port'], 48 | time_wait=config['time_wait'], 49 | max_loop=config['max_loop']) 50 | return env 51 | 52 | 53 | def process_obs(np_obs, info): 54 | """ Process the observation from the environment. """ 55 | # obs is a numpy array of shape (height, width, 3) 56 | # info is a dictionary but we have to transform it to use it 57 | info_obs = json.loads(info.observations[-1].text) 58 | floor_data = info_obs['floor10x10'] 59 | time_data = info_obs['TotalTime'] 60 | xpos_data = info_obs['XPos'] 61 | ypos_data = info_obs['YPos'] 62 | zpos_data = info_obs['ZPos'] 63 | yaw_data = info_obs['Yaw'] # where the player is facing 64 | hp_data = info_obs['Life'] 65 | obs = {} 66 | obs['rgb'] = np_obs 67 | obs['floor'] = floor_data 68 | obs['time'] = time_data 69 | obs['xpos'] = xpos_data 70 | obs['ypos'] = ypos_data 71 | obs['zpos'] = zpos_data 72 | obs['yaw'] = yaw_data 73 | obs['hp'] = hp_data 74 | return obs 75 | 76 | 77 | def main(): 78 | """ Run a the game with a random agent. """ 79 | # Read command arguments 80 | args = get_args() 81 | # Load YML config file 82 | c = Configuration(config_src=args.config_file) 83 | # Load configs from config class 84 | general_config = c.get_config('general') 85 | train_config = c.get_config('train')[0]['config'] 86 | env_config = train_config['env_config'] 87 | 88 | run = True 89 | while run: 90 | print("Loading environment ...") 91 | env = create_env(env_config) 92 | print("Resetting environment ...") 93 | print(env.reset()) 94 | print("The world is loaded.") 95 | print("Press Enter and F5 key in Minecraft to show third-person view.") 96 | input("Press any key to start simulation") 97 | done = False 98 | while not done: 99 | action = env.action_space.sample() 100 | # Actions: 0 -> move (frwd), 1 -> right, 2 -> left 101 | np_obs, reward, done, info = env.step(action) 102 | observations = process_obs(np_obs, info) 103 | done = True 104 | print(observations) 105 | env.render() 106 | user_choice = input( 107 | "Enter 'N' to exit, 'Y' to run new episode [Y/n]: ").lower() 108 | if user_choice.lower() in ['n', 'no']: 109 | run = False 110 | else: 111 | time.sleep(5) 112 | env.close() 113 | 114 | print("Done.") 115 | 116 | 117 | if __name__ == '__main__': 118 | main() 119 | -------------------------------------------------------------------------------- /missions/old/lvl1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lure Creeper 5 | 6 | 7 | 8 | 9 | {PLACEHOLDER_MSPERTICK} 10 | 11 | 12 | 13 | 14 | 18 | clear 19 | false 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Steve 54 | 55 | 56 | 59 | 60 | 61 | 62 | 63 | {PLACEHOLDER_WIDTH} 64 | {PLACEHOLDER_HEIGHT} 65 | 66 | 67 | 68 | 69 | 70 | 76 | 81 | 82 | 83 | 84 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /missions/old/lvl2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | $(ENV_NAME) 7 | 8 | 9 | 10 | 50 11 | 12 | 13 | 14 | 15 | 19 | clear 20 | false 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1 43 | 0 44 | 1 45 | 0 46 | diamond_block 47 | circle 48 | 49 | 0 50 | 1 51 | false 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | MineRLAgent 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 128 70 | 96 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | moveMouse 79 | inventory 80 | 81 | 82 | 83 | 84 | attack 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /missions/mazes/maze16.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze17.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze19.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze29.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze30.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze31.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Survivor 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | attack 65 | 66 | 67 | 68 | {PLACEHOLDER_WIDTH} 69 | {PLACEHOLDER_HEIGHT} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /missions/mazes/maze136.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze137.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze138.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze139.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze152.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze153.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze154.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze155.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze48.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze49.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze50.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze51.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze60.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze61.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze62.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze63.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze64.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze65.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /missions/mazes/maze66.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Survive the farm fire! 5 | 6 | 7 | {PLACEHOLDER_MSPERTICK} 8 | 9 | 10 | 11 | 15 | clear 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Survivor 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | attack 66 | 67 | 68 | 69 | {PLACEHOLDER_WIDTH} 70 | {PLACEHOLDER_HEIGHT} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | --------------------------------------------------------------------------------