# DnD Fog
[![GitHub Workflow Status][status-badge]][status]
[![PyPI][pypi-badge]][pypi]
[![GitHub][licence-badge]][licence]
[![GitHub Last Commit][repo-badge]][repo]
[![GitHub Issues][issues-badge]][issues]
[![Downloads][downloads-badge]][pypi]
[![Python Version][version-badge]][pypi]
```shell
pip install dndfog
```
---
**Documentation**: [https://mrthearman.github.io/dndfog/](https://mrthearman.github.io/dndfog/)
**Source Code**: [https://github.com/MrThearMan/dndfog/](https://github.com/MrThearMan/dndfog/)
---
Create battlemaps for tabletop RPGs, like [D&D](https://www.dndbeyond.com/).
> Program is Windows only for now. This is due to the saving and loading widgets
> being Windows only (using pywin32). You're free to modify the code to add file
> loading and saving for other platforms.
![Example Map](https://github.com/MrThearMan/dndfog/blob/main/docs/img/example-map.png?raw=true)
## Features
- Infinite grid
- Add and remove a [fog of war](https://en.wikipedia.org/wiki/Fog_of_war) effect
- Import maps from image files
- Place, move and remove pieces on a grid (can be matched to image grid)
- Place 1x1, 2x2, 3x3, or 4x4 pieces
- Make markings on the map to show areas of effect or point out things to the players
- Save and load file to a single JSON file (no need to keep the image file separately!)
## How to use
When installing from [pypi](https://pypi.org/), the library should come with a script
named `dndfog` that you can run. It should be available in your environment if
the `Python\Scripts` folder is set in PATH. You can also download an EXE from
the [GitHub releases](https://github.com/MrThearMan/dndfog/releases).
When the program opens, you need to select an image file to use as a background,
or a JSON data file to load a map from. You can also lauch the program with
a positional argument `<filepath>` to add an initial file.
> The program does not autosave! You have to save (and override) the file yourself!
### Keyboard shortcuts
Toolbar:
- Open/close the toolbar: `TAB`
- Select tool from the toolbar: Quick select with the number keys `1-9` or click the
tool button with `Left mouse button` when the toolbar is open
Camera:
- Move camera: `Click and drag: Middle mouse button`
- Zoom in: _Any tool except the `grid` tool_ selected from the toolbar + `Scroll wheel: Up`
- Zoom out: _Any tool except the `grid` tool_ selected from the toolbar + `Scroll wheel: Down`
Piece (quick select: `1`):
- Add a piece: Select the `piece` tool from the toolbar + `Right mouse button` on an empty square
- Remove a piece: Select the `piece` tool from the toolbar + `Right mouse button` on a piece
- Move a piece: Select the `piece` tool from the toolbar + `Click and drag: Left mouse button`
Fog (quick select: `2`):
- Add fog: Select the `fog` tool from the toolbar + `Left mouse button`
- Remove fog: Select the `fog` tool from the toolbar + `Right mouse button`
- Show/hide fog: `F1` or the checkbox in the `fog` toolbar
- Change fog size: Select the size to use from the `size` selector in the `fog` toolbar
Map (quick select: `3`):
- Move map image: Select the `map` tool from the toolbar + `Click and drag: Left mouse button`
Grid (quick select: `4`):
- Increase gridsize: Select the `grid` tool from the toolbar + `Scroll wheel: Up`
- Decrease gridsize: Select the `grid` tool from the toolbar + `Scroll wheel: Down`
- Show/hide grid: `F2` or the checkbox in the `fog` toolbar
Mark (quick select: `5`):
- Make markings: Select the `mark` tool from the toolbar + `Click and drag: Left mouse button`
- Erase markings: Select the `mark` tool from the toolbar + `Click and drag: Right mouse button`
- Clear markings: Click the `clear` button in the `mark` toolbar
- Change marker color: Use the color selector in the `mark` toolbar
Misc:
- Save file: `CTRL + S` (will skip file dialog if json data file already exists)
- Save file as: `CTRL + Shift + S` (will always open a file dialog)
- Open file: `CTRL + O`
- Quit program: Press the X mutton on the window
## Known issues or lacking features
- Matching program gridsize to background gridsize is a bit awkward
- When zooming, the program grid and background map might not stay aligned
- It's hard to keep track of combat, since there is no built-in turn order tracking
- It's too easy to accidentally remove fog you didn't mean to. There should be some way to
layer fog, so that only some of it can be removed
- Markings do not scale when zooming
- There is no undo or redo
- There is no way to add pictures to pieces to identify them better
[status-badge]: https://img.shields.io/github/actions/workflow/status/MrThearMan/dndfog/test.yml?branch=main
[pypi-badge]: https://img.shields.io/pypi/v/dndfog
[licence-badge]: https://img.shields.io/github/license/MrThearMan/dndfog
[repo-badge]: https://img.shields.io/github/last-commit/MrThearMan/dndfog
[issues-badge]: https://img.shields.io/github/issues-raw/MrThearMan/dndfog
[version-badge]: https://img.shields.io/pypi/pyversions/dndfog
[downloads-badge]: https://img.shields.io/pypi/dm/dndfog
[status]: https://github.com/MrThearMan/dndfog/actions/workflows/test.yml
[pypi]: https://pypi.org/project/dndfog
[licence]: https://github.com/MrThearMan/dndfog/blob/main/LICENSE
[repo]: https://github.com/MrThearMan/dndfog/commits/main
[issues]: https://github.com/MrThearMan/dndfog/issues
Raw data
{
"_id": null,
"home_page": "https://mrthearman.github.io/dndfog/",
"name": "dndfog",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10,<3.13",
"maintainer_email": "",
"keywords": "dnd,fog,war,map,combat,infinite,gird",
"author": "Matti Lamppu",
"author_email": "lamppu.matti.akseli@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/ff/74/d81177842de99f25e4bab3820560c29b2e23f8202f2bb3311aecaedaa656/dndfog-0.6.5.tar.gz",
"platform": null,
"description": "# DnD Fog\n\n[![GitHub Workflow Status][status-badge]][status]\n[![PyPI][pypi-badge]][pypi]\n[![GitHub][licence-badge]][licence]\n[![GitHub Last Commit][repo-badge]][repo]\n[![GitHub Issues][issues-badge]][issues]\n[![Downloads][downloads-badge]][pypi]\n[![Python Version][version-badge]][pypi]\n\n```shell\npip install dndfog\n```\n\n---\n\n**Documentation**: [https://mrthearman.github.io/dndfog/](https://mrthearman.github.io/dndfog/)\n\n**Source Code**: [https://github.com/MrThearMan/dndfog/](https://github.com/MrThearMan/dndfog/)\n\n---\n\nCreate battlemaps for tabletop RPGs, like [D&D](https://www.dndbeyond.com/).\n\n> Program is Windows only for now. This is due to the saving and loading widgets\n> being Windows only (using pywin32). You're free to modify the code to add file\n> loading and saving for other platforms.\n\n![Example Map](https://github.com/MrThearMan/dndfog/blob/main/docs/img/example-map.png?raw=true)\n\n## Features\n\n- Infinite grid\n- Add and remove a [fog of war](https://en.wikipedia.org/wiki/Fog_of_war) effect\n- Import maps from image files\n- Place, move and remove pieces on a grid (can be matched to image grid)\n- Place 1x1, 2x2, 3x3, or 4x4 pieces\n- Make markings on the map to show areas of effect or point out things to the players\n- Save and load file to a single JSON file (no need to keep the image file separately!)\n\n## How to use\n\nWhen installing from [pypi](https://pypi.org/), the library should come with a script\nnamed `dndfog` that you can run. It should be available in your environment if\nthe `Python\\Scripts` folder is set in PATH. You can also download an EXE from\nthe [GitHub releases](https://github.com/MrThearMan/dndfog/releases).\n\nWhen the program opens, you need to select an image file to use as a background,\nor a JSON data file to load a map from. You can also lauch the program with\na positional argument `<filepath>` to add an initial file.\n\n> The program does not autosave! You have to save (and override) the file yourself!\n\n### Keyboard shortcuts\n\nToolbar:\n- Open/close the toolbar: `TAB`\n- Select tool from the toolbar: Quick select with the number keys `1-9` or click the\n tool button with `Left mouse button` when the toolbar is open\n\nCamera:\n- Move camera: `Click and drag: Middle mouse button`\n- Zoom in: _Any tool except the `grid` tool_ selected from the toolbar + `Scroll wheel: Up`\n- Zoom out: _Any tool except the `grid` tool_ selected from the toolbar + `Scroll wheel: Down`\n\nPiece (quick select: `1`):\n- Add a piece: Select the `piece` tool from the toolbar + `Right mouse button` on an empty square\n- Remove a piece: Select the `piece` tool from the toolbar + `Right mouse button` on a piece\n- Move a piece: Select the `piece` tool from the toolbar + `Click and drag: Left mouse button`\n\nFog (quick select: `2`):\n- Add fog: Select the `fog` tool from the toolbar + `Left mouse button`\n- Remove fog: Select the `fog` tool from the toolbar + `Right mouse button`\n- Show/hide fog: `F1` or the checkbox in the `fog` toolbar\n- Change fog size: Select the size to use from the `size` selector in the `fog` toolbar\n\nMap (quick select: `3`):\n- Move map image: Select the `map` tool from the toolbar + `Click and drag: Left mouse button`\n\nGrid (quick select: `4`):\n- Increase gridsize: Select the `grid` tool from the toolbar + `Scroll wheel: Up`\n- Decrease gridsize: Select the `grid` tool from the toolbar + `Scroll wheel: Down`\n- Show/hide grid: `F2` or the checkbox in the `fog` toolbar\n\nMark (quick select: `5`):\n- Make markings: Select the `mark` tool from the toolbar + `Click and drag: Left mouse button`\n- Erase markings: Select the `mark` tool from the toolbar + `Click and drag: Right mouse button`\n- Clear markings: Click the `clear` button in the `mark` toolbar\n- Change marker color: Use the color selector in the `mark` toolbar\n\nMisc:\n- Save file: `CTRL + S` (will skip file dialog if json data file already exists)\n- Save file as: `CTRL + Shift + S` (will always open a file dialog)\n- Open file: `CTRL + O`\n- Quit program: Press the X mutton on the window\n\n## Known issues or lacking features\n\n- Matching program gridsize to background gridsize is a bit awkward\n- When zooming, the program grid and background map might not stay aligned\n- It's hard to keep track of combat, since there is no built-in turn order tracking\n- It's too easy to accidentally remove fog you didn't mean to. There should be some way to\n layer fog, so that only some of it can be removed\n- Markings do not scale when zooming\n- There is no undo or redo\n- There is no way to add pictures to pieces to identify them better\n\n[status-badge]: https://img.shields.io/github/actions/workflow/status/MrThearMan/dndfog/test.yml?branch=main\n[pypi-badge]: https://img.shields.io/pypi/v/dndfog\n[licence-badge]: https://img.shields.io/github/license/MrThearMan/dndfog\n[repo-badge]: https://img.shields.io/github/last-commit/MrThearMan/dndfog\n[issues-badge]: https://img.shields.io/github/issues-raw/MrThearMan/dndfog\n[version-badge]: https://img.shields.io/pypi/pyversions/dndfog\n[downloads-badge]: https://img.shields.io/pypi/dm/dndfog\n\n[status]: https://github.com/MrThearMan/dndfog/actions/workflows/test.yml\n[pypi]: https://pypi.org/project/dndfog\n[licence]: https://github.com/MrThearMan/dndfog/blob/main/LICENSE\n[repo]: https://github.com/MrThearMan/dndfog/commits/main\n[issues]: https://github.com/MrThearMan/dndfog/issues\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "DND battle map with fog of war",
"version": "0.6.5",
"project_urls": {
"Homepage": "https://mrthearman.github.io/dndfog/",
"Repository": "https://github.com/MrThearMan/dndfog"
},
"split_keywords": [
"dnd",
"fog",
"war",
"map",
"combat",
"infinite",
"gird"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f5fae39825e88d715ced9281f42ab12382f0ee86a317e227fa09bf0b9d479242",
"md5": "bf37127f74e1d7d342d6cefd84be6256",
"sha256": "4046899fc82026def0edf5a3666510937e7a13258072f39f32adab38a8b9b3eb"
},
"downloads": -1,
"filename": "dndfog-0.6.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bf37127f74e1d7d342d6cefd84be6256",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10,<3.13",
"size": 24909,
"upload_time": "2024-01-21T13:25:00",
"upload_time_iso_8601": "2024-01-21T13:25:00.029788Z",
"url": "https://files.pythonhosted.org/packages/f5/fa/e39825e88d715ced9281f42ab12382f0ee86a317e227fa09bf0b9d479242/dndfog-0.6.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ff74d81177842de99f25e4bab3820560c29b2e23f8202f2bb3311aecaedaa656",
"md5": "0376de0f9ff41d0c1557464d44588e42",
"sha256": "5f23042536ee4868bcd5a948963ecc4b7f99fcbeb020a7eb46c805dc59634ed9"
},
"downloads": -1,
"filename": "dndfog-0.6.5.tar.gz",
"has_sig": false,
"md5_digest": "0376de0f9ff41d0c1557464d44588e42",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10,<3.13",
"size": 18890,
"upload_time": "2024-01-21T13:25:02",
"upload_time_iso_8601": "2024-01-21T13:25:02.484545Z",
"url": "https://files.pythonhosted.org/packages/ff/74/d81177842de99f25e4bab3820560c29b2e23f8202f2bb3311aecaedaa656/dndfog-0.6.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-21 13:25:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "MrThearMan",
"github_project": "dndfog",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "dndfog"
}