Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

Rotate groups of tokens?

I can't rotate groups of tokens on the objects layer, for some reason.  I select them all, click and drag on the rotate icon, but it just gives me a ping.  Has this changed since the past?  How can I rotate groups of tokens now?
1596138215
The Aaron
Roll20 Production Team
API Scripter
I'm seeing this same behavior.  You can still do it by holding 'E' on the keyboard and rolling your mouse wheel for 45º rotations (alt-'E' for 1º rotations).
1596138716

Edited 1596138731
The Aaron
Roll20 Production Team
API Scripter
Are you using a mouse, or a trackpad?  Also, what OS and Browser?
Hi CB, Unfortunately, I have not been able to reproduce this issue on my end, so a few questions and steps for you: 1. Does this persist in a brand new game? 2. What is your browser/OS? Are you using a mouse or a track pad? 3. Does this seem to happen only on certain pages within a game? If so, what game and what page. 4. Could you grab a console log when you attempt to rotate the group. For more information on submitting a console log you can view our help center documents here: Chrome:&nbsp; <a href="https://roll20.zendesk.com/hc/en-us/articles/360040673774-Submitting-a-Console-Log-in-Chrome" rel="nofollow">https://roll20.zendesk.com/hc/en-us/articles/360040673774-Submitting-a-Console-Log-in-Chrome</a> Firefox:&nbsp; <a href="https://roll20.zendesk.com/hc/en-us/articles/360040673814-Submitting-a-Console-Log-in-Firefox" rel="nofollow">https://roll20.zendesk.com/hc/en-us/articles/360040673814-Submitting-a-Console-Log-in-Firefox</a> Thanks!
1596142149
The Aaron
Roll20 Production Team
API Scripter
I've tracked this down.&nbsp; It only happens on pages with Updated Dynamic Lighting enabled.
I am using chrome, desktop, wired mouse and keyboard, windows 10, updated dynamic lighting enabled.&nbsp; The E+mouse wheel works, though!&nbsp; This happens on all pages of my game that use UDL, and none that do not use UDL.
1596145684

