{ "info": { "author": "Christian Kauten", "author_email": "kautencreations@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: Free For Educational Use", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "# gym-zelda-1\n\n[![BuildStatus][build-status]][ci-server]\n[![PackageVersion][pypi-version]][pypi-home]\n[![PythonVersion][python-version]][python-home]\n[![Stable][pypi-status]][pypi-home]\n[![Format][pypi-format]][pypi-home]\n[![License][pypi-license]](LICENSE)\n\n[build-status]: https://travis-ci.com/Kautenja/gym-zelda-1.svg?branch=master\n[ci-server]: https://travis-ci.com/Kautenja/gym-zelda-1\n[pypi-version]: https://badge.fury.io/py/gym-zelda-1.svg\n[pypi-license]: https://img.shields.io/pypi/l/gym-zelda-1.svg\n[pypi-status]: https://img.shields.io/pypi/status/gym-zelda-1.svg\n[pypi-format]: https://img.shields.io/pypi/format/gym-zelda-1.svg\n[pypi-home]: https://badge.fury.io/py/gym-zelda-1\n[python-version]: https://img.shields.io/pypi/pyversions/gym-zelda-1.svg\n[python-home]: https://python.org\n\n\n\nAn [OpenAI Gym](https://github.com/openai/gym) environment for The Legend of\nZelda (i.e., Zelda 1) on The Nintendo Entertainment System (NES) based on\nthe [nes-py](https://github.com/Kautenja/nes-py) emulator.\n\n## Installation\n\nThe preferred installation of `gym-zelda-1` is from `pip`:\n\n```shell\npip install gym-zelda-1\n```\n\n## Usage\n\n### Python\n\nYou must import `gym_zelda_1` before trying to make an environment.\nThis is because gym environments are registered at runtime. By default,\n`gym_zelda_1` environments use the full NES action space of 256\ndiscrete actions. To constrain this, `gym_zelda_1.actions` provides\nan action list called `MOVEMENT` (20 discrete actions) for the\n`nes_py.wrappers.JoypadSpace` wrapper.\n\n```python\nfrom nes_py.wrappers import JoypadSpace\nimport gym_zelda_1\nfrom gym_zelda_1.actions import MOVEMENT\n\nenv = gym_zelda_1.make('Zelda1-v0')\nenv = JoypadSpace(env, MOVEMENT)\n\ndone = True\nfor step in range(5000):\n if done:\n state = env.reset()\n state, reward, done, info = env.step(env.action_space.sample())\n env.render()\n\nenv.close()\n```\n\n**NOTE:** `gym_zelda_1.make` is just an alias to `gym.make` for\nconvenience.\n\n**NOTE:** remove calls to `render` in training code for a nontrivial\nspeedup.\n\n### Command Line\n\n`gym_zelda_1` features a command line interface for playing\nenvironments using either the keyboard, or uniform random movement.\n\n```shell\ngym_zelda_1 -m <`human` or `random`>\n```\n\n## Step\n\nInfo about the rewards and info returned by the `step` method.\n\n### Reward Function\n\nTODO: The reward function is a complicated work in progress.\n\n### `info` dictionary\n\nThe `info` dictionary returned by the `step` method contains the following\nkeys:\n\n| Key | Type | Description\n|:----------------------|:--------|:------------------------------------------------------|\n| `current_level` | `int` | The current level Link is in (0 for overworld)\n| `x_pos` | `int` | Link's _x_ position in the screen (from the left)\n| `y_pos` | `int` | Link's _y_ position in the screen (from the top)\n| `direction` | `str` | Link's direction as one of _{\"N\", \"S\", \"E\", \"W\"}_\n| `has_candled` | `bool` | Whether Link has candled the current room\n| `pulse_1` | `str` | The signal playing through pulse 1\n| `pulse_2` | `str` | The signal playing through pulse 2\n| `killed_enemies` | `int` | The number of enemies killed\n| `number_of_deaths` | `int` | The number of times Link has died\n| `sword` | `str` | The kind of sword Link has\n| `number_of_bombs` | `int` | The number of bombs in Link's inventory\n| `arrows_type` | `str` | The kind of arrows in Link's inventory\n| `has_bow` | `bool` | Whether Link has the bow in his inventory\n| `candle_type` | `str` | The type of candle in Link's inventory\n| `has_whistle` | `bool` | Whether Link has the whistle in his inventory\n| `has_food` | `bool` | Whether Link has food in his inventory\n| `potion_type` | `str` | The type of potion in Link's inventory\n| `has_magic_rod` | `bool` | Whether Link has the magic rod in his inventory\n| `has_raft` | `bool` | Whether Link has the raft in his inventory\n| `has_magic_book` | `bool` | Whether Link has the magic book in his inventory\n| `ring_type` | `str` | The type of ring in Link's inventory\n| `has_step_ladder` | `bool` | Whether Link has the step ladder in his inventory\n| `has_magic_key` | `bool` | Whether Link has the magic key in his inventory\n| `has_power_bracelet` | `bool` | Whether Link has the power bracelet in his inventory\n| `has_letter` | `bool` | Whether Link has the letter in his inventory\n| `is_clock_possessed` | `bool` | Whether the clock is possessed\n| `rupees` | `int` | The number of rupess Link has collected\n| `keys` | `int` | The number of keys in Link's inventory\n| `heart_containers` | `int` | The number of heart containers that Link has\n| `hearts` | `float` | The number of remaining health Link has\n| `has_boomerang` | `bool` | Whether Link has the boomerang in his inventory\n| `has_magic_boomerang` | `bool` | Whether Link has the magic boomerang in his inventory\n| `has_magic_shield` | `bool` | Whether Link has the magic shield in his inventory\n| `max_number_of_bombs` | `int` | The maximum number of bombs Link can carry\n\n## Citation\n\nPlease cite `gym-zelda-1` if you use it in your research.\n\n```tex\n@misc{gym-zelda-1,\n author = {Christian Kauten},\n title = {{The Legend of Zelda} for {OpenAI Gym}},\n year = {2019},\n publisher = {GitHub},\n howpublished = {\\url{https://github.com/Kautenja/gym-zelda-1}},\n}\n```\n\n## References\n\nThe following references contributed to the construction of this project.\n\n1. [The Legend of Zelda: RAM Map](https://datacrystal.romhacking.net/wiki/The_Legend_of_Zelda:RAM_map). _Data Crystal ROM Hacking_.\n2. [The Legend of Zelda: Memory Addresses](http://thealmightyguru.com/Games/Hacking/Wiki/index.php/The_Legend_of_Zelda#Memory_Addresses). _NES Hacker._\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Kautenja/gym-super-mario-bros", "keywords": "OpenAI-Gym NES The-Legend-Of-Zelda Zelda-1 Reinforcement-Learning-Environment", "license": "Proprietary", "maintainer": "", "maintainer_email": "", "name": "gym-zelda-1", "package_url": "https://pypi.org/project/gym-zelda-1/", "platform": "", "project_url": "https://pypi.org/project/gym-zelda-1/", "project_urls": { "Homepage": "https://github.com/Kautenja/gym-super-mario-bros" }, "release_url": "https://pypi.org/project/gym-zelda-1/0.2.2/", "requires_dist": [ "nes-py (>=8.0.0)" ], "requires_python": "", "summary": "Super Mario Bros. for OpenAI Gym", "version": "0.2.2" }, "last_serial": 5349447, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "dd2e9f41d48adba2f2cdb63d6806e75b", "sha256": "0b80bb8c5953535197b02349abcc1582b24095e7f17186e8abe14ebe45040418" }, "downloads": -1, "filename": "gym_zelda_1-0.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd2e9f41d48adba2f2cdb63d6806e75b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 73756, "upload_time": "2019-05-22T20:56:13", "url": "https://files.pythonhosted.org/packages/ad/c9/f2875907574581e4653d43276a3d70b8ec21839de1b6ef78e8ae27e7f991/gym_zelda_1-0.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eefda0beebb20ec1f7fd96fda1369927", "sha256": "fdf0e9cbbc90976044f0075f793ec65da8058860b743ad095c53acae0eeae742" }, "downloads": -1, "filename": "gym_zelda_1-0.0.0.tar.gz", "has_sig": false, "md5_digest": "eefda0beebb20ec1f7fd96fda1369927", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75502, "upload_time": "2019-05-22T20:56:15", "url": "https://files.pythonhosted.org/packages/41/fe/20b773451a1717eb0793d2e567baf11022aebaccdc085642967f8abc7631/gym_zelda_1-0.0.0.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "6a19d22a797bae703f4b79bb6dfcdfb2", "sha256": "9589fbd1cf26616bcc40f5fac869120da203d34267f47eca52a860f31695ab26" }, "downloads": -1, "filename": "gym_zelda_1-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6a19d22a797bae703f4b79bb6dfcdfb2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 74752, "upload_time": "2019-05-23T00:54:19", "url": "https://files.pythonhosted.org/packages/f2/02/be4786a091efd4ec38893d8fa3c731a418ee4e9aa69b737da8d17249d224/gym_zelda_1-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28abd3176f999c65fc89b56f2c175313", "sha256": "6a08be38002357853a0f4ad2eef479e51aff05ac921c0f5fd6a0ef93f9efef7a" }, "downloads": -1, "filename": "gym_zelda_1-0.1.0.tar.gz", "has_sig": false, "md5_digest": "28abd3176f999c65fc89b56f2c175313", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77313, "upload_time": "2019-05-23T00:54:21", "url": "https://files.pythonhosted.org/packages/4f/23/db509f3731ed39cc7f7b3eafe811fea3cb6e64696589295c9fe570c532f2/gym_zelda_1-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8a2765b53bed1575cadd45ebc9faecc5", "sha256": "a4cb60585d400bc33afec436efeed6a16146e1307372b0713128184f9668c4f3" }, "downloads": -1, "filename": "gym_zelda_1-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8a2765b53bed1575cadd45ebc9faecc5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 74751, "upload_time": "2019-05-23T00:55:34", "url": "https://files.pythonhosted.org/packages/1c/e6/c025f28b98428518d0b33b09534919f9a56d6d964398611e57c75f0aefad/gym_zelda_1-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "195a1f9b6aafd4cd446bdbe326f317b3", "sha256": "0cb6e840f49c0d7d6a591f72f0f3ac2dceab1befcb03dd39a43244d6ff73b953" }, "downloads": -1, "filename": "gym_zelda_1-0.1.1.tar.gz", "has_sig": false, "md5_digest": "195a1f9b6aafd4cd446bdbe326f317b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77316, "upload_time": "2019-05-23T00:55:35", "url": "https://files.pythonhosted.org/packages/44/45/1cabd31365d89e11aa31ca6b8508feb61ac4a75f821632534733d4578612/gym_zelda_1-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "966a199c9f6e1a328a436aa522ba888c", "sha256": "c14591a85d9ca053768026ebea7192552b0af8563a1d85cc1a64d0966a0ab357" }, "downloads": -1, "filename": "gym_zelda_1-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "966a199c9f6e1a328a436aa522ba888c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 75332, "upload_time": "2019-05-23T01:30:55", "url": "https://files.pythonhosted.org/packages/4f/d3/6893b73520ef55d570be4af076ffdc7da4ff2b0092f4eee3f3bbe155fb12/gym_zelda_1-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d436c478a0c93787b02b6c24c99b1476", "sha256": "0ec69f618a7ab912c7beda19ace96cece81971e917388156870c660236113d6f" }, "downloads": -1, "filename": "gym_zelda_1-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d436c478a0c93787b02b6c24c99b1476", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77850, "upload_time": "2019-05-23T01:30:57", "url": "https://files.pythonhosted.org/packages/5a/a3/36e0ada4a92bb632a080880ff0f844ff9a379625b45cd012e338a0c46433/gym_zelda_1-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "5ad4abee92d3aa15c2375e47f9cc8994", "sha256": "fa13831b57f2bfafdeddd032d68ff2a35989256dd32af5f7edf2768f1a0db19a" }, "downloads": -1, "filename": "gym_zelda_1-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ad4abee92d3aa15c2375e47f9cc8994", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 75133, "upload_time": "2019-06-02T17:47:59", "url": "https://files.pythonhosted.org/packages/16/9a/fa3c256620efcb1cde9992471d47cf903b7fdaf5bb962ac5918bcf31a210/gym_zelda_1-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9af41d26b1b45e9ce9490e3258c6edbf", "sha256": "48d9a736072c60e2ca123a7f71b5f7de1b2fcb301a5b229e61b0d5c115b29fee" }, "downloads": -1, "filename": "gym_zelda_1-0.2.2.tar.gz", "has_sig": false, "md5_digest": "9af41d26b1b45e9ce9490e3258c6edbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77650, "upload_time": "2019-06-02T17:48:01", "url": "https://files.pythonhosted.org/packages/d9/d6/24393b735a5627c478292ee0db5811bf673cd1674683dc20c95c68cd907b/gym_zelda_1-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5ad4abee92d3aa15c2375e47f9cc8994", "sha256": "fa13831b57f2bfafdeddd032d68ff2a35989256dd32af5f7edf2768f1a0db19a" }, "downloads": -1, "filename": "gym_zelda_1-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ad4abee92d3aa15c2375e47f9cc8994", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 75133, "upload_time": "2019-06-02T17:47:59", "url": "https://files.pythonhosted.org/packages/16/9a/fa3c256620efcb1cde9992471d47cf903b7fdaf5bb962ac5918bcf31a210/gym_zelda_1-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9af41d26b1b45e9ce9490e3258c6edbf", "sha256": "48d9a736072c60e2ca123a7f71b5f7de1b2fcb301a5b229e61b0d5c115b29fee" }, "downloads": -1, "filename": "gym_zelda_1-0.2.2.tar.gz", "has_sig": false, "md5_digest": "9af41d26b1b45e9ce9490e3258c6edbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77650, "upload_time": "2019-06-02T17:48:01", "url": "https://files.pythonhosted.org/packages/d9/d6/24393b735a5627c478292ee0db5811bf673cd1674683dc20c95c68cd907b/gym_zelda_1-0.2.2.tar.gz" } ] }