Coder Social home page Coder Social logo

abovevtt's Introduction

AboveVTT

AboveVTT is a project that integrates a VTT inside your DnDBeyond campaign.

Disclaimer

I (Daniele "cyruzzo" Martini) started AboveVTT as a hobby project. The initial target was just to have a shared maps and tokens, but then things got out of hand. As this was just a way to "hack" inside DnDBeyond, I took every possible bad shortcut and ignored any best practice. The goal was (and still is) to reach features quickly.

Contributing

Considerations:

  • Right now AboveVTT have people running games with it, so the most important rule for any PR is we try our best to don't break things
  • Every PR MUST support basic compatibility with the previous versions of AboveVTT.
  • Don't reformat the pieces you are not editing. It makes the PR hard to read, and you risk causing conflicts with other people work.
  • Join the discord server and talk with me about what you are working on
  • When you send me a pull request from one of your branches, don't add more features to that until I merge it (only bugfixes)
  • Try to keep different features in separate branches, so I can import them individually
  • Be nice to other devs

License

Copyright (c) 2021 Daniele Martini

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.

abovevtt's People

Contributors

azmoria avatar bain2236 avatar brookesi avatar collinherber avatar cowoder avatar cyelis1224 avatar cyruzzo avatar dottertrotter avatar ellasar742 avatar etus12 avatar hypergig avatar jleldridge avatar josh-archer avatar joshbrodienz avatar jupi-taru avatar jupi-taru2 avatar kokolokoli avatar kolemyers avatar kudolpf avatar limpingninja avatar mrkuzio avatar palad1npt avatar pensan avatar quantumheart avatar reidb avatar rishabh2 avatar sj-jordaan avatar snaildice avatar vlaminck avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

abovevtt's Issues

Migrate TokenCustomizations to the cloud

The TokenCustomization object encompasses customizations to monsters, players, and custom tokens. Persisting these changes to the cloud will cover everything within the TokensPanel.

The tricky part of this is that it is not tied to a campaign. These changes should be persisted at some sort of account level, but we don't have a good way to do that in the cloud just yet.

Allow selection and fog to extend outside map

It's really hard to select tokens on the edge of the map, and it's impossible to draw/clear fog all the way to the edge of the map. Being able to draw/select outside of the map would be a great QoL improvement.

Adding tokens doesn't respect global hidden setting

Expected

If you enable the global Hide setting, monster tokens and custom tokens should be hidden when they are added.

Actual

Tokens are not hidden when added from the following places

  • Monster Panel plus button
  • Monster Panel drag and drop
  • Custom tokens plus button
  • Custom tokens drag and drop

Reference

This bug was reported by Seraphim via Discord.

Changes to PC sheets done by the DM no longer force an update to the player side

When the DM open a PC sheet it sends a "lock" message to the player.

When the DM closes a PC sheet id sends an "unlock" message to the players. This unlock
message used to trigger a refresh of the PC sheet on the player, so to update it with any change made by the DM.

Since .71 , from the player view, the PC sheet is no longer inside an iframe, so we need to think if there is a way to force
this reload.

This is probably not going to be easy.

Cleanup the token context menu

Most of the context menu options could be moved into a SidebarPanel modal. By adding a Configure Token option that opens a sidebar modal, we can greatly simplify the token context menu to only the things that get used a lot.
These are the best candidates to move:

  • size
  • options
  • name
  • change image
  • lock/unlock/restrict player movement

Bug: decreasing monster HP goes below 0

Expected

The monster HP should be 0

Actual

BUG: When adjust HP on Token Context Menu, using "-12" to decrement 12 points, if this brings a monster below 0, the token is not "X'd" but just shows negative HP. Adjusting HP from the HP numbers on the token directly works as expected.

Reported by GameKnight via Discord

Allow tokens to be copied from one scene and pasted on another

There are two parts to this.

  1. We don't currently allow player tokens to be copied. We would need to allow player tokens to be copied, but not pasted.
  2. We only hold a reference to the copied token id. We don't actually duplicate the tokens until they are pasted. We would need to either duplicate the token objects when they are copied, or when changing scenes.

workaround for "Portraits not loading" DDB bug

DDB has a long-standing bug with cookies handling that breaks the loading of monster and character images.

Once the Cookie: header became too big.. the url from which DDB serves images start blocking connections with a 400 error.

The biggest issue is the "Ratings" cookie.

We need to at least automatically delete that cookie.

Improve Combat Tracker UI

This needs to be discussed as a group.

Do we want the UI to be much different or do we want to just give it a light facelift?

we need to handle the limit of max 8 encounter for "non-subscriber"

Right now if a "non subcriber" has maxed out his encounters he won't be able to DM.

We need to at least detect this condition and give a warning on what to do.

We may also consider deleting our "unused abovevtt" encounters everytime someone join. But detecting the issue and giving proper directions is more important.

Token Dead X sometimes disappears

This is hard to reproduce, but I think it can be solved by always having the dead element on tokens and then hide/show it instead of adding and removing it.

Add support for images that use dropbox urls

The share links that Dropbox generates always have ?dl=0 at the end of the url. dl stands for download, and they also support raw which will give you the image without the Dropbox interface. Parsing image urls like we do for google drive should allow us to simply swap ?dl=0 with ?raw=1.

Scenes creation and importing needs to be more intuitive for new users

  1. If pressing "super mega wizard" on a "pre-configure/ aligned map" we should give a warning and let use rethink that.

  2. DM_MAP should be an advanced feature. PLAYER_MAP should maybe be something like "Import image from Url"

  3. Maybe the "Super Mega Wizard" should be hidden under an "advanced tab" IF the map is already aligned