Edited 1596145828
CB
Pro
NOTE: This is the console log for everything since I started up the game (into the map with UDL).&nbsp; The rotation error is at the bottom of this script starting with " 334(index):417 Uncaught TypeError: ".&nbsp; Tried to post a screenshot, but roll20 won't let me do that for some reason. Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'sha256-dm6tOb8rwEmENe5+ec26sQvlH6Xd1CBZ7IvtZ4kJ1og=' 'sha256-jlxVUPsj/qdPM120UwbjpC4Tw7dq+obb7SYUV+lSfrI=' 'nonce-XlJjz4QobJZB1AeJ' <a href="http://cdn.inspectlet.com" rel="nofollow">http://cdn.inspectlet.com</a> https://*.googlesyndication.com https://*.doubleclick.net <a href="https://partner.googleadservices.com" rel="nofollow">https://partner.googleadservices.com</a> <a href="https://www.googletagservices.com" rel="nofollow">https://www.googletagservices.com</a> <a href="https://ssl.google-analytics.com" rel="nofollow">https://ssl.google-analytics.com</a> <a href="https://www.google-analytics.com" rel="nofollow">https://www.google-analytics.com</a> <a href="https://ajax.googleapis.com" rel="nofollow">https://ajax.googleapis.com</a> <a href="http://ajax.googleapis.com" rel="nofollow">http://ajax.googleapis.com</a> <a href="https://d3clqjduf2gvxg.cloudfront.net" rel="nofollow">https://d3clqjduf2gvxg.cloudfront.net</a> <a href="https://cdn.firebase.com" rel="nofollow">https://cdn.firebase.com</a> https://*.firebaseio.com https://*.tokbox.com https://*.opentok.com <a href="http://static.opentok.com" rel="nofollow">http://static.opentok.com</a> <a href="http://www.google-analytics.com" rel="nofollow">http://www.google-analytics.com</a> <a href="http://cdn.crowdin.com" rel="nofollow">http://cdn.crowdin.com</a> <a href="https://crowdin.com" rel="nofollow">https://crowdin.com</a> <a href="http://stun.l.google.com" rel="nofollow">http://stun.l.google.com</a> *.sentry-cdn.com". Either the 'unsafe-inline' keyword, a hash ('sha256-pTNkp50U6tVf8FuQzTMh762+Nza6SP/j648+XWvdL+s='), or a nonce ('nonce-...') is required to enable inline execution. jquery.migrate.js:20 JQMIGRATE: Logging is active ?timestamp=1596145618&amp;disablewebgl=false&amp;forcelongpolling=false&amp;offsite=false&amp;fbdebug=false&amp;forcetouch=false:15 CAMPAIGN ID: 4518289 (index):325 Logged in - checking Account GDPR status: true app.js?1596127817:552 70 app.js?1596127817:553 Custom Sheet Translation app.js?1596127817:558 TOUCH SUPPORTED: false app.js?1596127817:558 USING WEBGL ACCELERATION... app.js?1596127817:558 WEBGL STARTUP SUCCESS app.js?1596127817:576 Loading Custom character sheet. app.js?1596127817:576 Including compendium template css. tutorial_tips.js:7 tuts loaded (index):1 [DOM] Found 3 elements with non-unique id #0: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;input class=​"filter-search_filter-value filtername" data-filter-num=​"name" data-match-type=​"Any" id=​"0" name=​"Name" type=​"text" value&gt;​ &lt;input class=​"filter-search_filter-value filtername" data-filter-num=​"name" data-match-type=​"Any" id=​"0" name=​"Name" type=​"text" value&gt;​ &lt;select aria-selected=​"true" class=​"chosen filter-search_filter-value" data-filter-num=​"0" data-match-type=​"Any" id=​"0" multiple name=​"expansion"&gt;​…​&lt;/select&gt;​ (index):1 [DOM] Found 3 elements with non-unique id #1: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;select name=​"Level[]​" id=​"1" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"1" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;select name=​"Alignment[]​" id=​"1" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"1" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;select name=​"Item Type[]​" id=​"1" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"1" data-match-type=​"Exact" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ (index):1 [DOM] Found 2 elements with non-unique id #2: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;select name=​"Classes[]​" id=​"2" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"2" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;input class=​"filter-search_filter-value" data-filter-num=​"2" data-match-type=​"Any" id=​"2" name=​"Speed" type=​"text" value&gt;​ (index):1 [DOM] Found 2 elements with non-unique id #3: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;select name=​"School[]​" id=​"3" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"3" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;select name=​"Type[]​" id=​"3" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"3" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ (index):1 [DOM] Found 2 elements with non-unique id #6: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;select name=​"Casting Time[]​" id=​"6" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"6" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;select name=​"Languages[]​" id=​"6" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"6" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ (index):1 [DOM] Found 2 elements with non-unique id #7: (More info: <a href="https://goo.gl/9p2vKq" rel="nofollow">https://goo.gl/9p2vKq</a> ) &lt;select name=​"Range[]​" id=​"7" class=​"chosen filter-search_filter-value multiselect" multiple=​"multiple" aria-selected=​"true" data-filter-num=​"7" data-match-type=​"Any" placeholder=​"Select Some Options"&gt;​…​&lt;/select&gt;​ &lt;select aria-selected=​"true" class=​"chosen filter-search_filter-value" data-filter-num=​"7" data-match-type=​"Any" id=​"7" multiple name=​"expansion"&gt;​…​&lt;/select&gt;​ sheetsandboxworker.js?1596145619981:682 Starting up WEB WORKER roll20.js:2585 Beyond20: Roll20 module loaded. (index):417 Refused to load the script ' <a href="https://js-agent.newrelic.com/nr-1167.min.js" rel="nofollow">https://js-agent.newrelic.com/nr-1167.min.js</a> ' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'sha256-dm6tOb8rwEmENe5+ec26sQvlH6Xd1CBZ7IvtZ4kJ1og=' 'sha256-jlxVUPsj/qdPM120UwbjpC4Tw7dq+obb7SYUV+lSfrI=' 'nonce-XlJjz4QobJZB1AeJ' <a href="http://cdn.inspectlet.com" rel="nofollow">http://cdn.inspectlet.com</a> https://*.googlesyndication.com https://*.doubleclick.net <a href="https://partner.googleadservices.com" rel="nofollow">https://partner.googleadservices.com</a> <a href="https://www.googletagservices.com" rel="nofollow">https://www.googletagservices.com</a> <a href="https://ssl.google-analytics.com" rel="nofollow">https://ssl.google-analytics.com</a> <a href="https://www.google-analytics.com" rel="nofollow">https://www.google-analytics.com</a> <a href="https://ajax.googleapis.com" rel="nofollow">https://ajax.googleapis.com</a> <a href="http://ajax.googleapis.com" rel="nofollow">http://ajax.googleapis.com</a> <a href="https://d3clqjduf2gvxg.cloudfront.net" rel="nofollow">https://d3clqjduf2gvxg.cloudfront.net</a> <a href="https://cdn.firebase.com" rel="nofollow">https://cdn.firebase.com</a> https://*.firebaseio.com https://*.tokbox.com https://*.opentok.com <a href="http://static.opentok.com" rel="nofollow">http://static.opentok.com</a> <a href="http://www.google-analytics.com" rel="nofollow">http://www.google-analytics.com</a> <a href="http://cdn.crowdin.com" rel="nofollow">http://cdn.crowdin.com</a> <a href="https://crowdin.com" rel="nofollow">https://crowdin.com</a> <a href="http://stun.l.google.com" rel="nofollow">http://stun.l.google.com</a> *.sentry-cdn.com". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback. r @ (index):417 load (async) __nr_require.loader @ (index):417 r @ (index):417 __nr_require.1 @ (index):417 turnOnNewRelicBrowserPro @ (index):417 acceptCookies @ (index):378 checkAccountGdprCookieSettings @ (index):328 checkGdprStatus @ (index):316 (anonymous) @ (index):414 DevTools failed to load SourceMap: Could not load content for <a href="https://app.roll20.net/js/d20/underscore-min.map" rel="nofollow">https://app.roll20.net/js/d20/underscore-min.map</a> : HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE app.js?1596127817:566 Final page load. app.js?1596127817:564 Auth'ed. app.js?1596127817:564 Go post auth! app.js?1596127817:564 initial setup app.js?1596127817:565 joining game... app.js?1596127817:563 Player -LcHvYUOKgVlTaZ_0-kH is offline... app.js?1596127817:228 THREE.WebGLRenderer 69 app.js?1596127817:563 Player -LdpeyJywpXlg2qk3xFU is offline... app.js?1596127817:563 Player -Le92ibum_sLUrF4PEE5 is offline... app.js?1596127817:563 Player -LeMm1d5nm-hY5FZoXGQ is offline... app.js?1596127817:563 Player -LeMvcw2R4MCSzHhXk4e is offline... app.js?1596127817:563 Player -Lf301JS2Q5lTSxSjrRK is offline... app.js?1596127817:563 Player -LjNAdKM21ZgXQhgqF9x is offline... app.js?1596127817:563 Player -M6GJnWdaE7pdrzG7Gyb is offline... app.js?1596127817:565 Deferred finish joining... app.js?1596127817:552 Firebase Online 14app.js?1596127817:561 Full load page! app.js?1596127817:564 We have 19 pages mini.jpg:1 GET <a href="https://s3.amazonaws.com/files.d20.io/images/126954183/c3Z0BUxgI3WW4fP_zMFJDQ/mini.jpg?1587767216" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/126954183/c3Z0BUxgI3WW4fP_zMFJDQ/mini.jpg?1587767216</a> 403 (Forbidden) Image (async) (anonymous) @ jquery-1.9.1.js:6063 access @ jquery-1.9.1.js:852 html @ jquery-1.9.1.js:6038 d20.journal.refreshJournalList @ app.js?1596127817:576 (anonymous) @ app.js?1596127817:576 nrWrapper @ (index):417 setTimeout (async) nrWrapper @ (index):417 i @ app.js?1596127817:576 d20.journal.refreshJournalList @ app.js?1596127817:576 (anonymous) @ app.js?1596127817:568 trigger @ base.js?1595950670:7 _onModelEvent @ base.js?1595950670:7 trigger @ base.js?1595950670:7 add @ base.js?1595950670:7 _add @ app.js?1596127817:81 child_added @ app.js?1596127817:81 (anonymous) @ firebase.2.4.0.js:203 gc @ firebase.2.4.0.js:52 cc @ firebase.2.4.0.js:30 dc @ firebase.2.4.0.js:29 h.Kb @ firebase.2.4.0.js:220 h.Ld @ firebase.2.4.0.js:188 Eh.Ld @ firebase.2.4.0.js:178 (anonymous) @ firebase.2.4.0.js:176 yh @ firebase.2.4.0.js:170 La.onmessage @ firebase.2.4.0.js:169 s3.amazonaws.com/files.d20.io/images/86700540/Puem4ksqIOuzF6dnT3_slA/thumb.jpeg?1563376064:1 GET <a href="https://s3.amazonaws.com/files.d20.io/images/86700540/Puem4ksqIOuzF6dnT3_slA/thumb.jpeg?1563376064" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/86700540/Puem4ksqIOuzF6dnT3_slA/thumb.jpeg?1563376064</a> 403 (Forbidden) Image (async) buildFragment @ jquery-1.9.1.js:6469 domManip @ jquery-1.9.1.js:6129 append @ jquery-1.9.1.js:5949 callback @ app.js?1596127817:586 a @ base.js?1595950670:20 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 nrWrapper @ (index):417 XMLHttpRequest.send (async) nrWrapper @ (index):417 send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 s @ base.js?1595950670:20 (anonymous) @ base.js?1595950670:20 each @ jquery-1.9.1.js:648 each @ jquery-1.9.1.js:270 t.fn.infinitescroll @ base.js?1595950670:20 (anonymous) @ app.js?1596127817:586 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 nrWrapper @ (index):417 XMLHttpRequest.send (async) nrWrapper @ (index):417 send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 d20.library.buildRecentUploads @ app.js?1596127817:586 (anonymous) @ app.js?1596127817:563 (anonymous) @ base.js?1595950670:6 nrWrapper @ (index):417 setTimeout (async) nrWrapper @ (index):417 C.delay @ base.js?1595950670:6 C.defer @ base.js?1595950670:6 initialize @ app.js?1596127817:563 t.Model @ base.js?1595950670:7 T.i @ base.js?1595950670:8 _prepareModel @ base.js?1595950670:7 add @ base.js?1595950670:7 reset @ base.js?1595950670:7 (anonymous) @ app.js?1596127817:564 (anonymous) @ firebase.2.4.0.js:201 gc @ firebase.2.4.0.js:52 cc @ firebase.2.4.0.js:30 dc @ firebase.2.4.0.js:29 h.Kb @ firebase.2.4.0.js:220 h.Ld @ firebase.2.4.0.js:188 Eh.Ld @ firebase.2.4.0.js:178 (anonymous) @ firebase.2.4.0.js:176 yh @ firebase.2.4.0.js:170 La.onmessage @ firebase.2.4.0.js:169 s3.amazonaws.com/files.d20.io/images/85976957/leC0JCISuXMuMSbQLur8fQ/thumb.jpeg?1562631629:1 GET <a href="https://s3.amazonaws.com/files.d20.io/images/85976957/leC0JCISuXMuMSbQLur8fQ/thumb.jpeg?1562631629" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/85976957/leC0JCISuXMuMSbQLur8fQ/thumb.jpeg?1562631629</a> 403 (Forbidden) Image (async) buildFragment @ jquery-1.9.1.js:6469 domManip @ jquery-1.9.1.js:6129 append @ jquery-1.9.1.js:5949 callback @ app.js?1596127817:586 a @ base.js?1595950670:20 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 nrWrapper @ (index):417 XMLHttpRequest.send (async) nrWrapper @ (index):417 send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 s @ base.js?1595950670:20 (anonymous) @ base.js?1595950670:20 each @ jquery-1.9.1.js:648 each @ jquery-1.9.1.js:270 t.fn.infinitescroll @ base.js?1595950670:20 (anonymous) @ app.js?1596127817:586 fire @ jquery-1.9.1.js:1037 fireWith @ jquery-1.9.1.js:1148 done @ jquery-1.9.1.js:8074 callback @ jquery-1.9.1.js:8598 nrWrapper @ (index):417 XMLHttpRequest.send (async) nrWrapper @ (index):417 send @ jquery-1.9.1.js:8526 ajax @ jquery-1.9.1.js:7978 jQuery.&lt;computed&gt; @ jquery-1.9.1.js:7614 d20.library.buildRecentUploads @ app.js?1596127817:586 (anonymous) @ app.js?1596127817:563 (anonymous) @ base.js?1595950670:6 nrWrapper @ (index):417 setTimeout (async) nrWrapper @ (index):417 C.delay @ base.js?1595950670:6 C.defer @ base.js?1595950670:6 initialize @ app.js?1596127817:563 t.Model @ base.js?1595950670:7 T.i @ base.js?1595950670:8 _prepareModel @ base.js?1595950670:7 add @ base.js?1595950670:7 reset @ base.js?1595950670:7 (anonymous) @ app.js?1596127817:564 (anonymous) @ firebase.2.4.0.js:201 gc @ firebase.2.4.0.js:52 cc @ firebase.2.4.0.js:30 dc @ firebase.2.4.0.js:29 h.Kb @ firebase.2.4.0.js:220 h.Ld @ firebase.2.4.0.js:188 Eh.Ld @ firebase.2.4.0.js:178 (anonymous) @ firebase.2.4.0.js:176 yh @ firebase.2.4.0.js:170 La.onmessage @ firebase.2.4.0.js:169 334(index):417 Uncaught TypeError: Cannot read property 'id' of undefined &nbsp; &nbsp; at e.init (app.js?1596127817:554) &nbsp; &nbsp; at new e (app.js?1596127817:554) &nbsp; &nbsp; at app.js?1596127817:555 &nbsp; &nbsp; at base.js?1595950670:6 &nbsp; &nbsp; at Array.forEach (&lt;anonymous&gt;) &nbsp; &nbsp; at C.each.C.forEach (base.js?1595950670:6) &nbsp; &nbsp; at Function.C.map.C.collect (base.js?1595950670:6) &nbsp; &nbsp; at e.updateFromGraphics (app.js?1596127817:555) &nbsp; &nbsp; at i._rotateObject (app.js?1596127817:549) &nbsp; &nbsp; at i.__onMouseMove (app.js?1596127817:550)
Thank you all! A Ticket has been submitted to the dev team to make sure this gets addressed as soon as we can!
Just noticed this in my own pages that I recently updated to UDL. So glad to find this thread! Can confirm that I have this same bug today. But, I didn't actually know about holding 'E' and using the mouse wheel to rotate. That DOES work, even though click-dragging the lollipop handle does not.&nbsp; I can also confirm that using Alt-E-mousehwheel provides fine-grained rotation. That at least unblocks me to keep using the pages rather than rolling back to the old lighting. Thanks again!