Homebrew monster images aren't loading in stat blocks

DDB gives us 2 urls for monster images. A large size, and a thumbnail size. We default to the large one, and fall back to the thumbnail size if the large one doesn't exist. However, for homebrew monsters, the large image url exists, but isn't accessible.

This is the fallback code in EncounterHandler

	let url = stat.data.largeAvatarUrl;
	if (url === undefined || url == null || url.length == 0) {
		url = stat.data.avatarUrl;
	}

We might be able to just use avatarUrl, but the best solution would be to hit the url to verify it's valid.

Right Click into the token context menu "trap"

When you right click on a text field inside the token menu.. it triggers the "drag to move" function and the pointer is stuck.

To exit you need to press ESC (or in some cases you may be able to move the pointer outside and click somewhere).

Add support for phased battlemaps

Phased battlemaps are maps that have multiple images that progress as the scene progresses. Here is a good example.

The easy part is the data model. The Scene object just needs a list of phases which would be an array of url strings. The player_map would get set to the first item in that array, and when we move to the next phase, we set the player_map to the next item in the array. We would also need to send a message to have all players update the map image.

The hard part is the UI. We would need to update the scene creation form to allow for n number of urls to be added. We would also need a way for DMs to increment/decrement the phase from the scenes window. And it would be nice if there was a way for the DM to preview which image is next before they increment the phase.

Square Auras rotate when you rotate a token

Only the image should rotate, not the aura. This is difficult because the aura is on the img tag. In order to do this, I think we could add a new element on the token with a class of aura, and move all the aura logic there instead of on the img.

Update rpgDiceRoller formatting to look more like DDB dice rolls

This was added a while back, but was disabled because it was missing a couple of features. The code still exists in Main.js function send_rpg_dice_to_ddb.

These are the reasons it was disabled:

  1. It displays the DM image, but it should display the monster image.
  2. The "send to everyone" button doesn't always show up. (this might actually be unrelated, and would instead be handled by #272 )
  3. "To Hit" information was missing.

Remove query params from url

Currently, the join link id is in the url. We probably shouldn't expose that.

To do this, we will either need to write it to localStorage or be able to fetch it from the cloud. I think fetching it from the cloud would be ideal, but we need to figure out how to do user-specific cloud interactions first. Currently, it is all done using the join link key.

Limit token size

There should be some upper bound on token sizes. We had a user with performance issues that were cause by a token that was set to 14533333 px

Allow importing maps and tokens from Patreon content creators

As a DM who subscribes to many Patreon content creators, I would like a way to authenticate with Patreon and link to maps or token images directly from Patreon.

Authenticating with Patreon and connecting to specific content creators is definitely possible, but I don't know if we can link to it without downloading it. This will require some investigation, and potentially working with some content creators to see how they handle things like Foundry modules.

Audio 2.0

Master Volume
Master volume slider for controlling the volume of the current Audio Stage.

Audio Stage
A place to stage all the audio you wish to play. Each row in the Audio Stage represents an individual Audio Entity, and has the following controls:

  • Volume control
  • Play/pause button
  • Loop checkbox
  • Remove button
  • Edit (to edit the entity)

An audio entity can be one of two things: an audio track, or an audio playlist. An entire audio stage can be saved and loaded later. At the top of the Audio Stage there will be the following controls:

  • Play/pause button (for starting and pausing the current Audio Stage)
  • Name / Dropdown (for switching the stage)
  • Save button
  • Delete button

Audio Entity List
A place that contains a list all audio entities. This component will be much longer than the Audio Stage. When you import a track, this is where it goes as a new entity. You can build playlists from multiple tracks, which also become new entities. Tracks and playlists are treated the same (with one very minor difference). Each audio entity will contain the following controls:

  • Add button (adds the entity to the current stage)
  • Quick play button (adds the entity to the current stage and plays it)
  • Edit button (to edit the entity)
  • Delete button (to remove the track from the list)

The only way tracks differ from playlists is tracks can be multi-selected and added to a new or existing playlist. Other than that they are exactly the same. Audio entities contain the following metadata, which can modified upon clicking the Edit button:

  • Name
  • Source
    • Urls for tracks
    • Tracks for playlists
  • Tags

At the top of the Audio Entity List, there will be the following controls:

  • Search box (more on this below)
  • Add button (for adding a new track)

The search box will be a fuzzy search and filter over the whole list, for quickly finding what you need. The search will query over all entity metadata, including (and most especially) tags. This will make it easy to quickly build or add to a stage on the fly.

Notes

This was designed with the following in mind:

  • Streamlined experience for in game play
    • Playing a stage is just 2 clicks away
    • Playing an adhoc track is just 2 clicks away
    • Changing the current stage is just 3 clicks away
    • Search box for quickly finding entities
  • Plain and simple UX
    • Just 3 components in the main audio tab
    • Most detail oriented tasks are in sub modals (things you won't want to do in game)
  • Future improvements (not for now)
    • Stages can be accessible via a mini player in the main component via quick play buttons (stages can be associated with emojis)
    • Master volume control outside of the audio tap
    • Bulk importing of tracks
  • Tactical implementation
    • Despite how complex this sounds, it is all very simple web components with minimal tweaking
    • Since all audio things happen in the Audio Stage, events and child events from this component need only be replicated to the players via the MB to keep everyone's stage in sync (all players will have the same stage, only not be able to modify it)
    • Master volume is a client thing, ie each player (and the DM) has their own master volume

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.