From 7abed3262ffb6fd3c8de292ab4f01952bb57aedd Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 2 Jul 2018 14:05:39 +0000 Subject: [PATCH 001/159] chore(package): update bowser to version 1.9.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 24b2fabe536..d1a4032fd78 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "babel-preset-env": "^1.6.1", "babel-preset-react": "^6.22.0", "base64-loader": "1.0.0", - "bowser": "1.9.3", + "bowser": "1.9.4", "chromedriver": "2.40.0", "classnames": "2.2.6", "copy-webpack-plugin": "^4.5.1", From 9aea2d1d97c5c099f1c44a89d297e5647dd02c72 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 12 Jun 2018 16:24:31 -0400 Subject: [PATCH 002/159] wip --- .../connection-modal/connection-modal.css | 81 +++++++++++++++++++ .../connection-modal/connection-modal.jsx | 38 +++++++++ src/containers/blocks.jsx | 17 ++-- src/containers/connection-modal.jsx | 31 +++++++ 4 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 src/components/connection-modal/connection-modal.css create mode 100644 src/components/connection-modal/connection-modal.jsx create mode 100644 src/containers/connection-modal.jsx diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css new file mode 100644 index 00000000000..34a8f5a21e3 --- /dev/null +++ b/src/components/connection-modal/connection-modal.css @@ -0,0 +1,81 @@ +@import "../../css/colors.css"; +@import "../../css/units.css"; + +.modal-content { + width: 360px; +} + +.body { + background: $ui-white; + padding: 1.5rem 2.25rem; +} + +.label { + font-weight: 500; + margin: 0 0 0.75rem; +} + +.input { + margin-bottom: 1.5rem; + width: 100%; + border: 1px solid $ui-black-transparent; + border-radius: 5px; + padding: 0 1rem; + height: 3rem; + color: $text-primary-transparent; + font-size: .875rem; +} + +.button-row { + font-weight: bolder; + text-align: right; +} + +.button-row button { + padding: 0.75rem 1rem; + border-radius: 0.25rem; + background: white; + border: 1px solid $ui-black-transparent; + font-weight: 600; + font-size: 0.85rem; +} + +.button-row button.ok-button { + background: $motion-primary; + border: $motion-primary; + color: white; +} + +.button-row button + button { + margin-left: 0.5rem; +} + +.more-options { + border-top: 1px dashed hsla(0, 0%, 0%, .25); + overflow: visible; + padding: 1rem; + text-align: center; + margin: 0 0 1rem; +} + +.hide-more-options { + display: none; +} + +.more-options-accordion { + width: 60%; + margin: 0 auto; +} + +.more-options-text { + opacity: .5; +} + +.more-options-icon { + width: .75rem; + height: .75rem; + margin-left: .5rem; + vertical-align: middle; + padding-bottom: .2rem; + opacity: .5; +} diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx new file mode 100644 index 00000000000..33ca819c27b --- /dev/null +++ b/src/components/connection-modal/connection-modal.jsx @@ -0,0 +1,38 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; +import Modal from '../modal/modal.jsx'; + +import styles from './connection-modal.css'; + +const ConnectionModalComponent = props => ( + + + + + + + +); + +ConnectionModalComponent.propTypes = { + onCancel: PropTypes.func.isRequired, + title: PropTypes.string.isRequired +}; + +export default ConnectionModalComponent; diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 1b411d6336e..13d87d9d442 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -9,6 +9,7 @@ import VM from 'scratch-vm'; import analytics from '../lib/analytics'; import Prompt from './prompt.jsx'; +import ConnectionModal from './connection-modal.jsx'; import BlocksComponent from '../components/blocks/blocks.jsx'; import ExtensionLibrary from './extension-library.jsx'; import CustomProcedures from './custom-procedures.jsx'; @@ -365,13 +366,17 @@ class Blocks extends React.Component { {...props} /> {this.state.prompt ? ( - + ) : null} {extensionLibraryVisible ? ( diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx new file mode 100644 index 00000000000..460db8f9680 --- /dev/null +++ b/src/containers/connection-modal.jsx @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import bindAll from 'lodash.bindall'; +import ConnectionModalComponent from '../components/connection-modal/connection-modal.jsx'; + +class ConnectionModal extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleCancel' + ]); + } + handleCancel () { + this.props.onCancel(); + } + render () { + return ( + + ); + } +} + +ConnectionModal.propTypes = { + onCancel: PropTypes.func.isRequired, + title: PropTypes.string.isRequired +}; + +export default ConnectionModal; From 176d7e985b10affc7e96093e60c62306cffe04dd Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 12 Jun 2018 17:24:43 -0400 Subject: [PATCH 003/159] wip --- src/components/connection-modal/connection-modal.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 33ca819c27b..e9ce818e812 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -20,7 +20,7 @@ const ConnectionModalComponent = props => ( onClick={props.onCancel} > From 554e59134377b670d896659977d9d3c9c4f5aa44 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Thu, 14 Jun 2018 15:20:20 -0400 Subject: [PATCH 004/159] wip --- .../connection-modal/connected-step.jsx | 29 ++++++++++ .../connection-modal/connecting-step.jsx | 29 ++++++++++ .../connection-modal/connection-modal.css | 45 ++------------ .../connection-modal/connection-modal.jsx | 29 +++++----- .../connection-modal/error-step.jsx | 29 ++++++++++ .../connection-modal/scanning-step.jsx | 58 +++++++++++++++++++ src/components/modal/modal.jsx | 3 +- src/containers/blocks.jsx | 41 +++++++++---- src/containers/connection-modal.jsx | 16 ++++- src/containers/scanning-step.jsx | 42 ++++++++++++++ src/lib/libraries/extensions/index.jsx | 6 +- 11 files changed, 255 insertions(+), 72 deletions(-) create mode 100644 src/components/connection-modal/connected-step.jsx create mode 100644 src/components/connection-modal/connecting-step.jsx create mode 100644 src/components/connection-modal/error-step.jsx create mode 100644 src/components/connection-modal/scanning-step.jsx create mode 100644 src/containers/scanning-step.jsx diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx new file mode 100644 index 00000000000..03a70235e4b --- /dev/null +++ b/src/components/connection-modal/connected-step.jsx @@ -0,0 +1,29 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; + +import styles from './connection-modal.css'; + +const ConnectedStep = props => ( + + + + + +); + +ConnectedStep.propTypes = { +}; + +export default ConnectedStep; diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx new file mode 100644 index 00000000000..b2b30cffbbc --- /dev/null +++ b/src/components/connection-modal/connecting-step.jsx @@ -0,0 +1,29 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; + +import styles from './connection-modal.css'; + +const ConnectingStep = props => ( + + + + + +); + +ConnectingStep.propTypes = { +}; + +export default ConnectingStep; diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index 34a8f5a21e3..d403af910e8 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -5,6 +5,10 @@ width: 360px; } +.header { + background-color: $pen-primary; +} + .body { background: $ui-white; padding: 1.5rem 2.25rem; @@ -15,17 +19,6 @@ margin: 0 0 0.75rem; } -.input { - margin-bottom: 1.5rem; - width: 100%; - border: 1px solid $ui-black-transparent; - border-radius: 5px; - padding: 0 1rem; - height: 3rem; - color: $text-primary-transparent; - font-size: .875rem; -} - .button-row { font-weight: bolder; text-align: right; @@ -49,33 +42,3 @@ .button-row button + button { margin-left: 0.5rem; } - -.more-options { - border-top: 1px dashed hsla(0, 0%, 0%, .25); - overflow: visible; - padding: 1rem; - text-align: center; - margin: 0 0 1rem; -} - -.hide-more-options { - display: none; -} - -.more-options-accordion { - width: 60%; - margin: 0 auto; -} - -.more-options-text { - opacity: .5; -} - -.more-options-icon { - width: .75rem; - height: .75rem; - margin-left: .5rem; - vertical-align: middle; - padding-bottom: .2rem; - opacity: .5; -} diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index e9ce818e812..73699b937c3 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -1,37 +1,40 @@ -import {FormattedMessage} from 'react-intl'; import PropTypes from 'prop-types'; import React from 'react'; import Box from '../box/box.jsx'; import Modal from '../modal/modal.jsx'; +import ScanningStep from '../../containers/scanning-step.jsx'; +import ConnectingStep from './connecting-step.jsx'; +import ConnectedStep from './connected-step.jsx'; +import ErrorStep from './error-step.jsx'; + import styles from './connection-modal.css'; +const phases = { + scanning: ScanningStep, + connecting: ConnectingStep, + connected: ConnectedStep, + error: ErrorStep +}; + const ConnectionModalComponent = props => ( - - - + {React.createElement(phases[props.phase], props)} ); ConnectionModalComponent.propTypes = { onCancel: PropTypes.func.isRequired, + onSearch: PropTypes.func.isRequired, + phase: PropTypes.string.isRequired, title: PropTypes.string.isRequired }; diff --git a/src/components/connection-modal/error-step.jsx b/src/components/connection-modal/error-step.jsx new file mode 100644 index 00000000000..451c7ab37f1 --- /dev/null +++ b/src/components/connection-modal/error-step.jsx @@ -0,0 +1,29 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; + +import styles from './connection-modal.css'; + +const ErrorStep = props => ( + + + + + +); + +ErrorStep.propTypes = { +}; + +export default ErrorStep; diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx new file mode 100644 index 00000000000..c5fc4bbe654 --- /dev/null +++ b/src/components/connection-modal/scanning-step.jsx @@ -0,0 +1,58 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; + +import styles from './connection-modal.css'; + +const ScanningStep = props => ( + + + {props.searching ? ( + props.devices.length === 0 ? ( +
search icon here
+ ) : ( + props.devices.map(device => ( +
{device.name}
+ )) + ) + ) : ( +
No devices found, click on this hyperlink right now
+ )} +
+ + + + + + +
+); + +ScanningStep.propTypes = { + devices: PropTypes.arrayOf(PropTypes.shape({ + name: PropTypes.string + })), + searching: PropTypes.bool.isRequired +}; + +ScanningStep.defaultProps = { + devices: [], + searching: true +}; + +export default ScanningStep; diff --git a/src/components/modal/modal.jsx b/src/components/modal/modal.jsx index dff3ce8537b..631e77261c2 100644 --- a/src/components/modal/modal.jsx +++ b/src/components/modal/modal.jsx @@ -26,7 +26,7 @@ const ModalComponent = props => ( direction="column" grow={1} > -
+
{this.state.prompt ? ( - // - + ) : null} + {this.state.connectionModal ? ( + ) : null} {extensionLibraryVisible ? ( diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index 460db8f9680..0860b50b68a 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -7,25 +7,35 @@ class ConnectionModal extends React.Component { constructor (props) { super(props); bindAll(this, [ - 'handleCancel' + 'handleCancel', + 'handleSearch' ]); + this.state = { + phase: 'scanning' + }; } handleCancel () { this.props.onCancel(); } + handleSearch () { + this.props.onSearch(); + } render () { return ( ); } } ConnectionModal.propTypes = { + id: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, - title: PropTypes.string.isRequired + onSearch: PropTypes.func.isRequired }; export default ConnectionModal; diff --git a/src/containers/scanning-step.jsx b/src/containers/scanning-step.jsx new file mode 100644 index 00000000000..44d0c578189 --- /dev/null +++ b/src/containers/scanning-step.jsx @@ -0,0 +1,42 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import bindAll from 'lodash.bindall'; +import ScanningStepComponent from '../components/connection-modal/scanning-step.jsx'; + +class ScanningStep extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleCancel', + 'handleSearch' + ]); + this.state = { + searching: true, + devices: [] + }; + } + handleCancel () { + this.props.onCancel(); + } + handleSearch () { + this.props.onSearch(); + } + render () { + return ( + + ); + } +} + +ScanningStep.propTypes = { + id: PropTypes.string.isRequired, + onCancel: PropTypes.func.isRequired, + onSearch: PropTypes.func.isRequired +}; + +export default ScanningStep; diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 71404f8fb0e..82b5e67d950 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -120,7 +120,7 @@ export default [ /> ), featured: true, - disabled: true + disabled: false }, { name: 'LEGO WeDo 2.0', @@ -134,7 +134,7 @@ export default [ /> ), featured: true, - disabled: true + disabled: false }, { name: 'LEGO MINDSTORMS EV3', @@ -148,7 +148,7 @@ export default [ /> ), featured: true, - disabled: true + disabled: false }, { name: 'LEGO Boost', From 67a449abcf6862db31eb9c1eaaa760fdc8886776 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Mon, 18 Jun 2018 11:54:55 -0400 Subject: [PATCH 005/159] wip --- .../connection-modal/connected-step.jsx | 2 +- .../connection-modal/connecting-step.jsx | 2 +- .../connection-modal/connection-modal.jsx | 13 ++++--------- .../connection-modal/error-step.jsx | 2 +- .../connection-modal/scanning-step.jsx | 12 +++++++++--- src/containers/connection-modal.jsx | 13 +++++-------- src/containers/scanning-step.jsx | 19 ++++++++++++++----- 7 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index 03a70235e4b..5b3bf09c0e9 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -14,7 +14,7 @@ const ConnectedStep = props => ( onClick={props.onSearch} > diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index b2b30cffbbc..6827be41015 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -14,7 +14,7 @@ const ConnectingStep = props => ( onClick={props.onSearch} > diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 73699b937c3..c7f9c339098 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -11,13 +11,6 @@ import ErrorStep from './error-step.jsx'; import styles from './connection-modal.css'; -const phases = { - scanning: ScanningStep, - connecting: ConnectingStep, - connected: ConnectedStep, - error: ErrorStep -}; - const ConnectionModalComponent = props => ( ( onRequestClose={props.onCancel} > - {React.createElement(phases[props.phase], props)} + {props.phase === 'scanning' && } + {props.phase === 'connecting' && } + {props.phase === 'connected' && } + {props.phase === 'error' && } ); ConnectionModalComponent.propTypes = { onCancel: PropTypes.func.isRequired, - onSearch: PropTypes.func.isRequired, phase: PropTypes.string.isRequired, title: PropTypes.string.isRequired }; diff --git a/src/components/connection-modal/error-step.jsx b/src/components/connection-modal/error-step.jsx index 451c7ab37f1..8fab3e1f789 100644 --- a/src/components/connection-modal/error-step.jsx +++ b/src/components/connection-modal/error-step.jsx @@ -14,7 +14,7 @@ const ErrorStep = props => ( onClick={props.onSearch} > diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index c5fc4bbe654..10647b0daf4 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -11,14 +11,20 @@ const ScanningStep = props => ( {props.searching ? ( props.devices.length === 0 ? ( -
search icon here
+
{'👀Scanning👀'}
) : ( props.devices.map(device => (
{device.name}
)) ) ) : ( -
No devices found, click on this hyperlink right now
+ + + )}
@@ -34,7 +40,7 @@ const ScanningStep = props => ( onClick={props.onSearch} > diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index 0860b50b68a..45fbec0aaab 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -2,13 +2,13 @@ import PropTypes from 'prop-types'; import React from 'react'; import bindAll from 'lodash.bindall'; import ConnectionModalComponent from '../components/connection-modal/connection-modal.jsx'; +import VM from 'scratch-vm'; class ConnectionModal extends React.Component { constructor (props) { super(props); bindAll(this, [ - 'handleCancel', - 'handleSearch' + 'handleCancel' ]); this.state = { phase: 'scanning' @@ -17,16 +17,13 @@ class ConnectionModal extends React.Component { handleCancel () { this.props.onCancel(); } - handleSearch () { - this.props.onSearch(); - } render () { return ( ); } @@ -35,7 +32,7 @@ class ConnectionModal extends React.Component { ConnectionModal.propTypes = { id: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, - onSearch: PropTypes.func.isRequired + vm: PropTypes.instanceOf(VM).isRequired }; export default ConnectionModal; diff --git a/src/containers/scanning-step.jsx b/src/containers/scanning-step.jsx index 44d0c578189..24b6a7c426c 100644 --- a/src/containers/scanning-step.jsx +++ b/src/containers/scanning-step.jsx @@ -2,19 +2,28 @@ import PropTypes from 'prop-types'; import React from 'react'; import bindAll from 'lodash.bindall'; import ScanningStepComponent from '../components/connection-modal/scanning-step.jsx'; +import VM from 'scratch-vm'; class ScanningStep extends React.Component { constructor (props) { super(props); bindAll(this, [ - 'handleCancel', - 'handleSearch' + 'handleCancel' ]); this.state = { searching: true, devices: [] }; } + componentDidMount () { + this.props.vm.on('peripheral_added', id => { + // console.log('gui says peripheral added', id); + this.setState({devices:this.state.devices.concat(id)}) + }); + } + componentWillUnmount () { + // remove the listener + } handleCancel () { this.props.onCancel(); } @@ -24,10 +33,9 @@ class ScanningStep extends React.Component { render () { return ( ); } @@ -36,7 +44,8 @@ class ScanningStep extends React.Component { ScanningStep.propTypes = { id: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, - onSearch: PropTypes.func.isRequired + onSearch: PropTypes.func.isRequired, + vm: PropTypes.instanceOf(VM).isRequired }; export default ScanningStep; From b15e2b7838f5e18d93f8cf6e6ba653200097901f Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 19 Jun 2018 18:00:17 -0400 Subject: [PATCH 006/159] wip --- .../connection-modal/connected-step.jsx | 3 ++ .../connection-modal/connection-modal.css | 22 ++++++++++- .../connection-modal/connection-modal.jsx | 3 ++ .../connection-modal/device-tile.jsx | 36 ++++++++++++++++++ .../connection-modal/scanning-step.jsx | 37 ++++++++++++------- src/containers/blocks.jsx | 6 +-- src/containers/connection-modal.jsx | 25 ++++++++++++- src/containers/scanning-step.jsx | 25 ++++++++----- 8 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 src/components/connection-modal/device-tile.jsx diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index 5b3bf09c0e9..2080340681e 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -6,6 +6,9 @@ import Box from '../box/box.jsx'; import styles from './connection-modal.css'; +// todo: update the flyout status button here? +// this.ScratchBlocks.updateStatusButton('microbit', this.ScratchBlocks.StatusButtonState.READY); + const ConnectedStep = props => ( diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index d403af910e8..b48a45c60d1 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -2,7 +2,7 @@ @import "../../css/units.css"; .modal-content { - width: 360px; + width: 480px; } .header { @@ -42,3 +42,23 @@ .button-row button + button { margin-left: 0.5rem; } + +.device-tile { + width: 100%; + height: 55px; + margin: 10px; +} + +.device-tile button { + padding: 0.75rem 1rem; + border-radius: 0.25rem; + font-weight: 600; + font-size: 0.85rem; + background: $motion-primary; + border: $motion-primary; + color: white; +} + +.device-tile-widgets { + float: right; +} diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index c7f9c339098..f99a6720b66 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -28,7 +28,10 @@ const ConnectionModalComponent = props => ( ); ConnectionModalComponent.propTypes = { + extensionId: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, + onConnected: PropTypes.func.isRequired, + onConnecting: PropTypes.func.isRequired, phase: PropTypes.string.isRequired, title: PropTypes.string.isRequired }; diff --git a/src/components/connection-modal/device-tile.jsx b/src/components/connection-modal/device-tile.jsx new file mode 100644 index 00000000000..58ee54026bd --- /dev/null +++ b/src/components/connection-modal/device-tile.jsx @@ -0,0 +1,36 @@ +import {FormattedMessage} from 'react-intl'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; + +import styles from './connection-modal.css'; + +const DeviceTile = props => ( + + + {props.name} + + {props.RSSI} + + + + +); + +DeviceTile.propTypes = { + RSSI: PropTypes.number, + name: PropTypes.string, + onConnecting: PropTypes.function, + peripheralId: PropTypes.string +}; + +export default DeviceTile; diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index 10647b0daf4..c581da32ec4 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -3,26 +3,33 @@ import PropTypes from 'prop-types'; import React from 'react'; import Box from '../box/box.jsx'; +import DeviceTile from './device-tile.jsx'; import styles from './connection-modal.css'; const ScanningStep = props => ( - {props.searching ? ( - props.devices.length === 0 ? ( + {props.scanning ? ( + props.deviceList.length === 0 ? (
{'👀Scanning👀'}
) : ( - props.devices.map(device => ( -
{device.name}
- )) + props.deviceList.map(device => + () + ) ) ) : ( )} @@ -37,7 +44,7 @@ const ScanningStep = props => ( +
); diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 6827be41015..092841daffb 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -8,17 +8,16 @@ import styles from './connection-modal.css'; const ConnectingStep = props => ( - - +
); diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index b48a45c60d1..48044c9e656 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -11,7 +11,6 @@ .body { background: $ui-white; - padding: 1.5rem 2.25rem; } .label { @@ -21,32 +20,36 @@ .button-row { font-weight: bolder; - text-align: right; + text-align: center; } -.button-row button { +.blue-button { padding: 0.75rem 1rem; border-radius: 0.25rem; - background: white; - border: 1px solid $ui-black-transparent; + background: $motion-primary; + color: white; font-weight: 600; font-size: 0.85rem; + margin: 0.25rem; } -.button-row button.ok-button { - background: $motion-primary; - border: $motion-primary; - color: white; +.refresh-button { } -.button-row button + button { - margin-left: 0.5rem; +.device-tile-pane { + overflow-y: scroll; + width: 100%; + height: 100%; + padding: 0.5rem; } .device-tile { + background-color: $ui-white; + border-radius: 0.25rem; + padding: 10px; width: 100%; height: 55px; - margin: 10px; + margin-bottom: 0.5rem; } .device-tile button { @@ -59,6 +62,31 @@ color: white; } +.signal-strength-text { + margin: 5px; +} + .device-tile-widgets { float: right; } + +.activityArea { + height: 165px; + background-color: $motion-light-transparent; + display: flex; + justify-content: center; + align-items: center; +} + +.activityAreaInfo { +} + +.bottomArea { + height: 150px; + background-color: $ui-white; +} + +.instructions { + text-align: center; + padding: 1rem; +} diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index f99a6720b66..4515c66e366 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -14,7 +14,7 @@ import styles from './connection-modal.css'; const ConnectionModalComponent = props => ( diff --git a/src/components/connection-modal/device-tile.jsx b/src/components/connection-modal/device-tile.jsx index 58ee54026bd..da0b21314dc 100644 --- a/src/components/connection-modal/device-tile.jsx +++ b/src/components/connection-modal/device-tile.jsx @@ -6,12 +6,13 @@ import Box from '../box/box.jsx'; import styles from './connection-modal.css'; +//@todo make this into a 'class component' const DeviceTile = props => ( {props.name} - {props.RSSI} + {props.RSSI} +
+ + + + ); diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index c581da32ec4..0c1184334f9 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -12,17 +12,25 @@ const ScanningStep = props => ( {props.scanning ? ( props.deviceList.length === 0 ? ( -
{'👀Scanning👀'}
+
+ +
) : ( - props.deviceList.map(device => - () - ) + + {props.deviceList.map(device => + () + )} + ) ) : ( @@ -34,24 +42,26 @@ const ScanningStep = props => ( )}
- - - - - + + + + ); @@ -63,7 +73,6 @@ ScanningStep.propTypes = { peripheralId: PropTypes.string })), onConnecting: PropTypes.function, - onScan: PropTypes.function, scanning: PropTypes.bool.isRequired }; diff --git a/src/css/colors.css b/src/css/colors.css index 8dbc51ecdbe..29c15c84ea6 100644 --- a/src/css/colors.css +++ b/src/css/colors.css @@ -15,6 +15,7 @@ $text-primary-transparent: hsla(225, 15%, 40%, 0.75); $motion-primary: hsla(215, 100%, 65%, 1); /* #4C97FF */ $motion-tertiary: hsla(215, 60%, 50%, 1); /* #3373CC */ $motion-transparent: hsla(215, 100%, 65%, 0.35); /* 35% transparent version of motion-primary */ +$motion-light-transparent: hsla(215, 100%, 65%, 0.1); /* 10% transparent version of motion-primary */ $red-primary: hsla(20, 100%, 55%, 1); /* #FF661A */ $red-tertiary: hsla(20, 100%, 45%, 1); /* #E64D00 */ From 9f3d4e7271e2c471c908bb0e3fea0c4c4f5afb33 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 26 Jun 2018 10:38:32 -0400 Subject: [PATCH 010/159] Add dots component placeholder --- .../connection-modal/connected-step.jsx | 5 +++++ .../connection-modal/connecting-step.jsx | 5 +++++ .../connection-modal/connection-modal.css | 1 + src/components/connection-modal/dots.jsx | 18 ++++++++++++++++++ .../connection-modal/scanning-step.jsx | 5 +++++ 5 files changed, 34 insertions(+) create mode 100644 src/components/connection-modal/dots.jsx diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index d14141fedf5..589cc05bfcb 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import Box from '../box/box.jsx'; +import Dots from './dots.jsx'; import styles from './connection-modal.css'; @@ -21,6 +22,10 @@ const ConnectedStep = props => ( id="gui.connection.search" /> + ); diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 092841daffb..67bdd94e651 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import Box from '../box/box.jsx'; +import Dots from './dots.jsx'; import styles from './connection-modal.css'; @@ -18,6 +19,10 @@ const ConnectingStep = props => ( id="gui.connection.search" /> + ); diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index 48044c9e656..f7d6cb8dafb 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -84,6 +84,7 @@ .bottomArea { height: 150px; background-color: $ui-white; + text-align: center; } .instructions { diff --git a/src/components/connection-modal/dots.jsx b/src/components/connection-modal/dots.jsx new file mode 100644 index 00000000000..e0f40ef4367 --- /dev/null +++ b/src/components/connection-modal/dots.jsx @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import Box from '../box/box.jsx'; +import styles from './connection-modal.css'; + +const Dots = props => ( + +
{'step: '}{props.counter}{' / '}{props.total}
+
+); + +Dots.propTypes = { + counter: PropTypes.number, + total: PropTypes.number +}; + +export default Dots; diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index 0c1184334f9..d5b3961d576 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -4,6 +4,7 @@ import React from 'react'; import Box from '../box/box.jsx'; import DeviceTile from './device-tile.jsx'; +import Dots from './dots.jsx'; import styles from './connection-modal.css'; @@ -50,6 +51,10 @@ const ScanningStep = props => ( id="gui.connection.scanning.instructions" /> + +class DeviceTile extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleConnecting' + ]); + } + handleConnecting () { + this.props.onConnecting(this.props.peripheralId); + } + render () { + return ( + + + {this.props.name} + + {this.props.RSSI} + + + - - -); + ); + } +} DeviceTile.propTypes = { RSSI: PropTypes.number, name: PropTypes.string, - onConnecting: PropTypes.function, + onConnecting: PropTypes.func, peripheralId: PropTypes.string }; From 732d378bba3a94829e9ff2594927e040833c1241 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 26 Jun 2018 21:20:05 -0400 Subject: [PATCH 012/159] Handle refresh and abort, and cleanup --- .../connection-modal/connecting-step.jsx | 15 ++++++-- .../connection-modal/connection-modal.jsx | 3 -- .../connection-modal/scanning-step.jsx | 5 +-- src/containers/connection-modal.jsx | 32 ++++++++--------- src/containers/scanning-step.jsx | 35 ++++++++++--------- 5 files changed, 51 insertions(+), 39 deletions(-) diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 67bdd94e651..8d0f43f4ef6 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -15,19 +15,30 @@ const ConnectingStep = props => ( + ); ConnectingStep.propTypes = { + onAbortConnecting: PropTypes.func }; export default ConnectingStep; diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 4515c66e366..3f642fdfe77 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -28,10 +28,7 @@ const ConnectionModalComponent = props => ( ); ConnectionModalComponent.propTypes = { - extensionId: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, - onConnected: PropTypes.func.isRequired, - onConnecting: PropTypes.func.isRequired, phase: PropTypes.string.isRequired, title: PropTypes.string.isRequired }; diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index d5b3961d576..53988803d5d 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -58,7 +58,7 @@ const ScanningStep = props => ( + +
); diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 8d0f43f4ef6..fd81bc15344 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -14,7 +14,7 @@ const ConnectingStep = props => ( @@ -24,7 +24,7 @@ const ConnectingStep = props => ( total={3} /> - + ); From d7e62f0e557c36204435dd47dcb56a3493906615 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Wed, 27 Jun 2018 14:22:57 -0400 Subject: [PATCH 016/159] Handle already connected and add disconnect button --- .../connection-modal/connected-step.jsx | 4 ++- .../connection-modal/connecting-step.jsx | 4 +-- .../connection-modal/error-step.jsx | 1 + src/containers/connection-modal.jsx | 27 +++++++++++++------ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index 3dfe9e87a21..a9c1ef1845b 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -33,7 +33,7 @@ const ConnectedStep = props => ( > @@ -53,6 +53,8 @@ const ConnectedStep = props => ( ); ConnectedStep.propTypes = { + onCancel: PropTypes.func, + onDisconnect: PropTypes.func }; export default ConnectedStep; diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index fd81bc15344..8df819323da 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -25,7 +25,7 @@ const ConnectingStep = props => ( />
@@ -44,6 +44,8 @@ const ErrorStep = props => ( ); ErrorStep.propTypes = { + onHelp: PropTypes.func, + onScanning: PropTypes.func }; export default ErrorStep; diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index f37e1b17fe4..aea1fc4598b 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -8,6 +8,7 @@ class ConnectionModal extends React.Component { constructor (props) { super(props); bindAll(this, [ + 'handleScanning', 'handleConnected', 'handleConnecting', 'handleDisconnect', @@ -31,6 +32,11 @@ class ConnectionModal extends React.Component { this.props.vm.removeListener('PERIPHERAL_CONNECTED', this.handleConnected); this.props.vm.removeListener('PERIPHERAL_ERROR', this.handleError); } + handleScanning () { + this.setState({ + phase: 'scanning' + }); + } handleConnecting (peripheralId) { this.props.vm.connectToPeripheral(this.props.extensionId, peripheralId); this.setState({ @@ -58,6 +64,9 @@ class ConnectionModal extends React.Component { phase: 'connected' }); } + handleHelp () { + // @todo: implement the help button + } render () { return ( ); } From f79dc99ecd49023680face5736d319bc6a67ff91 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Wed, 27 Jun 2018 17:06:20 -0400 Subject: [PATCH 018/159] Cleanup --- src/components/connection-modal/connected-step.jsx | 3 --- src/components/connection-modal/connecting-step.jsx | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index a9c1ef1845b..cf4d8722112 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -8,9 +8,6 @@ import Dots from './dots.jsx'; import styles from './connection-modal.css'; import classNames from 'classnames'; -// todo: update the flyout status button here? -// this.ScratchBlocks.updateStatusButton('microbit', this.ScratchBlocks.StatusButtonState.READY); - const ConnectedStep = props => ( diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 8df819323da..7ad5e0c367f 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -9,8 +9,7 @@ import styles from './connection-modal.css'; const ConnectingStep = props => ( - - + Date: Wed, 27 Jun 2018 17:56:26 -0400 Subject: [PATCH 019/159] Update status button on connect and disconnect --- src/containers/blocks.jsx | 5 +++++ src/containers/connection-modal.jsx | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 30a66304622..985211b06a6 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -41,6 +41,7 @@ class Blocks extends React.Component { 'handleCategorySelected', 'handleConnectionModalStart', 'handleConnectionModalClose', + 'handleStatusButtonUpdate', 'handlePromptStart', 'handlePromptCallback', 'handlePromptClose', @@ -341,6 +342,9 @@ class Blocks extends React.Component { handleConnectionModalClose () { this.setState({connectionModal: null}); } + handleStatusButtonUpdate (extensionId, status) { + this.ScratchBlocks.updateStatusButton(this.workspace, extensionId, status); + } handlePromptCallback (data) { this.state.prompt.callback(data); this.handlePromptClose(); @@ -394,6 +398,7 @@ class Blocks extends React.Component { extensionId={this.state.connectionModal.extensionId} vm={vm} onCancel={this.handleConnectionModalClose} + onStatusButtonUpdate={this.handleStatusButtonUpdate} /> ) : null} {extensionLibraryVisible ? ( diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index aea1fc4598b..73a3538657b 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -44,6 +44,7 @@ class ConnectionModal extends React.Component { }); } handleDisconnect () { + this.props.onStatusButtonUpdate(this.props.extensionId, 'not ready'); this.props.vm.disconnectExtensionSession(this.props.extensionId); this.props.onCancel(); } @@ -55,11 +56,13 @@ class ConnectionModal extends React.Component { this.props.onCancel(); } handleError () { + this.props.onStatusButtonUpdate(this.props.extensionId, 'not ready'); this.setState({ phase: 'error' }); } handleConnected () { + this.props.onStatusButtonUpdate(this.props.extensionId, 'ready'); this.setState({ phase: 'connected' }); @@ -88,6 +91,7 @@ class ConnectionModal extends React.Component { ConnectionModal.propTypes = { extensionId: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, + onStatusButtonUpdate: PropTypes.func.isRequired, vm: PropTypes.instanceOf(VM).isRequired }; From b861d6f9132b78cb93e4845f5c879c18c07f339c Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Thu, 28 Jun 2018 14:32:38 -0400 Subject: [PATCH 020/159] Add colored dots --- .../connection-modal/connected-step.jsx | 2 +- .../connection-modal/connecting-step.jsx | 2 +- .../connection-modal/connection-modal.css | 46 +++++++++++++++++++ src/components/connection-modal/dots.jsx | 45 +++++++++++++++++- .../connection-modal/error-step.jsx | 5 ++ .../connection-modal/scanning-step.jsx | 2 +- src/css/colors.css | 4 ++ 7 files changed, 101 insertions(+), 5 deletions(-) diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index cf4d8722112..e889e272faf 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -20,7 +20,7 @@ const ConnectedStep = props => ( />
diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 7ad5e0c367f..7b0fd6f4302 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -19,7 +19,7 @@ const ConnectingStep = props => ( /> @@ -39,9 +39,9 @@ const ConnectedStep = props => ( onClick={props.onCancel} >
From 0c4bdc92a4a251a2cbb98d2f629aff3da8591cbf Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Mon, 9 Jul 2018 13:37:58 -0400 Subject: [PATCH 038/159] Add listener for scan timeout to make scanning state reachable. This is not yet implemented in the VM, but will be needed when it is. --- src/containers/scanning-step.jsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/containers/scanning-step.jsx b/src/containers/scanning-step.jsx index bdab6c8a6eb..600eb8da8e0 100644 --- a/src/containers/scanning-step.jsx +++ b/src/containers/scanning-step.jsx @@ -9,6 +9,7 @@ class ScanningStep extends React.Component { super(props); bindAll(this, [ 'handlePeripheralListUpdate', + 'handlePeripheralScanTimeout', 'handleRefresh' ]); this.state = { @@ -20,11 +21,18 @@ class ScanningStep extends React.Component { this.props.vm.startDeviceScan(this.props.extensionId); this.props.vm.on( 'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); + this.props.vm.on( + 'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } componentWillUnmount () { // @todo: stop the device scan here this.props.vm.removeListener( 'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); + this.props.vm.removeListener( + 'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); + } + handlePeripheralScanTimeout () { + this.setState({scanning: false}); } handlePeripheralListUpdate (newList) { // TODO: sort peripherals by signal strength? so they don't jump around From 7c1d328cd7b0947874e673b1875302c2c15f732b Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Mon, 9 Jul 2018 14:00:05 -0400 Subject: [PATCH 039/159] Fix more formatted message descriptions --- src/components/connection-modal/device-tile.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/connection-modal/device-tile.jsx b/src/components/connection-modal/device-tile.jsx index 98027fcc61b..365b5ea7ac4 100644 --- a/src/components/connection-modal/device-tile.jsx +++ b/src/components/connection-modal/device-tile.jsx @@ -27,8 +27,8 @@ class DeviceTile extends React.Component { onClick={this.handleConnecting} > From 7cd866de624c58a6c9d8df2fdf7c920c4084a748 Mon Sep 17 00:00:00 2001 From: carljbowman Date: Mon, 9 Jul 2018 16:49:16 -0400 Subject: [PATCH 040/159] =?UTF-8?q?Change=20=E2=80=9Cmini-card=E2=80=9DUI?= =?UTF-8?q?=20Color?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In addtion to changing the UI color for “mini cards” from motion blue to extensions aqua, this commit also updates the color variable previously known as ‘$pen-primary’ to ‘$extensions-primary’. --- src/components/action-menu/action-menu.css | 6 +++--- src/components/camera-modal/camera-modal.css | 2 +- src/components/cards/card.css | 11 ++++++----- src/components/import-modal/import-modal.css | 6 +++--- src/components/preview-modal/preview-modal.css | 4 ++-- src/css/colors.css | 4 +++- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/components/action-menu/action-menu.css b/src/components/action-menu/action-menu.css index 6771a6851d5..8f39946c128 100644 --- a/src/components/action-menu/action-menu.css +++ b/src/components/action-menu/action-menu.css @@ -28,7 +28,7 @@ button::-moz-focus-inner { } .button:hover { - background: $pen-primary; + background: $extensions-primary; } .button:active { @@ -126,7 +126,7 @@ button::-moz-focus-inner { is not very easy to style. */ .tooltip { - background-color: $pen-primary !important; + background-color: $extensions-primary !important; opacity: 1 !important; border: 1px solid hsla(0, 0%, 0%, .1) !important; box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important; @@ -134,7 +134,7 @@ button::-moz-focus-inner { } .tooltip:after { - background-color: $pen-primary; + background-color: $extensions-primary; } .coming-soon-tooltip { diff --git a/src/components/camera-modal/camera-modal.css b/src/components/camera-modal/camera-modal.css index 5f631e41bf5..4ea962fbafd 100644 --- a/src/components/camera-modal/camera-modal.css +++ b/src/components/camera-modal/camera-modal.css @@ -93,7 +93,7 @@ $main-button-size: 2.75rem; } .main-button:hover { - background: $pen-primary; + background: $extensions-primary; box-shadow: 0 0 0 6px $motion-transparent; } diff --git a/src/components/cards/card.css b/src/components/cards/card.css index 99ab8a66c01..782b1e6eac6 100644 --- a/src/components/cards/card.css +++ b/src/components/cards/card.css @@ -41,7 +41,7 @@ left: 0; height: 1.8rem; width: 100%; - background: $motion-primary; + background: $extensions-primary; } .left-button, .right-button { @@ -51,14 +51,15 @@ z-index: 20; user-select: none; cursor: pointer; - background: $motion-primary; - box-shadow: 0 0 0 4px $motion-transparent; height: 40px; width: 40px; + background: $extensions-primary; + box-shadow: 0 0 0 4px $extensions-transparent; border-radius: 100%; display: flex; justify-content: center; align-items: center; + box-shadow: 0 0 0 6px $extensions-transparent; } .left-button { @@ -88,9 +89,9 @@ flex-direction: row; justify-content: space-between; align-items: center; - background: $motion-primary; - border-bottom: 1px solid $motion-tertiary; padding: 0.5rem; + background: $extensions-primary; + border-bottom: 1px solid $extensions-tertiary; font-size: 0.625rem; } diff --git a/src/components/import-modal/import-modal.css b/src/components/import-modal/import-modal.css index b41c02b1baa..b265efae02f 100644 --- a/src/components/import-modal/import-modal.css +++ b/src/components/import-modal/import-modal.css @@ -45,7 +45,7 @@ $sides: 20rem; box-sizing: border-box; width: 100%; - background-color: $pen-primary; + background-color: $extensions-primary; } .header-item { @@ -129,12 +129,12 @@ $sides: 20rem; font-weight: bold; font-size: .875rem; cursor: pointer; - border: 0px solid $pen-primary; + border: 0px solid $extensions-primary; outline: none; } .input-row button.ok-button { - background: $pen-primary; + background: $extensions-primary; color: white; } diff --git a/src/components/preview-modal/preview-modal.css b/src/components/preview-modal/preview-modal.css index 2c35acf63e0..d6cf6dc4568 100644 --- a/src/components/preview-modal/preview-modal.css +++ b/src/components/preview-modal/preview-modal.css @@ -69,8 +69,8 @@ } .button-row button.view-project-button { - background: $pen-primary; - border-color: $pen-primary; + background: $extensions-primary; + border-color: $extensions-primary; color: white; } diff --git a/src/css/colors.css b/src/css/colors.css index 8dbc51ecdbe..39503771d31 100644 --- a/src/css/colors.css +++ b/src/css/colors.css @@ -26,4 +26,6 @@ $control-primary: hsla(38, 100%, 55%, 1); /* #FFAB19 */ $data-primary: hsla(30, 100%, 55%, 1); /* #FF8C1A */ -$pen-primary: hsla(163, 85%, 40%, 1); /* #0FBD8C */ +$extensions-primary: hsla(163, 85%, 40%, 1); /* #0FBD8C */ +$extensions-tertiary: hsla(163, 85%, 30%, 1); /* #0B8E69 */ +$extensions-transparent: hsla(163, 85%, 40%, 0.35); /* 35% transparent version of extensions-primary */ From 37b0f8fb099acec49e30af310c3dcf7d6cb43560 Mon Sep 17 00:00:00 2001 From: carljbowman Date: Mon, 9 Jul 2018 16:52:07 -0400 Subject: [PATCH 041/159] General sizing and interaction tweaks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Resized the next/prev cards and buttons - Resized the “Remove” and “All Tips” buttons in the nav - Added hover feedback on next/prev and nav items --- src/components/cards/card.css | 42 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/src/components/cards/card.css b/src/components/cards/card.css index 782b1e6eac6..9e14a1fb2a6 100644 --- a/src/components/cards/card.css +++ b/src/components/cards/card.css @@ -14,21 +14,21 @@ top: 5%; background: $ui-white; border: 1px solid $ui-tertiary; - width: 10px; + width: .75rem; z-index: 10; opacity: 0.9; overflow: hidden; } .left-card { - left: -10px; + left: -.75rem; border-right: 0; border-top-left-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } .right-card { - right: -10px; + right: -.75rem; border-left: 0; border-top-right-radius: 0.75rem; border-bottom-right-radius: 0.75rem; @@ -39,7 +39,7 @@ position: absolute; top: 0; left: 0; - height: 1.8rem; + height: 2.5rem; width: 100%; background: $extensions-primary; } @@ -51,15 +51,24 @@ z-index: 20; user-select: none; cursor: pointer; - height: 40px; - width: 40px; background: $extensions-primary; box-shadow: 0 0 0 4px $extensions-transparent; + height: 44px; + width: 44px; border-radius: 100%; display: flex; justify-content: center; align-items: center; + transition: all 0.25s ease; +} + +.left-button:hover, .right-button:hover { box-shadow: 0 0 0 6px $extensions-transparent; + transform: scale(1.125); +} + +.left-button img, .right-button img{ + width: 1.75rem; } .left-button { @@ -89,10 +98,10 @@ flex-direction: row; justify-content: space-between; align-items: center; - padding: 0.5rem; background: $extensions-primary; border-bottom: 1px solid $extensions-tertiary; font-size: 0.625rem; + font-weight: bold; } .remove-button, .all-button { @@ -102,6 +111,11 @@ flex-direction: row; justify-content: center; align-items: center; + padding: 0.75rem; +} + +.remove-button:hover, .all-button:hover { + background-color: $ui-black-transparent; } .step-title { @@ -162,14 +176,14 @@ color: $motion-primary; font-weight: bold; font-size: 0.85rem; - margin: 14px 0px; + margin: .625rem 0px; text-align: center; font-weight: bold; text-align: center; } .help-icon, .close-icon { - height: 0.75rem; + height: 1rem; } .help-icon { @@ -199,9 +213,9 @@ display: flex; align-items: center; color: $ui-white; - font-size: 12px; + font-size: .75rem; font-weight: bold; - line-height: 15px; + line-height: 1rem; text-align: center; } @@ -229,10 +243,10 @@ height: 0.5rem; margin: 0 0.25rem; border-radius: 100%; - background: transparent; - border: 2px solid $ui-white-transparent; + background: $ui-white-transparent; } .active-step-pip { - background: white; + background: $ui-white; + box-shadow: 0px 0px 0px 2px $ui-black-transparent; } From b4b5f23a3003826830b0e55c3a9b2c7d0779dd3e Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Tue, 10 Jul 2018 09:53:59 -0400 Subject: [PATCH 042/159] Handle localized library strings for Analytics Eliminate warnings and errors due to library item text (name and desctiption) being localized components instead of simply a string. Some are not localized (e.g. LEGO EV3), so either string or component is possible. --- src/components/library-item/library-item.jsx | 5 ++++- src/containers/extension-library.jsx | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/library-item/library-item.jsx b/src/components/library-item/library-item.jsx index 8977d3f931d..19e88bc6ae5 100644 --- a/src/components/library-item/library-item.jsx +++ b/src/components/library-item/library-item.jsx @@ -106,7 +106,10 @@ class LibraryItem extends React.PureComponent { } LibraryItem.propTypes = { - description: PropTypes.string, + description: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.node + ]), disabled: PropTypes.bool, featured: PropTypes.bool, iconURL: PropTypes.string.isRequired, diff --git a/src/containers/extension-library.jsx b/src/containers/extension-library.jsx index a1af3bac41f..a23f1e6c8c7 100644 --- a/src/containers/extension-library.jsx +++ b/src/containers/extension-library.jsx @@ -46,10 +46,17 @@ class ExtensionLibrary extends React.PureComponent { }); } } + let gaLabel = ''; + if (typeof (item.name) === 'string') { + gaLabel = item.name; + } else { + // Name is localized, get the default message for the gaLabel + gaLabel = item.name.props.defaultMessage; + } analytics.event({ category: 'library', action: 'Select Extension', - label: item.name + label: gaLabel }); } render () { From 5014c7c395c1f41231a1e6e773ac3b8794516541 Mon Sep 17 00:00:00 2001 From: DD Liu Date: Tue, 10 Jul 2018 10:43:28 -0400 Subject: [PATCH 043/159] Use bitmapAdapter for costume upload --- src/containers/costume-library.jsx | 4 ++-- src/containers/costume-tab.jsx | 4 ++-- src/containers/stage.jsx | 2 ++ src/lib/file-uploader.js | 27 +++++++++++++++++---------- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/containers/costume-library.jsx b/src/containers/costume-library.jsx index fdef46f07fe..0de5fba13ef 100644 --- a/src/containers/costume-library.jsx +++ b/src/containers/costume-library.jsx @@ -28,8 +28,8 @@ class CostumeLibrary extends React.PureComponent { handleItemSelected (item) { const vmCostume = { name: item.name, - rotationCenterX: item.info[0], - rotationCenterY: item.info[1], + rotationCenterX: item.info[0] / 2, + rotationCenterY: item.info[1] / 2, bitmapResolution: item.info.length > 2 ? item.info[2] : 1, skinId: null }; diff --git a/src/containers/costume-tab.jsx b/src/containers/costume-tab.jsx index 248ce989be5..9cd10ec8b9a 100644 --- a/src/containers/costume-tab.jsx +++ b/src/containers/costume-tab.jsx @@ -164,8 +164,8 @@ class CostumeTab extends React.Component { const vmCostume = { name: item.name, md5: item.md5, - rotationCenterX: item.info[0], - rotationCenterY: item.info[1], + rotationCenterX: item.info[0] / 2, + rotationCenterY: item.info[1] / 2, bitmapResolution: item.info.length > 2 ? item.info[2] : 1, skinId: null }; diff --git a/src/containers/stage.jsx b/src/containers/stage.jsx index 01fc3ec7c72..0ff48ef0216 100644 --- a/src/containers/stage.jsx +++ b/src/containers/stage.jsx @@ -9,6 +9,7 @@ import {STAGE_DISPLAY_SIZES} from '../lib/layout-constants'; import {getEventXY} from '../lib/touch-utils'; import VideoProvider from '../lib/video/video-provider'; import {SVGRenderer as V2SVGAdapter} from 'scratch-svg-renderer'; +import {BitmapAdapter as V2BitmapAdapter} from 'scratch-svg-renderer'; import StageComponent from '../components/stage/stage.jsx'; @@ -60,6 +61,7 @@ class Stage extends React.Component { this.props.vm.attachRenderer(this.renderer); } this.props.vm.attachV2SVGAdapter(new V2SVGAdapter()); + this.props.vm.attachV2BitmapAdapter(new V2BitmapAdapter()); this.props.vm.setVideoProvider(new VideoProvider()); } componentDidMount () { diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js index d32f5cc1cdf..2df9f859390 100644 --- a/src/lib/file-uploader.js +++ b/src/lib/file-uploader.js @@ -1,4 +1,4 @@ -import {importBitmap} from 'scratch-svg-renderer'; +import {BitmapAdapter} from 'scratch-svg-renderer'; import log from './log.js'; /** @@ -79,7 +79,7 @@ const cacheAsset = function (storage, fileName, assetType, dataFormat, data) { /** * Handles loading a costume or a backdrop using the provided, context-relevant information. - * @param {ArrayBuffer | string} fileData The costume data to load (this can be an image url + * @param {ArrayBuffer | string} fileData The costume data to load (this can be a base64 string * iff the image is a bitmap) * @param {string} fileType The MIME type of this file * @param {string} costumeName The user-readable name to use for the costume. @@ -112,13 +112,15 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle return; } - const addCostumeFromBuffer = function (error, costumeBuffer) { - if (error) { - log.warn(`An error occurred while trying to extract image data: ${error}`); - return; - } - - const vmCostume = cacheAsset(storage, costumeName, assetType, costumeFormat, costumeBuffer); + const bitmapAdapter = new BitmapAdapter(); + const addCostumeFromBuffer = function (dataURI) { + const vmCostume = cacheAsset( + storage, + costumeName, + assetType, + costumeFormat, + bitmapAdapter.convertDataURIToBinary(dataURI) + ); handleCostume(vmCostume); }; @@ -130,7 +132,12 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle addCostumeFromBuffer(null, new Uint8Array(fileData)); } else { // otherwise it's a bitmap - importBitmap(fileData, addCostumeFromBuffer); + let dataURI = fileData; + if (fileData instanceof ArrayBuffer) { + dataURI = bitmapAdapter.convertBinaryToDataURI(fileData, fileType); + } + // @todo show an error message to user on failure? + bitmapAdapter.importBitmap(dataURI).then(value => addCostumeFromBuffer(value)); } }; From 18fc37c1290c604cc3948add3148c868aec4869b Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Tue, 10 Jul 2018 14:40:19 -0400 Subject: [PATCH 044/159] Propagate extension device images to make extension specific flows --- .../connection-modal/connected-step.jsx | 18 +- .../connection-modal/connecting-step.jsx | 50 ++- .../connection-modal/connection-modal.css | 183 ++++++++- .../connection-modal/connection-modal.jsx | 13 +- .../connection-modal/device-tile.jsx | 62 ++- .../connection-modal/error-step.jsx | 22 +- .../connection-modal/icons/back.svg | 10 + .../icons/bluetooth-white.svg | 10 + .../connection-modal/icons/cancel.svg | 10 + .../connection-modal/icons/close.svg | 10 + .../connection-modal/icons/help.svg | 10 + .../connection-modal/icons/refresh.svg | 10 + .../connection-modal/icons/searching.png | Bin 0 -> 42439 bytes .../connection-modal/scanning-step.jsx | 33 +- src/components/modal/modal.css | 4 + src/components/modal/modal.jsx | 7 + src/containers/blocks.jsx | 22 +- src/containers/connection-modal.jsx | 6 + src/containers/scanning-step.jsx | 2 + .../ev3/ev3-hub-illustration.svg | 41 ++ .../device-connection/ev3/ev3-menu-icon.svg | 23 ++ .../microbit/microbit-illustration.svg | 368 ++++++++++++++++++ .../microbit/microbit-menu-icon.svg | 101 +++++ src/lib/libraries/extensions/index.jsx | 12 + 24 files changed, 970 insertions(+), 57 deletions(-) create mode 100644 src/components/connection-modal/icons/back.svg create mode 100644 src/components/connection-modal/icons/bluetooth-white.svg create mode 100644 src/components/connection-modal/icons/cancel.svg create mode 100644 src/components/connection-modal/icons/close.svg create mode 100644 src/components/connection-modal/icons/help.svg create mode 100644 src/components/connection-modal/icons/refresh.svg create mode 100644 src/components/connection-modal/icons/searching.png create mode 100644 src/lib/libraries/extensions/device-connection/ev3/ev3-hub-illustration.svg create mode 100644 src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg create mode 100644 src/lib/libraries/extensions/device-connection/microbit/microbit-illustration.svg create mode 100644 src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg diff --git a/src/components/connection-modal/connected-step.jsx b/src/components/connection-modal/connected-step.jsx index 53b7b6356a8..c02f644bc4e 100644 --- a/src/components/connection-modal/connected-step.jsx +++ b/src/components/connection-modal/connected-step.jsx @@ -4,13 +4,26 @@ import React from 'react'; import Box from '../box/box.jsx'; import Dots from './dots.jsx'; - +import bluetoothIcon from './icons/bluetooth-white.svg'; import styles from './connection-modal.css'; import classNames from 'classnames'; const ConnectedStep = props => ( - + + +
+ + +
+
+
( ); ConnectedStep.propTypes = { + deviceImage: PropTypes.string.isRequired, onCancel: PropTypes.func, onDisconnect: PropTypes.func }; diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 7b0fd6f4302..063e67a826c 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -5,11 +5,27 @@ import React from 'react'; import Box from '../box/box.jsx'; import Dots from './dots.jsx'; +import bluetoothIcon from './icons/bluetooth-white.svg'; +import closeIcon from '../close-button/icon--close.svg'; + import styles from './connection-modal.css'; const ConnectingStep = props => ( - + + +
+ + +
+
+
( counter={1} total={3} /> - +
+ + +
); ConnectingStep.propTypes = { + deviceImage: PropTypes.string.isRequired, onDisconnect: PropTypes.func }; diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index 410569fa5ea..ee0a0aae1e6 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -18,14 +18,26 @@ margin: 0 0 0.75rem; } +.centered-row { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + .device-tile-pane { - overflow-y: scroll; + overflow-y: auto; width: 100%; height: 100%; padding: 0.5rem; } .device-tile { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + background-color: $ui-white; border-radius: 0.25rem; padding: 10px; @@ -34,22 +46,133 @@ margin-bottom: 0.5rem; } +.device-tile-name { + display: flex; + align-items: center; +} + +.device-tile-image { + margin-right: 0.5rem; +} + +.device-tile-name-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} + +.device-tile-name-label { + font-weight: bold; + font-size: 0.625rem; +} + +.device-tile-name-text { + font-size: 0.875rem; +} + .device-tile button { - padding: 0.75rem 1rem; + padding: 0.6rem 0.75rem; + border: none; border-radius: 0.25rem; font-weight: 600; font-size: 0.85rem; background: $motion-primary; border: $motion-primary; color: white; + cursor: pointer; +} + +.signal-strength-meter { + display: flex; + justify-content: space-between; + align-items: flex-end; + width: 22px; + height: 16px; + margin-right: 1rem; +} + +.signal-bar { + width: 4px; + border-radius: 4px; + background-color: #DBDBDB; +} + +.signal-bar:nth-of-type(1) { height: 25%; } +.signal-bar:nth-of-type(2) { height: 50%; } +.signal-bar:nth-of-type(3) { height: 75%; } +.signal-bar:nth-of-type(4) { height: 100%; } + +.green-bar { + background-color: $pen-primary; +} + +.radar { + width: 40px; + height: 40px; + margin-right: 0.5rem; + animation: spin 4s linear infinite; +} + +@keyframes spin { + 100% { + transform: rotate(360deg); + } +} + + +.device-activity { + position: relative; +} + +.device-activity-icon { + /* width: 80px; + height: 80px; */ } -.signal-strength-text { - margin: 5px; +.bluetooth-connecting-icon { + position: absolute; + top: -5px; + right: -15px; + padding: 5px 5px; + background-color: $motion-primary; + border-radius: 100%; + box-shadow: 0px 0px 0px 4px $motion-transparent; + /* animation: pulse-blue-ring 1s infinite ease-in-out alternate; */ + animation: wiggle 0.5s infinite ease-in-out alternate; + +} + +@keyframes pulse-blue-ring { + 100% { + box-shadow: 0px 0px 0px 8px $motion-light-transparent; + } +} + + +.bluetooth-connected-icon { + position: absolute; + top: -5px; + right: -15px; + padding: 5px 5px; + background-color: $pen-primary; + border-radius: 100%; + box-shadow: 0px 0px 0px 4px $pen-transparent; +} + + + +@keyframes wiggle { + 0% {transform: rotate(3deg) scale(1.05);} + 25% {transform: rotate(-3deg) scale(1.05);} + 50% {transform: rotate(5deg) scale(1.05);} + 75% {transform: rotate(-2deg) scale(1.05);} + 100% {transform: rotate(0deg) scale(1.05);} } .device-tile-widgets { - float: right; + display: flex; + align-items: center; } .activityArea { @@ -63,16 +186,54 @@ .button-row { font-weight: bolder; text-align: center; + display: flex; +} + +.abort-connecting-icon { + width: 10px; + transform: rotate(45deg); } .connection-button { - padding: 0.75rem 1rem; + padding: 0.6rem 0.75rem; border-radius: 0.5rem; background: $motion-primary; color: white; font-weight: 600; font-size: 0.85rem; margin: 0.25rem; + border: none; + cursor: pointer; + display: flex; + align-items: center; +} + +.connection-button:disabled { + background: $motion-transparent; +} + +.segmented-button { + display: flex; +} + +.segmented-button .connection-button:first-of-type { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + margin-right: 0; +} + +.segmented-button .connection-button:last-of-type { + margin-left: 1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.button-icon-right { + margin-left: 0.5rem; +} + +.button-icon-left { + margin-right: 0.5rem; } .red-button { @@ -82,13 +243,17 @@ .corner-buttons { display: flex; justify-content: space-between; - padding: 1rem; + width: 100%; + padding: 0 1rem; } .bottom-area { - height: 150px; background-color: $ui-white; text-align: center; + display: flex; + flex-direction: column; + align-items: center; + padding-bottom: 12px; } .instructions { @@ -106,7 +271,7 @@ .dots-holder { display: flex; - padding: 0.2rem; + padding: 0.25rem 0.1rem; border-radius: 1rem; background: $motion-light-transparent; } diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 3392f3fbe5a..b150d7fd8ce 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -20,19 +20,12 @@ const PHASES = keyMirror({ error: null }); -const messages = defineMessages({ - connectionModalLabel: { - defaultMessage: 'Scratch Device Connection Modal', - description: 'Title for scratch device connection modal', - id: 'gui.connectionModal.modalLabel' - } -}); - const ConnectionModalComponent = props => ( @@ -46,8 +39,10 @@ const ConnectionModalComponent = props => ( ConnectionModalComponent.propTypes = { intl: intlShape, + name: PropTypes.node, onCancel: PropTypes.func.isRequired, phase: PropTypes.oneOf(Object.keys(PHASES)).isRequired, + smallDeviceImage: PropTypes.string, title: PropTypes.string.isRequired }; diff --git a/src/components/connection-modal/device-tile.jsx b/src/components/connection-modal/device-tile.jsx index 365b5ea7ac4..c806453aa0f 100644 --- a/src/components/connection-modal/device-tile.jsx +++ b/src/components/connection-modal/device-tile.jsx @@ -1,5 +1,6 @@ import {FormattedMessage} from 'react-intl'; import PropTypes from 'prop-types'; +import classNames from 'classnames'; import React from 'react'; import bindAll from 'lodash.bindall'; import Box from '../box/box.jsx'; @@ -19,21 +20,57 @@ class DeviceTile extends React.Component { render () { return ( - - {this.props.name} - - {this.props.rssi} - + + + {this.props.name} + + + +
-80 + })} + /> +
-60 + })} + /> +
-40 + })} + /> +
-20 + })} + /> + + + ); } @@ -43,7 +80,8 @@ DeviceTile.propTypes = { name: PropTypes.string, onConnecting: PropTypes.func, peripheralId: PropTypes.string, - rssi: PropTypes.number + rssi: PropTypes.number, + smallDeviceImage: PropTypes.string }; export default DeviceTile; diff --git a/src/components/connection-modal/error-step.jsx b/src/components/connection-modal/error-step.jsx index 11af0a29b72..681d74b72a2 100644 --- a/src/components/connection-modal/error-step.jsx +++ b/src/components/connection-modal/error-step.jsx @@ -4,12 +4,23 @@ import React from 'react'; import Box from '../box/box.jsx'; import Dots from './dots.jsx'; +import helpIcon from './icons/help.svg'; +import backIcon from './icons/back.svg'; import styles from './connection-modal.css'; const ErrorStep = props => ( - + + +
+ +
+
+
( className={styles.connectionButton} onClick={props.onScanning} > + ( className={styles.connectionButton} onClick={props.onHelp} > + ( ); ErrorStep.propTypes = { + deviceImage: PropTypes.string.isRequired, onHelp: PropTypes.func, onScanning: PropTypes.func }; diff --git a/src/components/connection-modal/icons/back.svg b/src/components/connection-modal/icons/back.svg new file mode 100644 index 00000000000..42f7508f279 --- /dev/null +++ b/src/components/connection-modal/icons/back.svg @@ -0,0 +1,10 @@ + + + + back + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/bluetooth-white.svg b/src/components/connection-modal/icons/bluetooth-white.svg new file mode 100644 index 00000000000..df2ae141ebc --- /dev/null +++ b/src/components/connection-modal/icons/bluetooth-white.svg @@ -0,0 +1,10 @@ + + + + bluetooth-white + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/cancel.svg b/src/components/connection-modal/icons/cancel.svg new file mode 100644 index 00000000000..b30decdb65a --- /dev/null +++ b/src/components/connection-modal/icons/cancel.svg @@ -0,0 +1,10 @@ + + + + cancel + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/close.svg b/src/components/connection-modal/icons/close.svg new file mode 100644 index 00000000000..a537fc800d0 --- /dev/null +++ b/src/components/connection-modal/icons/close.svg @@ -0,0 +1,10 @@ + + + + close + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/help.svg b/src/components/connection-modal/icons/help.svg new file mode 100644 index 00000000000..2938e8340eb --- /dev/null +++ b/src/components/connection-modal/icons/help.svg @@ -0,0 +1,10 @@ + + + + help + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/refresh.svg b/src/components/connection-modal/icons/refresh.svg new file mode 100644 index 00000000000..3d4aebb4707 --- /dev/null +++ b/src/components/connection-modal/icons/refresh.svg @@ -0,0 +1,10 @@ + + + + refresh + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/searching.png b/src/components/connection-modal/icons/searching.png new file mode 100644 index 0000000000000000000000000000000000000000..260f3227f2ef09cc1aa6fbca0fc928e2b5be0e28 GIT binary patch literal 42439 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�oMkV_SI|Qz8so!+P$9v;Sff9kj93DY^2K>O%a(6$|>&IAB@EF3ppDNmZ z^$MO<8=m8&Z$kqX-RY>c>#__ptHay-cUIB1lv0d0#VE z&ne^3lysB_#_+>7(sK(oSWSbecpA^9a%gStIdE%;;w_&82TlGo^$&jgYognFz}W*c z)z(MB4&Yt)!}xyqdIR~q2>6-l>Fzb&E;^3^pZlZFO>BXoG8RDC|O?O8z#Um)Vrq>U#4*M92d_SH^?_$rR;QGMzHExhCaHlA|teo1K zHPGASfz3OHS3JB2jGRIbGhpR$$9NwDPJ9*ygPo(c-no9A_PoYMac5bW@tTZw?^5^1 zqmOm3|I1(4ef(otZ)Ln|z*{NJ5x8_G``eFphnYy1J9f65_)0J5({7Ey0<=bs=K&*2ielyzIfMw zw@4+6r~h?#@amrK&KV4PX@Nb8*>nw~y^Ht=#&ML&M=%b(yR6sbrYT#*VDzaI z8TEA@LTgj^>&#pAJQ~LrH@K-zj4{g2HI0>_b4+1atNSPeL_G}wdnx0L)AEUyz0hFM zlU^C%;8`~~E>m_1xVMPkVxW18Jbgm+GBor$=EeQjy9>Yfk98LwE_cICmB6k6-&Apr zCMGZa{d>Cu*YXZCgnd3X6B9$KFwonuAVes1{at9geosskADeobMqmN`vhF``*8 z&&VL@&?&4~Z#nNJe@_^&KA%#SU~mhn(+)MuSm`48wW{eFaPtfU3)~HkPlaO9m!Nw| z?@Ti?%wz2HtcJSGf|kp(3*F@pp6{;gde_l?c{59P4ftkCdy}+c$Ia<(j(wfxSd%=< zJC8Gb>1+nqi>-Gv7_mMLI*s8@VQhO8W3c*elDun&G0GF`OM@#IZNwPuk~}(h%on*B zU&O61^5wL}y?eWB*D%;)OWpkL>ZeV1*lx953G7N>R|2~d*p8`D}h}J>`Gv# bO5pzks-afWptNBB00000NkvXXu0mjfJO2(1 literal 0 HcmV?d00001 diff --git a/src/components/connection-modal/scanning-step.jsx b/src/components/connection-modal/scanning-step.jsx index b10f538a021..1728e1fd5d5 100644 --- a/src/components/connection-modal/scanning-step.jsx +++ b/src/components/connection-modal/scanning-step.jsx @@ -6,6 +6,9 @@ import Box from '../box/box.jsx'; import DeviceTile from './device-tile.jsx'; import Dots from './dots.jsx'; +import radarIcon from './icons/searching.png'; +import refreshIcon from './icons/refresh.svg'; + import styles from './connection-modal.css'; const ScanningStep = props => ( @@ -14,11 +17,17 @@ const ScanningStep = props => ( {props.scanning ? ( props.deviceList.length === 0 ? (
- +
+ + +
) : ( @@ -28,6 +37,7 @@ const ScanningStep = props => ( name={device.name} peripheralId={device.peripheralId} rssi={device.rssi} + smallDeviceImage={props.smallDeviceImage} onConnecting={props.onConnecting} />) )} @@ -37,7 +47,7 @@ const ScanningStep = props => ( @@ -47,7 +57,7 @@ const ScanningStep = props => ( @@ -60,10 +70,14 @@ const ScanningStep = props => ( onClick={props.onRefresh} > + @@ -77,7 +91,8 @@ ScanningStep.propTypes = { })), onConnecting: PropTypes.func, onRefresh: PropTypes.func, - scanning: PropTypes.bool.isRequired + scanning: PropTypes.bool.isRequired, + smallDeviceImage: PropTypes.string }; ScanningStep.defaultProps = { diff --git a/src/components/modal/modal.css b/src/components/modal/modal.css index 3aa21280beb..9a5a035a7de 100644 --- a/src/components/modal/modal.css +++ b/src/components/modal/modal.css @@ -83,6 +83,10 @@ $sides: 20rem; user-select: none; } +.header-image { + margin-right: 0.5rem; +} + .header-item-filter { display: flex; flex-basis: $sides; diff --git a/src/components/modal/modal.jsx b/src/components/modal/modal.jsx index 631e77261c2..940af75586f 100644 --- a/src/components/modal/modal.jsx +++ b/src/components/modal/modal.jsx @@ -33,6 +33,12 @@ const ModalComponent = props => ( styles.headerItemTitle )} > + {props.headerImage ? ( + + ) : null} {props.contentLabel}
ext.extensionId === categoryId); + if (extension && extension.launchDeviceConnectionFlow) { + this.handleConnectionModalStart(categoryId); + } + this.withToolboxUpdates(() => { this.workspace.toolbox_.setSelectedCategoryById(categoryId); }); @@ -338,10 +344,15 @@ class Blocks extends React.Component { this.setState(p); } handleConnectionModalStart (extensionId) { - const c = {connectionModal: { - extensionId: extensionId - }}; - this.setState(c); + const extension = extensionData.find(ext => ext.extensionId === extensionId); + if (extension) { + this.setState({connectionModal: { + extensionId: extensionId, + deviceImage: extension.deviceImage, + smallDeviceImage: extension.smallDeviceImage, + name: extension.name + }}); + } } handleConnectionModalClose () { this.setState({connectionModal: null}); @@ -402,7 +413,10 @@ class Blocks extends React.Component { ) : null} {this.state.connectionModal ? ( + + + ev3-hub-illustration + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg b/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg new file mode 100644 index 00000000000..7c8ea12abb7 --- /dev/null +++ b/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg @@ -0,0 +1,23 @@ + + + + ev3-menu-icon + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/microbit/microbit-illustration.svg b/src/lib/libraries/extensions/device-connection/microbit/microbit-illustration.svg new file mode 100644 index 00000000000..3ef892bcc45 --- /dev/null +++ b/src/lib/libraries/extensions/device-connection/microbit/microbit-illustration.svg @@ -0,0 +1,368 @@ + + + + microbit-illustration + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg b/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg new file mode 100644 index 00000000000..af97b7948e8 --- /dev/null +++ b/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg @@ -0,0 +1,101 @@ + + + + microbit-menu-icon + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 71404f8fb0e..a9d1018ce20 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -11,6 +11,12 @@ import ev3Image from './ev3.png'; import boostImage from './boost.png'; import translateImage from './translate.png'; +import ev3DeviceImage from './device-connection/ev3/ev3-hub-illustration.svg'; +import ev3MenuImage from './device-connection/ev3/ev3-menu-icon.svg'; + +import microbitDeviceImage from './device-connection/microbit/microbit-illustration.svg'; +import microbitMenuImage from './device-connection/microbit/microbit-menu-icon.svg'; + export default [ { name: ( @@ -121,6 +127,9 @@ export default [ ), featured: true, disabled: true + launchDeviceConnectionFlow: true, + deviceImage: microbitDeviceImage, + smallDeviceImage: microbitMenuImage }, { name: 'LEGO WeDo 2.0', @@ -149,6 +158,9 @@ export default [ ), featured: true, disabled: true + launchDeviceConnectionFlow: true, + deviceImage: ev3DeviceImage, + smallDeviceImage: ev3MenuImage }, { name: 'LEGO Boost', From c1494ade31711d1df34ea98fba819d58c5767c36 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Tue, 10 Jul 2018 14:48:25 -0400 Subject: [PATCH 045/159] Update translate extension library tile image --- src/lib/libraries/extensions/translate.png | Bin 43610 -> 20023 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/lib/libraries/extensions/translate.png b/src/lib/libraries/extensions/translate.png index 3e25993021b71beb390b2f6b9865b566e88839a6..95961ae52fee6e27c5f7946c41a7e4fd1d22fe7a 100644 GIT binary patch literal 20023 zcmV*YKv%zsP)KmEWv_;=tY2nJVbziycqDK0Y3)NO8^6M5I-35 zgB=HgEC;daFo7DK0+ugVR&xgTkw4Ckf zu3L4!^PM_B;lKT_{}8N0Ue!lg86ez3!bqQy(870K2f^K}EUOwH;uK*RM1=HMNW;*R zk31==lcK^$-yvd35*pfR6?Ot!`x9kdALqz|P9dV`@Z= zLx4d5E)W={0zIKlDG=OZ{}`|x5enBEZH`MubHIqb9v^JRae*7sYyUm38rK~608*ej zB0NGCbOoRnV7n)j*!vO2MU`SGEC@�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%0As9~dx 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 From 7ef5d2393e18ff224a77ddcc0d618965a995db43 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Tue, 10 Jul 2018 14:56:10 -0400 Subject: [PATCH 046/159] Fix linting --- src/components/connection-modal/connection-modal.jsx | 6 +----- src/lib/libraries/extensions/index.jsx | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index b150d7fd8ce..5ddcb33e3b8 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -1,7 +1,6 @@ import PropTypes from 'prop-types'; import React from 'react'; import keyMirror from 'keymirror'; -import {defineMessages, injectIntl, intlShape} from 'react-intl'; import Box from '../box/box.jsx'; import Modal from '../modal/modal.jsx'; @@ -38,7 +37,6 @@ const ConnectionModalComponent = props => ( ); ConnectionModalComponent.propTypes = { - intl: intlShape, name: PropTypes.node, onCancel: PropTypes.func.isRequired, phase: PropTypes.oneOf(Object.keys(PHASES)).isRequired, @@ -46,9 +44,7 @@ ConnectionModalComponent.propTypes = { title: PropTypes.string.isRequired }; -const IntlModal = injectIntl(ConnectionModalComponent); - export { - IntlModal as default, + ConnectionModalComponent as default, PHASES }; diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index a9d1018ce20..71b1f2fe9ef 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -126,7 +126,7 @@ export default [ /> ), featured: true, - disabled: true + disabled: true, launchDeviceConnectionFlow: true, deviceImage: microbitDeviceImage, smallDeviceImage: microbitMenuImage @@ -157,7 +157,7 @@ export default [ /> ), featured: true, - disabled: true + disabled: true, launchDeviceConnectionFlow: true, deviceImage: ev3DeviceImage, smallDeviceImage: ev3MenuImage From d9223d52a9053616d6c8e7bc41fc4341f387eb24 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Mon, 25 Jun 2018 18:14:46 -0400 Subject: [PATCH 047/159] =?UTF-8?q?Swap=20order=20of=20=E2=80=9Cstart=20so?= =?UTF-8?q?und=E2=80=9D=20and=20=E2=80=9Cplay=20sound=20until=20done?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/make-toolbox-xml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/make-toolbox-xml.js b/src/lib/make-toolbox-xml.js index 1c2a0ae1936..245c918e51e 100644 --- a/src/lib/make-toolbox-xml.js +++ b/src/lib/make-toolbox-xml.js @@ -270,12 +270,12 @@ const looks = function (isStage, targetId) { const sound = function (isStage, targetId) { return ` - + - + From 485e7785876105baf294e3fa657072070c12ae88 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 11 Jul 2018 05:59:24 +0000 Subject: [PATCH 048/159] chore(package): update react-virtualized to version 9.20.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ff0b80b12..190ca27ed4a 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "react-tabs": "2.2.2", "react-test-renderer": "16.2.0", "react-tooltip": "3.6.1", - "react-virtualized": "9.20.0", + "react-virtualized": "9.20.1", "redux": "3.7.2", "redux-mock-store": "^1.2.3", "redux-throttle": "0.1.1", From 373d571d9bd22413d94f20134fb4558df45906f6 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 11 Jul 2018 09:01:24 -0400 Subject: [PATCH 049/159] refresh blocks after setLocale promise returns Depends on https://github.com/LLK/scratch-vm/pull/1321 --- src/containers/blocks.jsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 40ad9234ed7..982f8a5666c 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -148,11 +148,12 @@ class Blocks extends React.Component { setLocale () { this.workspace.getFlyout().setRecyclingEnabled(false); this.ScratchBlocks.ScratchMsgs.setLocale(this.props.locale); - this.props.vm.setLocale(this.props.locale, this.props.messages); - - this.workspace.updateToolbox(this.props.toolboxXML); - this.props.vm.refreshWorkspace(); - this.workspace.getFlyout().setRecyclingEnabled(true); + this.props.vm.setLocale(this.props.locale, this.props.messages) + .then(() => { + this.workspace.updateToolbox(this.props.toolboxXML); + this.props.vm.refreshWorkspace(); + this.workspace.getFlyout().setRecyclingEnabled(true); + }); } updateToolbox () { From 54a3f37680dbf4c568696fae90732b86754ac1e1 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Tue, 10 Jul 2018 16:04:24 -0400 Subject: [PATCH 050/159] Use the improved extension status button API --- src/containers/blocks.jsx | 8 ++++++-- src/containers/connection-modal.jsx | 4 ++-- src/lib/blocks.js | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 20c6d482ff5..4c849837570 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -212,6 +212,8 @@ class Blocks extends React.Component { this.props.vm.addListener('targetsUpdate', this.onTargetsUpdate); this.props.vm.addListener('EXTENSION_ADDED', this.handleExtensionAdded); this.props.vm.addListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate); + this.props.vm.addListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate); + this.props.vm.addListener('PERIPHERAL_ERROR', this.handleStatusButtonUpdate); } detachVM () { this.props.vm.removeListener('SCRIPT_GLOW_ON', this.onScriptGlowOn); @@ -223,6 +225,8 @@ class Blocks extends React.Component { this.props.vm.removeListener('targetsUpdate', this.onTargetsUpdate); this.props.vm.removeListener('EXTENSION_ADDED', this.handleExtensionAdded); this.props.vm.removeListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate); + this.props.vm.removeListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate); + this.props.vm.removeListener('PERIPHERAL_ERROR', this.handleStatusButtonUpdate); } updateToolboxBlockValue (id, value) { @@ -357,8 +361,8 @@ class Blocks extends React.Component { handleConnectionModalClose () { this.setState({connectionModal: null}); } - handleStatusButtonUpdate (extensionId, status) { - this.ScratchBlocks.updateStatusButton(this.workspace, extensionId, status); + handleStatusButtonUpdate () { + this.ScratchBlocks.refreshStatusButtons(this.workspace); } handlePromptCallback (input, optionSelection) { this.state.prompt.callback(input, optionSelection, diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index b256b030958..ffb5c6ddf5c 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -56,13 +56,13 @@ class ConnectionModal extends React.Component { this.props.onCancel(); } handleError () { - this.props.onStatusButtonUpdate(this.props.extensionId, 'not ready'); + this.props.onStatusButtonUpdate(); this.setState({ phase: PHASES.error }); } handleConnected () { - this.props.onStatusButtonUpdate(this.props.extensionId, 'ready'); + this.props.onStatusButtonUpdate(); this.setState({ phase: PHASES.connected }); diff --git a/src/lib/blocks.js b/src/lib/blocks.js index c1bde0ff2e6..f6b78b68ee4 100644 --- a/src/lib/blocks.js +++ b/src/lib/blocks.js @@ -208,5 +208,12 @@ export default function (vm) { return monitoredBlock ? monitoredBlock.isMonitored : false; }; + ScratchBlocks.FlyoutExtensionCategoryHeader.getExtensionState = function (extensionId) { + if (vm.getPeripheralIsConnected(extensionId)) { + return ScratchBlocks.StatusButtonState.READY; + } + return ScratchBlocks.StatusButtonState.NOT_READY; + }; + return ScratchBlocks; } From 7dca9e3d420ac588f3aa22b42bf494cec4f544da Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 11 Jul 2018 09:36:04 -0400 Subject: [PATCH 051/159] Bring in blocks updated needed for this --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ff0b80b12..edf38821f95 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531144787", + "scratch-blocks": "0.1.0-prerelease.1531313153", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180709132225", "scratch-render": "0.1.0-prerelease.20180618173030", From f718e151c83af341f3ca4ac9873c74e4e2acccb4 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 11 Jul 2018 10:34:26 -0400 Subject: [PATCH 052/159] Stop block drag surface from stopping mouse enter events --- src/components/blocks/blocks.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/blocks/blocks.css b/src/components/blocks/blocks.css index 5f738b196ff..e02486ce0fe 100644 --- a/src/components/blocks/blocks.css +++ b/src/components/blocks/blocks.css @@ -40,6 +40,14 @@ box-sizing: content-box; } +.blocks :global(.blocklyBlockDragSurface) { + /* + Fix an issue where the drag surface was preventing hover events for sharing blocks. + This does not prevent user interaction on the blocks themselves. + */ + pointer-events: none; +} + /* Shrink category font to fit "My Blocks" for now. Probably will need different solutions for language support later, so From fe59bdf1e4ae7630373519c70c523eaf80a1f1bd Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 11 Jul 2018 15:21:08 +0000 Subject: [PATCH 053/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180711151847 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ff0b80b12..246d5ddb212 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531144787", "scratch-l10n": "3.0.20180703181510", - "scratch-paint": "0.2.0-prerelease.20180709132225", + "scratch-paint": "0.2.0-prerelease.20180711151847", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", From 6b0fea0ca0d1e311aac111a15db9f5f7e4eb2ab4 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 11 Jul 2018 13:55:32 -0400 Subject: [PATCH 054/159] Handle mouseUp on language select for firefox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The onMouseUp handler for the menu rerenders the language menu before the select onChange function runs on Firefox. So it resets the language value back to the previous value and the locale doesn’t update. If the languageMenu isopen don’t fire the openlanguageMenu action. --- src/components/menu-bar/menu-bar.jsx | 551 ++++++++++++++------------- 1 file changed, 283 insertions(+), 268 deletions(-) diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 164e9c78e71..f6399a9ac4b 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -2,6 +2,7 @@ import classNames from 'classnames'; import {connect} from 'react-redux'; import {defineMessages, FormattedMessage, injectIntl, intlShape} from 'react-intl'; import PropTypes from 'prop-types'; +import bindAll from 'lodash.bindall'; import React from 'react'; import Box from '../box/box.jsx'; @@ -128,297 +129,311 @@ MenuBarMenu.propTypes = { open: PropTypes.bool, place: PropTypes.oneOf(['left', 'right']) }; - -const MenuBar = props => ( - -
-
-
- Scratch -
-
- -
- +class MenuBar extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleLanguageMouseUp' + ]); + } + handleLanguageMouseUp (e) { + if (!this.props.languageMenuOpen) { + this.props.onClickLanguage(e); + } + } + render () { + return ( + +
+
+
Scratch
- - - - - -
-
-
- -
- - - - - - - - - - - - - - - - - - - {(renderFileInput, loadProject, loadProps) => ( - +
- - {renderFileInput()} - - )} - {(saveProject, saveProps) => ( - - - - )} - - -
-
-
- +
+ + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + {(renderFileInput, loadProject, loadProps) => ( + + + {renderFileInput()} + + )} + {(saveProject, saveProps) => ( + + + + )} + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
- - - + +
+ + + +
+
+ + + +
+
+ {this.props.enableCommunity ? + : + + + + } +
-
- -
- - - -
-
- - - -
-
- {props.enableCommunity ? - : - - - } -
-
- -
-
- -
- -
- +
-
- -
- - - {'scratch-cat' /* @todo username */} - - +
+
+ +
+ +
+ +
+
+ +
+ + + {'scratch-cat' /* @todo username */} + + +
+
- -
- -); + + ); + } +} MenuBar.propTypes = { editMenuOpen: PropTypes.bool, From 9b48c6dfe2402e0b88cf407e48d0c5998eab006f Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 11 Jul 2018 18:17:42 +0000 Subject: [PATCH 055/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180711181626 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 246d5ddb212..7a19f33e95f 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531144787", "scratch-l10n": "3.0.20180703181510", - "scratch-paint": "0.2.0-prerelease.20180711151847", + "scratch-paint": "0.2.0-prerelease.20180711181626", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", From 766a5f21f0481692196da244a64e7c59b51a416b Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 11 Jul 2018 16:32:55 -0400 Subject: [PATCH 056/159] Update VM dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ff0b80b12..c38ead9ba18 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", - "scratch-vm": "0.1.0-prerelease.1530902855", + "scratch-vm": "0.1.0-prerelease.1531339749", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 8043b5f9698d8ba31edd0e7af0b6696c71d29530 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 11 Jul 2018 16:40:27 -0400 Subject: [PATCH 057/159] Use the newest scratch blocks --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index edf38821f95..035ba14e454 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531313153", + "scratch-blocks": "0.1.0-prerelease.1531338038", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180709132225", "scratch-render": "0.1.0-prerelease.20180618173030", From cbbb1dca3399698e3434fc560578ec199bf2fbc7 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 11 Jul 2018 16:43:53 -0400 Subject: [PATCH 058/159] Use a larger icon image for the device connection flow --- .../device-connection/ev3/ev3-menu-icon.svg | 23 -- .../device-connection/ev3/ev3-small.svg | 23 ++ .../microbit/microbit-menu-icon.svg | 101 ------- .../microbit/microbit-small.svg | 259 ++++++++++++++++++ src/lib/libraries/extensions/index.jsx | 4 +- 5 files changed, 284 insertions(+), 126 deletions(-) delete mode 100644 src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg create mode 100644 src/lib/libraries/extensions/device-connection/ev3/ev3-small.svg delete mode 100644 src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg create mode 100644 src/lib/libraries/extensions/device-connection/microbit/microbit-small.svg diff --git a/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg b/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg deleted file mode 100644 index 7c8ea12abb7..00000000000 --- a/src/lib/libraries/extensions/device-connection/ev3/ev3-menu-icon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - ev3-menu-icon - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/ev3/ev3-small.svg b/src/lib/libraries/extensions/device-connection/ev3/ev3-small.svg new file mode 100644 index 00000000000..260e2fd26c1 --- /dev/null +++ b/src/lib/libraries/extensions/device-connection/ev3/ev3-small.svg @@ -0,0 +1,23 @@ + + + + ev3-block-icon + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg b/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg deleted file mode 100644 index af97b7948e8..00000000000 --- a/src/lib/libraries/extensions/device-connection/microbit/microbit-menu-icon.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - microbit-menu-icon - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/lib/libraries/extensions/device-connection/microbit/microbit-small.svg b/src/lib/libraries/extensions/device-connection/microbit/microbit-small.svg new file mode 100644 index 00000000000..ead401aba10 --- /dev/null +++ b/src/lib/libraries/extensions/device-connection/microbit/microbit-small.svg @@ -0,0 +1,259 @@ + + + + microbit-block-icon + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 71b1f2fe9ef..62da95ea5b0 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -12,10 +12,10 @@ import boostImage from './boost.png'; import translateImage from './translate.png'; import ev3DeviceImage from './device-connection/ev3/ev3-hub-illustration.svg'; -import ev3MenuImage from './device-connection/ev3/ev3-menu-icon.svg'; +import ev3MenuImage from './device-connection/ev3/ev3-small.svg'; import microbitDeviceImage from './device-connection/microbit/microbit-illustration.svg'; -import microbitMenuImage from './device-connection/microbit/microbit-menu-icon.svg'; +import microbitMenuImage from './device-connection/microbit/microbit-small.svg'; export default [ { From 434ce4086d03285660427393434d2d36ca579682 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 11 Jul 2018 16:46:52 -0400 Subject: [PATCH 059/159] Update to newest scratch-vm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index faa1675d071..3763149a2e3 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", - "scratch-vm": "0.1.0-prerelease.1530902855", + "scratch-vm": "0.1.0-prerelease.1531340421", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From eaade438ecf786192239adc5d05c3861712786d6 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Wed, 11 Jul 2018 18:19:09 -0400 Subject: [PATCH 060/159] Update libraries --- src/lib/libraries/backdrops.json | 606 +++++- src/lib/libraries/costumes.json | 2076 ++++++++++++++++-- src/lib/libraries/sprites.json | 3453 +++++++++++++++++++++++++----- 3 files changed, 5355 insertions(+), 780 deletions(-) diff --git a/src/lib/libraries/backdrops.json b/src/lib/libraries/backdrops.json index 014568cf446..6644f2139f8 100644 --- a/src/lib/libraries/backdrops.json +++ b/src/lib/libraries/backdrops.json @@ -1,7 +1,26 @@ [ { - "name": "Baseball", - "md5": "5d3a62635eacfbbe264fbba043207afe.svg", + "name": "Arctic", + "md5": "67e0db3305b3c8bac3a363b1c428892e.png", + "type": "backdrop", + "tags": [ + "outdoors", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "robert hunter" + ], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Baseball 1", + "md5": "825d9b54682c406215d9d1f98a819449.svg", "type": "backdrop", "tags": [ "baseball", @@ -17,7 +36,7 @@ }, { "name": "Baseball 2", - "md5": "069f8901194ff75609689b4a0de10b4e.svg", + "md5": "7be1f5b3e682813dac1f297e52ff7dca.svg", "type": "backdrop", "tags": [ "baseball", @@ -32,11 +51,12 @@ ] }, { - "name": "Basketball", + "name": "Basketball 1", "md5": "e494c4f44897d94e0541f7036a302449.svg", "type": "backdrop", "tags": [ "sports", + "outdoors", "basketball", "alex eben meyer" ], @@ -47,13 +67,13 @@ ] }, { - "name": "Bedroom", - "md5": "e2f8b0dbd0a65d2ad8bfc21616662a6a.png", + "name": "Basketball 2", + "md5": "a5865738283613a2725b2c9dda6d8c78.png", "type": "backdrop", "tags": [ - "indoors", - "home", - "house" + "outdoors", + "sports", + "basketball" ], "info": [ 960, @@ -61,15 +81,55 @@ 2 ] }, + { + "name": "Beach Malibu", + "md5": "050615fe992a00d6af0e664e497ebf53.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Beach Rio", + "md5": "968f0ede6e70e1dbb763d6fd4c5003e0.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Bedroom 2", + "md5": "e2f8b0dbd0a65d2ad8bfc21616662a6a.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Bedroom 3", "md5": "8cc0b88d53345b3e337e8f028a32a4e7.png", "type": "backdrop", - "tags": [ - "indoors", - "home", - "house" - ], + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Bench With View", + "md5": "962201a2b712a302fb087f8f0dcb2076.png", + "type": "backdrop", + "tags": [], "info": [ 960, 720, @@ -91,40 +151,32 @@ ] }, { - "name": "Blue Sky 2", - "md5": "ba427e8c539997f6b7a598f2a78306ca.svg", + "name": "Boardwalk", + "md5": "de0e54cd11551566f044e7e6bc588b2c.png", "type": "backdrop", - "tags": [ - "outdoors" - ], + "tags": [], "info": [ - 480, - 360, - 1 + 960, + 720, + 2 ] }, { - "name": "Blue Sky3", - "md5": "5a0159578408d7da9bac6d2379cabfe1.svg", + "name": "Canyon", + "md5": "c7c0b27b959193a0b570a9639cfe8158.png", "type": "backdrop", - "tags": [ - "outdoors" - ], + "tags": [], "info": [ - 480, - 360, - 1 + 960, + 720, + 2 ] }, { - "name": "Brick Wall", - "md5": "7e5327c68ff6ddabc48dbfe4717a04fe.png", + "name": "Castle 1", + "md5": "e1914ed7917267f1c2ef2b48004cade9.png", "type": "backdrop", - "tags": [ - "outdoors", - "music", - "dance" - ], + "tags": [], "info": [ 960, 720, @@ -132,14 +184,43 @@ ] }, { - "name": "Brick Wall 2", - "md5": "82d867fcd9f1b5f49e29c2f853d55665.png", + "name": "Castle 2", + "md5": "951765ee7f7370f120c9df20b577c22f.png", "type": "backdrop", - "tags": [ - "outdoors", - "music", - "dance" - ], + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Castle 3", + "md5": "76fa99f67569fcd39b4be74ed38c33f3.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Castle 4", + "md5": "4f45f79af8e8dac3d41eb5a06ade61d4.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Chalkboard", + "md5": "a8a24b5aa717bbef09dbe31368914427.png", + "type": "backdrop", + "tags": [], "info": [ 960, 720, @@ -159,6 +240,17 @@ 1 ] }, + { + "name": "City With Water", + "md5": "1ef98019fc94ea65a1b55d5521285c7a.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Concert", "md5": "c8d90320d2966c08af8cdd1c6a7a93b5.png", @@ -174,6 +266,45 @@ 2 ] }, + { + "name": "Farm", + "md5": "1e8a70bd07f1dcba3383883f3b948266.png", + "type": "backdrop", + "tags": [ + "outdoors", + "chicken", + "barn", + "coup", + "owen davey" + ], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Field At Mit", + "md5": "5b0a970202b464915915260c03f05455.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Flowers", + "md5": "25a6ede51a96d4e55de2ffb81ae96f8c.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Galaxy", "md5": "5fab1922f254ae9fd150162c3e392bef.png", @@ -190,14 +321,32 @@ ] }, { - "name": "Graffiti", - "md5": "4a876066505dc5ea3b72b390ca266769.png", + "name": "Greek Theater", + "md5": "93d71e8b8a96cc007b8d68f36acd338a.png", "type": "backdrop", - "tags": [ - "outdoors", - "music", - "dance" - ], + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Hall", + "md5": "ea86ca30b346f27ca5faf1254f6a31e3.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Hay Field", + "md5": "da102a69d135973e0fc139131dec785a.png", + "type": "backdrop", + "tags": [], "info": [ 960, 720, @@ -205,7 +354,7 @@ ] }, { - "name": "Hearts1", + "name": "Hearts", "md5": "26d3418b2fbc1af2c5fea82e1c3df1db.svg", "type": "backdrop", "tags": [ @@ -218,16 +367,14 @@ ] }, { - "name": "Hearts2", - "md5": "83745a26bbe0801312dfb553b422bf69.svg", + "name": "Hill", + "md5": "2129c842f28d6881f622fdc3497ff2da.png", "type": "backdrop", - "tags": [ - "patterns" - ], + "tags": [], "info": [ - 480, - 360, - 1 + 960, + 720, + 2 ] }, { @@ -273,6 +420,17 @@ 1 ] }, + { + "name": "Metro", + "md5": "0b4a15ba028bf205ec051390d6ac4de7.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Moon", "md5": "0b1d2eaf22d62ef88de80ccde5578fba.png", @@ -304,6 +462,17 @@ 2 ] }, + { + "name": "Mural", + "md5": "efb625f7e0b199b15f69e116cd053cea.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Nebula", "md5": "9b5cdbd596da1b6149f56b794b6394f4.png", @@ -320,6 +489,39 @@ 2 ] }, + { + "name": "Neon Tunnel", + "md5": "57d2b13b2f73d3d878c72810c137b0d6.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Night City", + "md5": "6fdc795ff487204f72740567be5f64f9.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Night City With Street", + "md5": "14443ad7907b6479d7562a12b8ae0efb.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Ocean", "md5": "fb907f72b310acc8b95cbf2d2cccabc9.svg", @@ -335,13 +537,24 @@ ] }, { - "name": "Ocean 2", - "md5": "1517c21786d2d0edc2f3037408d850bd.png", + "name": "Party", + "md5": "108160d0e44d1c340182e31c9dc0758a.svg", "type": "backdrop", "tags": [ - "water", - "underwater" + "indoors", + "inflatable" ], + "info": [ + 480, + 360, + 1 + ] + }, + { + "name": "Pathway", + "md5": "5d747ec036755a4b129f0d5b978bc61c.png", + "type": "backdrop", + "tags": [], "info": [ 960, 720, @@ -349,29 +562,21 @@ ] }, { - "name": "Party", - "md5": "108160d0e44d1c340182e31c9dc0758a.svg", + "name": "Playground", + "md5": "e5f794c8756ca0cead5cb7e7fe354c41.png", "type": "backdrop", - "tags": [ - "indoors", - "inflatable" - ], + "tags": [], "info": [ - 480, - 360, - 1 + 960, + 720, + 2 ] }, { - "name": "Party Room", - "md5": "9aeff3d99d0a1845ad46955c8820cb5e.png", + "name": "Playing Field", + "md5": "2de108f3098e92f5c5976cf75d38e99d.png", "type": "backdrop", - "tags": [ - "music", - "indoors", - "disco", - "dance" - ], + "tags": [], "info": [ 960, 720, @@ -379,19 +584,14 @@ ] }, { - "name": "Purple", - "md5": "b16a7870ab4287f0f46816b3c5061c9f.svg", + "name": "Pool", + "md5": "6cab934df643d2fc508cfa90c0c4059b.png", "type": "backdrop", - "tags": [ - "perriwinkle", - "blue", - "pastel", - "flying" - ], + "tags": [], "info": [ - 480, - 360, - 1 + 960, + 720, + 2 ] }, { @@ -423,6 +623,67 @@ 1 ] }, + { + "name": "Room 1", + "md5": "a81668321aa3dcc0fc185d3e36ae76f6.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Room 2", + "md5": "05ae3e3bbea890a6e3552ffe8456775e.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Savanna", + "md5": "9b020b8c7cb6a9592f7303add9441d8f.png", + "type": "backdrop", + "tags": [ + "africa", + "savanna", + "savanah", + "outdoors", + "robert hunter" + ], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "School", + "md5": "1dea69ac0f62cf538d368a7bde1372ac.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Slopes", + "md5": "63b6a69594a0a87888b56244bfa2ac1b.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Soccer", "md5": "04a63154f04b09494354090f7cc2f1b9.png", @@ -473,8 +734,8 @@ ] }, { - "name": "Space 2", - "md5": "32b2316fd375faa18088f6c57ebb1c8d.png", + "name": "Space City 1", + "md5": "20344b0edcc498281e4cb80242a72667.png", "type": "backdrop", "tags": [ "space", @@ -490,8 +751,8 @@ ] }, { - "name": "Space 3", - "md5": "20344b0edcc498281e4cb80242a72667.png", + "name": "Space City 2", + "md5": "32b2316fd375faa18088f6c57ebb1c8d.png", "type": "backdrop", "tags": [ "space", @@ -507,7 +768,7 @@ ] }, { - "name": "Space 4", + "name": "Spaceship", "md5": "0c450891306fa63ef02aa0fda7fd0ef9.png", "type": "backdrop", "tags": [ @@ -523,6 +784,17 @@ 2 ] }, + { + "name": "Spotlight Stage", + "md5": "d26bf4c3980163d9106625cc2ea6c50d.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Stars", "md5": "47282ff0f7047c6fab9c94b531abf721.png", @@ -565,6 +837,100 @@ 2 ] }, + { + "name": "Theater 2", + "md5": "061a78ed83495dd0acd6d62e83e1b972.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Tree", + "md5": "a23fbf972001c94637b568992f8fd7bd.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Underwater 2", + "md5": "1517c21786d2d0edc2f3037408d850bd.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Urban", + "md5": "1679049718869e1f548e1e8823e29c1c.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Wall 1", + "md5": "7e5327c68ff6ddabc48dbfe4717a04fe.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Wall 2", + "md5": "82d867fcd9f1b5f49e29c2f853d55665.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Water And Rocks", + "md5": "0015433a406a53f00b792424b823268c.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Wetland", + "md5": "ef9973bcff6d4cbc558e946028ec7d23.png", + "type": "backdrop", + "tags": [ + "outdoor", + "nature", + "swamp", + "wetland", + "owen davey" + ], + "info": [ + 960, + 720, + 2 + ] + }, { "name": "Winter", "md5": "5fa9385a60b904672d0e46e9d768bb32.svg", @@ -598,7 +964,7 @@ }, { "name": "Woods", - "md5": "3f3005b76e278b66dbeb9a982d68c555.svg", + "md5": "a28d7218f148340a5184afd7210d5e62.svg", "type": "backdrop", "tags": [ "fantasy", @@ -614,5 +980,49 @@ 360, 1 ] + }, + { + "name": "Woods And Bench", + "md5": "4fcf7ed0de6c6b6e9b52c511b0650e9c.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Xy-grid", + "md5": "9838d02002d05f88dc54d96494fbc202.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Xy-grid-20px", + "md5": "4eec0e1db92b8dea3e5bee25105e8f46.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] + }, + { + "name": "Xy-grid-30px", + "md5": "3b8bcabd0ac683b7cb3673208039764b.png", + "type": "backdrop", + "tags": [], + "info": [ + 960, + 720, + 2 + ] } ] \ No newline at end of file diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index 37dcce45636..a4cdc4cdb72 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -59,6 +59,160 @@ 1 ] }, + { + "name": "Amon", + "md5": "60f720956ab1840431dcf0616ce98f14.png", + "type": "costume", + "tags": [], + "info": [ + 348, + 324, + 2 + ] + }, + { + "name": "Anina Pop Down", + "md5": "e9e54ff1fa61c71507e25540d0326177.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 312, + 2 + ] + }, + { + "name": "Anina Pop Front", + "md5": "c163f1002f61421816386e52522b9133.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 540, + 2 + ] + }, + { + "name": "Anina Pop L Arm", + "md5": "843bff4a5ee3d61fd8cbd419cb2797a3.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 548, + 2 + ] + }, + { + "name": "Anina Pop Left", + "md5": "9fda30f66d51b2ad5f6fe11d57e199d6.png", + "type": "costume", + "tags": [], + "info": [ + 476, + 532, + 2 + ] + }, + { + "name": "Anina Pop R Arm", + "md5": "e7e1a86233b7ad28d6ee9970b152be20.png", + "type": "costume", + "tags": [], + "info": [ + 176, + 544, + 2 + ] + }, + { + "name": "Anina Pop Right", + "md5": "cc2594e9278494e82f725be34369f178.png", + "type": "costume", + "tags": [], + "info": [ + 132, + 536, + 2 + ] + }, + { + "name": "Anina Pop Stand", + "md5": "de7cab2c8d567d49a5a1f378b5709bb4.png", + "type": "costume", + "tags": [], + "info": [ + 152, + 552, + 2 + ] + }, + { + "name": "Anina R Cross", + "md5": "22f3ca23b2f0ac67f8ebc36a8c3116a0.png", + "type": "costume", + "tags": [], + "info": [ + 252, + 536, + 2 + ] + }, + { + "name": "Anina Stance", + "md5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "type": "costume", + "tags": [], + "info": [ + 152, + 504, + 2 + ] + }, + { + "name": "Anina Top Freeze", + "md5": "dd67565519bdebea1b931deb19621384.png", + "type": "costume", + "tags": [], + "info": [ + 220, + 536, + 2 + ] + }, + { + "name": "Anina Top L Step", + "md5": "62a89d8c6f7680e342132fcde59b2a5d.png", + "type": "costume", + "tags": [], + "info": [ + 456, + 548, + 2 + ] + }, + { + "name": "Anina Top R Step", + "md5": "0477f7105d02b9a902382eca080476dc.png", + "type": "costume", + "tags": [], + "info": [ + 496, + 544, + 2 + ] + }, + { + "name": "Anina Top Stand", + "md5": "34d6362cb4030d92be6fec73300f0aec.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 560, + 2 + ] + }, { "name": "Apple", "md5": "831ccd4741a7a56d85f6698a21f4ca69.svg", @@ -1149,6 +1303,57 @@ 1 ] }, + { + "name": "Butterfly-a", + "md5": "8419d4851defd1e862e4f7c1699d2190.svg", + "type": "costume", + "tags": [ + "animals", + "insect", + "bug", + "wetland", + "owen davey" + ], + "info": [ + 65, + 49, + 1 + ] + }, + { + "name": "Butterfly-b", + "md5": "0873714e8d55d9eeb0bc8e8ab64441cc.svg", + "type": "costume", + "tags": [ + "animals", + "insect", + "bug", + "wetland", + "owen davey" + ], + "info": [ + 65, + 49, + 1 + ] + }, + { + "name": "Butterfly-c", + "md5": "9c422631ca8d46413487f5dd627b65c6.svg", + "type": "costume", + "tags": [ + "animals", + "insect", + "bug", + "wetland", + "owen davey" + ], + "info": [ + 65, + 49, + 1 + ] + }, { "name": "Butterfly1-a", "md5": "836d4cc7889f4a1cbcb0303934f31f79.svg", @@ -1396,6 +1601,28 @@ 1 ] }, + { + "name": "Calvrett Jumping", + "md5": "452683db3ad7a882f5ab9de496441592.png", + "type": "costume", + "tags": [], + "info": [ + 336, + 432, + 2 + ] + }, + { + "name": "Calvrett Thinking", + "md5": "728ec1ebc275b53809023a36c66eeaa3.png", + "type": "costume", + "tags": [], + "info": [ + 212, + 340, + 2 + ] + }, { "name": "Casey-a", "md5": "30a4dafa852311b2a07d72e1bb060326.svg", @@ -1460,6 +1687,50 @@ 1 ] }, + { + "name": "Cassy-a", + "md5": "6cb3686db1fa658b6541cc9fa3ccfcc7.png", + "type": "costume", + "tags": [], + "info": [ + 208, + 384, + 2 + ] + }, + { + "name": "Cassy-b", + "md5": "f801cec764da5ef6374e1d557296d14e.png", + "type": "costume", + "tags": [], + "info": [ + 280, + 384, + 2 + ] + }, + { + "name": "Cassy-c", + "md5": "63483bbf72fc55719918a335e1a16426.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 376, + 2 + ] + }, + { + "name": "Cassy-d", + "md5": "aca39a47cf3affd8a83d3287d2856c29.png", + "type": "costume", + "tags": [], + "info": [ + 188, + 360, + 2 + ] + }, { "name": "Cat1", "md5": "09dc888b0b7df19f70d81588ae73420e.svg", @@ -1514,17 +1785,20 @@ }, { "name": "Cat2", - "md5": "01ae57fd339529445cb890978ef8a054.svg", + "md5": "3696356a03a8d938318876a593572843.svg", "type": "costume", "tags": [ - "kitty", - "kitten", "animals", - "mammal" + "cat", + "kitten", + "kitty", + "mammal", + "orange", + "scratch cat" ], "info": [ - 87, - 39, + 47, + 55, 1 ] }, @@ -1656,6 +1930,126 @@ 1 ] }, + { + "name": "Champ99-a", + "md5": "b940c99d8e677ac5773cb4d592b16734.png", + "type": "costume", + "tags": [], + "info": [ + 496, + 612, + 2 + ] + }, + { + "name": "Champ99-b", + "md5": "2ebc7632bc9e665d9eeea93190fad7ad.png", + "type": "costume", + "tags": [], + "info": [ + 328, + 580, + 2 + ] + }, + { + "name": "Champ99-c", + "md5": "bfcff80b0044c644c555ba24f2484106.png", + "type": "costume", + "tags": [], + "info": [ + 304, + 540, + 2 + ] + }, + { + "name": "Champ99-d", + "md5": "34de53e52a768d60a96e3ae0c030dfc5.png", + "type": "costume", + "tags": [], + "info": [ + 376, + 520, + 2 + ] + }, + { + "name": "Champ99-e", + "md5": "0cb685bf8584df9caf124da929ab3453.png", + "type": "costume", + "tags": [], + "info": [ + 380, + 496, + 2 + ] + }, + { + "name": "Champ99-f", + "md5": "516d30b29aed8145718db421f4737953.png", + "type": "costume", + "tags": [], + "info": [ + 228, + 500, + 2 + ] + }, + { + "name": "Champ99-g", + "md5": "49e0edcb319527d936981f06b4111d53.png", + "type": "costume", + "tags": [], + "info": [ + 264, + 516, + 2 + ] + }, + { + "name": "Cheesy-puffs", + "md5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "type": "costume", + "tags": [], + "info": [ + 174, + 144, + 2 + ] + }, + { + "name": "Chick-a", + "md5": "0abf71fb210bbda7eac0bb6ecaab25de.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 20, + 21, + 1 + ] + }, + { + "name": "Chick-b", + "md5": "3577aafabcfd6bcc7f7512be940a18b7.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 20, + 21, + 1 + ] + }, { "name": "Cloud", "md5": "47005a1f20309f577a03a67abbb6b94e.svg", @@ -1735,6 +2129,17 @@ 1 ] }, + { + "name": "Convertible", + "md5": "5b883f396844ff5cfecd7c95553fa4fb.png", + "type": "costume", + "tags": [], + "info": [ + 360, + 88, + 2 + ] + }, { "name": "Convertible3", "md5": "b6ac3c9e1789cba2302d2ef82d62d019.svg", @@ -1875,11 +2280,33 @@ ] }, { - "name": "Dani-a", - "md5": "f3038fb0f4a00806b02081c6789dd8cf.svg", + "name": "Dan-a", + "md5": "1baa5b126e0e14d6070a997c0deefab5.png", "type": "costume", - "tags": [ - "people", + "tags": [], + "info": [ + 36, + 100, + 1 + ] + }, + { + "name": "Dan-b", + "md5": "89b55d049f4b3811676311df00681385.png", + "type": "costume", + "tags": [], + "info": [ + 188, + 400, + 2 + ] + }, + { + "name": "Dani-a", + "md5": "f3038fb0f4a00806b02081c6789dd8cf.svg", + "type": "costume", + "tags": [ + "people", "fashion" ], "info": [ @@ -2353,6 +2780,193 @@ 1 ] }, + { + "name": "Dm Freeze", + "md5": "31e687f186b19ea120cd5cfc9dea2a3f.png", + "type": "costume", + "tags": [], + "info": [ + 440, + 468, + 2 + ] + }, + { + "name": "Dm Pop Down", + "md5": "3b65ce3551f9c111794f7f1fb8f325be.png", + "type": "costume", + "tags": [], + "info": [ + 128, + 148, + 2 + ] + }, + { + "name": "Dm Pop Front", + "md5": "0b2fb609d6d10decfdd5a1c3b58369b4.png", + "type": "costume", + "tags": [], + "info": [ + 184, + 468, + 2 + ] + }, + { + "name": "Dm Pop L Arm", + "md5": "426e1520efc34fef45be0596fd5f7120.png", + "type": "costume", + "tags": [], + "info": [ + 180, + 476, + 2 + ] + }, + { + "name": "Dm Pop Left", + "md5": "f636510e8ef231d7c0e72a572ce91c99.png", + "type": "costume", + "tags": [], + "info": [ + 408, + 500, + 2 + ] + }, + { + "name": "Dm Pop R Arm", + "md5": "56fe91d2cf3ecb9d1b94006aee9eff79.png", + "type": "costume", + "tags": [], + "info": [ + 160, + 480, + 2 + ] + }, + { + "name": "Dm Pop Right", + "md5": "36b32430e45e071071052ef33c637f48.png", + "type": "costume", + "tags": [], + "info": [ + 156, + 476, + 2 + ] + }, + { + "name": "Dm Pop Stand", + "md5": "370cc57b40f1f1d6e52d6330b73d207f.png", + "type": "costume", + "tags": [], + "info": [ + 200, + 488, + 2 + ] + }, + { + "name": "Dm Stance", + "md5": "b30a60d31aebead577b73affd22bf30f.svg", + "type": "costume", + "tags": [], + "info": [ + 55, + 119, + 1 + ] + }, + { + "name": "Dm Top L Leg", + "md5": "fd8bb9665fe078d2d95dbc35bccf4046.png", + "type": "costume", + "tags": [], + "info": [ + 460, + 480, + 2 + ] + }, + { + "name": "Dm Top R Leg", + "md5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "type": "costume", + "tags": [], + "info": [ + 436, + 464, + 2 + ] + }, + { + "name": "Dm Top R Leg2", + "md5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "type": "costume", + "tags": [], + "info": [ + 436, + 464, + 2 + ] + }, + { + "name": "Dm Top Stand", + "md5": "cbf035d39d0a0bb070d2eb998cebd60d.png", + "type": "costume", + "tags": [], + "info": [ + 164, + 488, + 2 + ] + }, + { + "name": "Dog Puppy Back", + "md5": "88559ad0334a8a51aca31035068682f6.png", + "type": "costume", + "tags": [], + "info": [ + 468, + 188, + 2 + ] + }, + { + "name": "Dog Puppy Right", + "md5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", + "type": "costume", + "tags": [], + "info": [ + 214, + 206, + 2 + ] + }, + { + "name": "Dog Puppy Side", + "md5": "63c3d6718943ecbf48f94b3b131ae8a4.png", + "type": "costume", + "tags": [], + "info": [ + 208, + 228, + 2 + ] + }, + { + "name": "Dog Puppy Sit", + "md5": "00b1589467f939b9c61f666bca2d25d1.png", + "type": "costume", + "tags": [], + "info": [ + 174, + 224, + 2 + ] + }, { "name": "Dog1-a", "md5": "39ddefa0cc58f3b1b06474d63d81ef56.svg", @@ -3201,6 +3815,39 @@ 1 ] }, + { + "name": "Football Running", + "md5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", + "type": "costume", + "tags": [], + "info": [ + 47, + 100, + 1 + ] + }, + { + "name": "Football Standing", + "md5": "1f57154842f68aa55577edc90a6f2b32.png", + "type": "costume", + "tags": [], + "info": [ + 37, + 100, + 1 + ] + }, + { + "name": "Fortune Cookie", + "md5": "c56dcaa1fa4e3c9740142b93d5982850.png", + "type": "costume", + "tags": [], + "info": [ + 120, + 124, + 2 + ] + }, { "name": "Fox-a", "md5": "fab5488e600e81565f0fc285fc7050f8.svg", @@ -3336,6 +3983,17 @@ 1 ] }, + { + "name": "Fruit Platter", + "md5": "6c3252378da3334f63eebddbed3fae91.png", + "type": "costume", + "tags": [], + "info": [ + 296, + 156, + 2 + ] + }, { "name": "Fruitsalad", "md5": "dbf8cc34f7ca18b4a008d2890dba56b7.svg", @@ -3566,6 +4224,51 @@ 1 ] }, + { + "name": "Giraffe-a", + "md5": "497baa643718a865b0621c1607696800.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 86, + 131, + 1 + ] + }, + { + "name": "Giraffe-b", + "md5": "0242ae2497839f449af064b40b358b76.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 86, + 131, + 1 + ] + }, + { + "name": "Giraffe-c", + "md5": "d9e8f8b7d656d4a24c1f4f6c24c5e578.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 86, + 131, + 1 + ] + }, { "name": "Glass Water-a", "md5": "c364b9e1f4bcdc61705032d89eaaa0a1.svg", @@ -3944,6 +4647,102 @@ 1 ] }, + { + "name": "Hannah-a", + "md5": "b983d99560313e38b4b3cd36cbd5f0d1.png", + "type": "costume", + "tags": [], + "info": [ + 276, + 252, + 2 + ] + }, + { + "name": "Hannah-b", + "md5": "d0c3b4b24fbf1152de3ebb68f6b875ae.png", + "type": "costume", + "tags": [], + "info": [ + 96, + 320, + 2 + ] + }, + { + "name": "Hannah-c", + "md5": "5fdce07935156bbcf943793fa84e826c.png", + "type": "costume", + "tags": [], + "info": [ + 340, + 260, + 2 + ] + }, + { + "name": "Hare-a", + "md5": "75c2e6085d0eae076ff357b56d5ed5cd.svg", + "type": "costume", + "tags": [ + "animals", + "rabbit", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 57, + 49, + 1 + ] + }, + { + "name": "Hare-b", + "md5": "fb56d1bef942196c710612906142451b.svg", + "type": "costume", + "tags": [ + "animals", + "rabbit", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 57, + 49, + 1 + ] + }, + { + "name": "Hare-c", + "md5": "8de391ae70e54656f777c0ed53a91e1a.svg", + "type": "costume", + "tags": [ + "animals", + "rabbit", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 57, + 49, + 1 + ] + }, { "name": "Hat", "md5": "b3beb1f52d371428d70b65a0c4c5c001.svg", @@ -4010,26 +4809,74 @@ ] }, { - "name": "Headband", - "md5": "961148d1605a1bd8ce80ed8d39e831c2.svg", + "name": "Hatchling-a", + "md5": "fb9de507b6d95e96cb0df68e401dfd8f.svg", "type": "costume", "tags": [ - "fashion", - "antennae" + "animals", + "chicken", + "farm", + "owen davey" ], "info": [ - 53, - 43, + 14, + 23, 1 ] }, { - "name": "Heart Code", - "md5": "497c5df9e02467202ff93096dccaf91f.svg", + "name": "Hatchling-b", + "md5": "e504303f791a65274d740a20acbac606.svg", "type": "costume", "tags": [ - "food", - "sweethearts" + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 15, + 35, + 1 + ] + }, + { + "name": "Hatchling-c", + "md5": "6f9a243d84fbe7ed9a49e8ef9fb7d83c.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 31, + 36, + 1 + ] + }, + { + "name": "Headband", + "md5": "961148d1605a1bd8ce80ed8d39e831c2.svg", + "type": "costume", + "tags": [ + "fashion", + "antennae" + ], + "info": [ + 53, + 43, + 1 + ] + }, + { + "name": "Heart Code", + "md5": "497c5df9e02467202ff93096dccaf91f.svg", + "type": "costume", + "tags": [ + "food", + "sweethearts" ], "info": [ 58, @@ -4206,6 +5053,70 @@ 1 ] }, + { + "name": "Hen-a", + "md5": "795ed34983a70c8690fe6c8f4a47a935.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 45, + 43, + 1 + ] + }, + { + "name": "Hen-b", + "md5": "26528a6f0318a2d2294ef7071409be12.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 45, + 43, + 1 + ] + }, + { + "name": "Hen-c", + "md5": "7492692df7776c905fdbd4382696afee.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 35, + 28, + 1 + ] + }, + { + "name": "Hen-d", + "md5": "4bf0cb5453273d0f75db3cd0cd45ac72.svg", + "type": "costume", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 45, + 43, + 1 + ] + }, { "name": "Hippo1-a", "md5": "c1353c4a5eec5e6f32ed053e6f6e8f99.svg", @@ -4292,6 +5203,83 @@ 1 ] }, + { + "name": "Jaime Walking-a", + "md5": "d6cc9814f7a6640e4c2b1a4276987dc5.png", + "type": "costume", + "tags": [], + "info": [ + 212, + 344, + 2 + ] + }, + { + "name": "Jaime Walking-b", + "md5": "7fb579a98d6db257f1b16109d3c4609a.png", + "type": "costume", + "tags": [], + "info": [ + 104, + 352, + 2 + ] + }, + { + "name": "Jaime Walking-c", + "md5": "5883bdefba451aaeac8d77c798d41eb0.png", + "type": "costume", + "tags": [], + "info": [ + 176, + 340, + 2 + ] + }, + { + "name": "Jaime Walking-d", + "md5": "4b9d2162e30dbb924840575ed35fddb0.png", + "type": "costume", + "tags": [], + "info": [ + 92, + 348, + 2 + ] + }, + { + "name": "Jaime Walking-e", + "md5": "63e56d28cc3e3d9b735e1f1d51248cc0.png", + "type": "costume", + "tags": [], + "info": [ + 168, + 344, + 2 + ] + }, + { + "name": "Jaime-a", + "md5": "3ddc912edef87ae29121f57294fa0cb5.png", + "type": "costume", + "tags": [], + "info": [ + 152, + 308, + 2 + ] + }, + { + "name": "Jaime-b", + "md5": "5a683f4536abca0f83a77bc341df4c9a.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 308, + 2 + ] + }, { "name": "Jamie-a", "md5": "90f9166fe6500d0c0caad8b1964d6b74.svg", @@ -4477,6 +5465,149 @@ 1 ] }, + { + "name": "Jo Pop Down", + "md5": "95a0f1bb3d8055a283aecc6bcb6303c9.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 148, + 2 + ] + }, + { + "name": "Jo Pop Front", + "md5": "0503f4d712bc3184cf1b5f830d0df993.png", + "type": "costume", + "tags": [], + "info": [ + 140, + 456, + 2 + ] + }, + { + "name": "Jo Pop L Arm", + "md5": "2a907e6edf8a101addb2c27d0568896a.png", + "type": "costume", + "tags": [], + "info": [ + 216, + 516, + 2 + ] + }, + { + "name": "Jo Pop Left", + "md5": "98e8c2f9869f9356204ed19e43ae01cc.png", + "type": "costume", + "tags": [], + "info": [ + 392, + 452, + 2 + ] + }, + { + "name": "Jo Pop R Arm", + "md5": "e633eb002deb20108bb5100d4b3a8fc5.png", + "type": "costume", + "tags": [], + "info": [ + 216, + 520, + 2 + ] + }, + { + "name": "Jo Pop Right", + "md5": "7bf1600ee75facb510c2922f899fb97c.png", + "type": "costume", + "tags": [], + "info": [ + 132, + 484, + 2 + ] + }, + { + "name": "Jo Pop Stand", + "md5": "361d1884737ef734f6a39fd66fc269ec.png", + "type": "costume", + "tags": [], + "info": [ + 156, + 524, + 2 + ] + }, + { + "name": "Jo Stance", + "md5": "34336e1105719a933e57c043e0b52998.png", + "type": "costume", + "tags": [], + "info": [ + 188, + 480, + 2 + ] + }, + { + "name": "Jo Top L Cross", + "md5": "33660046a3d37fa762f4a634ee3df75d.png", + "type": "costume", + "tags": [], + "info": [ + 168, + 536, + 2 + ] + }, + { + "name": "Jo Top L Leg", + "md5": "987a667cd7984d9e5429c26b8a4cab2d.png", + "type": "costume", + "tags": [], + "info": [ + 416, + 536, + 2 + ] + }, + { + "name": "Jo Top R Cross", + "md5": "ddbd8751df020cc32231ecb4e7b5388d.png", + "type": "costume", + "tags": [], + "info": [ + 288, + 540, + 2 + ] + }, + { + "name": "Jo Top R Leg", + "md5": "de64c526a57355af5fd6ff28f27b67ea.png", + "type": "costume", + "tags": [], + "info": [ + 436, + 524, + 2 + ] + }, + { + "name": "Jo Top Stand", + "md5": "a91fe6e180b524d27688aa0cd82cd629.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 520, + 2 + ] + }, { "name": "Jordyn-a", "md5": "8dd2a2abbb8e639da8576b6e72ef9e59.svg", @@ -4545,6 +5676,28 @@ 1 ] }, + { + "name": "Kai-a", + "md5": "6e007fde15e49c66ee7996561f80b452.png", + "type": "costume", + "tags": [], + "info": [ + 136, + 320, + 2 + ] + }, + { + "name": "Kai-b", + "md5": "c1e1149f6d7e308e3e4eba14ccc8a751.png", + "type": "costume", + "tags": [], + "info": [ + 164, + 316, + 2 + ] + }, { "name": "Key", "md5": "af35300cef35803e11f4ed744dc5e818.svg", @@ -4693,61 +5846,204 @@ ] }, { - "name": "Ladybug2", - "md5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", + "name": "Ladybug2", + "md5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", + "type": "costume", + "tags": [ + "animals", + "insect", + "bug", + "antennae" + ], + "info": [ + 41, + 43, + 1 + ] + }, + { + "name": "Ladybug2-a", + "md5": "c018a3eed966d5f92c69f2188dfd2aae.svg", + "type": "costume", + "tags": [ + "animal", + "insect", + "arthropod", + "antennae", + "aphids" + ], + "info": [ + 49, + 28, + 1 + ] + }, + { + "name": "Ladybug2-b", + "md5": "a2bb15ace808e070a2b815502952b292.svg", + "type": "costume", + "tags": [], + "info": [ + 49, + 28, + 1 + ] + }, + { + "name": "Laptop", + "md5": "76f456b30b98eeefd7c942b27b524e31.svg", + "type": "costume", + "tags": [ + "things", + "computers" + ], + "info": [ + 75, + 75, + 1 + ] + }, + { + "name": "Lb Pop Down", + "md5": "8e41de92cb932a6898782a39a0d7d300.png", + "type": "costume", + "tags": [], + "info": [ + 112, + 180, + 2 + ] + }, + { + "name": "Lb Pop Front", + "md5": "e34a166807a3ffbf8d147b12aa49dd19.png", + "type": "costume", + "tags": [], + "info": [ + 132, + 544, + 2 + ] + }, + { + "name": "Lb Pop L Arm", + "md5": "c1fd31607619b8c98a286a650f248511.png", + "type": "costume", + "tags": [], + "info": [ + 200, + 524, + 2 + ] + }, + { + "name": "Lb Pop Left", + "md5": "ff1b96d1047d4be459a4614ce7c7c94c.png", + "type": "costume", + "tags": [], + "info": [ + 396, + 532, + 2 + ] + }, + { + "name": "Lb Pop R Arm", + "md5": "aa57575fde5ff8b13041e3a7b1499fe0.png", + "type": "costume", + "tags": [], + "info": [ + 156, + 516, + 2 + ] + }, + { + "name": "Lb Pop Right", + "md5": "d6d5534c628ac5d5fe3cbf1b76b71252.png", + "type": "costume", + "tags": [], + "info": [ + 152, + 528, + 2 + ] + }, + { + "name": "Lb Pop Stand", + "md5": "51fe5962fe4d2af7f6fad7abaa692069.png", + "type": "costume", + "tags": [], + "info": [ + 132, + 536, + 2 + ] + }, + { + "name": "Lb Stance", + "md5": "008b80a80c4188acc72f7893fb10ac75.png", + "type": "costume", + "tags": [], + "info": [ + 108, + 488, + 2 + ] + }, + { + "name": "Lb Top L Cross", + "md5": "5a151c4d4e2e2f870d9096d5fce6ed48.png", + "type": "costume", + "tags": [], + "info": [ + 296, + 516, + 2 + ] + }, + { + "name": "Lb Top L Leg", + "md5": "350472368e2310efe6fa734b79f0ff41.png", "type": "costume", - "tags": [ - "animals", - "insect", - "bug", - "antennae" - ], + "tags": [], "info": [ - 41, - 43, - 1 + 468, + 572, + 2 ] }, { - "name": "Ladybug2-a", - "md5": "c018a3eed966d5f92c69f2188dfd2aae.svg", + "name": "Lb Top R Cross", + "md5": "99acf468000c6fcbaf344e4531725efc.png", "type": "costume", - "tags": [ - "animal", - "insect", - "arthropod", - "antennae", - "aphids" - ], + "tags": [], "info": [ - 49, - 28, - 1 + 348, + 512, + 2 ] }, { - "name": "Ladybug2-b", - "md5": "a2bb15ace808e070a2b815502952b292.svg", + "name": "Lb Top R Leg", + "md5": "e824768a109691b5a3c577d3506ed70c.png", "type": "costume", "tags": [], "info": [ - 49, - 28, - 1 + 488, + 500, + 2 ] }, { - "name": "Laptop", - "md5": "76f456b30b98eeefd7c942b27b524e31.svg", + "name": "Lb Top Stand", + "md5": "dfe3628ddf46a67dcc21c63be65a8e40.png", "type": "costume", - "tags": [ - "things", - "computers" - ], + "tags": [], "info": [ - 75, - 75, - 1 + 140, + 496, + 2 ] }, { @@ -4784,39 +6080,52 @@ }, { "name": "Lion-a", - "md5": "692a3c84366bf8ae4d16858e20e792f5.svg", + "md5": "701a41dec023bc03a5ad4e35988b9a86.svg", "type": "costume", "tags": [ + "cat", "animals", - "mammals", - "big cat", - "carnivore", - "king", - "jungle", - "roar" + "africa", + "savanna", + "robert hunter" ], "info": [ - 75, - 75, + 95, + 43, 1 ] }, { "name": "Lion-b", - "md5": "a519ef168a345a2846d0201bf092a6d0.svg", + "md5": "28ac215a2574eeabc2b390a14de3c152.svg", "type": "costume", "tags": [ + "cat", "animals", - "mammals", - "big cat", - "carnivore", - "king", - "jungle", - "roar" + "africa", + "savanna", + "robert hunter" ], "info": [ - 75, - 75, + 95, + 43, + 1 + ] + }, + { + "name": "Lion-c", + "md5": "4dbe981721314eb631ef4f7fa920e1a4.svg", + "type": "costume", + "tags": [ + "cat", + "animals", + "africa", + "savanna", + "robert hunter" + ], + "info": [ + 95, + 43, 1 ] }, @@ -5754,6 +7063,69 @@ 1 ] }, + { + "name": "Penguin-a", + "md5": "6d85d016129c34c90ef269933a72a7a7.svg", + "type": "costume", + "tags": [ + "animals", + "bird", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 36, + 46, + 1 + ] + }, + { + "name": "Penguin-b", + "md5": "e93ef702208fad2776a34f57c1c746b1.svg", + "type": "costume", + "tags": [ + "animals", + "bird", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 36, + 46, + 1 + ] + }, + { + "name": "Penguin-c", + "md5": "c6d6ec90b897855831a73b3b3b8f202a.svg", + "type": "costume", + "tags": [ + "animals", + "bird", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 36, + 46, + 1 + ] + }, { "name": "Penguin2-a", "md5": "c17d9e4bdb59c574e0c34aa70af516da.svg", @@ -5994,6 +7366,66 @@ 1 ] }, + { + "name": "Polar Bear-a", + "md5": "c96435a1b9ad2ed37b2c9c5aac6d1fb4.svg", + "type": "costume", + "tags": [ + "animals", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 104, + 46, + 1 + ] + }, + { + "name": "Polar Bear-b", + "md5": "4f9b9061414deedeeebd369a496aba07.svg", + "type": "costume", + "tags": [ + "animals", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 104, + 46, + 1 + ] + }, + { + "name": "Polar Bear-c", + "md5": "defad238b915f766449e9dcb719bb6e0.svg", + "type": "costume", + "tags": [ + "animals", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 104, + 46, + 1 + ] + }, { "name": "Potion-a", "md5": "a317b50b255a208455a7733091adad23.svg", @@ -6509,46 +7941,213 @@ ] }, { - "name": "Robot-c", - "md5": "c5e02f00d233199fea1c51b71c402ce4.svg", + "name": "Robot-c", + "md5": "c5e02f00d233199fea1c51b71c402ce4.svg", + "type": "costume", + "tags": [ + "space", + "robot", + "wren mcdonald" + ], + "info": [ + 63, + 97, + 1 + ] + }, + { + "name": "Robot-d", + "md5": "ca2cf7d6c0446fbce36621006a4b0fac.svg", + "type": "costume", + "tags": [ + "space", + "robot", + "wren mcdonald" + ], + "info": [ + 59, + 95, + 1 + ] + }, + { + "name": "Rocketship-a", + "md5": "7d51af7c52e137ef137012595bac928d.svg", + "type": "costume", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 66, + 107, + 1 + ] + }, + { + "name": "Rocketship-b", + "md5": "ae2634705b7a4fd31f4c1d1bb0e12545.svg", + "type": "costume", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 53, + 106, + 1 + ] + }, + { + "name": "Rocketship-c", + "md5": "3d375cd033f1a7161cae56b114f4cfdb.svg", + "type": "costume", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 61, + 107, + 1 + ] + }, + { + "name": "Rocketship-d", + "md5": "a456964f32cd7e7bd83fe076bf29558b.svg", + "type": "costume", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 63, + 107, + 1 + ] + }, + { + "name": "Rocketship-e", + "md5": "5b5cc9904ba63ca2801b61a73d4dcb7e.svg", + "type": "costume", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 71, + 107, + 1 + ] + }, + { + "name": "Rocks", + "md5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "type": "costume", + "tags": [ + "things", + "potassium" + ], + "info": [ + 59, + 15, + 1 + ] + }, + { + "name": "Rooster-a", + "md5": "8a6f3145a24db10d5a2f90975ce8140c.svg", "type": "costume", "tags": [ - "space", - "robot", - "wren mcdonald" + "animals", + "chicken", + "farm", + "owen davey" ], "info": [ - 63, - 97, + 55, + 58, 1 ] }, { - "name": "Robot-d", - "md5": "ca2cf7d6c0446fbce36621006a4b0fac.svg", + "name": "Rooster-b", + "md5": "6a14a205b117fdb0b7a6fad91a989e96.svg", "type": "costume", "tags": [ - "space", - "robot", - "wren mcdonald" + "animals", + "chicken", + "farm", + "owen davey" ], "info": [ + 55, 59, - 95, 1 ] }, { - "name": "Rocks", - "md5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "name": "Rooster-c", + "md5": "f23408efb8f47022da51c8fba6003cbb.svg", "type": "costume", "tags": [ - "things", - "potassium" + "animals", + "chicken", + "farm", + "owen davey" ], "info": [ + 55, 59, - 15, + 1 + ] + }, + { + "name": "Ruby-a", + "md5": "c30210e8f719c3a4d2c7cc6917a39300.png", + "type": "costume", + "tags": [], + "info": [ + 108, + 344, + 2 + ] + }, + { + "name": "Ruby-b", + "md5": "fc15fdbcc535473f6140cab28197f3be.png", + "type": "costume", + "tags": [], + "info": [ + 152, + 284, + 2 + ] + }, + { + "name": "Sail-boat", + "md5": "ca241a938a2c44a0de6b91230012ff39.png", + "type": "costume", + "tags": [], + "info": [ + 448, + 364, + 2 + ] + }, + { + "name": "Sam", + "md5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", + "type": "costume", + "tags": [], + "info": [ + 58, + 90, 1 ] }, @@ -7018,76 +8617,6 @@ 1 ] }, - { - "name": "Spaceship-a", - "md5": "7d51af7c52e137ef137012595bac928d.svg", - "type": "costume", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 66, - 107, - 1 - ] - }, - { - "name": "Spaceship-b", - "md5": "ae2634705b7a4fd31f4c1d1bb0e12545.svg", - "type": "costume", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 53, - 106, - 1 - ] - }, - { - "name": "Spaceship-c", - "md5": "3d375cd033f1a7161cae56b114f4cfdb.svg", - "type": "costume", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 61, - 107, - 1 - ] - }, - { - "name": "Spaceship-d", - "md5": "a456964f32cd7e7bd83fe076bf29558b.svg", - "type": "costume", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 63, - 107, - 1 - ] - }, - { - "name": "Spaceship-e", - "md5": "5b5cc9904ba63ca2801b61a73d4dcb7e.svg", - "type": "costume", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 71, - 107, - 1 - ] - }, { "name": "Speaker", "md5": "44dc3a2ec161999545914d1f77332d76.svg", @@ -7105,6 +8634,17 @@ 1 ] }, + { + "name": "Squirrel1", + "md5": "b86efb7f23387300cf9037a61f328ab9.png", + "type": "costume", + "tags": [], + "info": [ + 316, + 292, + 2 + ] + }, { "name": "Star", "md5": "e929c1274c379b6b6fed12e6dec63368.svg", @@ -7390,6 +8930,160 @@ 1 ] }, + { + "name": "Ten80 Pop Down", + "md5": "5b207159cca926fa0847e44b12231119.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 376, + 2 + ] + }, + { + "name": "Ten80 Pop Front", + "md5": "2a591305054fc72a65a20880d27c403d.png", + "type": "costume", + "tags": [], + "info": [ + 144, + 532, + 2 + ] + }, + { + "name": "Ten80 Pop L Arm", + "md5": "b2c2724462a8f4e1b95b2163deb45380.png", + "type": "costume", + "tags": [], + "info": [ + 200, + 560, + 2 + ] + }, + { + "name": "Ten80 Pop Left", + "md5": "c0be2b181ca54a5feb3d9773e244bd73.png", + "type": "costume", + "tags": [], + "info": [ + 368, + 532, + 2 + ] + }, + { + "name": "Ten80 Pop R Arm", + "md5": "08b47429a2b56095e471569be63a3acd.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 556, + 2 + ] + }, + { + "name": "Ten80 Pop Right", + "md5": "be193b26613668f68c98f38397a1aaa6.png", + "type": "costume", + "tags": [], + "info": [ + 156, + 552, + 2 + ] + }, + { + "name": "Ten80 Pop Stand", + "md5": "86200779d2de598cebb66354939e9a32.png", + "type": "costume", + "tags": [], + "info": [ + 184, + 560, + 2 + ] + }, + { + "name": "Ten80 Stance", + "md5": "dc671a181e0f2b5c94823b197d4455b5.png", + "type": "costume", + "tags": [], + "info": [ + 140, + 556, + 2 + ] + }, + { + "name": "Ten80 Top Freeze", + "md5": "332db3c9053d11df327151873be9ba8f.png", + "type": "costume", + "tags": [], + "info": [ + 108, + 516, + 2 + ] + }, + { + "name": "Ten80 Top L Step", + "md5": "4e730a1129334d2c5b3b5bf53a6cf488.png", + "type": "costume", + "tags": [], + "info": [ + 288, + 532, + 2 + ] + }, + { + "name": "Ten80 Top R Cross", + "md5": "76945eb412c3dcc12fa4207690edc1ca.png", + "type": "costume", + "tags": [], + "info": [ + 412, + 504, + 2 + ] + }, + { + "name": "Ten80 Top R Step", + "md5": "13fbeb74f24efc49f73bf4edfc94fc16.png", + "type": "costume", + "tags": [], + "info": [ + 400, + 540, + 2 + ] + }, + { + "name": "Ten80 Top Stand", + "md5": "0f6adf023981ae764ab869a222f453cc.png", + "type": "costume", + "tags": [], + "info": [ + 148, + 548, + 2 + ] + }, + { + "name": "Tennisball", + "md5": "f70d1414e266df1dfe54afb563c810df.png", + "type": "costume", + "tags": [], + "info": [ + 60, + 60, + 2 + ] + }, { "name": "Tera-a", "md5": "b54a4a9087435863ab6f6c908f1cac99.svg", @@ -7494,6 +9188,17 @@ 1 ] }, + { + "name": "Trampoline", + "md5": "20b16bcb61396df304cad5e8886ceb46.png", + "type": "costume", + "tags": [], + "info": [ + 100, + 41, + 1 + ] + }, { "name": "Tree1", "md5": "8c40e2662c55d17bc384f47165ac43c1.svg", @@ -7980,6 +9685,51 @@ 1 ] }, + { + "name": "Zebra-a", + "md5": "d8392aea6e767a4b5032cffd04e688e3.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 97, + 56, + 1 + ] + }, + { + "name": "Zebra-b", + "md5": "3a6be1df1d9d9865b6bba4f569de6793.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 97, + 56, + 1 + ] + }, + { + "name": "Zebra-c", + "md5": "b0d2d3e746493640fc34fd7b2efd6612.svg", + "type": "costume", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 97, + 56, + 1 + ] + }, { "name": "Block-a", "md5": "602a16930a8050e1298e1a0ae844363e.svg", diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index 966d9be3ae0..84f125bc7e8 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -70,6 +70,188 @@ "spriteInfo": {} } }, + { + "name": "Amon", + "md5": "60f720956ab1840431dcf0616ce98f14.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Amon", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "amon", + "baseLayerID": -1, + "baseLayerMD5": "60f720956ab1840431dcf0616ce98f14.png", + "bitmapResolution": 2, + "rotationCenterX": 174, + "rotationCenterY": 162 + } + ], + "currentCostumeIndex": 0, + "scratchX": -79, + "scratchY": 11, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Anina Dance", + "md5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 13, + 1 + ], + "json": { + "objName": "Anina Dance", + "sounds": [ + { + "soundName": "dance celebrate", + "soundID": -1, + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm" + } + ], + "costumes": [ + { + "costumeName": "anina stance", + "baseLayerID": -1, + "baseLayerMD5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "bitmapResolution": 2, + "rotationCenterX": 76, + "rotationCenterY": 252 + }, + { + "costumeName": "anina top stand", + "baseLayerID": -1, + "baseLayerMD5": "34d6362cb4030d92be6fec73300f0aec.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 280 + }, + { + "costumeName": "anina top R step", + "baseLayerID": -1, + "baseLayerMD5": "0477f7105d02b9a902382eca080476dc.png", + "bitmapResolution": 2, + "rotationCenterX": 248, + "rotationCenterY": 272 + }, + { + "costumeName": "anina top L step", + "baseLayerID": -1, + "baseLayerMD5": "62a89d8c6f7680e342132fcde59b2a5d.png", + "bitmapResolution": 2, + "rotationCenterX": 228, + "rotationCenterY": 274 + }, + { + "costumeName": "anina top freeze", + "baseLayerID": -1, + "baseLayerMD5": "dd67565519bdebea1b931deb19621384.png", + "bitmapResolution": 2, + "rotationCenterX": 110, + "rotationCenterY": 268 + }, + { + "costumeName": "anina R cross", + "baseLayerID": -1, + "baseLayerMD5": "22f3ca23b2f0ac67f8ebc36a8c3116a0.png", + "bitmapResolution": 2, + "rotationCenterX": 126, + "rotationCenterY": 268 + }, + { + "costumeName": "anina pop front", + "baseLayerID": -1, + "baseLayerMD5": "c163f1002f61421816386e52522b9133.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 270 + }, + { + "costumeName": "anina pop down", + "baseLayerID": -1, + "baseLayerMD5": "e9e54ff1fa61c71507e25540d0326177.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 156 + }, + { + "costumeName": "anina pop left", + "baseLayerID": -1, + "baseLayerMD5": "9fda30f66d51b2ad5f6fe11d57e199d6.png", + "bitmapResolution": 2, + "rotationCenterX": 238, + "rotationCenterY": 266 + }, + { + "costumeName": "anina pop right", + "baseLayerID": -1, + "baseLayerMD5": "cc2594e9278494e82f725be34369f178.png", + "bitmapResolution": 2, + "rotationCenterX": 66, + "rotationCenterY": 268 + }, + { + "costumeName": "anina pop L arm", + "baseLayerID": -1, + "baseLayerMD5": "843bff4a5ee3d61fd8cbd419cb2797a3.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 274 + }, + { + "costumeName": "anina pop stand", + "baseLayerID": -1, + "baseLayerMD5": "de7cab2c8d567d49a5a1f378b5709bb4.png", + "bitmapResolution": 2, + "rotationCenterX": 76, + "rotationCenterY": 276 + }, + { + "costumeName": "anina pop R arm", + "baseLayerID": -1, + "baseLayerMD5": "e7e1a86233b7ad28d6ee9970b152be20.png", + "bitmapResolution": 2, + "rotationCenterX": 88, + "rotationCenterY": 272 + } + ], + "currentCostumeIndex": 0, + "scratchX": -27, + "scratchY": 1, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Apple", "md5": "831ccd4741a7a56d85f6698a21f4ca69.svg", @@ -614,7 +796,7 @@ "costumes": [ { "costumeName": "basketball", - "baseLayerID": 16, + "baseLayerID": -1, "baseLayerMD5": "b15c425f3eef68e7d095ee91321cb52a.svg", "bitmapResolution": 1, "rotationCenterX": 26, @@ -855,7 +1037,7 @@ "costumes": [ { "costumeName": "bear-a", - "baseLayerID": 16, + "baseLayerID": -1, "baseLayerMD5": "5a4148d7684fc95f38c58a1672062c9e.svg", "bitmapResolution": 1, "rotationCenterX": 100, @@ -863,7 +1045,7 @@ }, { "costumeName": "bear-b", - "baseLayerID": 17, + "baseLayerID": -1, "baseLayerMD5": "d6517131718621a7aae8fc4f27de1ded.svg", "bitmapResolution": 1, "rotationCenterX": 80, @@ -910,7 +1092,7 @@ "costumes": [ { "costumeName": "bear-walk-a", - "baseLayerID": 18, + "baseLayerID": -1, "baseLayerMD5": "d15eddb1a0f0ff0fa867bc006b46685d.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -918,7 +1100,7 @@ }, { "costumeName": "bear-walk-b", - "baseLayerID": 19, + "baseLayerID": -1, "baseLayerMD5": "06e3f1bcf4f46b83df3820d92430f202.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -926,7 +1108,7 @@ }, { "costumeName": "bear-walk-c", - "baseLayerID": 20, + "baseLayerID": -1, "baseLayerMD5": "13a3584040c9903b1824bb249d7f8a0e.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -934,7 +1116,7 @@ }, { "costumeName": "bear-walk-d", - "baseLayerID": 21, + "baseLayerID": -1, "baseLayerMD5": "c5d49a105619c497be45a5d2c43a740a.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -942,7 +1124,7 @@ }, { "costumeName": "bear-walk-e", - "baseLayerID": 22, + "baseLayerID": -1, "baseLayerMD5": "ece252d79c2d30c647c43c58986d9671.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -950,7 +1132,7 @@ }, { "costumeName": "bear-walk-f", - "baseLayerID": 23, + "baseLayerID": -1, "baseLayerMD5": "ff66b87efec0e647dc30ec58df168ec4.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -958,7 +1140,7 @@ }, { "costumeName": "bear-walk-g", - "baseLayerID": 24, + "baseLayerID": -1, "baseLayerMD5": "d1404b12adf0d6b1b881f0dca47ce21a.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -966,7 +1148,7 @@ }, { "costumeName": "bear-walk-h", - "baseLayerID": 25, + "baseLayerID": -1, "baseLayerMD5": "489055be58a7d9806e1d50455c88c399.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -1396,7 +1578,7 @@ "costumes": [ { "costumeName": "bread", - "baseLayerID": 35, + "baseLayerID": -1, "baseLayerMD5": "68366160ce0ac1221cdde4455eca9cba.svg", "bitmapResolution": 1, "rotationCenterX": 37, @@ -1444,7 +1626,7 @@ "costumes": [ { "costumeName": "broom", - "baseLayerID": 26, + "baseLayerID": -1, "baseLayerMD5": "836197f784bc4c4decfb1a5a60ca6c56.svg", "bitmapResolution": 1, "rotationCenterX": 135, @@ -1582,6 +1764,71 @@ "spriteInfo": {} } }, + { + "name": "Butterfly", + "md5": "8419d4851defd1e862e4f7c1699d2190.svg", + "type": "sprite", + "tags": [ + "animals", + "insect", + "bug", + "wetland", + "owen davey" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Butterfly", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "butterfly-a", + "baseLayerID": -1, + "baseLayerMD5": "8419d4851defd1e862e4f7c1699d2190.svg", + "bitmapResolution": 1, + "rotationCenterX": 65, + "rotationCenterY": 49 + }, + { + "costumeName": "butterfly-b", + "baseLayerID": -1, + "baseLayerMD5": "0873714e8d55d9eeb0bc8e8ab64441cc.svg", + "bitmapResolution": 1, + "rotationCenterX": 65, + "rotationCenterY": 49 + }, + { + "costumeName": "butterfly-c", + "baseLayerID": -1, + "baseLayerMD5": "9c422631ca8d46413487f5dd627b65c6.svg", + "bitmapResolution": 1, + "rotationCenterX": 65, + "rotationCenterY": 49 + } + ], + "currentCostumeIndex": 0, + "scratchX": -130, + "scratchY": 77, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Butterfly1", "md5": "836d4cc7889f4a1cbcb0303934f31f79.svg", @@ -2073,6 +2320,57 @@ "spriteInfo": {} } }, + { + "name": "Calvrett", + "md5": "452683db3ad7a882f5ab9de496441592.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 2, + 1 + ], + "json": { + "objName": "Calvrett", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "calvrett jumping", + "baseLayerID": -1, + "baseLayerMD5": "452683db3ad7a882f5ab9de496441592.png", + "bitmapResolution": 2, + "rotationCenterX": 168, + "rotationCenterY": 216 + }, + { + "costumeName": "calvrett thinking", + "baseLayerID": -1, + "baseLayerMD5": "728ec1ebc275b53809023a36c66eeaa3.png", + "bitmapResolution": 2, + "rotationCenterX": 106, + "rotationCenterY": 170 + } + ], + "currentCostumeIndex": 0, + "scratchX": 39, + "scratchY": -9, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Casey", "md5": "30a4dafa852311b2a07d72e1bb060326.svg", @@ -2103,7 +2401,7 @@ "costumes": [ { "costumeName": "casey-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "30a4dafa852311b2a07d72e1bb060326.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -2111,7 +2409,7 @@ }, { "costumeName": "casey-b", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "c8c0a25bebac8b35b8eae7ddd716d061.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -2119,7 +2417,7 @@ }, { "costumeName": "casey-c", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "104d363c48c373384c6c80abbbbb0ad6.svg", "bitmapResolution": 1, "rotationCenterX": 61, @@ -2127,7 +2425,7 @@ }, { "costumeName": "casey-d", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "3d4bddb908bf912b938c111bfa38c28a.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -2146,50 +2444,117 @@ } }, { - "name": "Cat", - "md5": "09dc888b0b7df19f70d81588ae73420e.svg", + "name": "Cassy Dance", + "md5": "6cb3686db1fa658b6541cc9fa3ccfcc7.png", "type": "sprite", - "tags": [ - "animals", - "cat", - "kitten", - "kitty", - "mammal", - "orange", - "scratch cat" - ], + "tags": [], "info": [ 0, - 2, + 4, 1 ], "json": { - "objName": "Cat", + "objName": "Cassy Dance", "sounds": [ { - "soundName": "meow", + "soundName": "pop", "soundID": -1, - "md5": "83c36d806dc92327b9e7049a565c6bff.wav", - "sampleCount": 18688, - "rate": 22050, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, "format": "" } ], "costumes": [ { - "costumeName": "cat1", + "costumeName": "cassy-a", "baseLayerID": -1, - "baseLayerMD5": "09dc888b0b7df19f70d81588ae73420e.svg", - "bitmapResolution": 1, - "rotationCenterX": 47, - "rotationCenterY": 55 + "baseLayerMD5": "6cb3686db1fa658b6541cc9fa3ccfcc7.png", + "bitmapResolution": 2, + "rotationCenterX": 104, + "rotationCenterY": 192 }, { - "costumeName": "cat2", + "costumeName": "cassy-b", "baseLayerID": -1, - "baseLayerMD5": "3696356a03a8d938318876a593572843.svg", - "bitmapResolution": 1, - "rotationCenterX": 47, + "baseLayerMD5": "f801cec764da5ef6374e1d557296d14e.png", + "bitmapResolution": 2, + "rotationCenterX": 140, + "rotationCenterY": 192 + }, + { + "costumeName": "cassy-c", + "baseLayerID": -1, + "baseLayerMD5": "63483bbf72fc55719918a335e1a16426.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 188 + }, + { + "costumeName": "cassy-d", + "baseLayerID": -1, + "baseLayerMD5": "aca39a47cf3affd8a83d3287d2856c29.png", + "bitmapResolution": 2, + "rotationCenterX": 94, + "rotationCenterY": 180 + } + ], + "currentCostumeIndex": 0, + "scratchX": -88, + "scratchY": 44, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Cat", + "md5": "09dc888b0b7df19f70d81588ae73420e.svg", + "type": "sprite", + "tags": [ + "animals", + "cat", + "kitten", + "kitty", + "mammal", + "orange", + "scratch cat" + ], + "info": [ + 0, + 2, + 1 + ], + "json": { + "objName": "Cat", + "sounds": [ + { + "soundName": "meow", + "soundID": -1, + "md5": "83c36d806dc92327b9e7049a565c6bff.wav", + "sampleCount": 18688, + "rate": 22050, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "cat1", + "baseLayerID": -1, + "baseLayerMD5": "09dc888b0b7df19f70d81588ae73420e.svg", + "bitmapResolution": 1, + "rotationCenterX": 47, + "rotationCenterY": 55 + }, + { + "costumeName": "cat2", + "baseLayerID": -1, + "baseLayerMD5": "3696356a03a8d938318876a593572843.svg", + "bitmapResolution": 1, + "rotationCenterX": 47, "rotationCenterY": 55 } ], @@ -2411,7 +2776,7 @@ "costumes": [ { "costumeName": "centaur-a", - "baseLayerID": 61, + "baseLayerID": -1, "baseLayerMD5": "45c1890ae0ab41f24f67ea74bec006c9.svg", "bitmapResolution": 1, "rotationCenterX": 110, @@ -2419,7 +2784,7 @@ }, { "costumeName": "centaur-b", - "baseLayerID": 62, + "baseLayerID": -1, "baseLayerMD5": "783e8cd43e0c1feca25f639cb5cbc7da.svg", "bitmapResolution": 1, "rotationCenterX": 110, @@ -2427,7 +2792,7 @@ }, { "costumeName": "centaur-c", - "baseLayerID": 63, + "baseLayerID": -1, "baseLayerMD5": "d09f7160383c6399354c3d9960e852db.svg", "bitmapResolution": 1, "rotationCenterX": 110, @@ -2435,7 +2800,7 @@ }, { "costumeName": "centaur-d", - "baseLayerID": 64, + "baseLayerID": -1, "baseLayerMD5": "1ba8b4d384f995688c1b7048d1935697.svg", "bitmapResolution": 1, "rotationCenterX": 110, @@ -2453,6 +2818,196 @@ "spriteInfo": {} } }, + { + "name": "Champ99", + "md5": "b940c99d8e677ac5773cb4d592b16734.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 7, + 1 + ], + "json": { + "objName": "Champ99", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "champ99-a", + "baseLayerID": -1, + "baseLayerMD5": "b940c99d8e677ac5773cb4d592b16734.png", + "bitmapResolution": 2, + "rotationCenterX": 248, + "rotationCenterY": 306 + }, + { + "costumeName": "champ99-b", + "baseLayerID": -1, + "baseLayerMD5": "2ebc7632bc9e665d9eeea93190fad7ad.png", + "bitmapResolution": 2, + "rotationCenterX": 164, + "rotationCenterY": 290 + }, + { + "costumeName": "champ99-c", + "baseLayerID": -1, + "baseLayerMD5": "bfcff80b0044c644c555ba24f2484106.png", + "bitmapResolution": 2, + "rotationCenterX": 152, + "rotationCenterY": 270 + }, + { + "costumeName": "champ99-d", + "baseLayerID": -1, + "baseLayerMD5": "34de53e52a768d60a96e3ae0c030dfc5.png", + "bitmapResolution": 2, + "rotationCenterX": 188, + "rotationCenterY": 260 + }, + { + "costumeName": "champ99-e", + "baseLayerID": -1, + "baseLayerMD5": "0cb685bf8584df9caf124da929ab3453.png", + "bitmapResolution": 2, + "rotationCenterX": 190, + "rotationCenterY": 248 + }, + { + "costumeName": "champ99-f", + "baseLayerID": -1, + "baseLayerMD5": "516d30b29aed8145718db421f4737953.png", + "bitmapResolution": 2, + "rotationCenterX": 114, + "rotationCenterY": 250 + }, + { + "costumeName": "champ99-g", + "baseLayerID": -1, + "baseLayerMD5": "49e0edcb319527d936981f06b4111d53.png", + "bitmapResolution": 2, + "rotationCenterX": 132, + "rotationCenterY": 258 + } + ], + "currentCostumeIndex": 0, + "scratchX": -6, + "scratchY": 13, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Cheesy-Puffs", + "md5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Cheesy-Puffs", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "cheesy-puffs", + "baseLayerID": -1, + "baseLayerMD5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "bitmapResolution": 2, + "rotationCenterX": 87, + "rotationCenterY": 72 + } + ], + "currentCostumeIndex": 0, + "scratchX": -7, + "scratchY": -20, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Chick", + "md5": "0abf71fb210bbda7eac0bb6ecaab25de.svg", + "type": "sprite", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 0, + 2, + 1 + ], + "json": { + "objName": "Chick", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "chick-a", + "baseLayerID": -1, + "baseLayerMD5": "0abf71fb210bbda7eac0bb6ecaab25de.svg", + "bitmapResolution": 1, + "rotationCenterX": 20, + "rotationCenterY": 21 + }, + { + "costumeName": "chick-b", + "baseLayerID": -1, + "baseLayerMD5": "3577aafabcfd6bcc7f7512be940a18b7.svg", + "bitmapResolution": 1, + "rotationCenterX": 20, + "rotationCenterY": 21 + } + ], + "currentCostumeIndex": 0, + "scratchX": 20, + "scratchY": -108, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Cloud", "md5": "47005a1f20309f577a03a67abbb6b94e.svg", @@ -2572,6 +3127,49 @@ "spriteInfo": {} } }, + { + "name": "Convertible", + "md5": "5b883f396844ff5cfecd7c95553fa4fb.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Convertible", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "convertible", + "baseLayerID": -1, + "baseLayerMD5": "5b883f396844ff5cfecd7c95553fa4fb.png", + "bitmapResolution": 2, + "rotationCenterX": 180, + "rotationCenterY": 44 + } + ], + "currentCostumeIndex": 0, + "scratchX": 36, + "scratchY": -11, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Convertible3", "md5": "b6ac3c9e1789cba2302d2ef82d62d019.svg", @@ -2774,7 +3372,7 @@ "costumes": [ { "costumeName": "crystal-a", - "baseLayerID": 27, + "baseLayerID": -1, "baseLayerMD5": "8520264d48537bea17b7f6d18e9bb558.svg", "bitmapResolution": 1, "rotationCenterX": 15, @@ -2782,7 +3380,7 @@ }, { "costumeName": "crystal-b", - "baseLayerID": 28, + "baseLayerID": -1, "baseLayerMD5": "b62ce1dc2d34741bad036664a01912fb.svg", "bitmapResolution": 1, "rotationCenterX": 12, @@ -2801,28 +3399,218 @@ } }, { - "name": "Dani", - "md5": "f3038fb0f4a00806b02081c6789dd8cf.svg", + "name": "D-Money Dance", + "md5": "b30a60d31aebead577b73affd22bf30f.svg", "type": "sprite", - "tags": [ - "people", - "fashion" - ], + "tags": [], "info": [ 0, - 3, + 13, 1 ], "json": { - "objName": "Dani", + "objName": "D-Money Dance", "sounds": [ { - "soundName": "pop", + "soundName": "dance celebrate", "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm" + } + ], + "costumes": [ + { + "costumeName": "dm stance", + "baseLayerID": -1, + "baseLayerMD5": "b30a60d31aebead577b73affd22bf30f.svg", + "bitmapResolution": 1, + "rotationCenterX": 55, + "rotationCenterY": 119 + }, + { + "costumeName": "dm top stand", + "baseLayerID": -1, + "baseLayerMD5": "cbf035d39d0a0bb070d2eb998cebd60d.png", + "bitmapResolution": 2, + "rotationCenterX": 82, + "rotationCenterY": 244 + }, + { + "costumeName": "dm top R leg", + "baseLayerID": -1, + "baseLayerMD5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "bitmapResolution": 2, + "rotationCenterX": 218, + "rotationCenterY": 232 + }, + { + "costumeName": "dm top L leg", + "baseLayerID": -1, + "baseLayerMD5": "fd8bb9665fe078d2d95dbc35bccf4046.png", + "bitmapResolution": 2, + "rotationCenterX": 230, + "rotationCenterY": 240 + }, + { + "costumeName": "dm freeze", + "baseLayerID": -1, + "baseLayerMD5": "31e687f186b19ea120cd5cfc9dea2a3f.png", + "bitmapResolution": 2, + "rotationCenterX": 220, + "rotationCenterY": 234 + }, + { + "costumeName": "dm pop front", + "baseLayerID": -1, + "baseLayerMD5": "0b2fb609d6d10decfdd5a1c3b58369b4.png", + "bitmapResolution": 2, + "rotationCenterX": 92, + "rotationCenterY": 234 + }, + { + "costumeName": "dm pop down", + "baseLayerID": -1, + "baseLayerMD5": "3b65ce3551f9c111794f7f1fb8f325be.png", + "bitmapResolution": 2, + "rotationCenterX": 64, + "rotationCenterY": 74 + }, + { + "costumeName": "dm pop left", + "baseLayerID": -1, + "baseLayerMD5": "f636510e8ef231d7c0e72a572ce91c99.png", + "bitmapResolution": 2, + "rotationCenterX": 204, + "rotationCenterY": 250 + }, + { + "costumeName": "dm pop right", + "baseLayerID": -1, + "baseLayerMD5": "36b32430e45e071071052ef33c637f48.png", + "bitmapResolution": 2, + "rotationCenterX": 78, + "rotationCenterY": 238 + }, + { + "costumeName": "dm pop L arm", + "baseLayerID": -1, + "baseLayerMD5": "426e1520efc34fef45be0596fd5f7120.png", + "bitmapResolution": 2, + "rotationCenterX": 90, + "rotationCenterY": 238 + }, + { + "costumeName": "dm pop stand", + "baseLayerID": -1, + "baseLayerMD5": "370cc57b40f1f1d6e52d6330b73d207f.png", + "bitmapResolution": 2, + "rotationCenterX": 100, + "rotationCenterY": 244 + }, + { + "costumeName": "dm pop R arm", + "baseLayerID": -1, + "baseLayerMD5": "56fe91d2cf3ecb9d1b94006aee9eff79.png", + "bitmapResolution": 2, + "rotationCenterX": 80, + "rotationCenterY": 240 + }, + { + "costumeName": "dm top R leg2", + "baseLayerID": -1, + "baseLayerMD5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "bitmapResolution": 2, + "rotationCenterX": 218, + "rotationCenterY": 232 + } + ], + "currentCostumeIndex": 0, + "scratchX": -29, + "scratchY": 34, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Dan", + "md5": "1baa5b126e0e14d6070a997c0deefab5.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 2, + 1 + ], + "json": { + "objName": "Dan", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "dan-a", + "baseLayerID": -1, + "baseLayerMD5": "1baa5b126e0e14d6070a997c0deefab5.png", + "bitmapResolution": 1, + "rotationCenterX": 36, + "rotationCenterY": 100 + }, + { + "costumeName": "dan-b", + "baseLayerID": -1, + "baseLayerMD5": "89b55d049f4b3811676311df00681385.png", + "bitmapResolution": 2, + "rotationCenterX": 94, + "rotationCenterY": 200 + } + ], + "currentCostumeIndex": 0, + "scratchX": 9, + "scratchY": -38, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Dani", + "md5": "f3038fb0f4a00806b02081c6789dd8cf.svg", + "type": "sprite", + "tags": [ + "people", + "fashion" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Dani", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" } ], "costumes": [ @@ -3406,6 +4194,73 @@ "spriteInfo": {} } }, + { + "name": "Dog Puppy", + "md5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Dog Puppy", + "sounds": [ + { + "soundName": "dog2", + "soundID": -1, + "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav", + "sampleCount": 3168, + "rate": 22050, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "dog puppy right", + "baseLayerID": -1, + "baseLayerMD5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", + "bitmapResolution": 2, + "rotationCenterX": 107, + "rotationCenterY": 103 + }, + { + "costumeName": "dog puppy sit", + "baseLayerID": -1, + "baseLayerMD5": "00b1589467f939b9c61f666bca2d25d1.png", + "bitmapResolution": 2, + "rotationCenterX": 87, + "rotationCenterY": 112 + }, + { + "costumeName": "dog puppy side", + "baseLayerID": -1, + "baseLayerMD5": "63c3d6718943ecbf48f94b3b131ae8a4.png", + "bitmapResolution": 2, + "rotationCenterX": 104, + "rotationCenterY": 114 + }, + { + "costumeName": "dog puppy back", + "baseLayerID": -1, + "baseLayerMD5": "88559ad0334a8a51aca31035068682f6.png", + "bitmapResolution": 2, + "rotationCenterX": 234, + "rotationCenterY": 94 + } + ], + "currentCostumeIndex": 0, + "scratchX": -91, + "scratchY": 33, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Dog1", "md5": "39ddefa0cc58f3b1b06474d63d81ef56.svg", @@ -3608,7 +4463,7 @@ "costumes": [ { "costumeName": "dorian-a", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "b042b1a5fde03dd5abbc2f3f78d11a2c.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -3616,7 +4471,7 @@ }, { "costumeName": "dorian-b", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "d0b58b672606601ecfa3a406b537fa10.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -3624,7 +4479,7 @@ }, { "costumeName": "dorian-c", - "baseLayerID": 6, + "baseLayerID": -1, "baseLayerMD5": "445e461c73a5920098764a4cbad5bfe0.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -3632,7 +4487,7 @@ }, { "costumeName": "dorian-d", - "baseLayerID": 7, + "baseLayerID": -1, "baseLayerMD5": "ba93ede3bbf75c0f707b0fb982bc27e8.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -3669,7 +4524,7 @@ "sounds": [ { "soundName": "bark", - "soundID": 5, + "soundID": -1, "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav", "sampleCount": 3168, "rate": 22050, @@ -3679,7 +4534,7 @@ "costumes": [ { "costumeName": "dot-a", - "baseLayerID": 26, + "baseLayerID": -1, "baseLayerMD5": "47c975e37f9a89c01d0d4d6fd17ef847.svg", "bitmapResolution": 1, "rotationCenterX": 52, @@ -3687,7 +4542,7 @@ }, { "costumeName": "dot-b", - "baseLayerID": 27, + "baseLayerID": -1, "baseLayerMD5": "a9b7d5f7afa0c69c4044a3f541b9ab90.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -3695,7 +4550,7 @@ }, { "costumeName": "dot-c", - "baseLayerID": 28, + "baseLayerID": -1, "baseLayerMD5": "5b7967159c9b83b0d0ed4f051ec2c9e9.svg", "bitmapResolution": 1, "rotationCenterX": 49, @@ -3703,7 +4558,7 @@ }, { "costumeName": "dot-d", - "baseLayerID": 29, + "baseLayerID": -1, "baseLayerMD5": "23ffa385654304e4cac454390dde3606.svg", "bitmapResolution": 1, "rotationCenterX": 59, @@ -3806,7 +4661,7 @@ "costumes": [ { "costumeName": "dragon-a", - "baseLayerID": 13, + "baseLayerID": -1, "baseLayerMD5": "8aed65cee4cfe22b4f4b8e749092dbbb.svg", "bitmapResolution": 1, "rotationCenterX": 210, @@ -3814,7 +4669,7 @@ }, { "costumeName": "dragon-b", - "baseLayerID": 14, + "baseLayerID": -1, "baseLayerMD5": "c3360f16bb78b136d9911325da9fda49.svg", "bitmapResolution": 1, "rotationCenterX": 210, @@ -3822,7 +4677,7 @@ }, { "costumeName": "dragon-c", - "baseLayerID": 15, + "baseLayerID": -1, "baseLayerMD5": "e81af82ebde008c167ebc6874df3ecb4.svg", "bitmapResolution": 1, "rotationCenterX": 210, @@ -4448,7 +5303,7 @@ "costumes": [ { "costumeName": "elf-a", - "baseLayerID": 40, + "baseLayerID": -1, "baseLayerMD5": "00748a750dc4fd754ce4debb5e3595c0.svg", "bitmapResolution": 1, "rotationCenterX": 50, @@ -4456,7 +5311,7 @@ }, { "costumeName": "elf-b", - "baseLayerID": 41, + "baseLayerID": -1, "baseLayerMD5": "91815a19569ef9f0ef68bca56bb80446.svg", "bitmapResolution": 1, "rotationCenterX": 50, @@ -4464,7 +5319,7 @@ }, { "costumeName": "elf-c", - "baseLayerID": 42, + "baseLayerID": -1, "baseLayerMD5": "8153eaf84bc3db9a671cafd34506243b.svg", "bitmapResolution": 1, "rotationCenterX": 50, @@ -4472,7 +5327,7 @@ }, { "costumeName": "elf-d", - "baseLayerID": 43, + "baseLayerID": -1, "baseLayerMD5": "2432797fc69a62fc643505b0ba039169.svg", "bitmapResolution": 1, "rotationCenterX": 50, @@ -4480,7 +5335,7 @@ }, { "costumeName": "elf-e", - "baseLayerID": 44, + "baseLayerID": -1, "baseLayerMD5": "a06e6c93b143ae2a7b776bd1deee6b59.svg", "bitmapResolution": 1, "rotationCenterX": 50, @@ -4571,7 +5426,7 @@ "costumes": [ { "costumeName": "fairy-a", - "baseLayerID": 45, + "baseLayerID": -1, "baseLayerMD5": "fe97687c7f1b747bb6f41c252cc5926a.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -4579,7 +5434,7 @@ }, { "costumeName": "fairy-b", - "baseLayerID": 46, + "baseLayerID": -1, "baseLayerMD5": "c8e0d935b2e4372ecc813705a79be3eb.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -4587,7 +5442,7 @@ }, { "costumeName": "fairy-c", - "baseLayerID": 47, + "baseLayerID": -1, "baseLayerMD5": "4d0740d1b5be93256ad235062daa876b.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -4595,7 +5450,7 @@ }, { "costumeName": "fairy-d", - "baseLayerID": 48, + "baseLayerID": -1, "baseLayerMD5": "ca555dadd377431e38a3bc67ece4d36a.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -4603,7 +5458,7 @@ }, { "costumeName": "fairy-e", - "baseLayerID": 49, + "baseLayerID": -1, "baseLayerMD5": "a681f6d6044abdebcdd6634ce85da484.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -4695,21 +5550,17 @@ } }, { - "name": "Fox", - "md5": "fab5488e600e81565f0fc285fc7050f8.svg", + "name": "Football", + "md5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", "type": "sprite", - "tags": [ - "animals", - "mammal", - "robert hunter" - ], + "tags": [], "info": [ 0, - 3, + 2, 1 ], "json": { - "objName": "Fox", + "objName": "Football", "sounds": [ { "soundName": "pop", @@ -4722,33 +5573,25 @@ ], "costumes": [ { - "costumeName": "fox-a", - "baseLayerID": -1, - "baseLayerMD5": "fab5488e600e81565f0fc285fc7050f8.svg", - "bitmapResolution": 1, - "rotationCenterX": 94, - "rotationCenterY": 54 - }, - { - "costumeName": "fox-b", + "costumeName": "football running", "baseLayerID": -1, - "baseLayerMD5": "afb192ae250a74dfac18bfc52d1d6266.svg", + "baseLayerMD5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", "bitmapResolution": 1, - "rotationCenterX": 94, - "rotationCenterY": 54 + "rotationCenterX": 47, + "rotationCenterY": 100 }, { - "costumeName": "fox-c", + "costumeName": "football standing", "baseLayerID": -1, - "baseLayerMD5": "29f858d384db7998c0e5183f6a31a3b4.svg", + "baseLayerMD5": "1f57154842f68aa55577edc90a6f2b32.png", "bitmapResolution": 1, - "rotationCenterX": 94, - "rotationCenterY": 54 + "rotationCenterX": 37, + "rotationCenterY": 100 } ], "currentCostumeIndex": 0, - "scratchX": 32, - "scratchY": -124, + "scratchX": -41, + "scratchY": -39, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -4758,24 +5601,130 @@ } }, { - "name": "Frank", - "md5": "19a09a005d7199d2e681e53a761bfe11.svg", + "name": "Fortune Cookie", + "md5": "c56dcaa1fa4e3c9740142b93d5982850.png", "type": "sprite", - "tags": [ - "fantasy", - "spooky", - "halloween", - "frankenstein", - "monster", - "alex eben meyer" - ], + "tags": [], "info": [ 0, - 4, + 1, 1 ], "json": { - "objName": "Frank", + "objName": "Fortune Cookie", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "fortune cookie", + "baseLayerID": -1, + "baseLayerMD5": "c56dcaa1fa4e3c9740142b93d5982850.png", + "bitmapResolution": 2, + "rotationCenterX": 60, + "rotationCenterY": 62 + } + ], + "currentCostumeIndex": 0, + "scratchX": -5, + "scratchY": -46, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Fox", + "md5": "fab5488e600e81565f0fc285fc7050f8.svg", + "type": "sprite", + "tags": [ + "animals", + "mammal", + "robert hunter" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Fox", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "fox-a", + "baseLayerID": -1, + "baseLayerMD5": "fab5488e600e81565f0fc285fc7050f8.svg", + "bitmapResolution": 1, + "rotationCenterX": 94, + "rotationCenterY": 54 + }, + { + "costumeName": "fox-b", + "baseLayerID": -1, + "baseLayerMD5": "afb192ae250a74dfac18bfc52d1d6266.svg", + "bitmapResolution": 1, + "rotationCenterX": 94, + "rotationCenterY": 54 + }, + { + "costumeName": "fox-c", + "baseLayerID": -1, + "baseLayerMD5": "29f858d384db7998c0e5183f6a31a3b4.svg", + "bitmapResolution": 1, + "rotationCenterX": 94, + "rotationCenterY": 54 + } + ], + "currentCostumeIndex": 0, + "scratchX": 32, + "scratchY": -124, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Frank", + "md5": "19a09a005d7199d2e681e53a761bfe11.svg", + "type": "sprite", + "tags": [ + "fantasy", + "spooky", + "halloween", + "frankenstein", + "monster", + "alex eben meyer" + ], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Frank", "sounds": [ { "soundName": "pop", @@ -4881,6 +5830,49 @@ "spriteInfo": {} } }, + { + "name": "Fruit Platter", + "md5": "6c3252378da3334f63eebddbed3fae91.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Fruit Platter", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "fruit platter", + "baseLayerID": -1, + "baseLayerMD5": "6c3252378da3334f63eebddbed3fae91.png", + "bitmapResolution": 2, + "rotationCenterX": 148, + "rotationCenterY": 78 + } + ], + "currentCostumeIndex": 0, + "scratchX": -24, + "scratchY": 7, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Fruit Salad", "md5": "dbf8cc34f7ca18b4a008d2890dba56b7.svg", @@ -5195,6 +6187,69 @@ "spriteInfo": {} } }, + { + "name": "Giraffe", + "md5": "497baa643718a865b0621c1607696800.svg", + "type": "sprite", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Giraffe", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "giraffe-a", + "baseLayerID": -1, + "baseLayerMD5": "497baa643718a865b0621c1607696800.svg", + "bitmapResolution": 1, + "rotationCenterX": 86, + "rotationCenterY": 131 + }, + { + "costumeName": "giraffe-b", + "baseLayerID": -1, + "baseLayerMD5": "0242ae2497839f449af064b40b358b76.svg", + "bitmapResolution": 1, + "rotationCenterX": 86, + "rotationCenterY": 131 + }, + { + "costumeName": "giraffe-c", + "baseLayerID": -1, + "baseLayerMD5": "d9e8f8b7d656d4a24c1f4f6c24c5e578.svg", + "bitmapResolution": 1, + "rotationCenterX": 86, + "rotationCenterY": 131 + } + ], + "currentCostumeIndex": 0, + "scratchX": -130, + "scratchY": 10, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Glass Water", "md5": "c364b9e1f4bcdc61705032d89eaaa0a1.svg", @@ -5405,7 +6460,7 @@ "costumes": [ { "costumeName": "goblin-a", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "f10eaedff51f50f0809a7b4b310337fa.svg", "bitmapResolution": 1, "rotationCenterX": 40, @@ -5413,7 +6468,7 @@ }, { "costumeName": "goblin-b", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "71e7c77d89299cd99739b1216fc03a85.svg", "bitmapResolution": 1, "rotationCenterX": 40, @@ -5421,7 +6476,7 @@ }, { "costumeName": "goblin-c", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "ab0611427d6f9b54d83672cf9e554876.svg", "bitmapResolution": 1, "rotationCenterX": 40, @@ -5429,7 +6484,7 @@ }, { "costumeName": "goblin-d", - "baseLayerID": 6, + "baseLayerID": -1, "baseLayerMD5": "87dd413e7a8545bea9b3da208a5d5735.svg", "bitmapResolution": 1, "rotationCenterX": 40, @@ -5586,7 +6641,7 @@ "costumes": [ { "costumeName": "griffin-a", - "baseLayerID": 10, + "baseLayerID": -1, "baseLayerMD5": "d2ddc25b224ad72240f92e632afc7c69.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -5594,7 +6649,7 @@ }, { "costumeName": "griffin-fly-b", - "baseLayerID": 11, + "baseLayerID": -1, "baseLayerMD5": "ff0795d15b6f3990345f72bc483a3353.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -5642,7 +6697,7 @@ "costumes": [ { "costumeName": "griffin-fly-a", - "baseLayerID": 12, + "baseLayerID": -1, "baseLayerMD5": "03d75e0c7c34e8618545a5f4913db4ea.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -5650,7 +6705,7 @@ }, { "costumeName": "griffin-fly-b", - "baseLayerID": 11, + "baseLayerID": -1, "baseLayerMD5": "ff0795d15b6f3990345f72bc483a3353.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -5999,19 +7054,17 @@ } }, { - "name": "Hat", - "md5": "b3beb1f52d371428d70b65a0c4c5c001.svg", + "name": "Hannah", + "md5": "b983d99560313e38b4b3cd36cbd5f0d1.png", "type": "sprite", - "tags": [ - "Fashion" - ], + "tags": [], "info": [ 0, - 1, + 3, 1 ], "json": { - "objName": "Hat", + "objName": "Hannah", "sounds": [ { "soundName": "pop", @@ -6024,17 +7077,33 @@ ], "costumes": [ { - "costumeName": "Hat", + "costumeName": "hannah-a", "baseLayerID": -1, - "baseLayerMD5": "b3beb1f52d371428d70b65a0c4c5c001.svg", - "bitmapResolution": 1, - "rotationCenterX": 52, - "rotationCenterY": 60 + "baseLayerMD5": "b983d99560313e38b4b3cd36cbd5f0d1.png", + "bitmapResolution": 2, + "rotationCenterX": 138, + "rotationCenterY": 126 + }, + { + "costumeName": "hannah-b", + "baseLayerID": -1, + "baseLayerMD5": "d0c3b4b24fbf1152de3ebb68f6b875ae.png", + "bitmapResolution": 2, + "rotationCenterX": 48, + "rotationCenterY": 160 + }, + { + "costumeName": "hannah-c", + "baseLayerID": -1, + "baseLayerMD5": "5fdce07935156bbcf943793fa84e826c.png", + "bitmapResolution": 2, + "rotationCenterX": 170, + "rotationCenterY": 130 } ], "currentCostumeIndex": 0, - "scratchX": -15, - "scratchY": 7, + "scratchX": 34, + "scratchY": 1, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -6044,19 +7113,27 @@ } }, { - "name": "Hat Beanie", - "md5": "3271da33e4108ed08a303c2244739fbf.svg", + "name": "Hare", + "md5": "75c2e6085d0eae076ff357b56d5ed5cd.svg", "type": "sprite", "tags": [ - "fashion" + "animals", + "rabbit", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" ], "info": [ 0, - 1, + 3, 1 ], "json": { - "objName": "Hat Beanie", + "objName": "Hare", "sounds": [ { "soundName": "pop", @@ -6069,19 +7146,125 @@ ], "costumes": [ { - "costumeName": "hat beanie", + "costumeName": "hare-a", "baseLayerID": -1, - "baseLayerMD5": "3271da33e4108ed08a303c2244739fbf.svg", + "baseLayerMD5": "75c2e6085d0eae076ff357b56d5ed5cd.svg", "bitmapResolution": 1, - "rotationCenterX": 28, - "rotationCenterY": 19 - } - ], - "currentCostumeIndex": 0, - "scratchX": 40, - "scratchY": 22, - "scale": 1, - "direction": 90, + "rotationCenterX": 57, + "rotationCenterY": 49 + }, + { + "costumeName": "hare-b", + "baseLayerID": -1, + "baseLayerMD5": "fb56d1bef942196c710612906142451b.svg", + "bitmapResolution": 1, + "rotationCenterX": 57, + "rotationCenterY": 49 + }, + { + "costumeName": "hare-c", + "baseLayerID": -1, + "baseLayerMD5": "8de391ae70e54656f777c0ed53a91e1a.svg", + "bitmapResolution": 1, + "rotationCenterX": 57, + "rotationCenterY": 49 + } + ], + "currentCostumeIndex": 0, + "scratchX": -191, + "scratchY": -54, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Hat", + "md5": "b3beb1f52d371428d70b65a0c4c5c001.svg", + "type": "sprite", + "tags": [ + "Fashion" + ], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Hat", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "Hat", + "baseLayerID": -1, + "baseLayerMD5": "b3beb1f52d371428d70b65a0c4c5c001.svg", + "bitmapResolution": 1, + "rotationCenterX": 52, + "rotationCenterY": 60 + } + ], + "currentCostumeIndex": 0, + "scratchX": -15, + "scratchY": 7, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Hat Beanie", + "md5": "3271da33e4108ed08a303c2244739fbf.svg", + "type": "sprite", + "tags": [ + "fashion" + ], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Hat Beanie", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "hat beanie", + "baseLayerID": -1, + "baseLayerMD5": "3271da33e4108ed08a303c2244739fbf.svg", + "bitmapResolution": 1, + "rotationCenterX": 28, + "rotationCenterY": 19 + } + ], + "currentCostumeIndex": 0, + "scratchX": 40, + "scratchY": 22, + "scale": 1, + "direction": 90, "rotationStyle": "normal", "isDraggable": false, "visible": true, @@ -6272,6 +7455,70 @@ "spriteInfo": {} } }, + { + "name": "Hatchling", + "md5": "fb9de507b6d95e96cb0df68e401dfd8f.svg", + "type": "sprite", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Hatchling", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "hatchling-a", + "baseLayerID": -1, + "baseLayerMD5": "fb9de507b6d95e96cb0df68e401dfd8f.svg", + "bitmapResolution": 1, + "rotationCenterX": 14, + "rotationCenterY": 23 + }, + { + "costumeName": "hatchling-b", + "baseLayerID": -1, + "baseLayerMD5": "e504303f791a65274d740a20acbac606.svg", + "bitmapResolution": 1, + "rotationCenterX": 15, + "rotationCenterY": 35 + }, + { + "costumeName": "hatchling-c", + "baseLayerID": -1, + "baseLayerMD5": "6f9a243d84fbe7ed9a49e8ef9fb7d83c.svg", + "bitmapResolution": 1, + "rotationCenterX": 31, + "rotationCenterY": 36 + } + ], + "currentCostumeIndex": 0, + "scratchX": -174, + "scratchY": -85, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Headband", "md5": "961148d1605a1bd8ce80ed8d39e831c2.svg", @@ -6569,6 +7816,78 @@ "spriteInfo": {} } }, + { + "name": "Hen", + "md5": "795ed34983a70c8690fe6c8f4a47a935.svg", + "type": "sprite", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Hen", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "hen-a", + "baseLayerID": -1, + "baseLayerMD5": "795ed34983a70c8690fe6c8f4a47a935.svg", + "bitmapResolution": 1, + "rotationCenterX": 45, + "rotationCenterY": 43 + }, + { + "costumeName": "hen-b", + "baseLayerID": -1, + "baseLayerMD5": "26528a6f0318a2d2294ef7071409be12.svg", + "bitmapResolution": 1, + "rotationCenterX": 45, + "rotationCenterY": 43 + }, + { + "costumeName": "hen-c", + "baseLayerID": -1, + "baseLayerMD5": "7492692df7776c905fdbd4382696afee.svg", + "bitmapResolution": 1, + "rotationCenterX": 35, + "rotationCenterY": 28 + }, + { + "costumeName": "hen-d", + "baseLayerID": -1, + "baseLayerMD5": "4bf0cb5453273d0f75db3cd0cd45ac72.svg", + "bitmapResolution": 1, + "rotationCenterX": 45, + "rotationCenterY": 43 + } + ], + "currentCostumeIndex": 0, + "scratchX": -18, + "scratchY": -16, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Hippo1", "md5": "c1353c4a5eec5e6f32ed053e6f6e8f99.svg", @@ -6742,22 +8061,17 @@ } }, { - "name": "Jamie", - "md5": "90f9166fe6500d0c0caad8b1964d6b74.svg", + "name": "Jaime", + "md5": "3ddc912edef87ae29121f57294fa0cb5.png", "type": "sprite", - "tags": [ - "sports", - "basketball", - "people", - "alex eben meyer" - ], + "tags": [], "info": [ 0, - 4, + 7, 1 ], "json": { - "objName": "Jamie", + "objName": "Jaime", "sounds": [ { "soundName": "pop", @@ -6770,37 +8084,133 @@ ], "costumes": [ { - "costumeName": "jamie-a", - "baseLayerID": 8, - "baseLayerMD5": "90f9166fe6500d0c0caad8b1964d6b74.svg", - "bitmapResolution": 1, - "rotationCenterX": 82, - "rotationCenterY": 105 + "costumeName": "jaime-a", + "baseLayerID": -1, + "baseLayerMD5": "3ddc912edef87ae29121f57294fa0cb5.png", + "bitmapResolution": 2, + "rotationCenterX": 76, + "rotationCenterY": 154 }, { - "costumeName": "jamie-b", - "baseLayerID": 9, - "baseLayerMD5": "c3d96ef7e99440c2fa76effce1235d3f.svg", - "bitmapResolution": 1, - "rotationCenterX": 82, - "rotationCenterY": 105 + "costumeName": "jaime-b", + "baseLayerID": -1, + "baseLayerMD5": "5a683f4536abca0f83a77bc341df4c9a.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 154 }, { - "costumeName": "jamie-c", - "baseLayerID": 10, - "baseLayerMD5": "1fb8b9ca79f2c0a327913bd647b53fe5.svg", - "bitmapResolution": 1, - "rotationCenterX": 82, - "rotationCenterY": 105 + "costumeName": "jaime walking-a", + "baseLayerID": -1, + "baseLayerMD5": "d6cc9814f7a6640e4c2b1a4276987dc5.png", + "bitmapResolution": 2, + "rotationCenterX": 106, + "rotationCenterY": 172 }, { - "costumeName": "jamie-d", - "baseLayerID": 11, - "baseLayerMD5": "4adb87e6123161fcaf02f7ac022a5757.svg", - "bitmapResolution": 1, - "rotationCenterX": 82, - "rotationCenterY": 105 - } + "costumeName": "jaime walking-b", + "baseLayerID": -1, + "baseLayerMD5": "7fb579a98d6db257f1b16109d3c4609a.png", + "bitmapResolution": 2, + "rotationCenterX": 52, + "rotationCenterY": 176 + }, + { + "costumeName": "jaime walking-c", + "baseLayerID": -1, + "baseLayerMD5": "5883bdefba451aaeac8d77c798d41eb0.png", + "bitmapResolution": 2, + "rotationCenterX": 88, + "rotationCenterY": 170 + }, + { + "costumeName": "jaime walking-d", + "baseLayerID": -1, + "baseLayerMD5": "4b9d2162e30dbb924840575ed35fddb0.png", + "bitmapResolution": 2, + "rotationCenterX": 46, + "rotationCenterY": 174 + }, + { + "costumeName": "jaime walking-e", + "baseLayerID": -1, + "baseLayerMD5": "63e56d28cc3e3d9b735e1f1d51248cc0.png", + "bitmapResolution": 2, + "rotationCenterX": 84, + "rotationCenterY": 172 + } + ], + "currentCostumeIndex": 0, + "scratchX": 51, + "scratchY": 31, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Jamie", + "md5": "90f9166fe6500d0c0caad8b1964d6b74.svg", + "type": "sprite", + "tags": [ + "sports", + "basketball", + "people", + "alex eben meyer" + ], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Jamie", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "jamie-a", + "baseLayerID": -1, + "baseLayerMD5": "90f9166fe6500d0c0caad8b1964d6b74.svg", + "bitmapResolution": 1, + "rotationCenterX": 82, + "rotationCenterY": 105 + }, + { + "costumeName": "jamie-b", + "baseLayerID": -1, + "baseLayerMD5": "c3d96ef7e99440c2fa76effce1235d3f.svg", + "bitmapResolution": 1, + "rotationCenterX": 82, + "rotationCenterY": 105 + }, + { + "costumeName": "jamie-c", + "baseLayerID": -1, + "baseLayerMD5": "1fb8b9ca79f2c0a327913bd647b53fe5.svg", + "bitmapResolution": 1, + "rotationCenterX": 82, + "rotationCenterY": 105 + }, + { + "costumeName": "jamie-d", + "baseLayerID": -1, + "baseLayerMD5": "4adb87e6123161fcaf02f7ac022a5757.svg", + "bitmapResolution": 1, + "rotationCenterX": 82, + "rotationCenterY": 105 + } ], "currentCostumeIndex": 0, "scratchX": 56, @@ -6842,7 +8252,7 @@ "costumes": [ { "costumeName": "jar-a", - "baseLayerID": 33, + "baseLayerID": -1, "baseLayerMD5": "73784b267083733e08bcf06aa7d6536a.svg", "bitmapResolution": 1, "rotationCenterX": 20, @@ -6850,7 +8260,7 @@ }, { "costumeName": "jar-b", - "baseLayerID": 34, + "baseLayerID": -1, "baseLayerMD5": "a37eb72115966a75bc1bf521deeccc0c.svg", "bitmapResolution": 1, "rotationCenterX": 20, @@ -7068,6 +8478,196 @@ "spriteInfo": {} } }, + { + "name": "Jouvi Dance", + "md5": "34336e1105719a933e57c043e0b52998.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 13, + 1 + ], + "json": { + "objName": "Jouvi Dance", + "sounds": [ + { + "soundName": "dance celebrate2", + "soundID": -1, + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm" + } + ], + "costumes": [ + { + "costumeName": "jo stance", + "baseLayerID": -1, + "baseLayerMD5": "34336e1105719a933e57c043e0b52998.png", + "bitmapResolution": 2, + "rotationCenterX": 94, + "rotationCenterY": 240 + }, + { + "costumeName": "jo top stand", + "baseLayerID": -1, + "baseLayerMD5": "a91fe6e180b524d27688aa0cd82cd629.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 260 + }, + { + "costumeName": "jo top R leg", + "baseLayerID": -1, + "baseLayerMD5": "de64c526a57355af5fd6ff28f27b67ea.png", + "bitmapResolution": 2, + "rotationCenterX": 218, + "rotationCenterY": 262 + }, + { + "costumeName": "jo top L leg", + "baseLayerID": -1, + "baseLayerMD5": "987a667cd7984d9e5429c26b8a4cab2d.png", + "bitmapResolution": 2, + "rotationCenterX": 208, + "rotationCenterY": 268 + }, + { + "costumeName": "jo top R cross", + "baseLayerID": -1, + "baseLayerMD5": "ddbd8751df020cc32231ecb4e7b5388d.png", + "bitmapResolution": 2, + "rotationCenterX": 144, + "rotationCenterY": 270 + }, + { + "costumeName": "jo top L cross", + "baseLayerID": -1, + "baseLayerMD5": "33660046a3d37fa762f4a634ee3df75d.png", + "bitmapResolution": 2, + "rotationCenterX": 84, + "rotationCenterY": 268 + }, + { + "costumeName": "jo pop front", + "baseLayerID": -1, + "baseLayerMD5": "0503f4d712bc3184cf1b5f830d0df993.png", + "bitmapResolution": 2, + "rotationCenterX": 70, + "rotationCenterY": 228 + }, + { + "costumeName": "jo pop down", + "baseLayerID": -1, + "baseLayerMD5": "95a0f1bb3d8055a283aecc6bcb6303c9.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 74 + }, + { + "costumeName": "jo pop left", + "baseLayerID": -1, + "baseLayerMD5": "98e8c2f9869f9356204ed19e43ae01cc.png", + "bitmapResolution": 2, + "rotationCenterX": 196, + "rotationCenterY": 226 + }, + { + "costumeName": "jo pop right", + "baseLayerID": -1, + "baseLayerMD5": "7bf1600ee75facb510c2922f899fb97c.png", + "bitmapResolution": 2, + "rotationCenterX": 66, + "rotationCenterY": 242 + }, + { + "costumeName": "jo pop L arm", + "baseLayerID": -1, + "baseLayerMD5": "2a907e6edf8a101addb2c27d0568896a.png", + "bitmapResolution": 2, + "rotationCenterX": 108, + "rotationCenterY": 258 + }, + { + "costumeName": "jo pop stand", + "baseLayerID": -1, + "baseLayerMD5": "361d1884737ef734f6a39fd66fc269ec.png", + "bitmapResolution": 2, + "rotationCenterX": 78, + "rotationCenterY": 262 + }, + { + "costumeName": "jo pop R arm", + "baseLayerID": -1, + "baseLayerMD5": "e633eb002deb20108bb5100d4b3a8fc5.png", + "bitmapResolution": 2, + "rotationCenterX": 108, + "rotationCenterY": 260 + } + ], + "currentCostumeIndex": 0, + "scratchX": -58, + "scratchY": -27, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Kai", + "md5": "6e007fde15e49c66ee7996561f80b452.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 2, + 1 + ], + "json": { + "objName": "Kai", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "kai-a", + "baseLayerID": -1, + "baseLayerMD5": "6e007fde15e49c66ee7996561f80b452.png", + "bitmapResolution": 2, + "rotationCenterX": 68, + "rotationCenterY": 160 + }, + { + "costumeName": "kai-b", + "baseLayerID": -1, + "baseLayerMD5": "c1e1149f6d7e308e3e4eba14ccc8a751.png", + "bitmapResolution": 2, + "rotationCenterX": 82, + "rotationCenterY": 158 + } + ], + "currentCostumeIndex": 0, + "scratchX": 57, + "scratchY": 47, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Key", "md5": "af35300cef35803e11f4ed744dc5e818.svg", @@ -7253,7 +8853,7 @@ "costumes": [ { "costumeName": "kiran-a", - "baseLayerID": 11, + "baseLayerID": -1, "baseLayerMD5": "9de23c4a7a7fbb67136b539241346854.svg", "bitmapResolution": 1, "rotationCenterX": 67, @@ -7261,7 +8861,7 @@ }, { "costumeName": "kiran-b", - "baseLayerID": 12, + "baseLayerID": -1, "baseLayerMD5": "f1e74f3c02333e9e2068e8baf4e77aa0.svg", "bitmapResolution": 1, "rotationCenterX": 67, @@ -7269,7 +8869,7 @@ }, { "costumeName": "kiran-c", - "baseLayerID": 13, + "baseLayerID": -1, "baseLayerMD5": "e2482cf509c312935f08be0e2e2c9d84.svg", "bitmapResolution": 1, "rotationCenterX": 67, @@ -7277,7 +8877,7 @@ }, { "costumeName": "kiran-d", - "baseLayerID": 14, + "baseLayerID": -1, "baseLayerMD5": "569e736b519199efddfbae2572f7e92b.svg", "bitmapResolution": 1, "rotationCenterX": 67, @@ -7285,7 +8885,7 @@ }, { "costumeName": "kiran-e", - "baseLayerID": 15, + "baseLayerID": -1, "baseLayerMD5": "2261bed0f2cc819def17969158297b4f.svg", "bitmapResolution": 1, "rotationCenterX": 77, @@ -7293,7 +8893,7 @@ }, { "costumeName": "kiran-f", - "baseLayerID": 16, + "baseLayerID": -1, "baseLayerMD5": "d7f44adb3dc7906b9dfb3599a028e0d6.svg", "bitmapResolution": 1, "rotationCenterX": 62, @@ -7359,58 +8959,197 @@ } }, { - "name": "Ladybug1", - "md5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", + "name": "LB Dance", + "md5": "008b80a80c4188acc72f7893fb10ac75.png", "type": "sprite", - "tags": [ - "animals", - "insect", - "bug", - "antennae" - ], + "tags": [], "info": [ 0, - 1, + 13, 1 ], "json": { - "objName": "Ladybug1", + "objName": "LB Dance", "sounds": [ { - "soundName": "pop", + "soundName": "dance celebrate", "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm" } ], "costumes": [ { - "costumeName": "ladybug2", + "costumeName": "lb stance", "baseLayerID": -1, - "baseLayerMD5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", - "bitmapResolution": 1, - "rotationCenterX": 41, - "rotationCenterY": 43 - } - ], - "currentCostumeIndex": 0, - "scratchX": -90, - "scratchY": 42, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, - { - "name": "Ladybug2", - "md5": "c018a3eed966d5f92c69f2188dfd2aae.svg", - "type": "sprite", - "tags": [ + "baseLayerMD5": "008b80a80c4188acc72f7893fb10ac75.png", + "bitmapResolution": 2, + "rotationCenterX": 54, + "rotationCenterY": 244 + }, + { + "costumeName": "lb top stand", + "baseLayerID": -1, + "baseLayerMD5": "dfe3628ddf46a67dcc21c63be65a8e40.png", + "bitmapResolution": 2, + "rotationCenterX": 70, + "rotationCenterY": 248 + }, + { + "costumeName": "lb top R leg", + "baseLayerID": -1, + "baseLayerMD5": "e824768a109691b5a3c577d3506ed70c.png", + "bitmapResolution": 2, + "rotationCenterX": 244, + "rotationCenterY": 250 + }, + { + "costumeName": "lb top L leg", + "baseLayerID": -1, + "baseLayerMD5": "350472368e2310efe6fa734b79f0ff41.png", + "bitmapResolution": 2, + "rotationCenterX": 234, + "rotationCenterY": 286 + }, + { + "costumeName": "lb top L cross", + "baseLayerID": -1, + "baseLayerMD5": "5a151c4d4e2e2f870d9096d5fce6ed48.png", + "bitmapResolution": 2, + "rotationCenterX": 148, + "rotationCenterY": 258 + }, + { + "costumeName": "lb top R cross", + "baseLayerID": -1, + "baseLayerMD5": "99acf468000c6fcbaf344e4531725efc.png", + "bitmapResolution": 2, + "rotationCenterX": 174, + "rotationCenterY": 256 + }, + { + "costumeName": "lb pop front", + "baseLayerID": -1, + "baseLayerMD5": "e34a166807a3ffbf8d147b12aa49dd19.png", + "bitmapResolution": 2, + "rotationCenterX": 66, + "rotationCenterY": 272 + }, + { + "costumeName": "lb pop down", + "baseLayerID": -1, + "baseLayerMD5": "8e41de92cb932a6898782a39a0d7d300.png", + "bitmapResolution": 2, + "rotationCenterX": 56, + "rotationCenterY": 90 + }, + { + "costumeName": "lb pop left", + "baseLayerID": -1, + "baseLayerMD5": "ff1b96d1047d4be459a4614ce7c7c94c.png", + "bitmapResolution": 2, + "rotationCenterX": 198, + "rotationCenterY": 266 + }, + { + "costumeName": "lb pop right", + "baseLayerID": -1, + "baseLayerMD5": "d6d5534c628ac5d5fe3cbf1b76b71252.png", + "bitmapResolution": 2, + "rotationCenterX": 76, + "rotationCenterY": 264 + }, + { + "costumeName": "lb pop L arm", + "baseLayerID": -1, + "baseLayerMD5": "c1fd31607619b8c98a286a650f248511.png", + "bitmapResolution": 2, + "rotationCenterX": 100, + "rotationCenterY": 262 + }, + { + "costumeName": "lb pop stand", + "baseLayerID": -1, + "baseLayerMD5": "51fe5962fe4d2af7f6fad7abaa692069.png", + "bitmapResolution": 2, + "rotationCenterX": 66, + "rotationCenterY": 268 + }, + { + "costumeName": "lb pop R arm", + "baseLayerID": -1, + "baseLayerMD5": "aa57575fde5ff8b13041e3a7b1499fe0.png", + "bitmapResolution": 2, + "rotationCenterX": 78, + "rotationCenterY": 258 + } + ], + "currentCostumeIndex": 0, + "scratchX": 12, + "scratchY": 17, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Ladybug1", + "md5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", + "type": "sprite", + "tags": [ + "animals", + "insect", + "bug", + "antennae" + ], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Ladybug1", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "ladybug2", + "baseLayerID": -1, + "baseLayerMD5": "f16a1ccc69a4a8190a927f1595aa7bfa.svg", + "bitmapResolution": 1, + "rotationCenterX": 41, + "rotationCenterY": 43 + } + ], + "currentCostumeIndex": 0, + "scratchX": -90, + "scratchY": 42, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Ladybug2", + "md5": "c018a3eed966d5f92c69f2188dfd2aae.svg", + "type": "sprite", + "tags": [ "animal", "insect", "arthropod", @@ -7607,31 +9346,29 @@ }, { "name": "Lion", - "md5": "692a3c84366bf8ae4d16858e20e792f5.svg", + "md5": "701a41dec023bc03a5ad4e35988b9a86.svg", "type": "sprite", "tags": [ + "cat", "animals", - "mammals", - "big cat", - "carnivore", - "king", - "jungle", - "roar" + "africa", + "savanna", + "robert hunter" ], "info": [ 0, - 2, + 3, 1 ], "json": { "objName": "Lion", "sounds": [ { - "soundName": "meow", + "soundName": "pop", "soundID": -1, - "md5": "83c36d806dc92327b9e7049a565c6bff.wav", - "sampleCount": 18688, - "rate": 22050, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, "format": "" } ], @@ -7639,23 +9376,31 @@ { "costumeName": "lion-a", "baseLayerID": -1, - "baseLayerMD5": "692a3c84366bf8ae4d16858e20e792f5.svg", + "baseLayerMD5": "701a41dec023bc03a5ad4e35988b9a86.svg", "bitmapResolution": 1, - "rotationCenterX": 75, - "rotationCenterY": 75 + "rotationCenterX": 95, + "rotationCenterY": 43 }, { "costumeName": "lion-b", "baseLayerID": -1, - "baseLayerMD5": "a519ef168a345a2846d0201bf092a6d0.svg", + "baseLayerMD5": "28ac215a2574eeabc2b390a14de3c152.svg", "bitmapResolution": 1, - "rotationCenterX": 75, - "rotationCenterY": 75 + "rotationCenterX": 95, + "rotationCenterY": 43 + }, + { + "costumeName": "lion-c", + "baseLayerID": -1, + "baseLayerMD5": "4dbe981721314eb631ef4f7fa920e1a4.svg", + "bitmapResolution": 1, + "rotationCenterX": 95, + "rotationCenterY": 43 } ], "currentCostumeIndex": 0, - "scratchX": 8, - "scratchY": 36, + "scratchX": 25, + "scratchY": -87, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -7804,7 +9549,7 @@ "costumes": [ { "costumeName": "max-a", - "baseLayerID": 12, + "baseLayerID": -1, "baseLayerMD5": "e10cca3bdbc09d039c2f937574f7a6ea.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -7812,7 +9557,7 @@ }, { "costumeName": "max-b", - "baseLayerID": 13, + "baseLayerID": -1, "baseLayerMD5": "6d8ee139a741cf945d600a8cef0ea2e6.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -7820,7 +9565,7 @@ }, { "costumeName": "max-c", - "baseLayerID": 14, + "baseLayerID": -1, "baseLayerMD5": "aa66109994d27de02711f6a0ef6de9ec.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -7828,7 +9573,7 @@ }, { "costumeName": "max-d", - "baseLayerID": 15, + "baseLayerID": -1, "baseLayerMD5": "a0dbf509d542c7eff6d2ddfc9c9410f1.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -7876,7 +9621,7 @@ "costumes": [ { "costumeName": "mermaid-a", - "baseLayerID": 50, + "baseLayerID": -1, "baseLayerMD5": "36db41c47259881c26d9b98a806d3308.svg", "bitmapResolution": 1, "rotationCenterX": 92, @@ -7884,7 +9629,7 @@ }, { "costumeName": "mermaid-b", - "baseLayerID": 51, + "baseLayerID": -1, "baseLayerMD5": "564bf3f466df3b3e8aba71eeae8255ab.svg", "bitmapResolution": 1, "rotationCenterX": 92, @@ -7932,7 +9677,7 @@ "costumes": [ { "costumeName": "mermaid-swim-a", - "baseLayerID": 54, + "baseLayerID": -1, "baseLayerMD5": "9f973b89b68f7d8147f157cbac8af341.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -7940,7 +9685,7 @@ }, { "costumeName": "mermaid-swim-b", - "baseLayerID": 55, + "baseLayerID": -1, "baseLayerMD5": "2295784bb8e6354bfa7676089235cb9f.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -8184,7 +9929,7 @@ "costumes": [ { "costumeName": "monet-a", - "baseLayerID": 6, + "baseLayerID": -1, "baseLayerMD5": "11c46aaa5e30ad46f5c1883d6feb47b8.svg", "bitmapResolution": 1, "rotationCenterX": 64, @@ -8192,7 +9937,7 @@ }, { "costumeName": "monet-b", - "baseLayerID": 7, + "baseLayerID": -1, "baseLayerMD5": "9c8f83e39dc8ac49d57c0622ffe2063f.svg", "bitmapResolution": 1, "rotationCenterX": 64, @@ -8200,7 +9945,7 @@ }, { "costumeName": "monet-c", - "baseLayerID": 8, + "baseLayerID": -1, "baseLayerMD5": "4435678d26e8fbc266d647693f65f5d7.svg", "bitmapResolution": 1, "rotationCenterX": 64, @@ -8208,7 +9953,7 @@ }, { "costumeName": "monet-d", - "baseLayerID": 9, + "baseLayerID": -1, "baseLayerMD5": "42113ca3eca593c3a8f232a9202d6f14.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -8216,7 +9961,7 @@ }, { "costumeName": "monet-e", - "baseLayerID": 10, + "baseLayerID": -1, "baseLayerMD5": "e530d0dac5290c5366af719cfb4e5953.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -8758,7 +10503,7 @@ }, { "costumeName": "outfielder-c", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "f6f1d2b7c6b50cbdac8cdbb55c872114.svg", "bitmapResolution": 1, "rotationCenterX": 46, @@ -8766,7 +10511,7 @@ }, { "costumeName": "outfielder-d", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "c6fb3a8079bce9630ab9499926c16de9.svg", "bitmapResolution": 1, "rotationCenterX": 79, @@ -9069,6 +10814,75 @@ "spriteInfo": {} } }, + { + "name": "Penguin", + "md5": "6d85d016129c34c90ef269933a72a7a7.svg", + "type": "sprite", + "tags": [ + "animals", + "bird", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Penguin", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "penguin-a", + "baseLayerID": -1, + "baseLayerMD5": "6d85d016129c34c90ef269933a72a7a7.svg", + "bitmapResolution": 1, + "rotationCenterX": 36, + "rotationCenterY": 46 + }, + { + "costumeName": "penguin-b", + "baseLayerID": -1, + "baseLayerMD5": "e93ef702208fad2776a34f57c1c746b1.svg", + "bitmapResolution": 1, + "rotationCenterX": 36, + "rotationCenterY": 46 + }, + { + "costumeName": "penguin-c", + "baseLayerID": -1, + "baseLayerMD5": "c6d6ec90b897855831a73b3b3b8f202a.svg", + "bitmapResolution": 1, + "rotationCenterX": 36, + "rotationCenterY": 46 + } + ], + "currentCostumeIndex": 0, + "scratchX": -84, + "scratchY": -100, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Penguin 2", "md5": "c17d9e4bdb59c574e0c34aa70af516da.svg", @@ -9303,7 +11117,7 @@ "costumes": [ { "costumeName": "pitcher-a", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "a8694f8f7867d95c62121e60cb8b4812.svg", "bitmapResolution": 1, "rotationCenterX": 42, @@ -9311,7 +11125,7 @@ }, { "costumeName": "pitcher-b", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "13f363056c706870ede82798e6a8bcf6.svg", "bitmapResolution": 1, "rotationCenterX": 70, @@ -9319,7 +11133,7 @@ }, { "costumeName": "pitcher-c", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "6e26bd644ecd8d1f1606261d1b8f6a75.svg", "bitmapResolution": 1, "rotationCenterX": 62, @@ -9327,7 +11141,7 @@ }, { "costumeName": "pitcher-d", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "120d823290171ad83b6b328a5ffaf60e.svg", "bitmapResolution": 1, "rotationCenterX": 82, @@ -9391,13 +11205,18 @@ } }, { - "name": "Potion", - "md5": "a317b50b255a208455a7733091adad23.svg", + "name": "Polar Bear", + "md5": "c96435a1b9ad2ed37b2c9c5aac6d1fb4.svg", "type": "sprite", "tags": [ - "fantasy", - "ipzy", - "things" + "animals", + "cold", + "north pole", + "south pole", + "ice", + "antarctica", + "arctic", + "robert hunter" ], "info": [ 0, @@ -9405,7 +11224,7 @@ 1 ], "json": { - "objName": "Potion", + "objName": "Polar Bear", "sounds": [ { "soundName": "pop", @@ -9418,28 +11237,91 @@ ], "costumes": [ { - "costumeName": "potion-a", - "baseLayerID": 30, - "baseLayerMD5": "a317b50b255a208455a7733091adad23.svg", + "costumeName": "polar bear-a", + "baseLayerID": -1, + "baseLayerMD5": "c96435a1b9ad2ed37b2c9c5aac6d1fb4.svg", "bitmapResolution": 1, - "rotationCenterX": 15, - "rotationCenterY": 21 + "rotationCenterX": 104, + "rotationCenterY": 46 }, { - "costumeName": "potion-b", - "baseLayerID": 31, - "baseLayerMD5": "5f96576605c3a022df48278b630da745.svg", + "costumeName": "polar bear-b", + "baseLayerID": -1, + "baseLayerMD5": "4f9b9061414deedeeebd369a496aba07.svg", "bitmapResolution": 1, - "rotationCenterX": 15, - "rotationCenterY": 28 + "rotationCenterX": 104, + "rotationCenterY": 46 }, { - "costumeName": "potion-c", - "baseLayerID": 32, - "baseLayerMD5": "92d0184c28fac9acb0fb720ec599d61d.svg", + "costumeName": "polar bear-c", + "baseLayerID": -1, + "baseLayerMD5": "defad238b915f766449e9dcb719bb6e0.svg", "bitmapResolution": 1, - "rotationCenterX": 15, - "rotationCenterY": 42 + "rotationCenterX": 104, + "rotationCenterY": 46 + } + ], + "currentCostumeIndex": 0, + "scratchX": 109, + "scratchY": -55, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Potion", + "md5": "a317b50b255a208455a7733091adad23.svg", + "type": "sprite", + "tags": [ + "fantasy", + "ipzy", + "things" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Potion", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "potion-a", + "baseLayerID": -1, + "baseLayerMD5": "a317b50b255a208455a7733091adad23.svg", + "bitmapResolution": 1, + "rotationCenterX": 15, + "rotationCenterY": 21 + }, + { + "costumeName": "potion-b", + "baseLayerID": -1, + "baseLayerMD5": "5f96576605c3a022df48278b630da745.svg", + "bitmapResolution": 1, + "rotationCenterX": 15, + "rotationCenterY": 28 + }, + { + "costumeName": "potion-c", + "baseLayerID": -1, + "baseLayerMD5": "92d0184c28fac9acb0fb720ec599d61d.svg", + "bitmapResolution": 1, + "rotationCenterX": 15, + "rotationCenterY": 42 } ], "currentCostumeIndex": 0, @@ -9531,7 +11413,7 @@ "costumes": [ { "costumeName": "princess-a", - "baseLayerID": 56, + "baseLayerID": -1, "baseLayerMD5": "fcbf44a543dfda884d8acbd6af66faad.svg", "bitmapResolution": 1, "rotationCenterX": 75, @@ -9539,7 +11421,7 @@ }, { "costumeName": "princess-b", - "baseLayerID": 57, + "baseLayerID": -1, "baseLayerMD5": "562e5eba4a598118411be3062cfbb26f.svg", "bitmapResolution": 1, "rotationCenterX": 75, @@ -9547,7 +11429,7 @@ }, { "costumeName": "princess-c", - "baseLayerID": 58, + "baseLayerID": -1, "baseLayerMD5": "f3e5f466d406745cf1b6ce44b0567b9a.svg", "bitmapResolution": 1, "rotationCenterX": 75, @@ -9555,7 +11437,7 @@ }, { "costumeName": "princess-d", - "baseLayerID": 59, + "baseLayerID": -1, "baseLayerMD5": "663134f64588f0c55e77767ba9039cfe.svg", "bitmapResolution": 1, "rotationCenterX": 75, @@ -9563,7 +11445,7 @@ }, { "costumeName": "princess-e", - "baseLayerID": 60, + "baseLayerID": -1, "baseLayerMD5": "ad0ecbf907d132ddbb547666551ac087.svg", "bitmapResolution": 1, "rotationCenterX": 75, @@ -9932,7 +11814,7 @@ "costumes": [ { "costumeName": "ripley-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "417ec9f25ad70281564e85e67c97aa08.svg", "bitmapResolution": 1, "rotationCenterX": 57, @@ -9940,7 +11822,7 @@ }, { "costumeName": "ripley-b", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "e40918acf5c4d1d0d42b437b6b6e965d.svg", "bitmapResolution": 1, "rotationCenterX": 57, @@ -9948,7 +11830,7 @@ }, { "costumeName": "ripley-c", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "5fb713effcdae17208e6e89527bf720c.svg", "bitmapResolution": 1, "rotationCenterX": 57, @@ -9956,7 +11838,7 @@ }, { "costumeName": "ripley-d", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "6c6597c221c9a5b46c160f537b9795a2.svg", "bitmapResolution": 1, "rotationCenterX": 85, @@ -9964,7 +11846,7 @@ }, { "costumeName": "ripley-e", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "92909161afd79673c93a77d15fe8d456.svg", "bitmapResolution": 1, "rotationCenterX": 56, @@ -9972,16 +11854,300 @@ }, { "costumeName": "ripley-f", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "16e31a6b510ba4e8c1215e6e3a41d9f9.svg", "bitmapResolution": 1, - "rotationCenterX": 58, - "rotationCenterY": 90 + "rotationCenterX": 58, + "rotationCenterY": 90 + } + ], + "currentCostumeIndex": 0, + "scratchX": 163, + "scratchY": -51, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Robot", + "md5": "cb3985cd066ccbab11954709b3d54c17.svg", + "type": "sprite", + "tags": [ + "space", + "robot", + "wren mcdonald" + ], + "info": [ + 0, + 4, + 2 + ], + "json": { + "objName": "Robot", + "sounds": [ + { + "soundName": "computer beep", + "soundID": -1, + "md5": "28c76b6bebd04be1383fe9ba4933d263.wav", + "sampleCount": 9536, + "rate": 11025, + "format": "" + }, + { + "soundName": "buzz whir", + "soundID": -1, + "md5": "d4f76ded6bccd765958d15b63804de55.wav", + "sampleCount": 9037, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "robot-a", + "baseLayerID": -1, + "baseLayerMD5": "cb3985cd066ccbab11954709b3d54c17.svg", + "bitmapResolution": 1, + "rotationCenterX": 74, + "rotationCenterY": 109 + }, + { + "costumeName": "robot-b", + "baseLayerID": -1, + "baseLayerMD5": "fc9276d0909539fd31c30db7b2e08bf9.svg", + "bitmapResolution": 1, + "rotationCenterX": 56, + "rotationCenterY": 97 + }, + { + "costumeName": "robot-c", + "baseLayerID": -1, + "baseLayerMD5": "c5e02f00d233199fea1c51b71c402ce4.svg", + "bitmapResolution": 1, + "rotationCenterX": 63, + "rotationCenterY": 97 + }, + { + "costumeName": "robot-d", + "baseLayerID": -1, + "baseLayerMD5": "ca2cf7d6c0446fbce36621006a4b0fac.svg", + "bitmapResolution": 1, + "rotationCenterX": 59, + "rotationCenterY": 95 + } + ], + "currentCostumeIndex": 0, + "scratchX": -183, + "scratchY": 15, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Rocketship", + "md5": "7d51af7c52e137ef137012595bac928d.svg", + "type": "sprite", + "tags": [ + "space", + "spaceship", + "wren mcdonald" + ], + "info": [ + 0, + 5, + 3 + ], + "json": { + "objName": "Rocketship", + "sounds": [ + { + "soundName": "space ripple", + "soundID": -1, + "md5": "ff8b8c3bf841a11fd5fe3afaa92be1b5.wav", + "sampleCount": 41149, + "rate": 11025, + "format": "" + }, + { + "soundName": "laser1", + "soundID": -1, + "md5": "46571f8ec0f2cc91666c80e312579082.wav", + "sampleCount": 516, + "rate": 11025, + "format": "" + }, + { + "soundName": "laser2", + "soundID": -1, + "md5": "27654ed2e3224f0a3f77c244e4fae9aa.wav", + "sampleCount": 755, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "rocketship-a", + "baseLayerID": -1, + "baseLayerMD5": "7d51af7c52e137ef137012595bac928d.svg", + "bitmapResolution": 1, + "rotationCenterX": 66, + "rotationCenterY": 107 + }, + { + "costumeName": "rocketship-b", + "baseLayerID": -1, + "baseLayerMD5": "ae2634705b7a4fd31f4c1d1bb0e12545.svg", + "bitmapResolution": 1, + "rotationCenterX": 53, + "rotationCenterY": 106 + }, + { + "costumeName": "rocketship-c", + "baseLayerID": -1, + "baseLayerMD5": "3d375cd033f1a7161cae56b114f4cfdb.svg", + "bitmapResolution": 1, + "rotationCenterX": 61, + "rotationCenterY": 107 + }, + { + "costumeName": "rocketship-d", + "baseLayerID": -1, + "baseLayerMD5": "a456964f32cd7e7bd83fe076bf29558b.svg", + "bitmapResolution": 1, + "rotationCenterX": 63, + "rotationCenterY": 107 + }, + { + "costumeName": "rocketship-e", + "baseLayerID": -1, + "baseLayerMD5": "5b5cc9904ba63ca2801b61a73d4dcb7e.svg", + "bitmapResolution": 1, + "rotationCenterX": 71, + "rotationCenterY": 107 + } + ], + "currentCostumeIndex": 0, + "scratchX": 116, + "scratchY": 82, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Rocks", + "md5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "type": "sprite", + "tags": [ + "things", + "potassium" + ], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Rocks", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "rocks", + "baseLayerID": -1, + "baseLayerMD5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "bitmapResolution": 1, + "rotationCenterX": 59, + "rotationCenterY": 15 + } + ], + "currentCostumeIndex": 0, + "scratchX": 35, + "scratchY": 36, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Rooster", + "md5": "8a6f3145a24db10d5a2f90975ce8140c.svg", + "type": "sprite", + "tags": [ + "animals", + "chicken", + "farm", + "owen davey" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Rooster", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "rooster-a", + "baseLayerID": -1, + "baseLayerMD5": "8a6f3145a24db10d5a2f90975ce8140c.svg", + "bitmapResolution": 1, + "rotationCenterX": 55, + "rotationCenterY": 58 + }, + { + "costumeName": "rooster-b", + "baseLayerID": -1, + "baseLayerMD5": "6a14a205b117fdb0b7a6fad91a989e96.svg", + "bitmapResolution": 1, + "rotationCenterX": 55, + "rotationCenterY": 59 + }, + { + "costumeName": "rooster-c", + "baseLayerID": -1, + "baseLayerMD5": "f23408efb8f47022da51c8fba6003cbb.svg", + "bitmapResolution": 1, + "rotationCenterX": 55, + "rotationCenterY": 59 } ], "currentCostumeIndex": 0, - "scratchX": 163, - "scratchY": -51, + "scratchX": 125, + "scratchY": -99, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -9991,76 +12157,91 @@ } }, { - "name": "Robot", - "md5": "cb3985cd066ccbab11954709b3d54c17.svg", + "name": "Ruby", + "md5": "c30210e8f719c3a4d2c7cc6917a39300.png", "type": "sprite", - "tags": [ - "space", - "robot", - "wren mcdonald" - ], + "tags": [], "info": [ 0, - 4, - 2 + 2, + 1 ], "json": { - "objName": "Robot", + "objName": "Ruby", "sounds": [ { - "soundName": "computer beep", - "soundID": 3, - "md5": "28c76b6bebd04be1383fe9ba4933d263.wav", - "sampleCount": 9536, - "rate": 11025, - "format": "" - }, - { - "soundName": "buzz whir", - "soundID": 4, - "md5": "d4f76ded6bccd765958d15b63804de55.wav", - "sampleCount": 9037, + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, "rate": 11025, "format": "" } ], "costumes": [ { - "costumeName": "robot-a", - "baseLayerID": 22, - "baseLayerMD5": "cb3985cd066ccbab11954709b3d54c17.svg", - "bitmapResolution": 1, - "rotationCenterX": 74, - "rotationCenterY": 109 + "costumeName": "ruby-a", + "baseLayerID": -1, + "baseLayerMD5": "c30210e8f719c3a4d2c7cc6917a39300.png", + "bitmapResolution": 2, + "rotationCenterX": 54, + "rotationCenterY": 172 }, { - "costumeName": "robot-b", - "baseLayerID": 23, - "baseLayerMD5": "fc9276d0909539fd31c30db7b2e08bf9.svg", - "bitmapResolution": 1, - "rotationCenterX": 56, - "rotationCenterY": 97 - }, + "costumeName": "ruby-b", + "baseLayerID": -1, + "baseLayerMD5": "fc15fdbcc535473f6140cab28197f3be.png", + "bitmapResolution": 2, + "rotationCenterX": 76, + "rotationCenterY": 142 + } + ], + "currentCostumeIndex": 0, + "scratchX": -39, + "scratchY": 37, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Sailboat", + "md5": "ca241a938a2c44a0de6b91230012ff39.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Sailboat", + "sounds": [ { - "costumeName": "robot-c", - "baseLayerID": 24, - "baseLayerMD5": "c5e02f00d233199fea1c51b71c402ce4.svg", - "bitmapResolution": 1, - "rotationCenterX": 63, - "rotationCenterY": 97 - }, + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ { - "costumeName": "robot-d", - "baseLayerID": 25, - "baseLayerMD5": "ca2cf7d6c0446fbce36621006a4b0fac.svg", - "bitmapResolution": 1, - "rotationCenterX": 59, - "rotationCenterY": 95 + "costumeName": "sail-boat", + "baseLayerID": -1, + "baseLayerMD5": "ca241a938a2c44a0de6b91230012ff39.png", + "bitmapResolution": 2, + "rotationCenterX": 224, + "rotationCenterY": 182 } ], "currentCostumeIndex": 0, - "scratchX": -183, - "scratchY": 15, + "scratchX": 18, + "scratchY": 49, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -10070,20 +12251,17 @@ } }, { - "name": "Rocks", - "md5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "name": "Sam", + "md5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", "type": "sprite", - "tags": [ - "things", - "potassium" - ], + "tags": [], "info": [ 0, 1, 1 ], "json": { - "objName": "Rocks", + "objName": "Sam", "sounds": [ { "soundName": "pop", @@ -10096,17 +12274,17 @@ ], "costumes": [ { - "costumeName": "rocks", + "costumeName": "sam", "baseLayerID": -1, - "baseLayerMD5": "82c79fdb6a7d9c49ab7f70ee79a3d7f8.svg", + "baseLayerMD5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", "bitmapResolution": 1, - "rotationCenterX": 59, - "rotationCenterY": 15 + "rotationCenterX": 58, + "rotationCenterY": 90 } ], "currentCostumeIndex": 0, - "scratchX": 35, - "scratchY": 36, + "scratchX": 50, + "scratchY": -28, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -10347,7 +12525,7 @@ "costumes": [ { "costumeName": "shark-a", - "baseLayerID": 8, + "baseLayerID": -1, "baseLayerMD5": "4ca6776e9c021e8b21c3346793c9361d.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -10355,7 +12533,7 @@ }, { "costumeName": "shark-b", - "baseLayerID": 9, + "baseLayerID": -1, "baseLayerMD5": "0bb623f0bbec53ee9667cee0b7ad6d47.svg", "bitmapResolution": 1, "rotationCenterX": 150, @@ -11112,100 +13290,6 @@ "spriteInfo": {} } }, - { - "name": "Spaceship", - "md5": "7d51af7c52e137ef137012595bac928d.svg", - "type": "sprite", - "tags": [ - "space", - "wren mcdonald" - ], - "info": [ - 0, - 5, - 3 - ], - "json": { - "objName": "Spaceship", - "sounds": [ - { - "soundName": "space ripple", - "soundID": 0, - "md5": "ff8b8c3bf841a11fd5fe3afaa92be1b5.wav", - "sampleCount": 41149, - "rate": 11025, - "format": "" - }, - { - "soundName": "laser1", - "soundID": 1, - "md5": "46571f8ec0f2cc91666c80e312579082.wav", - "sampleCount": 516, - "rate": 11025, - "format": "" - }, - { - "soundName": "laser2", - "soundID": 2, - "md5": "27654ed2e3224f0a3f77c244e4fae9aa.wav", - "sampleCount": 755, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "spaceship-a", - "baseLayerID": 17, - "baseLayerMD5": "7d51af7c52e137ef137012595bac928d.svg", - "bitmapResolution": 1, - "rotationCenterX": 66, - "rotationCenterY": 107 - }, - { - "costumeName": "spaceship-b", - "baseLayerID": 18, - "baseLayerMD5": "ae2634705b7a4fd31f4c1d1bb0e12545.svg", - "bitmapResolution": 1, - "rotationCenterX": 53, - "rotationCenterY": 106 - }, - { - "costumeName": "spaceship-c", - "baseLayerID": 19, - "baseLayerMD5": "3d375cd033f1a7161cae56b114f4cfdb.svg", - "bitmapResolution": 1, - "rotationCenterX": 61, - "rotationCenterY": 107 - }, - { - "costumeName": "spaceship-d", - "baseLayerID": 20, - "baseLayerMD5": "a456964f32cd7e7bd83fe076bf29558b.svg", - "bitmapResolution": 1, - "rotationCenterX": 63, - "rotationCenterY": 107 - }, - { - "costumeName": "spaceship-e", - "baseLayerID": 21, - "baseLayerMD5": "5b5cc9904ba63ca2801b61a73d4dcb7e.svg", - "bitmapResolution": 1, - "rotationCenterX": 71, - "rotationCenterY": 107 - } - ], - "currentCostumeIndex": 0, - "scratchX": 116, - "scratchY": 82, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, { "name": "Speaker", "md5": "44dc3a2ec161999545914d1f77332d76.svg", @@ -11280,42 +13364,85 @@ "format": "" }, { - "soundName": "drum satellite", + "soundName": "drum satellite", + "soundID": -1, + "md5": "079067d7909f791b29f8be1c00fc2131.wav", + "sampleCount": 44096, + "rate": 22050, + "format": "" + }, + { + "soundName": "kick back", + "soundID": -1, + "md5": "9cd340d9d568b1479f731e69e103b3ce.wav", + "sampleCount": 44748, + "rate": 22050, + "format": "adpcm" + }, + { + "soundName": "drum funky", + "soundID": -1, + "md5": "fb56022366d21b299cbc3fd5e16000c2.wav", + "sampleCount": 44748, + "rate": 22050, + "format": "adpcm" + } + ], + "costumes": [ + { + "costumeName": "speaker", + "baseLayerID": -1, + "baseLayerMD5": "44dc3a2ec161999545914d1f77332d76.svg", + "bitmapResolution": 1, + "rotationCenterX": 53, + "rotationCenterY": 79 + } + ], + "currentCostumeIndex": 0, + "scratchX": -1, + "scratchY": -28, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Squirrel", + "md5": "b86efb7f23387300cf9037a61f328ab9.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Squirrel", + "sounds": [ + { + "soundName": "meow", "soundID": -1, - "md5": "079067d7909f791b29f8be1c00fc2131.wav", - "sampleCount": 44096, + "md5": "83c36d806dc92327b9e7049a565c6bff.wav", + "sampleCount": 18688, "rate": 22050, "format": "" - }, - { - "soundName": "kick back", - "soundID": -1, - "md5": "9cd340d9d568b1479f731e69e103b3ce.wav", - "sampleCount": 44748, - "rate": 22050, - "format": "adpcm" - }, - { - "soundName": "drum funky", - "soundID": -1, - "md5": "fb56022366d21b299cbc3fd5e16000c2.wav", - "sampleCount": 44748, - "rate": 22050, - "format": "adpcm" } ], "costumes": [ { - "costumeName": "speaker", - "baseLayerID": -1, - "baseLayerMD5": "44dc3a2ec161999545914d1f77332d76.svg", - "bitmapResolution": 1, - "rotationCenterX": 53, - "rotationCenterY": 79 + "costumeName": "squirrel1", + "baseLayerID": 0, + "baseLayerMD5": "b86efb7f23387300cf9037a61f328ab9.png", + "bitmapResolution": 2, + "rotationCenterX": 158, + "rotationCenterY": 146 } ], "currentCostumeIndex": 0, - "scratchX": -1, + "scratchX": 52, "scratchY": -28, "scale": 1, "direction": 90, @@ -11829,6 +13956,188 @@ "spriteInfo": {} } }, + { + "name": "Ten80 Dance", + "md5": "dc671a181e0f2b5c94823b197d4455b5.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 13, + 1 + ], + "json": { + "objName": "Ten80 Dance", + "sounds": [ + { + "soundName": "dance celebrate", + "soundID": -1, + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm" + } + ], + "costumes": [ + { + "costumeName": "Ten80 stance", + "baseLayerID": -1, + "baseLayerMD5": "dc671a181e0f2b5c94823b197d4455b5.png", + "bitmapResolution": 2, + "rotationCenterX": 70, + "rotationCenterY": 278 + }, + { + "costumeName": "Ten80 top stand", + "baseLayerID": -1, + "baseLayerMD5": "0f6adf023981ae764ab869a222f453cc.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 274 + }, + { + "costumeName": "Ten80 top R step", + "baseLayerID": -1, + "baseLayerMD5": "13fbeb74f24efc49f73bf4edfc94fc16.png", + "bitmapResolution": 2, + "rotationCenterX": 200, + "rotationCenterY": 270 + }, + { + "costumeName": "Ten80 top L step", + "baseLayerID": -1, + "baseLayerMD5": "4e730a1129334d2c5b3b5bf53a6cf488.png", + "bitmapResolution": 2, + "rotationCenterX": 144, + "rotationCenterY": 266 + }, + { + "costumeName": "Ten80 top freeze", + "baseLayerID": -1, + "baseLayerMD5": "332db3c9053d11df327151873be9ba8f.png", + "bitmapResolution": 2, + "rotationCenterX": 54, + "rotationCenterY": 258 + }, + { + "costumeName": "Ten80 top R cross", + "baseLayerID": -1, + "baseLayerMD5": "76945eb412c3dcc12fa4207690edc1ca.png", + "bitmapResolution": 2, + "rotationCenterX": 206, + "rotationCenterY": 252 + }, + { + "costumeName": "Ten80 pop front", + "baseLayerID": -1, + "baseLayerMD5": "2a591305054fc72a65a20880d27c403d.png", + "bitmapResolution": 2, + "rotationCenterX": 72, + "rotationCenterY": 266 + }, + { + "costumeName": "Ten80 pop down", + "baseLayerID": -1, + "baseLayerMD5": "5b207159cca926fa0847e44b12231119.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 188 + }, + { + "costumeName": "Ten80 pop left", + "baseLayerID": -1, + "baseLayerMD5": "c0be2b181ca54a5feb3d9773e244bd73.png", + "bitmapResolution": 2, + "rotationCenterX": 184, + "rotationCenterY": 266 + }, + { + "costumeName": "Ten80 pop right", + "baseLayerID": -1, + "baseLayerMD5": "be193b26613668f68c98f38397a1aaa6.png", + "bitmapResolution": 2, + "rotationCenterX": 78, + "rotationCenterY": 276 + }, + { + "costumeName": "Ten80 pop L arm", + "baseLayerID": -1, + "baseLayerMD5": "b2c2724462a8f4e1b95b2163deb45380.png", + "bitmapResolution": 2, + "rotationCenterX": 100, + "rotationCenterY": 280 + }, + { + "costumeName": "Ten80 pop stand", + "baseLayerID": -1, + "baseLayerMD5": "86200779d2de598cebb66354939e9a32.png", + "bitmapResolution": 2, + "rotationCenterX": 92, + "rotationCenterY": 280 + }, + { + "costumeName": "Ten80 pop R arm", + "baseLayerID": -1, + "baseLayerMD5": "08b47429a2b56095e471569be63a3acd.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 278 + } + ], + "currentCostumeIndex": 0, + "scratchX": -86, + "scratchY": 4, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, + { + "name": "Tennis Ball", + "md5": "f70d1414e266df1dfe54afb563c810df.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Tennis Ball", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "tennisball", + "baseLayerID": 1, + "baseLayerMD5": "f70d1414e266df1dfe54afb563c810df.png", + "bitmapResolution": 2, + "rotationCenterX": 30, + "rotationCenterY": 30 + } + ], + "currentCostumeIndex": 0, + "scratchX": 39, + "scratchY": -20, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Tera", "md5": "b54a4a9087435863ab6f6c908f1cac99.svg", @@ -11962,6 +14271,49 @@ "spriteInfo": {} } }, + { + "name": "Trampoline", + "md5": "20b16bcb61396df304cad5e8886ceb46.png", + "type": "sprite", + "tags": [], + "info": [ + 0, + 1, + 1 + ], + "json": { + "objName": "Trampoline", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "trampoline", + "baseLayerID": -1, + "baseLayerMD5": "20b16bcb61396df304cad5e8886ceb46.png", + "bitmapResolution": 1, + "rotationCenterX": 100, + "rotationCenterY": 41 + } + ], + "currentCostumeIndex": 0, + "scratchX": 20, + "scratchY": -40, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Tree1", "md5": "8c40e2662c55d17bc384f47165ac43c1.svg", @@ -12203,7 +14555,7 @@ "costumes": [ { "costumeName": "unicorn", - "baseLayerID": 7, + "baseLayerID": -1, "baseLayerMD5": "bd2cf980966c13d5ad3ab403bae4bb05.svg", "bitmapResolution": 1, "rotationCenterX": 100, @@ -12298,7 +14650,7 @@ "costumes": [ { "costumeName": "unicorn-run-a", - "baseLayerID": 65, + "baseLayerID": -1, "baseLayerMD5": "c6456df027561c74b70b8b25ab83fec9.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12306,7 +14658,7 @@ }, { "costumeName": "unicorn-run-b", - "baseLayerID": 66, + "baseLayerID": -1, "baseLayerMD5": "f2d6c5b62b56d0cc51598126c74e0ace.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12314,7 +14666,7 @@ }, { "costumeName": "unicorn-run-c", - "baseLayerID": 67, + "baseLayerID": -1, "baseLayerMD5": "fba367b11a710bf542333649c4d68e1e.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12322,7 +14674,7 @@ }, { "costumeName": "unicorn-run-d", - "baseLayerID": 68, + "baseLayerID": -1, "baseLayerMD5": "20bad70a67e0c7ed3255c65780cdb2a8.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12330,7 +14682,7 @@ }, { "costumeName": "unicorn-run-e", - "baseLayerID": 69, + "baseLayerID": -1, "baseLayerMD5": "39db08aafdde1542e755b8ead8df7a1f.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12338,7 +14690,7 @@ }, { "costumeName": "unicorn-run-f", - "baseLayerID": 70, + "baseLayerID": -1, "baseLayerMD5": "d66d0625702433a4cbd7591e39676700.svg", "bitmapResolution": 1, "rotationCenterX": 130, @@ -12438,7 +14790,7 @@ "costumes": [ { "costumeName": "wand", - "baseLayerID": 29, + "baseLayerID": -1, "baseLayerMD5": "1aa56e9ef7043eaf36ecfe8e330271b7.svg", "bitmapResolution": 1, "rotationCenterX": 12, @@ -12599,7 +14951,7 @@ "costumes": [ { "costumeName": "witch-a", - "baseLayerID": 36, + "baseLayerID": -1, "baseLayerMD5": "cbc54e15cd62f0c16369587377636099.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -12607,7 +14959,7 @@ }, { "costumeName": "witch-b", - "baseLayerID": 37, + "baseLayerID": -1, "baseLayerMD5": "64d2c4c51e6cb6008cd5e93f77e6f591.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -12615,7 +14967,7 @@ }, { "costumeName": "witch-c", - "baseLayerID": 38, + "baseLayerID": -1, "baseLayerMD5": "00b768c3da5b4ee3efddf05d1eb88de2.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -12623,7 +14975,7 @@ }, { "costumeName": "witch-d", - "baseLayerID": 39, + "baseLayerID": -1, "baseLayerMD5": "4fe4c0ee34a9028f2c6988b7294a61c1.svg", "bitmapResolution": 1, "rotationCenterX": 65, @@ -12673,7 +15025,7 @@ "costumes": [ { "costumeName": "wizard-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "9632aab80fce1c5bdb58150b29cb0067.svg", "bitmapResolution": 1, "rotationCenterX": 87, @@ -12681,7 +15033,7 @@ }, { "costumeName": "wizard-b", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "36c9b8b93ddb2c392b7145862fc4e8d8.svg", "bitmapResolution": 1, "rotationCenterX": 79, @@ -12689,7 +15041,7 @@ }, { "costumeName": "wizard-c", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "16d4d221a2182278cfa6b0621f455cf6.svg", "bitmapResolution": 1, "rotationCenterX": 87, @@ -12739,7 +15091,7 @@ "costumes": [ { "costumeName": "wizard-toad-a", - "baseLayerID": 52, + "baseLayerID": -1, "baseLayerMD5": "fd5c4cce36e866489febc227e23b21aa.svg", "bitmapResolution": 1, "rotationCenterX": 87, @@ -12747,7 +15099,7 @@ }, { "costumeName": "wizard-toad-b", - "baseLayerID": 53, + "baseLayerID": -1, "baseLayerMD5": "4c260807d4ac4c0ad39760f1efeef1de.svg", "bitmapResolution": 1, "rotationCenterX": 87, @@ -12765,6 +15117,69 @@ "spriteInfo": {} } }, + { + "name": "Zebra", + "md5": "d8392aea6e767a4b5032cffd04e688e3.svg", + "type": "sprite", + "tags": [ + "animals", + "savanna", + "robert hunter" + ], + "info": [ + 0, + 3, + 1 + ], + "json": { + "objName": "Zebra", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "zebra-a", + "baseLayerID": -1, + "baseLayerMD5": "d8392aea6e767a4b5032cffd04e688e3.svg", + "bitmapResolution": 1, + "rotationCenterX": 97, + "rotationCenterY": 56 + }, + { + "costumeName": "zebra-b", + "baseLayerID": -1, + "baseLayerMD5": "3a6be1df1d9d9865b6bba4f569de6793.svg", + "bitmapResolution": 1, + "rotationCenterX": 97, + "rotationCenterY": 56 + }, + { + "costumeName": "zebra-c", + "baseLayerID": -1, + "baseLayerMD5": "b0d2d3e746493640fc34fd7b2efd6612.svg", + "bitmapResolution": 1, + "rotationCenterX": 97, + "rotationCenterY": 56 + } + ], + "currentCostumeIndex": 0, + "scratchX": 122, + "scratchY": 11, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Block-A", "md5": "602a16930a8050e1298e1a0ae844363e.svg", From 54dc3b022bfc463704c970e468557b7d449ef878 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Thu, 12 Jul 2018 09:23:38 -0400 Subject: [PATCH 061/159] Add tags to bitmap assets --- src/lib/libraries/backdrops.json | 236 +++++++-- src/lib/libraries/costumes.json | 809 +++++++++++++++++++++---------- src/lib/libraries/sprites.json | 477 ++++++++++-------- 3 files changed, 1023 insertions(+), 499 deletions(-) diff --git a/src/lib/libraries/backdrops.json b/src/lib/libraries/backdrops.json index 6644f2139f8..fecf862618e 100644 --- a/src/lib/libraries/backdrops.json +++ b/src/lib/libraries/backdrops.json @@ -85,7 +85,9 @@ "name": "Beach Malibu", "md5": "050615fe992a00d6af0e664e497ebf53.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors" + ], "info": [ 960, 720, @@ -96,7 +98,9 @@ "name": "Beach Rio", "md5": "968f0ede6e70e1dbb763d6fd4c5003e0.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors" + ], "info": [ 960, 720, @@ -107,7 +111,9 @@ "name": "Bedroom 2", "md5": "e2f8b0dbd0a65d2ad8bfc21616662a6a.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors" + ], "info": [ 960, 720, @@ -118,7 +124,9 @@ "name": "Bedroom 3", "md5": "8cc0b88d53345b3e337e8f028a32a4e7.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors" + ], "info": [ 960, 720, @@ -129,7 +137,11 @@ "name": "Bench With View", "md5": "962201a2b712a302fb087f8f0dcb2076.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "hill", + "view" + ], "info": [ 960, 720, @@ -154,7 +166,10 @@ "name": "Boardwalk", "md5": "de0e54cd11551566f044e7e6bc588b2c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "ocean" + ], "info": [ 960, 720, @@ -165,7 +180,10 @@ "name": "Canyon", "md5": "c7c0b27b959193a0b570a9639cfe8158.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature" + ], "info": [ 960, 720, @@ -176,7 +194,9 @@ "name": "Castle 1", "md5": "e1914ed7917267f1c2ef2b48004cade9.png", "type": "backdrop", - "tags": [], + "tags": [ + "fantasy" + ], "info": [ 960, 720, @@ -187,7 +207,9 @@ "name": "Castle 2", "md5": "951765ee7f7370f120c9df20b577c22f.png", "type": "backdrop", - "tags": [], + "tags": [ + "fantasy" + ], "info": [ 960, 720, @@ -198,7 +220,9 @@ "name": "Castle 3", "md5": "76fa99f67569fcd39b4be74ed38c33f3.png", "type": "backdrop", - "tags": [], + "tags": [ + "fantasy" + ], "info": [ 960, 720, @@ -209,7 +233,9 @@ "name": "Castle 4", "md5": "4f45f79af8e8dac3d41eb5a06ade61d4.png", "type": "backdrop", - "tags": [], + "tags": [ + "fantasy" + ], "info": [ 960, 720, @@ -220,7 +246,10 @@ "name": "Chalkboard", "md5": "a8a24b5aa717bbef09dbe31368914427.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors", + "school" + ], "info": [ 960, 720, @@ -244,7 +273,10 @@ "name": "City With Water", "md5": "1ef98019fc94ea65a1b55d5521285c7a.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "boston" + ], "info": [ 960, 720, @@ -287,7 +319,10 @@ "name": "Field At Mit", "md5": "5b0a970202b464915915260c03f05455.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "architecture" + ], "info": [ 960, 720, @@ -298,7 +333,10 @@ "name": "Flowers", "md5": "25a6ede51a96d4e55de2ffb81ae96f8c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature" + ], "info": [ 960, 720, @@ -324,7 +362,10 @@ "name": "Greek Theater", "md5": "93d71e8b8a96cc007b8d68f36acd338a.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "theatre" + ], "info": [ 960, 720, @@ -335,7 +376,9 @@ "name": "Hall", "md5": "ea86ca30b346f27ca5faf1254f6a31e3.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors" + ], "info": [ 960, 720, @@ -346,7 +389,10 @@ "name": "Hay Field", "md5": "da102a69d135973e0fc139131dec785a.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "farm" + ], "info": [ 960, 720, @@ -370,7 +416,10 @@ "name": "Hill", "md5": "2129c842f28d6881f622fdc3497ff2da.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature" + ], "info": [ 960, 720, @@ -424,7 +473,11 @@ "name": "Metro", "md5": "0b4a15ba028bf205ec051390d6ac4de7.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "city", + "urban" + ], "info": [ 960, 720, @@ -466,7 +519,13 @@ "name": "Mural", "md5": "efb625f7e0b199b15f69e116cd053cea.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "mural", + "graffiti", + "street", + "art" + ], "info": [ 960, 720, @@ -493,7 +552,11 @@ "name": "Neon Tunnel", "md5": "57d2b13b2f73d3d878c72810c137b0d6.png", "type": "backdrop", - "tags": [], + "tags": [ + "games", + "game", + "space" + ], "info": [ 960, 720, @@ -504,7 +567,12 @@ "name": "Night City", "md5": "6fdc795ff487204f72740567be5f64f9.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "urban", + "city", + "metro" + ], "info": [ 960, 720, @@ -515,7 +583,12 @@ "name": "Night City With Street", "md5": "14443ad7907b6479d7562a12b8ae0efb.png", "type": "backdrop", - "tags": [], + "tags": [ + "urban", + "city", + "metro", + "transportation" + ], "info": [ 960, 720, @@ -554,7 +627,10 @@ "name": "Pathway", "md5": "5d747ec036755a4b129f0d5b978bc61c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "garden" + ], "info": [ 960, 720, @@ -565,7 +641,10 @@ "name": "Playground", "md5": "e5f794c8756ca0cead5cb7e7fe354c41.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "play" + ], "info": [ 960, 720, @@ -576,7 +655,10 @@ "name": "Playing Field", "md5": "2de108f3098e92f5c5976cf75d38e99d.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "sports" + ], "info": [ 960, 720, @@ -587,7 +669,12 @@ "name": "Pool", "md5": "6cab934df643d2fc508cfa90c0c4059b.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "sports", + "swim", + "swimming" + ], "info": [ 960, 720, @@ -627,7 +714,11 @@ "name": "Room 1", "md5": "a81668321aa3dcc0fc185d3e36ae76f6.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors", + "books", + "library" + ], "info": [ 960, 720, @@ -638,7 +729,9 @@ "name": "Room 2", "md5": "05ae3e3bbea890a6e3552ffe8456775e.png", "type": "backdrop", - "tags": [], + "tags": [ + "indoors" + ], "info": [ 960, 720, @@ -666,7 +759,12 @@ "name": "School", "md5": "1dea69ac0f62cf538d368a7bde1372ac.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "building", + "education", + "learning" + ], "info": [ 960, 720, @@ -677,7 +775,14 @@ "name": "Slopes", "md5": "63b6a69594a0a87888b56244bfa2ac1b.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "winter", + "ski", + "snowboard", + "cold", + "snow" + ], "info": [ 960, 720, @@ -788,7 +893,9 @@ "name": "Spotlight Stage", "md5": "d26bf4c3980163d9106625cc2ea6c50d.png", "type": "backdrop", - "tags": [], + "tags": [ + "music" + ], "info": [ 960, 720, @@ -841,7 +948,9 @@ "name": "Theater 2", "md5": "061a78ed83495dd0acd6d62e83e1b972.png", "type": "backdrop", - "tags": [], + "tags": [ + "music" + ], "info": [ 960, 720, @@ -852,7 +961,10 @@ "name": "Tree", "md5": "a23fbf972001c94637b568992f8fd7bd.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature" + ], "info": [ 960, 720, @@ -863,7 +975,11 @@ "name": "Underwater 2", "md5": "1517c21786d2d0edc2f3037408d850bd.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature", + "underwater" + ], "info": [ 960, 720, @@ -874,7 +990,12 @@ "name": "Urban", "md5": "1679049718869e1f548e1e8823e29c1c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "city", + "metro", + "transportation" + ], "info": [ 960, 720, @@ -885,7 +1006,10 @@ "name": "Wall 1", "md5": "7e5327c68ff6ddabc48dbfe4717a04fe.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "brick" + ], "info": [ 960, 720, @@ -896,7 +1020,10 @@ "name": "Wall 2", "md5": "82d867fcd9f1b5f49e29c2f853d55665.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "brick" + ], "info": [ 960, 720, @@ -907,7 +1034,13 @@ "name": "Water And Rocks", "md5": "0015433a406a53f00b792424b823268c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "nature", + "tree", + "river", + "stream" + ], "info": [ 960, 720, @@ -985,7 +1118,10 @@ "name": "Woods And Bench", "md5": "4fcf7ed0de6c6b6e9b52c511b0650e9c.png", "type": "backdrop", - "tags": [], + "tags": [ + "outdoors", + "park" + ], "info": [ 960, 720, @@ -996,7 +1132,11 @@ "name": "Xy-grid", "md5": "9838d02002d05f88dc54d96494fbc202.png", "type": "backdrop", - "tags": [], + "tags": [ + "grid", + "xy", + "coordinates" + ], "info": [ 960, 720, @@ -1007,7 +1147,11 @@ "name": "Xy-grid-20px", "md5": "4eec0e1db92b8dea3e5bee25105e8f46.png", "type": "backdrop", - "tags": [], + "tags": [ + "grid", + "xy", + "coordinates" + ], "info": [ 960, 720, @@ -1018,7 +1162,11 @@ "name": "Xy-grid-30px", "md5": "3b8bcabd0ac683b7cb3673208039764b.png", "type": "backdrop", - "tags": [], + "tags": [ + "grid", + "xy", + "coordinates" + ], "info": [ 960, 720, diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index a4cdc4cdb72..766c95493d7 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -63,7 +63,10 @@ "name": "Amon", "md5": "60f720956ab1840431dcf0616ce98f14.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 348, 324, @@ -72,9 +75,12 @@ }, { "name": "Anina Pop Down", - "md5": "e9e54ff1fa61c71507e25540d0326177.png", + "md5": "e3698b76cb0864df2fbaba80e6bd8067.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 312, @@ -83,9 +89,12 @@ }, { "name": "Anina Pop Front", - "md5": "c163f1002f61421816386e52522b9133.png", + "md5": "832a3ae650a1f3bede1e0c9f1779e535.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 136, 540, @@ -94,9 +103,12 @@ }, { "name": "Anina Pop L Arm", - "md5": "843bff4a5ee3d61fd8cbd419cb2797a3.png", + "md5": "62c50c90535b64f2ae130a5c680ddcb4.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 136, 548, @@ -105,9 +117,12 @@ }, { "name": "Anina Pop Left", - "md5": "9fda30f66d51b2ad5f6fe11d57e199d6.png", + "md5": "d86bb27b4f8d7b70c39c96f29c6943b4.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 476, 532, @@ -116,9 +131,12 @@ }, { "name": "Anina Pop R Arm", - "md5": "e7e1a86233b7ad28d6ee9970b152be20.png", + "md5": "eac2b5f7db5e81d00c43486179b8dcf8.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 176, 544, @@ -127,9 +145,12 @@ }, { "name": "Anina Pop Right", - "md5": "cc2594e9278494e82f725be34369f178.png", + "md5": "7bb9c790b02231e1272701167c26b17a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 132, 536, @@ -138,9 +159,12 @@ }, { "name": "Anina Pop Stand", - "md5": "de7cab2c8d567d49a5a1f378b5709bb4.png", + "md5": "105f4f3d260dcb8bea02ea9ee5d18cf4.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 152, 552, @@ -149,9 +173,12 @@ }, { "name": "Anina R Cross", - "md5": "22f3ca23b2f0ac67f8ebc36a8c3116a0.png", + "md5": "f0d4dce1006cf447a0a4b53e0a8d0519.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 252, 536, @@ -160,9 +187,12 @@ }, { "name": "Anina Stance", - "md5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "md5": "9374e067ca4b66427fc64a0822f6e468.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 152, 504, @@ -171,9 +201,12 @@ }, { "name": "Anina Top Freeze", - "md5": "dd67565519bdebea1b931deb19621384.png", + "md5": "a1c9b65dd07747964cce642f9099921b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 220, 536, @@ -182,9 +215,12 @@ }, { "name": "Anina Top L Step", - "md5": "62a89d8c6f7680e342132fcde59b2a5d.png", + "md5": "ed90e8b7a05c1552194af597ac0637cd.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 456, 548, @@ -193,9 +229,12 @@ }, { "name": "Anina Top R Step", - "md5": "0477f7105d02b9a902382eca080476dc.png", + "md5": "2d208a34e74fdce9dab9d4c585dcfa2b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 496, 544, @@ -204,9 +243,12 @@ }, { "name": "Anina Top Stand", - "md5": "34d6362cb4030d92be6fec73300f0aec.png", + "md5": "db6c03113f71b91f22a9f3351f90e5bf.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 560, @@ -1605,7 +1647,9 @@ "name": "Calvrett Jumping", "md5": "452683db3ad7a882f5ab9de496441592.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 336, 432, @@ -1616,7 +1660,9 @@ "name": "Calvrett Thinking", "md5": "728ec1ebc275b53809023a36c66eeaa3.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 212, 340, @@ -1691,7 +1737,10 @@ "name": "Cassy-a", "md5": "6cb3686db1fa658b6541cc9fa3ccfcc7.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 208, 384, @@ -1702,7 +1751,10 @@ "name": "Cassy-b", "md5": "f801cec764da5ef6374e1d557296d14e.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 280, 384, @@ -1713,7 +1765,10 @@ "name": "Cassy-c", "md5": "63483bbf72fc55719918a335e1a16426.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 376, @@ -1724,7 +1779,10 @@ "name": "Cassy-d", "md5": "aca39a47cf3affd8a83d3287d2856c29.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 188, 360, @@ -1785,20 +1843,17 @@ }, { "name": "Cat2", - "md5": "3696356a03a8d938318876a593572843.svg", + "md5": "01ae57fd339529445cb890978ef8a054.svg", "type": "costume", "tags": [ - "animals", - "cat", - "kitten", "kitty", - "mammal", - "orange", - "scratch cat" + "kitten", + "animals", + "mammal" ], "info": [ - 47, - 55, + 87, + 39, 1 ] }, @@ -1932,9 +1987,12 @@ }, { "name": "Champ99-a", - "md5": "b940c99d8e677ac5773cb4d592b16734.png", + "md5": "9e4e87818854cfc281d8dcc3e21ee672.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 496, 612, @@ -1943,9 +2001,12 @@ }, { "name": "Champ99-b", - "md5": "2ebc7632bc9e665d9eeea93190fad7ad.png", + "md5": "d6ae13605610aa008d48b0c8b25a57d3.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 328, 580, @@ -1954,9 +2015,12 @@ }, { "name": "Champ99-c", - "md5": "bfcff80b0044c644c555ba24f2484106.png", + "md5": "26fdff424232926001d20041c3d5673b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 304, 540, @@ -1965,9 +2029,12 @@ }, { "name": "Champ99-d", - "md5": "34de53e52a768d60a96e3ae0c030dfc5.png", + "md5": "a28ffc2b129fb359ff22c79c48341267.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 376, 520, @@ -1976,9 +2043,12 @@ }, { "name": "Champ99-e", - "md5": "0cb685bf8584df9caf124da929ab3453.png", + "md5": "56f3220fa82d99dcfc7d27d433ed01e4.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 380, 496, @@ -1987,9 +2057,12 @@ }, { "name": "Champ99-f", - "md5": "516d30b29aed8145718db421f4737953.png", + "md5": "68453506ae4b6b60a3fc6817ba39d492.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 228, 500, @@ -1998,9 +2071,12 @@ }, { "name": "Champ99-g", - "md5": "49e0edcb319527d936981f06b4111d53.png", + "md5": "20318b14a332fd618ec91e7c1de8be9a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 264, 516, @@ -2008,10 +2084,12 @@ ] }, { - "name": "Cheesy-puffs", - "md5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "name": "Cheesy Puffs", + "md5": "82772a61ec74974e84c686c61ea0b7d5.png", "type": "costume", - "tags": [], + "tags": [ + "food" + ], "info": [ 174, 144, @@ -2133,7 +2211,10 @@ "name": "Convertible", "md5": "5b883f396844ff5cfecd7c95553fa4fb.png", "type": "costume", - "tags": [], + "tags": [ + "car", + "transportation" + ], "info": [ 360, 88, @@ -2281,20 +2362,24 @@ }, { "name": "Dan-a", - "md5": "1baa5b126e0e14d6070a997c0deefab5.png", + "md5": "307250744e230fb15e7062238bf2634c.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ - 36, - 100, - 1 + 144, + 392, + 2 ] }, { "name": "Dan-b", "md5": "89b55d049f4b3811676311df00681385.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 188, 400, @@ -2782,9 +2867,12 @@ }, { "name": "Dm Freeze", - "md5": "31e687f186b19ea120cd5cfc9dea2a3f.png", + "md5": "a4b5d644d9abdbcab236acf19b2a2e81.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 440, 468, @@ -2793,9 +2881,12 @@ }, { "name": "Dm Pop Down", - "md5": "3b65ce3551f9c111794f7f1fb8f325be.png", + "md5": "729812366245c0dafd456339c9d94e08.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 128, 148, @@ -2804,9 +2895,12 @@ }, { "name": "Dm Pop Front", - "md5": "0b2fb609d6d10decfdd5a1c3b58369b4.png", + "md5": "70da166596bb484eae1bfbaad5c03d54.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 184, 468, @@ -2815,9 +2909,12 @@ }, { "name": "Dm Pop L Arm", - "md5": "426e1520efc34fef45be0596fd5f7120.png", + "md5": "3cdebabdb41f6c3e84561cf3ea87bac3.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 180, 476, @@ -2826,9 +2923,12 @@ }, { "name": "Dm Pop Left", - "md5": "f636510e8ef231d7c0e72a572ce91c99.png", + "md5": "32ec7b5332cfebd1cfed7f6b79c76e67.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 408, 500, @@ -2837,9 +2937,12 @@ }, { "name": "Dm Pop R Arm", - "md5": "56fe91d2cf3ecb9d1b94006aee9eff79.png", + "md5": "50faf1630ea383c0b8c77f70a9329797.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 160, 480, @@ -2848,9 +2951,12 @@ }, { "name": "Dm Pop Right", - "md5": "36b32430e45e071071052ef33c637f48.png", + "md5": "19bd7995d37e3baade673b2fe7cb982b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 156, 476, @@ -2859,9 +2965,12 @@ }, { "name": "Dm Pop Stand", - "md5": "370cc57b40f1f1d6e52d6330b73d207f.png", + "md5": "05529eb3c09294bd15f57c6f10d5894e.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 200, 488, @@ -2872,7 +2981,10 @@ "name": "Dm Stance", "md5": "b30a60d31aebead577b73affd22bf30f.svg", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 55, 119, @@ -2881,9 +2993,12 @@ }, { "name": "Dm Top L Leg", - "md5": "fd8bb9665fe078d2d95dbc35bccf4046.png", + "md5": "344384a6a3f1bdf494cc7af31e928d36.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 460, 480, @@ -2892,9 +3007,12 @@ }, { "name": "Dm Top R Leg", - "md5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "md5": "6cea0c29c460e571226cc4cff5b97c28.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 436, 464, @@ -2914,59 +3032,18 @@ }, { "name": "Dm Top Stand", - "md5": "cbf035d39d0a0bb070d2eb998cebd60d.png", + "md5": "051c36758b9fd1136b511efc5dd6234a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 164, 488, 2 ] }, - { - "name": "Dog Puppy Back", - "md5": "88559ad0334a8a51aca31035068682f6.png", - "type": "costume", - "tags": [], - "info": [ - 468, - 188, - 2 - ] - }, - { - "name": "Dog Puppy Right", - "md5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", - "type": "costume", - "tags": [], - "info": [ - 214, - 206, - 2 - ] - }, - { - "name": "Dog Puppy Side", - "md5": "63c3d6718943ecbf48f94b3b131ae8a4.png", - "type": "costume", - "tags": [], - "info": [ - 208, - 228, - 2 - ] - }, - { - "name": "Dog Puppy Sit", - "md5": "00b1589467f939b9c61f666bca2d25d1.png", - "type": "costume", - "tags": [], - "info": [ - 174, - 224, - 2 - ] - }, { "name": "Dog1-a", "md5": "39ddefa0cc58f3b1b06474d63d81ef56.svg", @@ -3817,31 +3894,39 @@ }, { "name": "Football Running", - "md5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", + "md5": "7ee31371b2eafba57cc5a78fc1a787fe.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ - 47, - 100, - 1 + 184, + 400, + 2 ] }, { "name": "Football Standing", - "md5": "1f57154842f68aa55577edc90a6f2b32.png", + "md5": "c717def72c8bd98749284d31b51d7097.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ - 37, - 100, - 1 + 148, + 400, + 2 ] }, { "name": "Fortune Cookie", "md5": "c56dcaa1fa4e3c9740142b93d5982850.png", "type": "costume", - "tags": [], + "tags": [ + "food" + ], "info": [ 120, 124, @@ -3987,7 +4072,9 @@ "name": "Fruit Platter", "md5": "6c3252378da3334f63eebddbed3fae91.png", "type": "costume", - "tags": [], + "tags": [ + "food" + ], "info": [ 296, 156, @@ -4651,7 +4738,13 @@ "name": "Hannah-a", "md5": "b983d99560313e38b4b3cd36cbd5f0d1.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "run", + "running", + "sprint", + "sports" + ], "info": [ 276, 252, @@ -4662,7 +4755,10 @@ "name": "Hannah-b", "md5": "d0c3b4b24fbf1152de3ebb68f6b875ae.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ 96, 320, @@ -4673,7 +4769,10 @@ "name": "Hannah-c", "md5": "5fdce07935156bbcf943793fa84e826c.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ 340, 260, @@ -5207,7 +5306,9 @@ "name": "Jaime Walking-a", "md5": "d6cc9814f7a6640e4c2b1a4276987dc5.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 212, 344, @@ -5218,7 +5319,9 @@ "name": "Jaime Walking-b", "md5": "7fb579a98d6db257f1b16109d3c4609a.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 104, 352, @@ -5229,7 +5332,9 @@ "name": "Jaime Walking-c", "md5": "5883bdefba451aaeac8d77c798d41eb0.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 176, 340, @@ -5240,7 +5345,9 @@ "name": "Jaime Walking-d", "md5": "4b9d2162e30dbb924840575ed35fddb0.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 92, 348, @@ -5251,7 +5358,9 @@ "name": "Jaime Walking-e", "md5": "63e56d28cc3e3d9b735e1f1d51248cc0.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 168, 344, @@ -5262,7 +5371,9 @@ "name": "Jaime-a", "md5": "3ddc912edef87ae29121f57294fa0cb5.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 152, 308, @@ -5273,7 +5384,9 @@ "name": "Jaime-b", "md5": "5a683f4536abca0f83a77bc341df4c9a.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 136, 308, @@ -5467,9 +5580,12 @@ }, { "name": "Jo Pop Down", - "md5": "95a0f1bb3d8055a283aecc6bcb6303c9.png", + "md5": "a55fbb529c10f70bcb374aef8a63571b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 136, 148, @@ -5478,9 +5594,12 @@ }, { "name": "Jo Pop Front", - "md5": "0503f4d712bc3184cf1b5f830d0df993.png", + "md5": "3d3ea804243800981acabc7caba10939.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 140, 456, @@ -5489,9 +5608,12 @@ }, { "name": "Jo Pop L Arm", - "md5": "2a907e6edf8a101addb2c27d0568896a.png", + "md5": "a9fbc01a4124d555da12630312e46197.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 216, 516, @@ -5500,9 +5622,12 @@ }, { "name": "Jo Pop Left", - "md5": "98e8c2f9869f9356204ed19e43ae01cc.png", + "md5": "ea812b4c2b2405aa2b73158023298f71.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 392, 452, @@ -5511,9 +5636,12 @@ }, { "name": "Jo Pop R Arm", - "md5": "e633eb002deb20108bb5100d4b3a8fc5.png", + "md5": "a35a3bbc4e21ce2f5de940adb7017fa6.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 216, 520, @@ -5522,9 +5650,12 @@ }, { "name": "Jo Pop Right", - "md5": "7bf1600ee75facb510c2922f899fb97c.png", + "md5": "01dd2f553c7262329ebaba2516e3a2b1.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 132, 484, @@ -5533,9 +5664,12 @@ }, { "name": "Jo Pop Stand", - "md5": "361d1884737ef734f6a39fd66fc269ec.png", + "md5": "75ee2383fd83992b401c8a0730521d94.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 156, 524, @@ -5544,9 +5678,12 @@ }, { "name": "Jo Stance", - "md5": "34336e1105719a933e57c043e0b52998.png", + "md5": "e10d129d9be2147bc7d284e281d88e9a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 188, 480, @@ -5555,9 +5692,12 @@ }, { "name": "Jo Top L Cross", - "md5": "33660046a3d37fa762f4a634ee3df75d.png", + "md5": "2e2a6534d33883fdd2f8471a1adbebb7.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 168, 536, @@ -5566,9 +5706,12 @@ }, { "name": "Jo Top L Leg", - "md5": "987a667cd7984d9e5429c26b8a4cab2d.png", + "md5": "a12f40b18067bb31746f9cf461de88aa.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 416, 536, @@ -5577,9 +5720,12 @@ }, { "name": "Jo Top R Cross", - "md5": "ddbd8751df020cc32231ecb4e7b5388d.png", + "md5": "c2d5519e8a0f2214ff757117038c28dc.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 288, 540, @@ -5588,9 +5734,12 @@ }, { "name": "Jo Top R Leg", - "md5": "de64c526a57355af5fd6ff28f27b67ea.png", + "md5": "efaa8eb6c8cf7dc35d4d37d546ebd333.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 436, 524, @@ -5599,9 +5748,12 @@ }, { "name": "Jo Top Stand", - "md5": "a91fe6e180b524d27688aa0cd82cd629.png", + "md5": "0ed4a09c41871d150c51119c1bceded2.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 136, 520, @@ -5680,7 +5832,9 @@ "name": "Kai-a", "md5": "6e007fde15e49c66ee7996561f80b452.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 136, 320, @@ -5691,7 +5845,9 @@ "name": "Kai-b", "md5": "c1e1149f6d7e308e3e4eba14ccc8a751.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 164, 316, @@ -5905,9 +6061,12 @@ }, { "name": "Lb Pop Down", - "md5": "8e41de92cb932a6898782a39a0d7d300.png", + "md5": "563f86443cb102b9241cebb62eb2d81a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 112, 180, @@ -5916,9 +6075,12 @@ }, { "name": "Lb Pop Front", - "md5": "e34a166807a3ffbf8d147b12aa49dd19.png", + "md5": "cdd52259075b75628001672d375e4985.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 132, 544, @@ -5927,9 +6089,12 @@ }, { "name": "Lb Pop L Arm", - "md5": "c1fd31607619b8c98a286a650f248511.png", + "md5": "b508808c087adb55ce156f5cfbdac61b.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 200, 524, @@ -5938,9 +6103,12 @@ }, { "name": "Lb Pop Left", - "md5": "ff1b96d1047d4be459a4614ce7c7c94c.png", + "md5": "525285312925e1e6b4e237a119b61305.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 396, 532, @@ -5949,9 +6117,12 @@ }, { "name": "Lb Pop R Arm", - "md5": "aa57575fde5ff8b13041e3a7b1499fe0.png", + "md5": "0725440743391e7c622bb5df6a94e1d4.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 156, 516, @@ -5960,9 +6131,12 @@ }, { "name": "Lb Pop Right", - "md5": "d6d5534c628ac5d5fe3cbf1b76b71252.png", + "md5": "0a2461b3b9a4b8603e75565d78b1d4d7.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 152, 528, @@ -5971,9 +6145,12 @@ }, { "name": "Lb Pop Stand", - "md5": "51fe5962fe4d2af7f6fad7abaa692069.png", + "md5": "5f176ef763be18f7c342dc2e2de7bf16.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 132, 536, @@ -5982,9 +6159,12 @@ }, { "name": "Lb Stance", - "md5": "008b80a80c4188acc72f7893fb10ac75.png", + "md5": "9d64910e84c39660b19ca4ca8b45e2be.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 108, 488, @@ -5993,9 +6173,12 @@ }, { "name": "Lb Top L Cross", - "md5": "5a151c4d4e2e2f870d9096d5fce6ed48.png", + "md5": "645d6e2674452009df7a9a844a604791.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 296, 516, @@ -6004,9 +6187,12 @@ }, { "name": "Lb Top L Leg", - "md5": "350472368e2310efe6fa734b79f0ff41.png", + "md5": "63d099e94aa8a973dcfa4c5d8b4a3e7a.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 468, 572, @@ -6015,9 +6201,12 @@ }, { "name": "Lb Top R Cross", - "md5": "99acf468000c6fcbaf344e4531725efc.png", + "md5": "4423159d81378ada5ffd7f053d7ef471.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 348, 512, @@ -6026,9 +6215,12 @@ }, { "name": "Lb Top R Leg", - "md5": "e824768a109691b5a3c577d3506ed70c.png", + "md5": "79ca528d13ffb557a236f0a35a0eb486.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 488, 500, @@ -6037,9 +6229,12 @@ }, { "name": "Lb Top Stand", - "md5": "dfe3628ddf46a67dcc21c63be65a8e40.png", + "md5": "e68d899e178309ff3eae3e1de8a8ec28.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 140, 496, @@ -7635,6 +7830,66 @@ 1 ] }, + { + "name": "Puppy Back", + "md5": "05630bfa94501a3e5d61ce443a0cea70.png", + "type": "costume", + "tags": [ + "animals", + "dog", + "puppy" + ], + "info": [ + 468, + 188, + 2 + ] + }, + { + "name": "Puppy Right", + "md5": "2768d9e44a0aab055856d301bbc2b04e.png", + "type": "costume", + "tags": [ + "animals", + "dog", + "puppy" + ], + "info": [ + 214, + 206, + 2 + ] + }, + { + "name": "Puppy Side", + "md5": "c4aeb5c39b39ef57a3f18ace54cf7db1.png", + "type": "costume", + "tags": [ + "animals", + "dog", + "puppy" + ], + "info": [ + 208, + 228, + 2 + ] + }, + { + "name": "Puppy Sit", + "md5": "c7817052ed9e78057f877d0d56b5c6a6.png", + "type": "costume", + "tags": [ + "animals", + "dog", + "puppy" + ], + "info": [ + 174, + 224, + 2 + ] + }, { "name": "Rabbit-a", "md5": "2f42891c3f3d63c0e591aeabc5946533.svg", @@ -8111,7 +8366,9 @@ "name": "Ruby-a", "md5": "c30210e8f719c3a4d2c7cc6917a39300.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 108, 344, @@ -8122,7 +8379,9 @@ "name": "Ruby-b", "md5": "fc15fdbcc535473f6140cab28197f3be.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ 152, 284, @@ -8130,10 +8389,13 @@ ] }, { - "name": "Sail-boat", + "name": "Sailboat", "md5": "ca241a938a2c44a0de6b91230012ff39.png", "type": "costume", - "tags": [], + "tags": [ + "boat", + "transportation" + ], "info": [ 448, 364, @@ -8142,13 +8404,15 @@ }, { "name": "Sam", - "md5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", + "md5": "34d9a8e7219748da7838a21b3a3a6e82.png", "type": "costume", - "tags": [], + "tags": [ + "people" + ], "info": [ - 58, - 90, - 1 + 224, + 360, + 2 ] }, { @@ -8635,10 +8899,13 @@ ] }, { - "name": "Squirrel1", + "name": "Squirrel", "md5": "b86efb7f23387300cf9037a61f328ab9.png", "type": "costume", - "tags": [], + "tags": [ + "animals", + "scoob" + ], "info": [ 316, 292, @@ -8932,9 +9199,12 @@ }, { "name": "Ten80 Pop Down", - "md5": "5b207159cca926fa0847e44b12231119.png", + "md5": "14685e432d683c918328e7fb070b7029.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 376, @@ -8943,9 +9213,12 @@ }, { "name": "Ten80 Pop Front", - "md5": "2a591305054fc72a65a20880d27c403d.png", + "md5": "86602007ae2952236d47d7fd587a56b6.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 144, 532, @@ -8954,9 +9227,12 @@ }, { "name": "Ten80 Pop L Arm", - "md5": "b2c2724462a8f4e1b95b2163deb45380.png", + "md5": "ce2141ce97921ddc333bc65ff5bec27d.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 200, 560, @@ -8965,9 +9241,12 @@ }, { "name": "Ten80 Pop Left", - "md5": "c0be2b181ca54a5feb3d9773e244bd73.png", + "md5": "3c9a7eac1d696ae74ee40c6efa8fa4dd.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 368, 532, @@ -8976,9 +9255,12 @@ }, { "name": "Ten80 Pop R Arm", - "md5": "08b47429a2b56095e471569be63a3acd.png", + "md5": "279bd5499329f98a68cf92c68014e198.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 556, @@ -8987,9 +9269,12 @@ }, { "name": "Ten80 Pop Right", - "md5": "be193b26613668f68c98f38397a1aaa6.png", + "md5": "548bdf23904e409c1fcc0992f44d0b4c.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 156, 552, @@ -8998,9 +9283,12 @@ }, { "name": "Ten80 Pop Stand", - "md5": "86200779d2de598cebb66354939e9a32.png", + "md5": "377b8521c436f4f39ed2100fa1cb7c2f.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 184, 560, @@ -9009,9 +9297,12 @@ }, { "name": "Ten80 Stance", - "md5": "dc671a181e0f2b5c94823b197d4455b5.png", + "md5": "90ca0205c56c6c7f0e8892469de49bda.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 140, 556, @@ -9020,9 +9311,12 @@ }, { "name": "Ten80 Top Freeze", - "md5": "332db3c9053d11df327151873be9ba8f.png", + "md5": "8313a2229d555bbdb8ce92dffed067ad.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 108, 516, @@ -9031,9 +9325,12 @@ }, { "name": "Ten80 Top L Step", - "md5": "4e730a1129334d2c5b3b5bf53a6cf488.png", + "md5": "e51942bb4651e616549cfce1ad36ff83.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 288, 532, @@ -9042,9 +9339,12 @@ }, { "name": "Ten80 Top R Cross", - "md5": "76945eb412c3dcc12fa4207690edc1ca.png", + "md5": "e06ac61e96e3a5abf4ca0863816f5d28.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 412, 504, @@ -9053,9 +9353,12 @@ }, { "name": "Ten80 Top R Step", - "md5": "13fbeb74f24efc49f73bf4edfc94fc16.png", + "md5": "733d05c17699758e2723599de333fdc0.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 400, 540, @@ -9064,9 +9367,12 @@ }, { "name": "Ten80 Top Stand", - "md5": "0f6adf023981ae764ab869a222f453cc.png", + "md5": "b2f75ac1cd84615efaea6a7d7a4ee205.png", "type": "costume", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 148, 548, @@ -9075,9 +9381,12 @@ }, { "name": "Tennisball", - "md5": "f70d1414e266df1dfe54afb563c810df.png", + "md5": "34fa36004be0340ec845ba6bbeb5e5d5.png", "type": "costume", - "tags": [], + "tags": [ + "ball", + "sports" + ], "info": [ 60, 60, @@ -9192,7 +9501,9 @@ "name": "Trampoline", "md5": "20b16bcb61396df304cad5e8886ceb46.png", "type": "costume", - "tags": [], + "tags": [ + "sports" + ], "info": [ 100, 41, diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index 84f125bc7e8..9cab0013e55 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -74,7 +74,10 @@ "name": "Amon", "md5": "60f720956ab1840431dcf0616ce98f14.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 1, @@ -115,9 +118,12 @@ }, { "name": "Anina Dance", - "md5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "md5": "9374e067ca4b66427fc64a0822f6e468.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 13, @@ -139,7 +145,7 @@ { "costumeName": "anina stance", "baseLayerID": -1, - "baseLayerMD5": "95a05adaa91532651a4b79d5ba3ebe49.png", + "baseLayerMD5": "9374e067ca4b66427fc64a0822f6e468.png", "bitmapResolution": 2, "rotationCenterX": 76, "rotationCenterY": 252 @@ -147,7 +153,7 @@ { "costumeName": "anina top stand", "baseLayerID": -1, - "baseLayerMD5": "34d6362cb4030d92be6fec73300f0aec.png", + "baseLayerMD5": "db6c03113f71b91f22a9f3351f90e5bf.png", "bitmapResolution": 2, "rotationCenterX": 74, "rotationCenterY": 280 @@ -155,7 +161,7 @@ { "costumeName": "anina top R step", "baseLayerID": -1, - "baseLayerMD5": "0477f7105d02b9a902382eca080476dc.png", + "baseLayerMD5": "2d208a34e74fdce9dab9d4c585dcfa2b.png", "bitmapResolution": 2, "rotationCenterX": 248, "rotationCenterY": 272 @@ -163,7 +169,7 @@ { "costumeName": "anina top L step", "baseLayerID": -1, - "baseLayerMD5": "62a89d8c6f7680e342132fcde59b2a5d.png", + "baseLayerMD5": "ed90e8b7a05c1552194af597ac0637cd.png", "bitmapResolution": 2, "rotationCenterX": 228, "rotationCenterY": 274 @@ -171,7 +177,7 @@ { "costumeName": "anina top freeze", "baseLayerID": -1, - "baseLayerMD5": "dd67565519bdebea1b931deb19621384.png", + "baseLayerMD5": "a1c9b65dd07747964cce642f9099921b.png", "bitmapResolution": 2, "rotationCenterX": 110, "rotationCenterY": 268 @@ -179,7 +185,7 @@ { "costumeName": "anina R cross", "baseLayerID": -1, - "baseLayerMD5": "22f3ca23b2f0ac67f8ebc36a8c3116a0.png", + "baseLayerMD5": "f0d4dce1006cf447a0a4b53e0a8d0519.png", "bitmapResolution": 2, "rotationCenterX": 126, "rotationCenterY": 268 @@ -187,7 +193,7 @@ { "costumeName": "anina pop front", "baseLayerID": -1, - "baseLayerMD5": "c163f1002f61421816386e52522b9133.png", + "baseLayerMD5": "832a3ae650a1f3bede1e0c9f1779e535.png", "bitmapResolution": 2, "rotationCenterX": 68, "rotationCenterY": 270 @@ -195,7 +201,7 @@ { "costumeName": "anina pop down", "baseLayerID": -1, - "baseLayerMD5": "e9e54ff1fa61c71507e25540d0326177.png", + "baseLayerMD5": "e3698b76cb0864df2fbaba80e6bd8067.png", "bitmapResolution": 2, "rotationCenterX": 74, "rotationCenterY": 156 @@ -203,7 +209,7 @@ { "costumeName": "anina pop left", "baseLayerID": -1, - "baseLayerMD5": "9fda30f66d51b2ad5f6fe11d57e199d6.png", + "baseLayerMD5": "d86bb27b4f8d7b70c39c96f29c6943b4.png", "bitmapResolution": 2, "rotationCenterX": 238, "rotationCenterY": 266 @@ -211,7 +217,7 @@ { "costumeName": "anina pop right", "baseLayerID": -1, - "baseLayerMD5": "cc2594e9278494e82f725be34369f178.png", + "baseLayerMD5": "7bb9c790b02231e1272701167c26b17a.png", "bitmapResolution": 2, "rotationCenterX": 66, "rotationCenterY": 268 @@ -219,7 +225,7 @@ { "costumeName": "anina pop L arm", "baseLayerID": -1, - "baseLayerMD5": "843bff4a5ee3d61fd8cbd419cb2797a3.png", + "baseLayerMD5": "62c50c90535b64f2ae130a5c680ddcb4.png", "bitmapResolution": 2, "rotationCenterX": 68, "rotationCenterY": 274 @@ -227,7 +233,7 @@ { "costumeName": "anina pop stand", "baseLayerID": -1, - "baseLayerMD5": "de7cab2c8d567d49a5a1f378b5709bb4.png", + "baseLayerMD5": "105f4f3d260dcb8bea02ea9ee5d18cf4.png", "bitmapResolution": 2, "rotationCenterX": 76, "rotationCenterY": 276 @@ -235,7 +241,7 @@ { "costumeName": "anina pop R arm", "baseLayerID": -1, - "baseLayerMD5": "e7e1a86233b7ad28d6ee9970b152be20.png", + "baseLayerMD5": "eac2b5f7db5e81d00c43486179b8dcf8.png", "bitmapResolution": 2, "rotationCenterX": 88, "rotationCenterY": 272 @@ -2324,7 +2330,9 @@ "name": "Calvrett", "md5": "452683db3ad7a882f5ab9de496441592.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 2, @@ -2447,7 +2455,10 @@ "name": "Cassy Dance", "md5": "6cb3686db1fa658b6541cc9fa3ccfcc7.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 4, @@ -2820,9 +2831,12 @@ }, { "name": "Champ99", - "md5": "b940c99d8e677ac5773cb4d592b16734.png", + "md5": "9e4e87818854cfc281d8dcc3e21ee672.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 7, @@ -2844,7 +2858,7 @@ { "costumeName": "champ99-a", "baseLayerID": -1, - "baseLayerMD5": "b940c99d8e677ac5773cb4d592b16734.png", + "baseLayerMD5": "9e4e87818854cfc281d8dcc3e21ee672.png", "bitmapResolution": 2, "rotationCenterX": 248, "rotationCenterY": 306 @@ -2852,7 +2866,7 @@ { "costumeName": "champ99-b", "baseLayerID": -1, - "baseLayerMD5": "2ebc7632bc9e665d9eeea93190fad7ad.png", + "baseLayerMD5": "d6ae13605610aa008d48b0c8b25a57d3.png", "bitmapResolution": 2, "rotationCenterX": 164, "rotationCenterY": 290 @@ -2860,7 +2874,7 @@ { "costumeName": "champ99-c", "baseLayerID": -1, - "baseLayerMD5": "bfcff80b0044c644c555ba24f2484106.png", + "baseLayerMD5": "26fdff424232926001d20041c3d5673b.png", "bitmapResolution": 2, "rotationCenterX": 152, "rotationCenterY": 270 @@ -2868,7 +2882,7 @@ { "costumeName": "champ99-d", "baseLayerID": -1, - "baseLayerMD5": "34de53e52a768d60a96e3ae0c030dfc5.png", + "baseLayerMD5": "a28ffc2b129fb359ff22c79c48341267.png", "bitmapResolution": 2, "rotationCenterX": 188, "rotationCenterY": 260 @@ -2876,7 +2890,7 @@ { "costumeName": "champ99-e", "baseLayerID": -1, - "baseLayerMD5": "0cb685bf8584df9caf124da929ab3453.png", + "baseLayerMD5": "56f3220fa82d99dcfc7d27d433ed01e4.png", "bitmapResolution": 2, "rotationCenterX": 190, "rotationCenterY": 248 @@ -2884,7 +2898,7 @@ { "costumeName": "champ99-f", "baseLayerID": -1, - "baseLayerMD5": "516d30b29aed8145718db421f4737953.png", + "baseLayerMD5": "68453506ae4b6b60a3fc6817ba39d492.png", "bitmapResolution": 2, "rotationCenterX": 114, "rotationCenterY": 250 @@ -2892,7 +2906,7 @@ { "costumeName": "champ99-g", "baseLayerID": -1, - "baseLayerMD5": "49e0edcb319527d936981f06b4111d53.png", + "baseLayerMD5": "20318b14a332fd618ec91e7c1de8be9a.png", "bitmapResolution": 2, "rotationCenterX": 132, "rotationCenterY": 258 @@ -2910,17 +2924,19 @@ } }, { - "name": "Cheesy-Puffs", - "md5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "name": "Cheesy Puffs", + "md5": "82772a61ec74974e84c686c61ea0b7d5.png", "type": "sprite", - "tags": [], + "tags": [ + "food" + ], "info": [ 0, 1, 1 ], "json": { - "objName": "Cheesy-Puffs", + "objName": "Cheesy Puffs", "sounds": [ { "soundName": "pop", @@ -2933,9 +2949,9 @@ ], "costumes": [ { - "costumeName": "cheesy-puffs", + "costumeName": "cheesy puffs", "baseLayerID": -1, - "baseLayerMD5": "4c99a77ba72abaf6c961e8684f8a8a9f.png", + "baseLayerMD5": "82772a61ec74974e84c686c61ea0b7d5.png", "bitmapResolution": 2, "rotationCenterX": 87, "rotationCenterY": 72 @@ -3131,7 +3147,10 @@ "name": "Convertible", "md5": "5b883f396844ff5cfecd7c95553fa4fb.png", "type": "sprite", - "tags": [], + "tags": [ + "car", + "transportation" + ], "info": [ 0, 1, @@ -3402,7 +3421,10 @@ "name": "D-Money Dance", "md5": "b30a60d31aebead577b73affd22bf30f.svg", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 13, @@ -3432,7 +3454,7 @@ { "costumeName": "dm top stand", "baseLayerID": -1, - "baseLayerMD5": "cbf035d39d0a0bb070d2eb998cebd60d.png", + "baseLayerMD5": "051c36758b9fd1136b511efc5dd6234a.png", "bitmapResolution": 2, "rotationCenterX": 82, "rotationCenterY": 244 @@ -3440,7 +3462,7 @@ { "costumeName": "dm top R leg", "baseLayerID": -1, - "baseLayerMD5": "fcb8c2b6cf9b7e6ce9df521b2486deb3.png", + "baseLayerMD5": "6cea0c29c460e571226cc4cff5b97c28.png", "bitmapResolution": 2, "rotationCenterX": 218, "rotationCenterY": 232 @@ -3448,7 +3470,7 @@ { "costumeName": "dm top L leg", "baseLayerID": -1, - "baseLayerMD5": "fd8bb9665fe078d2d95dbc35bccf4046.png", + "baseLayerMD5": "344384a6a3f1bdf494cc7af31e928d36.png", "bitmapResolution": 2, "rotationCenterX": 230, "rotationCenterY": 240 @@ -3456,7 +3478,7 @@ { "costumeName": "dm freeze", "baseLayerID": -1, - "baseLayerMD5": "31e687f186b19ea120cd5cfc9dea2a3f.png", + "baseLayerMD5": "a4b5d644d9abdbcab236acf19b2a2e81.png", "bitmapResolution": 2, "rotationCenterX": 220, "rotationCenterY": 234 @@ -3464,7 +3486,7 @@ { "costumeName": "dm pop front", "baseLayerID": -1, - "baseLayerMD5": "0b2fb609d6d10decfdd5a1c3b58369b4.png", + "baseLayerMD5": "70da166596bb484eae1bfbaad5c03d54.png", "bitmapResolution": 2, "rotationCenterX": 92, "rotationCenterY": 234 @@ -3472,7 +3494,7 @@ { "costumeName": "dm pop down", "baseLayerID": -1, - "baseLayerMD5": "3b65ce3551f9c111794f7f1fb8f325be.png", + "baseLayerMD5": "729812366245c0dafd456339c9d94e08.png", "bitmapResolution": 2, "rotationCenterX": 64, "rotationCenterY": 74 @@ -3480,7 +3502,7 @@ { "costumeName": "dm pop left", "baseLayerID": -1, - "baseLayerMD5": "f636510e8ef231d7c0e72a572ce91c99.png", + "baseLayerMD5": "32ec7b5332cfebd1cfed7f6b79c76e67.png", "bitmapResolution": 2, "rotationCenterX": 204, "rotationCenterY": 250 @@ -3488,7 +3510,7 @@ { "costumeName": "dm pop right", "baseLayerID": -1, - "baseLayerMD5": "36b32430e45e071071052ef33c637f48.png", + "baseLayerMD5": "19bd7995d37e3baade673b2fe7cb982b.png", "bitmapResolution": 2, "rotationCenterX": 78, "rotationCenterY": 238 @@ -3496,7 +3518,7 @@ { "costumeName": "dm pop L arm", "baseLayerID": -1, - "baseLayerMD5": "426e1520efc34fef45be0596fd5f7120.png", + "baseLayerMD5": "3cdebabdb41f6c3e84561cf3ea87bac3.png", "bitmapResolution": 2, "rotationCenterX": 90, "rotationCenterY": 238 @@ -3504,7 +3526,7 @@ { "costumeName": "dm pop stand", "baseLayerID": -1, - "baseLayerMD5": "370cc57b40f1f1d6e52d6330b73d207f.png", + "baseLayerMD5": "05529eb3c09294bd15f57c6f10d5894e.png", "bitmapResolution": 2, "rotationCenterX": 100, "rotationCenterY": 244 @@ -3512,7 +3534,7 @@ { "costumeName": "dm pop R arm", "baseLayerID": -1, - "baseLayerMD5": "56fe91d2cf3ecb9d1b94006aee9eff79.png", + "baseLayerMD5": "50faf1630ea383c0b8c77f70a9329797.png", "bitmapResolution": 2, "rotationCenterX": 80, "rotationCenterY": 240 @@ -3539,9 +3561,11 @@ }, { "name": "Dan", - "md5": "1baa5b126e0e14d6070a997c0deefab5.png", + "md5": "307250744e230fb15e7062238bf2634c.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 2, @@ -3563,10 +3587,10 @@ { "costumeName": "dan-a", "baseLayerID": -1, - "baseLayerMD5": "1baa5b126e0e14d6070a997c0deefab5.png", - "bitmapResolution": 1, - "rotationCenterX": 36, - "rotationCenterY": 100 + "baseLayerMD5": "307250744e230fb15e7062238bf2634c.png", + "bitmapResolution": 2, + "rotationCenterX": 72, + "rotationCenterY": 196 }, { "costumeName": "dan-b", @@ -4194,73 +4218,6 @@ "spriteInfo": {} } }, - { - "name": "Dog Puppy", - "md5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", - "type": "sprite", - "tags": [], - "info": [ - 0, - 4, - 1 - ], - "json": { - "objName": "Dog Puppy", - "sounds": [ - { - "soundName": "dog2", - "soundID": -1, - "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav", - "sampleCount": 3168, - "rate": 22050, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "dog puppy right", - "baseLayerID": -1, - "baseLayerMD5": "4c608ab4ac1fb0c5d46e71d6f438b821.png", - "bitmapResolution": 2, - "rotationCenterX": 107, - "rotationCenterY": 103 - }, - { - "costumeName": "dog puppy sit", - "baseLayerID": -1, - "baseLayerMD5": "00b1589467f939b9c61f666bca2d25d1.png", - "bitmapResolution": 2, - "rotationCenterX": 87, - "rotationCenterY": 112 - }, - { - "costumeName": "dog puppy side", - "baseLayerID": -1, - "baseLayerMD5": "63c3d6718943ecbf48f94b3b131ae8a4.png", - "bitmapResolution": 2, - "rotationCenterX": 104, - "rotationCenterY": 114 - }, - { - "costumeName": "dog puppy back", - "baseLayerID": -1, - "baseLayerMD5": "88559ad0334a8a51aca31035068682f6.png", - "bitmapResolution": 2, - "rotationCenterX": 234, - "rotationCenterY": 94 - } - ], - "currentCostumeIndex": 0, - "scratchX": -91, - "scratchY": 33, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, { "name": "Dog1", "md5": "39ddefa0cc58f3b1b06474d63d81ef56.svg", @@ -5551,9 +5508,12 @@ }, { "name": "Football", - "md5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", + "md5": "7ee31371b2eafba57cc5a78fc1a787fe.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ 0, 2, @@ -5575,18 +5535,18 @@ { "costumeName": "football running", "baseLayerID": -1, - "baseLayerMD5": "422b34b6e5a2fdb8d0ac00aca91ec714.png", - "bitmapResolution": 1, - "rotationCenterX": 47, - "rotationCenterY": 100 + "baseLayerMD5": "7ee31371b2eafba57cc5a78fc1a787fe.png", + "bitmapResolution": 2, + "rotationCenterX": 92, + "rotationCenterY": 200 }, { "costumeName": "football standing", "baseLayerID": -1, - "baseLayerMD5": "1f57154842f68aa55577edc90a6f2b32.png", - "bitmapResolution": 1, - "rotationCenterX": 37, - "rotationCenterY": 100 + "baseLayerMD5": "c717def72c8bd98749284d31b51d7097.png", + "bitmapResolution": 2, + "rotationCenterX": 74, + "rotationCenterY": 200 } ], "currentCostumeIndex": 0, @@ -5604,7 +5564,9 @@ "name": "Fortune Cookie", "md5": "c56dcaa1fa4e3c9740142b93d5982850.png", "type": "sprite", - "tags": [], + "tags": [ + "food" + ], "info": [ 0, 1, @@ -5834,7 +5796,9 @@ "name": "Fruit Platter", "md5": "6c3252378da3334f63eebddbed3fae91.png", "type": "sprite", - "tags": [], + "tags": [ + "food" + ], "info": [ 0, 1, @@ -7057,7 +7021,10 @@ "name": "Hannah", "md5": "b983d99560313e38b4b3cd36cbd5f0d1.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "sports" + ], "info": [ 0, 3, @@ -8064,7 +8031,9 @@ "name": "Jaime", "md5": "3ddc912edef87ae29121f57294fa0cb5.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 7, @@ -8480,9 +8449,12 @@ }, { "name": "Jouvi Dance", - "md5": "34336e1105719a933e57c043e0b52998.png", + "md5": "e10d129d9be2147bc7d284e281d88e9a.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 13, @@ -8504,7 +8476,7 @@ { "costumeName": "jo stance", "baseLayerID": -1, - "baseLayerMD5": "34336e1105719a933e57c043e0b52998.png", + "baseLayerMD5": "e10d129d9be2147bc7d284e281d88e9a.png", "bitmapResolution": 2, "rotationCenterX": 94, "rotationCenterY": 240 @@ -8512,7 +8484,7 @@ { "costumeName": "jo top stand", "baseLayerID": -1, - "baseLayerMD5": "a91fe6e180b524d27688aa0cd82cd629.png", + "baseLayerMD5": "0ed4a09c41871d150c51119c1bceded2.png", "bitmapResolution": 2, "rotationCenterX": 68, "rotationCenterY": 260 @@ -8520,87 +8492,87 @@ { "costumeName": "jo top R leg", "baseLayerID": -1, - "baseLayerMD5": "de64c526a57355af5fd6ff28f27b67ea.png", + "baseLayerMD5": "efaa8eb6c8cf7dc35d4d37d546ebd333.png", "bitmapResolution": 2, "rotationCenterX": 218, "rotationCenterY": 262 }, { "costumeName": "jo top L leg", - "baseLayerID": -1, - "baseLayerMD5": "987a667cd7984d9e5429c26b8a4cab2d.png", + "baseLayerID": 0, + "baseLayerMD5": "a12f40b18067bb31746f9cf461de88aa.png", "bitmapResolution": 2, "rotationCenterX": 208, "rotationCenterY": 268 }, { "costumeName": "jo top R cross", - "baseLayerID": -1, - "baseLayerMD5": "ddbd8751df020cc32231ecb4e7b5388d.png", + "baseLayerID": 1, + "baseLayerMD5": "c2d5519e8a0f2214ff757117038c28dc.png", "bitmapResolution": 2, "rotationCenterX": 144, "rotationCenterY": 270 }, { "costumeName": "jo top L cross", - "baseLayerID": -1, - "baseLayerMD5": "33660046a3d37fa762f4a634ee3df75d.png", + "baseLayerID": 2, + "baseLayerMD5": "2e2a6534d33883fdd2f8471a1adbebb7.png", "bitmapResolution": 2, "rotationCenterX": 84, "rotationCenterY": 268 }, { "costumeName": "jo pop front", - "baseLayerID": -1, - "baseLayerMD5": "0503f4d712bc3184cf1b5f830d0df993.png", + "baseLayerID": 3, + "baseLayerMD5": "3d3ea804243800981acabc7caba10939.png", "bitmapResolution": 2, "rotationCenterX": 70, "rotationCenterY": 228 }, { "costumeName": "jo pop down", - "baseLayerID": -1, - "baseLayerMD5": "95a0f1bb3d8055a283aecc6bcb6303c9.png", + "baseLayerID": 4, + "baseLayerMD5": "a55fbb529c10f70bcb374aef8a63571b.png", "bitmapResolution": 2, "rotationCenterX": 68, "rotationCenterY": 74 }, { "costumeName": "jo pop left", - "baseLayerID": -1, - "baseLayerMD5": "98e8c2f9869f9356204ed19e43ae01cc.png", + "baseLayerID": 5, + "baseLayerMD5": "ea812b4c2b2405aa2b73158023298f71.png", "bitmapResolution": 2, "rotationCenterX": 196, "rotationCenterY": 226 }, { "costumeName": "jo pop right", - "baseLayerID": -1, - "baseLayerMD5": "7bf1600ee75facb510c2922f899fb97c.png", + "baseLayerID": 6, + "baseLayerMD5": "01dd2f553c7262329ebaba2516e3a2b1.png", "bitmapResolution": 2, "rotationCenterX": 66, "rotationCenterY": 242 }, { "costumeName": "jo pop L arm", - "baseLayerID": -1, - "baseLayerMD5": "2a907e6edf8a101addb2c27d0568896a.png", + "baseLayerID": 7, + "baseLayerMD5": "a9fbc01a4124d555da12630312e46197.png", "bitmapResolution": 2, "rotationCenterX": 108, "rotationCenterY": 258 }, { "costumeName": "jo pop stand", - "baseLayerID": -1, - "baseLayerMD5": "361d1884737ef734f6a39fd66fc269ec.png", + "baseLayerID": 8, + "baseLayerMD5": "75ee2383fd83992b401c8a0730521d94.png", "bitmapResolution": 2, "rotationCenterX": 78, "rotationCenterY": 262 }, { "costumeName": "jo pop R arm", - "baseLayerID": -1, - "baseLayerMD5": "e633eb002deb20108bb5100d4b3a8fc5.png", + "baseLayerID": 9, + "baseLayerMD5": "a35a3bbc4e21ce2f5de940adb7017fa6.png", "bitmapResolution": 2, "rotationCenterX": 108, "rotationCenterY": 260 @@ -8621,7 +8593,9 @@ "name": "Kai", "md5": "6e007fde15e49c66ee7996561f80b452.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 2, @@ -8960,9 +8934,12 @@ }, { "name": "LB Dance", - "md5": "008b80a80c4188acc72f7893fb10ac75.png", + "md5": "9d64910e84c39660b19ca4ca8b45e2be.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 13, @@ -8984,7 +8961,7 @@ { "costumeName": "lb stance", "baseLayerID": -1, - "baseLayerMD5": "008b80a80c4188acc72f7893fb10ac75.png", + "baseLayerMD5": "9d64910e84c39660b19ca4ca8b45e2be.png", "bitmapResolution": 2, "rotationCenterX": 54, "rotationCenterY": 244 @@ -8992,7 +8969,7 @@ { "costumeName": "lb top stand", "baseLayerID": -1, - "baseLayerMD5": "dfe3628ddf46a67dcc21c63be65a8e40.png", + "baseLayerMD5": "e68d899e178309ff3eae3e1de8a8ec28.png", "bitmapResolution": 2, "rotationCenterX": 70, "rotationCenterY": 248 @@ -9000,7 +8977,7 @@ { "costumeName": "lb top R leg", "baseLayerID": -1, - "baseLayerMD5": "e824768a109691b5a3c577d3506ed70c.png", + "baseLayerMD5": "79ca528d13ffb557a236f0a35a0eb486.png", "bitmapResolution": 2, "rotationCenterX": 244, "rotationCenterY": 250 @@ -9008,7 +8985,7 @@ { "costumeName": "lb top L leg", "baseLayerID": -1, - "baseLayerMD5": "350472368e2310efe6fa734b79f0ff41.png", + "baseLayerMD5": "63d099e94aa8a973dcfa4c5d8b4a3e7a.png", "bitmapResolution": 2, "rotationCenterX": 234, "rotationCenterY": 286 @@ -9016,7 +8993,7 @@ { "costumeName": "lb top L cross", "baseLayerID": -1, - "baseLayerMD5": "5a151c4d4e2e2f870d9096d5fce6ed48.png", + "baseLayerMD5": "645d6e2674452009df7a9a844a604791.png", "bitmapResolution": 2, "rotationCenterX": 148, "rotationCenterY": 258 @@ -9024,7 +9001,7 @@ { "costumeName": "lb top R cross", "baseLayerID": -1, - "baseLayerMD5": "99acf468000c6fcbaf344e4531725efc.png", + "baseLayerMD5": "4423159d81378ada5ffd7f053d7ef471.png", "bitmapResolution": 2, "rotationCenterX": 174, "rotationCenterY": 256 @@ -9032,7 +9009,7 @@ { "costumeName": "lb pop front", "baseLayerID": -1, - "baseLayerMD5": "e34a166807a3ffbf8d147b12aa49dd19.png", + "baseLayerMD5": "cdd52259075b75628001672d375e4985.png", "bitmapResolution": 2, "rotationCenterX": 66, "rotationCenterY": 272 @@ -9040,7 +9017,7 @@ { "costumeName": "lb pop down", "baseLayerID": -1, - "baseLayerMD5": "8e41de92cb932a6898782a39a0d7d300.png", + "baseLayerMD5": "563f86443cb102b9241cebb62eb2d81a.png", "bitmapResolution": 2, "rotationCenterX": 56, "rotationCenterY": 90 @@ -9048,7 +9025,7 @@ { "costumeName": "lb pop left", "baseLayerID": -1, - "baseLayerMD5": "ff1b96d1047d4be459a4614ce7c7c94c.png", + "baseLayerMD5": "525285312925e1e6b4e237a119b61305.png", "bitmapResolution": 2, "rotationCenterX": 198, "rotationCenterY": 266 @@ -9056,7 +9033,7 @@ { "costumeName": "lb pop right", "baseLayerID": -1, - "baseLayerMD5": "d6d5534c628ac5d5fe3cbf1b76b71252.png", + "baseLayerMD5": "0a2461b3b9a4b8603e75565d78b1d4d7.png", "bitmapResolution": 2, "rotationCenterX": 76, "rotationCenterY": 264 @@ -9064,7 +9041,7 @@ { "costumeName": "lb pop L arm", "baseLayerID": -1, - "baseLayerMD5": "c1fd31607619b8c98a286a650f248511.png", + "baseLayerMD5": "b508808c087adb55ce156f5cfbdac61b.png", "bitmapResolution": 2, "rotationCenterX": 100, "rotationCenterY": 262 @@ -9072,7 +9049,7 @@ { "costumeName": "lb pop stand", "baseLayerID": -1, - "baseLayerMD5": "51fe5962fe4d2af7f6fad7abaa692069.png", + "baseLayerMD5": "5f176ef763be18f7c342dc2e2de7bf16.png", "bitmapResolution": 2, "rotationCenterX": 66, "rotationCenterY": 268 @@ -9080,7 +9057,7 @@ { "costumeName": "lb pop R arm", "baseLayerID": -1, - "baseLayerMD5": "aa57575fde5ff8b13041e3a7b1499fe0.png", + "baseLayerMD5": "0725440743391e7c622bb5df6a94e1d4.png", "bitmapResolution": 2, "rotationCenterX": 78, "rotationCenterY": 258 @@ -11536,6 +11513,77 @@ "spriteInfo": {} } }, + { + "name": "Puppy", + "md5": "2768d9e44a0aab055856d301bbc2b04e.png", + "type": "sprite", + "tags": [ + "animals", + "dog", + "puppy" + ], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Puppy", + "sounds": [ + { + "soundName": "dog2", + "soundID": -1, + "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav", + "sampleCount": 3168, + "rate": 22050, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "puppy right", + "baseLayerID": -1, + "baseLayerMD5": "2768d9e44a0aab055856d301bbc2b04e.png", + "bitmapResolution": 2, + "rotationCenterX": 107, + "rotationCenterY": 103 + }, + { + "costumeName": "puppy sit", + "baseLayerID": -1, + "baseLayerMD5": "c7817052ed9e78057f877d0d56b5c6a6.png", + "bitmapResolution": 2, + "rotationCenterX": 87, + "rotationCenterY": 112 + }, + { + "costumeName": "puppy side", + "baseLayerID": -1, + "baseLayerMD5": "c4aeb5c39b39ef57a3f18ace54cf7db1.png", + "bitmapResolution": 2, + "rotationCenterX": 104, + "rotationCenterY": 114 + }, + { + "costumeName": "puppy back", + "baseLayerID": -1, + "baseLayerMD5": "05630bfa94501a3e5d61ce443a0cea70.png", + "bitmapResolution": 2, + "rotationCenterX": 234, + "rotationCenterY": 94 + } + ], + "currentCostumeIndex": 0, + "scratchX": -91, + "scratchY": 33, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Rabbit", "md5": "2f42891c3f3d63c0e591aeabc5946533.svg", @@ -12160,7 +12208,9 @@ "name": "Ruby", "md5": "c30210e8f719c3a4d2c7cc6917a39300.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 2, @@ -12211,7 +12261,10 @@ "name": "Sailboat", "md5": "ca241a938a2c44a0de6b91230012ff39.png", "type": "sprite", - "tags": [], + "tags": [ + "boat", + "transportation" + ], "info": [ 0, 1, @@ -12231,7 +12284,7 @@ ], "costumes": [ { - "costumeName": "sail-boat", + "costumeName": "sailboat", "baseLayerID": -1, "baseLayerMD5": "ca241a938a2c44a0de6b91230012ff39.png", "bitmapResolution": 2, @@ -12252,9 +12305,11 @@ }, { "name": "Sam", - "md5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", + "md5": "34d9a8e7219748da7838a21b3a3a6e82.png", "type": "sprite", - "tags": [], + "tags": [ + "people" + ], "info": [ 0, 1, @@ -12275,11 +12330,11 @@ "costumes": [ { "costumeName": "sam", - "baseLayerID": -1, - "baseLayerMD5": "1d33952fec0abe4ef6adee9fd065d3a8.gif", - "bitmapResolution": 1, - "rotationCenterX": 58, - "rotationCenterY": 90 + "baseLayerID": 0, + "baseLayerMD5": "34d9a8e7219748da7838a21b3a3a6e82.png", + "bitmapResolution": 2, + "rotationCenterX": 112, + "rotationCenterY": 180 } ], "currentCostumeIndex": 0, @@ -13413,7 +13468,9 @@ "name": "Squirrel", "md5": "b86efb7f23387300cf9037a61f328ab9.png", "type": "sprite", - "tags": [], + "tags": [ + "animals" + ], "info": [ 0, 1, @@ -13433,8 +13490,8 @@ ], "costumes": [ { - "costumeName": "squirrel1", - "baseLayerID": 0, + "costumeName": "squirrel", + "baseLayerID": -1, "baseLayerMD5": "b86efb7f23387300cf9037a61f328ab9.png", "bitmapResolution": 2, "rotationCenterX": 158, @@ -13958,9 +14015,12 @@ }, { "name": "Ten80 Dance", - "md5": "dc671a181e0f2b5c94823b197d4455b5.png", + "md5": "90ca0205c56c6c7f0e8892469de49bda.png", "type": "sprite", - "tags": [], + "tags": [ + "people", + "dance" + ], "info": [ 0, 13, @@ -13982,7 +14042,7 @@ { "costumeName": "Ten80 stance", "baseLayerID": -1, - "baseLayerMD5": "dc671a181e0f2b5c94823b197d4455b5.png", + "baseLayerMD5": "90ca0205c56c6c7f0e8892469de49bda.png", "bitmapResolution": 2, "rotationCenterX": 70, "rotationCenterY": 278 @@ -13990,7 +14050,7 @@ { "costumeName": "Ten80 top stand", "baseLayerID": -1, - "baseLayerMD5": "0f6adf023981ae764ab869a222f453cc.png", + "baseLayerMD5": "b2f75ac1cd84615efaea6a7d7a4ee205.png", "bitmapResolution": 2, "rotationCenterX": 74, "rotationCenterY": 274 @@ -13998,7 +14058,7 @@ { "costumeName": "Ten80 top R step", "baseLayerID": -1, - "baseLayerMD5": "13fbeb74f24efc49f73bf4edfc94fc16.png", + "baseLayerMD5": "733d05c17699758e2723599de333fdc0.png", "bitmapResolution": 2, "rotationCenterX": 200, "rotationCenterY": 270 @@ -14006,7 +14066,7 @@ { "costumeName": "Ten80 top L step", "baseLayerID": -1, - "baseLayerMD5": "4e730a1129334d2c5b3b5bf53a6cf488.png", + "baseLayerMD5": "e51942bb4651e616549cfce1ad36ff83.png", "bitmapResolution": 2, "rotationCenterX": 144, "rotationCenterY": 266 @@ -14014,7 +14074,7 @@ { "costumeName": "Ten80 top freeze", "baseLayerID": -1, - "baseLayerMD5": "332db3c9053d11df327151873be9ba8f.png", + "baseLayerMD5": "8313a2229d555bbdb8ce92dffed067ad.png", "bitmapResolution": 2, "rotationCenterX": 54, "rotationCenterY": 258 @@ -14022,7 +14082,7 @@ { "costumeName": "Ten80 top R cross", "baseLayerID": -1, - "baseLayerMD5": "76945eb412c3dcc12fa4207690edc1ca.png", + "baseLayerMD5": "e06ac61e96e3a5abf4ca0863816f5d28.png", "bitmapResolution": 2, "rotationCenterX": 206, "rotationCenterY": 252 @@ -14030,7 +14090,7 @@ { "costumeName": "Ten80 pop front", "baseLayerID": -1, - "baseLayerMD5": "2a591305054fc72a65a20880d27c403d.png", + "baseLayerMD5": "86602007ae2952236d47d7fd587a56b6.png", "bitmapResolution": 2, "rotationCenterX": 72, "rotationCenterY": 266 @@ -14038,7 +14098,7 @@ { "costumeName": "Ten80 pop down", "baseLayerID": -1, - "baseLayerMD5": "5b207159cca926fa0847e44b12231119.png", + "baseLayerMD5": "14685e432d683c918328e7fb070b7029.png", "bitmapResolution": 2, "rotationCenterX": 74, "rotationCenterY": 188 @@ -14046,7 +14106,7 @@ { "costumeName": "Ten80 pop left", "baseLayerID": -1, - "baseLayerMD5": "c0be2b181ca54a5feb3d9773e244bd73.png", + "baseLayerMD5": "3c9a7eac1d696ae74ee40c6efa8fa4dd.png", "bitmapResolution": 2, "rotationCenterX": 184, "rotationCenterY": 266 @@ -14054,7 +14114,7 @@ { "costumeName": "Ten80 pop right", "baseLayerID": -1, - "baseLayerMD5": "be193b26613668f68c98f38397a1aaa6.png", + "baseLayerMD5": "548bdf23904e409c1fcc0992f44d0b4c.png", "bitmapResolution": 2, "rotationCenterX": 78, "rotationCenterY": 276 @@ -14062,7 +14122,7 @@ { "costumeName": "Ten80 pop L arm", "baseLayerID": -1, - "baseLayerMD5": "b2c2724462a8f4e1b95b2163deb45380.png", + "baseLayerMD5": "ce2141ce97921ddc333bc65ff5bec27d.png", "bitmapResolution": 2, "rotationCenterX": 100, "rotationCenterY": 280 @@ -14070,7 +14130,7 @@ { "costumeName": "Ten80 pop stand", "baseLayerID": -1, - "baseLayerMD5": "86200779d2de598cebb66354939e9a32.png", + "baseLayerMD5": "377b8521c436f4f39ed2100fa1cb7c2f.png", "bitmapResolution": 2, "rotationCenterX": 92, "rotationCenterY": 280 @@ -14078,7 +14138,7 @@ { "costumeName": "Ten80 pop R arm", "baseLayerID": -1, - "baseLayerMD5": "08b47429a2b56095e471569be63a3acd.png", + "baseLayerMD5": "279bd5499329f98a68cf92c68014e198.png", "bitmapResolution": 2, "rotationCenterX": 74, "rotationCenterY": 278 @@ -14097,9 +14157,12 @@ }, { "name": "Tennis Ball", - "md5": "f70d1414e266df1dfe54afb563c810df.png", + "md5": "34fa36004be0340ec845ba6bbeb5e5d5.png", "type": "sprite", - "tags": [], + "tags": [ + "ball", + "sports" + ], "info": [ 0, 1, @@ -14121,7 +14184,7 @@ { "costumeName": "tennisball", "baseLayerID": 1, - "baseLayerMD5": "f70d1414e266df1dfe54afb563c810df.png", + "baseLayerMD5": "34fa36004be0340ec845ba6bbeb5e5d5.png", "bitmapResolution": 2, "rotationCenterX": 30, "rotationCenterY": 30 @@ -14275,7 +14338,9 @@ "name": "Trampoline", "md5": "20b16bcb61396df304cad5e8886ceb46.png", "type": "sprite", - "tags": [], + "tags": [ + "sports" + ], "info": [ 0, 1, From 5c160b557d5b8000a99a08d6d57cda65da8392b3 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Thu, 12 Jul 2018 09:41:44 -0400 Subject: [PATCH 062/159] Bugfixes to vector and bitmap costumes --- src/lib/libraries/backdrops.json | 39 ++-- src/lib/libraries/costumes.json | 211 +++--------------- src/lib/libraries/sprites.json | 353 +++---------------------------- 3 files changed, 84 insertions(+), 519 deletions(-) diff --git a/src/lib/libraries/backdrops.json b/src/lib/libraries/backdrops.json index fecf862618e..14f82655b64 100644 --- a/src/lib/libraries/backdrops.json +++ b/src/lib/libraries/backdrops.json @@ -442,8 +442,8 @@ ] }, { - "name": "Jurassic", - "md5": "ad5bd6c10d2afb79d298817ec24a47fd.svg", + "name": "Jurrasic", + "md5": "64025bdca5db4938f65597e3682fddcf.svg", "type": "backdrop", "tags": [ "outdoors", @@ -595,20 +595,6 @@ 2 ] }, - { - "name": "Ocean", - "md5": "fb907f72b310acc8b95cbf2d2cccabc9.svg", - "type": "backdrop", - "tags": [ - "underwater", - "ipzy" - ], - "info": [ - 480, - 360, - 1 - ] - }, { "name": "Party", "md5": "108160d0e44d1c340182e31c9dc0758a.svg", @@ -890,11 +876,12 @@ ] }, { - "name": "Spotlight Stage", + "name": "Stage", "md5": "d26bf4c3980163d9106625cc2ea6c50d.png", "type": "backdrop", "tags": [ - "music" + "music", + "dance" ], "info": [ 960, @@ -971,6 +958,22 @@ 2 ] }, + { + "name": "Underwater 1", + "md5": "fb907f72b310acc8b95cbf2d2cccabc9.svg", + "type": "backdrop", + "tags": [ + "ocean", + "outdoors", + "underwater", + "ipzy" + ], + "info": [ + 480, + 360, + 1 + ] + }, { "name": "Underwater 2", "md5": "1517c21786d2d0edc2f3037408d850bd.png", diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index 766c95493d7..e2f829d7753 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -959,62 +959,6 @@ 1 ] }, - { - "name": "Bear1-a", - "md5": "598722f70e86e6f9b23ef97680baaa9c.svg", - "type": "costume", - "tags": [ - "animals", - "mammal" - ], - "info": [ - 56, - 93, - 1 - ] - }, - { - "name": "Bear1-b", - "md5": "76ceb0de4409f42713b50cbc1fb45af5.svg", - "type": "costume", - "tags": [ - "animals", - "mammal" - ], - "info": [ - 56, - 93, - 1 - ] - }, - { - "name": "Bear2-a", - "md5": "3eb8e16a983ff23c418374389c81bd30.svg", - "type": "costume", - "tags": [ - "animals", - "bear" - ], - "info": [ - 37, - 42, - 1 - ] - }, - { - "name": "Bear2-b", - "md5": "12bb6960ac01b65ae9b5e5e7f79700ac.svg", - "type": "costume", - "tags": [ - "animals", - "bear" - ], - "info": [ - 51, - 42, - 1 - ] - }, { "name": "Beetle", "md5": "e1ce8f153f011fdd52486c91c6ed594d.svg", @@ -1346,7 +1290,7 @@ ] }, { - "name": "Butterfly-a", + "name": "Butterfly1-a", "md5": "8419d4851defd1e862e4f7c1699d2190.svg", "type": "costume", "tags": [ @@ -1363,7 +1307,7 @@ ] }, { - "name": "Butterfly-b", + "name": "Butterfly1-b", "md5": "0873714e8d55d9eeb0bc8e8ab64441cc.svg", "type": "costume", "tags": [ @@ -1380,7 +1324,7 @@ ] }, { - "name": "Butterfly-c", + "name": "Butterfly1-c", "md5": "9c422631ca8d46413487f5dd627b65c6.svg", "type": "costume", "tags": [ @@ -1397,7 +1341,7 @@ ] }, { - "name": "Butterfly1-a", + "name": "Butterfly2-a", "md5": "836d4cc7889f4a1cbcb0303934f31f79.svg", "type": "costume", "tags": [ @@ -1415,7 +1359,7 @@ ] }, { - "name": "Butterfly1-b", + "name": "Butterfly2-b", "md5": "55dd0671a359d7c35f7b78f4176660e8.svg", "type": "costume", "tags": [ @@ -1432,42 +1376,6 @@ 1 ] }, - { - "name": "Butterfly2", - "md5": "a0216895beade6afc6d42bd5bb43faea.svg", - "type": "costume", - "tags": [ - "animals", - "drawing", - "happy", - "bug", - "insect", - "antennae" - ], - "info": [ - 75, - 75, - 1 - ] - }, - { - "name": "Butterfly3", - "md5": "8907a43cf08b0a9134969023be2074c5.svg", - "type": "costume", - "tags": [ - "animals", - "drawing", - "happy", - "bug", - "insect", - "antennae" - ], - "info": [ - 75, - 75, - 1 - ] - }, { "name": "Button1", "md5": "7ef67c5bc8cf7df64fdb3b1d6b250f71.svg", @@ -1606,7 +1514,7 @@ }, { "name": "Cake-a", - "md5": "97ab3596dc06510e963fa29795e663bf.svg", + "md5": "e1e8e8a765b8778d6181035c5c66984d.svg", "type": "costume", "tags": [ "food", @@ -1625,7 +1533,7 @@ }, { "name": "Cake-b", - "md5": "61d5481955a2f42cb843d09506f6744e.svg", + "md5": "460268a804e7682c9fabf37e4b70071c.svg", "type": "costume", "tags": [ "food", @@ -1843,17 +1751,20 @@ }, { "name": "Cat2", - "md5": "01ae57fd339529445cb890978ef8a054.svg", + "md5": "3696356a03a8d938318876a593572843.svg", "type": "costume", "tags": [ - "kitty", - "kitten", "animals", - "mammal" + "cat", + "kitten", + "kitty", + "mammal", + "orange", + "scratch cat" ], "info": [ - 87, - 39, + 47, + 55, 1 ] }, @@ -2279,57 +2190,6 @@ 1 ] }, - { - "name": "Creature1-a", - "md5": "a560c6eab2e1de2462bdaeb1d698736c.svg", - "type": "costume", - "tags": [ - "people", - "animals", - "fantasy", - "monsters", - "holiday" - ], - "info": [ - 54, - 80, - 1 - ] - }, - { - "name": "Creature1-b", - "md5": "8042b71fc2ae322151c0a3a163701333.svg", - "type": "costume", - "tags": [ - "people", - "animals", - "fantasy", - "monsters", - "holiday" - ], - "info": [ - 60, - 78, - 1 - ] - }, - { - "name": "Creature1-c", - "md5": "e12a83c8f1c0545b59fe8673e9fac79c.svg", - "type": "costume", - "tags": [ - "people", - "animals", - "fantasy", - "monsters", - "holiday" - ], - "info": [ - 63, - 164, - 1 - ] - }, { "name": "Crystal-a", "md5": "8520264d48537bea17b7f6d18e9bb558.svg", @@ -5267,8 +5127,8 @@ ] }, { - "name": "Horse1-a", - "md5": "32f4d80477cd070cb0848e555d374060.svg", + "name": "Horse-a", + "md5": "83a698304f00242a34ddd63b1525373b.svg", "type": "costume", "tags": [ "animals", @@ -5285,8 +5145,8 @@ ] }, { - "name": "Horse1-b", - "md5": "ffa6431c5ef2a4e975ecffacdb0efea7.svg", + "name": "Horse-b", + "md5": "2e7d212692b46b049a9ebc1224edd990.svg", "type": "costume", "tags": [ "animals", @@ -6770,7 +6630,7 @@ }, { "name": "Muffin-a", - "md5": "e00161f08c77d10e72e44b6e01243e63.svg", + "md5": "18da0857a1b7f1c960146d2b85edd10f.svg", "type": "costume", "tags": [ "food" @@ -6783,7 +6643,7 @@ }, { "name": "Muffin-b", - "md5": "fb60c3f8d6a892813299daa33b91df23.svg", + "md5": "a89f3b99bf4cccfaeb1b39e25633c53c.svg", "type": "costume", "tags": [ "food", @@ -6953,7 +6813,7 @@ }, { "name": "Orange", - "md5": "780ee2ef342f79a81b4c353725331138.svg", + "md5": "27d5dfbadceea215e983d2641ce3e51f.svg", "type": "costume", "tags": [ "food", @@ -6967,7 +6827,7 @@ }, { "name": "Orange2-a", - "md5": "89b11d2a404c3972b65743f743cc968a.svg", + "md5": "8a7d8515df41f83c1326ec3233a3a42a.svg", "type": "costume", "tags": [ "food", @@ -6982,7 +6842,7 @@ }, { "name": "Orange2-b", - "md5": "5f7998e007dfa70e70bbd8d43199ebba.svg", + "md5": "70c7f1822ffdb37157c304273dae9102.svg", "type": "costume", "tags": [ "food", @@ -6995,21 +6855,6 @@ 1 ] }, - { - "name": "Orange2-c", - "md5": "466e9e2d62ee135a2dabd5593e6f8407.svg", - "type": "costume", - "tags": [ - "food", - "fruit", - "eaten" - ], - "info": [ - 49, - 33, - 1 - ] - }, { "name": "Outfielder-a", "md5": "fab7218666ba49eae992664acab53159.svg", @@ -9097,7 +8942,7 @@ }, { "name": "Taco-a", - "md5": "d224b30c54bd4d6000c935938c7f5d7e.svg", + "md5": "d4a2cea411c6030f017f25184562559d.svg", "type": "costume", "tags": [ "food", @@ -9106,14 +8951,14 @@ "delicious" ], "info": [ - 20, + 19, 15, 1 ] }, { "name": "Taco-b", - "md5": "6dee4f866d79e6475d9824ba11973037.svg", + "md5": "cef6f6d7c92fc1f008077319ac12dc5e.svg", "type": "costume", "tags": [ "food", diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index 9cab0013e55..ab5ebbe9880 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -1172,114 +1172,6 @@ "spriteInfo": {} } }, - { - "name": "Bear1", - "md5": "598722f70e86e6f9b23ef97680baaa9c.svg", - "type": "sprite", - "tags": [ - "animal", - "mammal" - ], - "info": [ - 0, - 2, - 1 - ], - "json": { - "objName": "Bear1", - "sounds": [ - { - "soundName": "pop", - "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "bear1-a", - "baseLayerID": -1, - "baseLayerMD5": "598722f70e86e6f9b23ef97680baaa9c.svg", - "bitmapResolution": 1, - "rotationCenterX": 56, - "rotationCenterY": 93 - }, - { - "costumeName": "bear1-b", - "baseLayerID": -1, - "baseLayerMD5": "76ceb0de4409f42713b50cbc1fb45af5.svg", - "bitmapResolution": 1, - "rotationCenterX": 56, - "rotationCenterY": 93 - } - ], - "currentCostumeIndex": 0, - "scratchX": 67, - "scratchY": 40, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, - { - "name": "Bear2", - "md5": "3eb8e16a983ff23c418374389c81bd30.svg", - "type": "sprite", - "tags": [ - "animals", - "bear" - ], - "info": [ - 0, - 2, - 1 - ], - "json": { - "objName": "Bear2", - "sounds": [ - { - "soundName": "pop", - "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "bear2-a", - "baseLayerID": -1, - "baseLayerMD5": "3eb8e16a983ff23c418374389c81bd30.svg", - "bitmapResolution": 1, - "rotationCenterX": 37, - "rotationCenterY": 42 - }, - { - "costumeName": "bear2-b", - "baseLayerID": -1, - "baseLayerMD5": "12bb6960ac01b65ae9b5e5e7f79700ac.svg", - "bitmapResolution": 1, - "rotationCenterX": 51, - "rotationCenterY": 42 - } - ], - "currentCostumeIndex": 0, - "scratchX": -69, - "scratchY": 34, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, { "name": "Beetle", "md5": "e1ce8f153f011fdd52486c91c6ed594d.svg", @@ -1771,7 +1663,7 @@ } }, { - "name": "Butterfly", + "name": "Butterfly 1", "md5": "8419d4851defd1e862e4f7c1699d2190.svg", "type": "sprite", "tags": [ @@ -1787,7 +1679,7 @@ 1 ], "json": { - "objName": "Butterfly", + "objName": "Butterfly 1", "sounds": [ { "soundName": "pop", @@ -1800,7 +1692,7 @@ ], "costumes": [ { - "costumeName": "butterfly-a", + "costumeName": "butterfly1-a", "baseLayerID": -1, "baseLayerMD5": "8419d4851defd1e862e4f7c1699d2190.svg", "bitmapResolution": 1, @@ -1808,7 +1700,7 @@ "rotationCenterY": 49 }, { - "costumeName": "butterfly-b", + "costumeName": "butterfly1-b", "baseLayerID": -1, "baseLayerMD5": "0873714e8d55d9eeb0bc8e8ab64441cc.svg", "bitmapResolution": 1, @@ -1816,7 +1708,7 @@ "rotationCenterY": 49 }, { - "costumeName": "butterfly-c", + "costumeName": "butterfly1-c", "baseLayerID": -1, "baseLayerMD5": "9c422631ca8d46413487f5dd627b65c6.svg", "bitmapResolution": 1, @@ -1836,7 +1728,7 @@ } }, { - "name": "Butterfly1", + "name": "Butterfly 2", "md5": "836d4cc7889f4a1cbcb0303934f31f79.svg", "type": "sprite", "tags": [ @@ -1854,7 +1746,7 @@ 1 ], "json": { - "objName": "Butterfly1", + "objName": "Butterfly 2", "sounds": [ { "soundName": "pop", @@ -1867,7 +1759,7 @@ ], "costumes": [ { - "costumeName": "butterfly1-a", + "costumeName": "butterfly2-a", "baseLayerID": -1, "baseLayerMD5": "836d4cc7889f4a1cbcb0303934f31f79.svg", "bitmapResolution": 1, @@ -1875,7 +1767,7 @@ "rotationCenterY": 75 }, { - "costumeName": "butterfly1-b", + "costumeName": "butterfly2-b", "baseLayerID": -1, "baseLayerMD5": "55dd0671a359d7c35f7b78f4176660e8.svg", "bitmapResolution": 1, @@ -1894,108 +1786,6 @@ "spriteInfo": {} } }, - { - "name": "Butterfly2", - "md5": "a0216895beade6afc6d42bd5bb43faea.svg", - "type": "sprite", - "tags": [ - "animals", - "drawing", - "happy", - "bug", - "insect", - "antennae", - "flappers" - ], - "info": [ - 0, - 1, - 1 - ], - "json": { - "objName": "Butterfly2", - "sounds": [ - { - "soundName": "pop", - "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "butterfly2", - "baseLayerID": -1, - "baseLayerMD5": "a0216895beade6afc6d42bd5bb43faea.svg", - "bitmapResolution": 1, - "rotationCenterX": 75, - "rotationCenterY": 75 - } - ], - "currentCostumeIndex": 0, - "scratchX": 43, - "scratchY": 41, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, - { - "name": "Butterfly3", - "md5": "8907a43cf08b0a9134969023be2074c5.svg", - "type": "sprite", - "tags": [ - "animals", - "drawing", - "happy", - "bug", - "insect", - "antennae", - "flappers" - ], - "info": [ - 0, - 1, - 1 - ], - "json": { - "objName": "Butterfly3", - "sounds": [ - { - "soundName": "pop", - "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "butterfly3", - "baseLayerID": -1, - "baseLayerMD5": "8907a43cf08b0a9134969023be2074c5.svg", - "bitmapResolution": 1, - "rotationCenterX": 75, - "rotationCenterY": 75 - } - ], - "currentCostumeIndex": 0, - "scratchX": 20, - "scratchY": 36, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, { "name": "Button1", "md5": "7ef67c5bc8cf7df64fdb3b1d6b250f71.svg", @@ -2268,7 +2058,7 @@ }, { "name": "Cake", - "md5": "97ab3596dc06510e963fa29795e663bf.svg", + "md5": "e1e8e8a765b8778d6181035c5c66984d.svg", "type": "sprite", "tags": [ "food", @@ -2300,16 +2090,16 @@ "costumes": [ { "costumeName": "cake-a", - "baseLayerID": -1, - "baseLayerMD5": "97ab3596dc06510e963fa29795e663bf.svg", + "baseLayerID": 0, + "baseLayerMD5": "e1e8e8a765b8778d6181035c5c66984d.svg", "bitmapResolution": 1, "rotationCenterX": 64, "rotationCenterY": 50 }, { "costumeName": "cake-b", - "baseLayerID": -1, - "baseLayerMD5": "61d5481955a2f42cb843d09506f6744e.svg", + "baseLayerID": 1, + "baseLayerMD5": "460268a804e7682c9fabf37e4b70071c.svg", "bitmapResolution": 1, "rotationCenterX": 64, "rotationCenterY": 42 @@ -3297,71 +3087,6 @@ "spriteInfo": {} } }, - { - "name": "Creature1", - "md5": "a560c6eab2e1de2462bdaeb1d698736c.svg", - "type": "sprite", - "tags": [ - "people", - "animals", - "fantasy", - "monsters", - "holiday" - ], - "info": [ - 0, - 3, - 1 - ], - "json": { - "objName": "Creature1", - "sounds": [ - { - "soundName": "pop", - "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, - "rate": 11025, - "format": "" - } - ], - "costumes": [ - { - "costumeName": "creature1-a", - "baseLayerID": -1, - "baseLayerMD5": "a560c6eab2e1de2462bdaeb1d698736c.svg", - "bitmapResolution": 1, - "rotationCenterX": 54, - "rotationCenterY": 80 - }, - { - "costumeName": "creature1-b", - "baseLayerID": -1, - "baseLayerMD5": "8042b71fc2ae322151c0a3a163701333.svg", - "bitmapResolution": 1, - "rotationCenterX": 60, - "rotationCenterY": 78 - }, - { - "costumeName": "creature1-c", - "baseLayerID": -1, - "baseLayerMD5": "e12a83c8f1c0545b59fe8673e9fac79c.svg", - "bitmapResolution": 1, - "rotationCenterX": 63, - "rotationCenterY": 164 - } - ], - "currentCostumeIndex": 0, - "scratchX": 153, - "scratchY": 35, - "scale": 1, - "direction": 90, - "rotationStyle": "normal", - "isDraggable": false, - "visible": true, - "spriteInfo": {} - } - }, { "name": "Crystal", "md5": "8520264d48537bea17b7f6d18e9bb558.svg", @@ -7962,8 +7687,8 @@ } }, { - "name": "Horse1", - "md5": "32f4d80477cd070cb0848e555d374060.svg", + "name": "Horse", + "md5": "83a698304f00242a34ddd63b1525373b.svg", "type": "sprite", "tags": [ "animals", @@ -7979,7 +7704,7 @@ 2 ], "json": { - "objName": "Horse1", + "objName": "Horse", "sounds": [ { "soundName": "horse", @@ -8000,17 +7725,17 @@ ], "costumes": [ { - "costumeName": "horse1-a", + "costumeName": "horse-a", "baseLayerID": -1, - "baseLayerMD5": "32f4d80477cd070cb0848e555d374060.svg", + "baseLayerMD5": "83a698304f00242a34ddd63b1525373b.svg", "bitmapResolution": 1, "rotationCenterX": 119, "rotationCenterY": 83 }, { - "costumeName": "horse1-b", + "costumeName": "horse-b", "baseLayerID": -1, - "baseLayerMD5": "ffa6431c5ef2a4e975ecffacdb0efea7.svg", + "baseLayerMD5": "2e7d212692b46b049a9ebc1224edd990.svg", "bitmapResolution": 1, "rotationCenterX": 103, "rotationCenterY": 97 @@ -10077,7 +9802,7 @@ }, { "name": "Muffin", - "md5": "e00161f08c77d10e72e44b6e01243e63.svg", + "md5": "18da0857a1b7f1c960146d2b85edd10f.svg", "type": "sprite", "tags": [ "food" @@ -10103,7 +9828,7 @@ { "costumeName": "muffin-a", "baseLayerID": -1, - "baseLayerMD5": "e00161f08c77d10e72e44b6e01243e63.svg", + "baseLayerMD5": "18da0857a1b7f1c960146d2b85edd10f.svg", "bitmapResolution": 1, "rotationCenterX": 85, "rotationCenterY": 48 @@ -10111,7 +9836,7 @@ { "costumeName": "muffin-b", "baseLayerID": -1, - "baseLayerMD5": "fb60c3f8d6a892813299daa33b91df23.svg", + "baseLayerMD5": "a89f3b99bf4cccfaeb1b39e25633c53c.svg", "bitmapResolution": 1, "rotationCenterX": 85, "rotationCenterY": 48 @@ -10327,7 +10052,7 @@ }, { "name": "Orange", - "md5": "780ee2ef342f79a81b4c353725331138.svg", + "md5": "27d5dfbadceea215e983d2641ce3e51f.svg", "type": "sprite", "tags": [ "food", @@ -10354,7 +10079,7 @@ { "costumeName": "orange", "baseLayerID": -1, - "baseLayerMD5": "780ee2ef342f79a81b4c353725331138.svg", + "baseLayerMD5": "27d5dfbadceea215e983d2641ce3e51f.svg", "bitmapResolution": 1, "rotationCenterX": 19, "rotationCenterY": 18 @@ -10373,7 +10098,7 @@ }, { "name": "Orange2", - "md5": "89b11d2a404c3972b65743f743cc968a.svg", + "md5": "8a7d8515df41f83c1326ec3233a3a42a.svg", "type": "sprite", "tags": [ "food", @@ -10382,7 +10107,7 @@ ], "info": [ 0, - 3, + 2, 1 ], "json": { @@ -10401,7 +10126,7 @@ { "costumeName": "orange2-a", "baseLayerID": -1, - "baseLayerMD5": "89b11d2a404c3972b65743f743cc968a.svg", + "baseLayerMD5": "8a7d8515df41f83c1326ec3233a3a42a.svg", "bitmapResolution": 1, "rotationCenterX": 49, "rotationCenterY": 24 @@ -10409,18 +10134,10 @@ { "costumeName": "orange2-b", "baseLayerID": -1, - "baseLayerMD5": "5f7998e007dfa70e70bbd8d43199ebba.svg", + "baseLayerMD5": "70c7f1822ffdb37157c304273dae9102.svg", "bitmapResolution": 1, "rotationCenterX": 49, "rotationCenterY": 27 - }, - { - "costumeName": "orange2-c", - "baseLayerID": -1, - "baseLayerMD5": "466e9e2d62ee135a2dabd5593e6f8407.svg", - "bitmapResolution": 1, - "rotationCenterX": 49, - "rotationCenterY": 33 } ], "currentCostumeIndex": 0, @@ -13881,7 +13598,7 @@ }, { "name": "Taco", - "md5": "d224b30c54bd4d6000c935938c7f5d7e.svg", + "md5": "d4a2cea411c6030f017f25184562559d.svg", "type": "sprite", "tags": [ "food", @@ -13909,16 +13626,16 @@ "costumes": [ { "costumeName": "taco-a", - "baseLayerID": -1, - "baseLayerMD5": "d224b30c54bd4d6000c935938c7f5d7e.svg", + "baseLayerID": 0, + "baseLayerMD5": "d4a2cea411c6030f017f25184562559d.svg", "bitmapResolution": 1, - "rotationCenterX": 20, + "rotationCenterX": 19, "rotationCenterY": 15 }, { "costumeName": "taco-b", "baseLayerID": -1, - "baseLayerMD5": "6dee4f866d79e6475d9824ba11973037.svg", + "baseLayerMD5": "cef6f6d7c92fc1f008077319ac12dc5e.svg", "bitmapResolution": 1, "rotationCenterX": 56, "rotationCenterY": 15 From 3c9d37f786d07dcb01bbfb2237305ee6d9480126 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Thu, 12 Jul 2018 09:44:02 -0400 Subject: [PATCH 063/159] Various bugfixes to fashion assets --- src/lib/libraries/costumes.json | 23 ++++++++++------------- src/lib/libraries/sprites.json | 16 ++++++++-------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index e2f829d7753..ad3e2176c3d 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -1751,20 +1751,17 @@ }, { "name": "Cat2", - "md5": "3696356a03a8d938318876a593572843.svg", + "md5": "01ae57fd339529445cb890978ef8a054.svg", "type": "costume", "tags": [ - "animals", - "cat", - "kitten", "kitty", - "mammal", - "orange", - "scratch cat" + "kitten", + "animals", + "mammal" ], "info": [ - 47, - 55, + 87, + 39, 1 ] }, @@ -4817,7 +4814,7 @@ }, { "name": "Headband", - "md5": "961148d1605a1bd8ce80ed8d39e831c2.svg", + "md5": "237f77cb3e41c70f714c6d2aa4d38ea1.svg", "type": "costume", "tags": [ "fashion", @@ -8534,7 +8531,7 @@ }, { "name": "Skates", - "md5": "00e5e173400662875a26bb7d6556346a.svg", + "md5": "97936eccad5c8d86ea9008c5bbb50b63.svg", "type": "costume", "tags": [ "fashion", @@ -8542,8 +8539,8 @@ "sports" ], "info": [ - 44, - -21, + 39, + 19, 1 ] }, diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index ab5ebbe9880..c4a7fbae355 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -7213,7 +7213,7 @@ }, { "name": "Headband", - "md5": "961148d1605a1bd8ce80ed8d39e831c2.svg", + "md5": "237f77cb3e41c70f714c6d2aa4d38ea1.svg", "type": "sprite", "tags": [ "fashion", @@ -7239,8 +7239,8 @@ "costumes": [ { "costumeName": "headband", - "baseLayerID": -1, - "baseLayerMD5": "961148d1605a1bd8ce80ed8d39e831c2.svg", + "baseLayerID": 0, + "baseLayerMD5": "237f77cb3e41c70f714c6d2aa4d38ea1.svg", "bitmapResolution": 1, "rotationCenterX": 53, "rotationCenterY": 43 @@ -12732,7 +12732,7 @@ }, { "name": "Skates", - "md5": "00e5e173400662875a26bb7d6556346a.svg", + "md5": "97936eccad5c8d86ea9008c5bbb50b63.svg", "type": "sprite", "tags": [ "fashion", @@ -12760,10 +12760,10 @@ { "costumeName": "skates", "baseLayerID": -1, - "baseLayerMD5": "00e5e173400662875a26bb7d6556346a.svg", + "baseLayerMD5": "97936eccad5c8d86ea9008c5bbb50b63.svg", "bitmapResolution": 1, - "rotationCenterX": 44, - "rotationCenterY": -21 + "rotationCenterX": 39, + "rotationCenterY": 19 } ], "currentCostumeIndex": 0, @@ -13626,7 +13626,7 @@ "costumes": [ { "costumeName": "taco-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "d4a2cea411c6030f017f25184562559d.svg", "bitmapResolution": 1, "rotationCenterX": 19, From fc08333898094bd5c83c5ec3a0630db330e90c23 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 12 Jul 2018 10:08:39 -0400 Subject: [PATCH 064/159] Change "how-to" messages to "tutorial" and update the icon to lightbulb --- src/components/cards/cards.jsx | 8 +++---- src/components/cards/icon--help.svg | 15 ------------ src/components/menu-bar/icon--help.svg | 15 ------------ src/components/menu-bar/menu-bar.css | 4 +--- src/components/menu-bar/menu-bar.jsx | 33 +++++++++++++------------- src/containers/tips-library.jsx | 6 ++--- src/lib/assets/icon--tutorials.svg | 10 ++++++++ test/integration/how-tos.test.js | 2 +- 8 files changed, 36 insertions(+), 57 deletions(-) delete mode 100644 src/components/cards/icon--help.svg delete mode 100644 src/components/menu-bar/icon--help.svg create mode 100644 src/lib/assets/icon--tutorials.svg diff --git a/src/components/cards/cards.jsx b/src/components/cards/cards.jsx index ab01f8ecdf1..dc081ae0b64 100644 --- a/src/components/cards/cards.jsx +++ b/src/components/cards/cards.jsx @@ -8,7 +8,7 @@ import styles from './card.css'; import nextIcon from './icon--next.svg'; import prevIcon from './icon--prev.svg'; -import helpIcon from './icon--help.svg'; +import helpIcon from '../../lib/assets/icon--tutorials.svg'; import closeIcon from '../close-button/icon--close.svg'; const CardHeader = ({onCloseCards, onShowAll, totalSteps, step}) => ( @@ -22,9 +22,9 @@ const CardHeader = ({onCloseCards, onShowAll, totalSteps, step}) => ( src={helpIcon} />
{totalSteps > 1 ? ( diff --git a/src/components/cards/icon--help.svg b/src/components/cards/icon--help.svg deleted file mode 100644 index 436d052874b..00000000000 --- a/src/components/cards/icon--help.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/src/components/menu-bar/icon--help.svg b/src/components/menu-bar/icon--help.svg deleted file mode 100644 index 6974a7f45f8..00000000000 --- a/src/components/menu-bar/icon--help.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/src/components/menu-bar/menu-bar.css b/src/components/menu-bar/menu-bar.css index eba5f885eff..45669f8d6ed 100644 --- a/src/components/menu-bar/menu-bar.css +++ b/src/components/menu-bar/menu-bar.css @@ -151,9 +151,7 @@ } .help-icon { - height: 2rem; - width: 3rem; - margin-top: 0.5rem; + margin-right: 0.35rem; } .account-nav-menu, .mystuff-button { diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index f6399a9ac4b..b843e05b45a 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -31,6 +31,7 @@ import { import styles from './menu-bar.css'; +import helpIcon from '../../lib/assets/icon--tutorials.svg'; import mystuffIcon from './icon--mystuff.png'; import feedbackIcon from './icon--feedback.svg'; import profileIcon from './icon--profile.png'; @@ -40,18 +41,16 @@ import languageIcon from '../language-selector/language-icon.svg'; import scratchLogo from './scratch-logo.svg'; -import helpIcon from './icon--help.svg'; - const ariaMessages = defineMessages({ language: { id: 'gui.menuBar.LanguageSelector', defaultMessage: 'language selector', description: 'accessibility text for the language selection menu' }, - howTo: { - id: 'gui.menuBar.howToLibrary', - defaultMessage: 'How-to Library', - description: 'accessibility text for the how-to library button' + tutorials: { + id: 'gui.menuBar.tutorialsLibrary', + defaultMessage: 'Tutorials', + description: 'accessibility text for the tutorials button' } }); @@ -311,6 +310,18 @@ class MenuBar extends React.Component {
+
+ + +
+
-
- -
+ + + Tutorials + Created with Sketch. + + + + + \ No newline at end of file diff --git a/test/integration/how-tos.test.js b/test/integration/how-tos.test.js index 7a08385e814..67af2edc9b5 100644 --- a/test/integration/how-tos.test.js +++ b/test/integration/how-tos.test.js @@ -27,7 +27,7 @@ describe('Working with the how-to library', () => { await loadUri(uri); await clickXpath('//button[@title="tryit"]'); await clickText('Costumes'); - await clickXpath('//*[@aria-label="How-to Library"]'); + await clickXpath('//*[@aria-label="Choose a Tutorial"]'); await clickText('Getting Started'); // Modal should close // Make sure YouTube video on first card appears await findByXpath('//div[contains(@class, "step-video")]'); From 1dc05352f634da21765cb99efed5922d5378bc33 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Thu, 12 Jul 2018 10:30:29 -0400 Subject: [PATCH 065/159] Minor bug fixes for Devin and Sam --- src/lib/libraries/costumes.json | 21 ++++++++++++--------- src/lib/libraries/sprites.json | 10 +++++----- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index ad3e2176c3d..88cd587e7ae 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -1751,17 +1751,20 @@ }, { "name": "Cat2", - "md5": "01ae57fd339529445cb890978ef8a054.svg", + "md5": "3696356a03a8d938318876a593572843.svg", "type": "costume", "tags": [ - "kitty", - "kitten", "animals", - "mammal" + "cat", + "kitten", + "kitty", + "mammal", + "orange", + "scratch cat" ], "info": [ - 87, - 39, + 47, + 55, 1 ] }, @@ -8246,14 +8249,14 @@ }, { "name": "Sam", - "md5": "34d9a8e7219748da7838a21b3a3a6e82.png", + "md5": "8208e99159b36c957fb9fbc187e51bc7.png", "type": "costume", "tags": [ "people" ], "info": [ - 224, - 360, + 234, + 318, 2 ] }, diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index c4a7fbae355..904d2ae9387 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -12022,7 +12022,7 @@ }, { "name": "Sam", - "md5": "34d9a8e7219748da7838a21b3a3a6e82.png", + "md5": "8208e99159b36c957fb9fbc187e51bc7.png", "type": "sprite", "tags": [ "people" @@ -12048,10 +12048,10 @@ { "costumeName": "sam", "baseLayerID": 0, - "baseLayerMD5": "34d9a8e7219748da7838a21b3a3a6e82.png", + "baseLayerMD5": "8208e99159b36c957fb9fbc187e51bc7.png", "bitmapResolution": 2, - "rotationCenterX": 112, - "rotationCenterY": 180 + "rotationCenterX": 117, + "rotationCenterY": 159 } ], "currentCostumeIndex": 0, @@ -13900,7 +13900,7 @@ "costumes": [ { "costumeName": "tennisball", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "34fa36004be0340ec845ba6bbeb5e5d5.png", "bitmapResolution": 2, "rotationCenterX": 30, From cd73ecec745de6432023a526f9b25f808b8fd30a Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 13 Jun 2018 14:37:50 -0400 Subject: [PATCH 066/159] Add intl polyfill for Safari 9 --- package.json | 1 + src/playground/index.jsx | 3 +++ 2 files changed, 4 insertions(+) diff --git a/package.json b/package.json index 3763149a2e3..13414142d12 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "gh-pages": "github:rschamp/gh-pages#publish-branch-to-subfolder", "html-webpack-plugin": "^3.2.0", "immutable": "3.8.2", + "intl": "1.2.5", "jest": "^21.0.0", "keymirror": "0.1.1", "lodash.bindall": "4.4.0", diff --git a/src/playground/index.jsx b/src/playground/index.jsx index d35785698df..da2be7a2783 100644 --- a/src/playground/index.jsx +++ b/src/playground/index.jsx @@ -1,5 +1,8 @@ +// Polyfills import 'es6-object-assign/auto'; import 'core-js/fn/array/includes'; +import 'intl'; // For Safari 9 + import React from 'react'; import ReactDOM from 'react-dom'; From 2257bac707c36608ed063039d61631fd9375c752 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 12 Jul 2018 10:53:20 -0400 Subject: [PATCH 067/159] Fix integration test --- test/integration/how-tos.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/how-tos.test.js b/test/integration/how-tos.test.js index 67af2edc9b5..5b9b76e4b74 100644 --- a/test/integration/how-tos.test.js +++ b/test/integration/how-tos.test.js @@ -27,7 +27,7 @@ describe('Working with the how-to library', () => { await loadUri(uri); await clickXpath('//button[@title="tryit"]'); await clickText('Costumes'); - await clickXpath('//*[@aria-label="Choose a Tutorial"]'); + await clickXpath('//*[@aria-label="Tutorials"]'); await clickText('Getting Started'); // Modal should close // Make sure YouTube video on first card appears await findByXpath('//div[contains(@class, "step-video")]'); From f171f082f3df6c93b5bfe1675eb42805746467e8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 12 Jul 2018 15:44:24 +0000 Subject: [PATCH 068/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180712144339 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3763149a2e3..90dbffc67e3 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531338038", "scratch-l10n": "3.0.20180703181510", - "scratch-paint": "0.2.0-prerelease.20180711181626", + "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", From 8ff053d72fc3a70bfbafdfaed840eed2da2e13b9 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 12 Jul 2018 15:50:52 +0000 Subject: [PATCH 069/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1531409796 Closes #2602 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3763149a2e3..20e2fd95d46 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531338038", + "scratch-blocks": "0.1.0-prerelease.1531409796", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180711181626", "scratch-render": "0.1.0-prerelease.20180618173030", From 1fec1669dcd922848650706561ce2c4a4f38342a Mon Sep 17 00:00:00 2001 From: carljbowman Date: Thu, 12 Jul 2018 13:44:17 -0400 Subject: [PATCH 070/159] Update Stage Select UI - Make stage look more like a tile element and not flust with the stage info width. - Make the stage select state more apparent --- .../stage-selector/stage-selector.css | 18 ++++++++++++++++-- .../stage-selector/stage-selector.jsx | 4 ++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/components/stage-selector/stage-selector.css b/src/components/stage-selector/stage-selector.css index e845160faee..4e35dd4b68f 100644 --- a/src/components/stage-selector/stage-selector.css +++ b/src/components/stage-selector/stage-selector.css @@ -20,10 +20,12 @@ $header-height: calc($stage-menu-height - 2px); border-style: solid; border-bottom: 0; cursor: pointer; - transition: border-color 0.25s ease-out, box-shadow 0.25s ease-out; + transition: all 0.25s ease; } .stage-selector.is-selected { + border-top-left-radius: .625rem; + border-top-right-radius: .625rem; border-color: $motion-primary; box-shadow: 0px 0px 0px 4px $motion-transparent; } @@ -44,6 +46,7 @@ $header-height: calc($stage-menu-height - 2px); border-top-right-radius: $space; border-bottom: 1px solid $ui-black-transparent; width: 100%; + transition: background-color 0.25s ease; } .header-title { @@ -53,6 +56,15 @@ $header-height: calc($stage-menu-height - 2px); /* @todo: make this a mixin for all UI text labels */ user-select: none; + transition: color 0.25s ease; +} + +.stage-selector.is-selected .header { + background-color: $motion-primary; +} + +.stage-selector.is-selected .header-title { + color: $ui-white; } .count { @@ -71,9 +83,11 @@ $header-height: calc($stage-menu-height - 2px); .costume-canvas { display: block; + margin-top: .25rem; width: 100%; user-select: none; - border-bottom: 1px solid $ui-black-transparent; + border: 1px solid $ui-black-transparent; + border-radius: .25rem; box-shadow: inset 0 0 4px $ui-black-transparent; } diff --git a/src/components/stage-selector/stage-selector.jsx b/src/components/stage-selector/stage-selector.jsx index 9d40d3c249e..50161bf8cbb 100644 --- a/src/components/stage-selector/stage-selector.jsx +++ b/src/components/stage-selector/stage-selector.jsx @@ -80,9 +80,9 @@ const StageSelector = props => { {url ? ( ) : null}
From 15dfc33355854f553c35929005bc68297cbf10c8 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 12 Jul 2018 14:46:01 -0400 Subject: [PATCH 071/159] Add a new "unavailable" step to the connection flow --- .../connection-modal/connection-modal.css | 4 + .../connection-modal/connection-modal.jsx | 5 +- .../connection-modal/icons/scratch-link.png | Bin 0 -> 73188 bytes .../connection-modal/unavailable-step.jsx | 76 ++++++++++++++++++ src/containers/connection-modal.jsx | 15 +++- 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/components/connection-modal/icons/scratch-link.png create mode 100644 src/components/connection-modal/unavailable-step.jsx diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index ee0a0aae1e6..b636b4af9cd 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -183,6 +183,10 @@ align-items: center; } +.scratch-link-icon { + max-width: 150px; +} + .button-row { font-weight: bolder; text-align: center; diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 5ddcb33e3b8..9a77e92f56e 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -9,6 +9,7 @@ import ScanningStep from '../../containers/scanning-step.jsx'; import ConnectingStep from './connecting-step.jsx'; import ConnectedStep from './connected-step.jsx'; import ErrorStep from './error-step.jsx'; +import UnavailableStep from './unavailable-step.jsx'; import styles from './connection-modal.css'; @@ -16,7 +17,8 @@ const PHASES = keyMirror({ scanning: null, connecting: null, connected: null, - error: null + error: null, + unavailable: null }); const ConnectionModalComponent = props => ( @@ -32,6 +34,7 @@ const ConnectionModalComponent = props => ( {props.phase === PHASES.connecting && } {props.phase === PHASES.connected && } {props.phase === PHASES.error && } + {props.phase === PHASES.unavailable && } ); diff --git a/src/components/connection-modal/icons/scratch-link.png b/src/components/connection-modal/icons/scratch-link.png new file mode 100644 index 0000000000000000000000000000000000000000..af7ceed4baac35730f1b803bc9477aa1b4f208a9 GIT binary patch literal 73188 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 q5C4ew|9$vBz4-r82iyx ( + + + +
+ +
+
+
+ +
+ +
+ + + + + +
+
+); + +UnavailableStep.propTypes = { + onHelp: PropTypes.func, + onScanning: PropTypes.func +}; + +export default UnavailableStep; diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index ffb5c6ddf5c..5cb3c242a34 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -57,9 +57,18 @@ class ConnectionModal extends React.Component { } handleError () { this.props.onStatusButtonUpdate(); - this.setState({ - phase: PHASES.error - }); + // Assume errors that come in during scanning phase are the result of not + // having scratch-link installed. + console.log('error', this.state.phase); + if (this.state.phase === PHASES.scanning || this.state.phase === PHASES.unavailable) { + this.setState({ + phase: PHASES.unavailable + }); + } else { + this.setState({ + phase: PHASES.error + }); + } } handleConnected () { this.props.onStatusButtonUpdate(); From 33cb3df1a183ad94f6f2863c74a2d1ee6b5cb12f Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 15:05:02 -0400 Subject: [PATCH 072/159] Choose center based on file type and pass array buffer directly to import bitmap --- src/containers/costume-library.jsx | 7 +++++-- src/containers/costume-tab.jsx | 7 +++++-- src/lib/file-uploader.js | 7 +------ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/containers/costume-library.jsx b/src/containers/costume-library.jsx index 0de5fba13ef..c4884c169a4 100644 --- a/src/containers/costume-library.jsx +++ b/src/containers/costume-library.jsx @@ -26,10 +26,13 @@ class CostumeLibrary extends React.PureComponent { ]); } handleItemSelected (item) { + const type = item.md5.split('.')[1]; + const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; + const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; const vmCostume = { name: item.name, - rotationCenterX: item.info[0] / 2, - rotationCenterY: item.info[1] / 2, + rotationCenterX, + rotationCenterY, bitmapResolution: item.info.length > 2 ? item.info[2] : 1, skinId: null }; diff --git a/src/containers/costume-tab.jsx b/src/containers/costume-tab.jsx index 9cd10ec8b9a..34b64a2ffbf 100644 --- a/src/containers/costume-tab.jsx +++ b/src/containers/costume-tab.jsx @@ -161,11 +161,14 @@ class CostumeTab extends React.Component { } handleSurpriseCostume () { const item = costumeLibraryContent[Math.floor(Math.random() * costumeLibraryContent.length)]; + const type = item.md5.split('.')[1]; + const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; + const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; const vmCostume = { name: item.name, md5: item.md5, - rotationCenterX: item.info[0] / 2, - rotationCenterY: item.info[1] / 2, + rotationCenterX, + rotationCenterY, bitmapResolution: item.info.length > 2 ? item.info[2] : 1, skinId: null }; diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js index 2df9f859390..785b85d43f0 100644 --- a/src/lib/file-uploader.js +++ b/src/lib/file-uploader.js @@ -132,12 +132,7 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle addCostumeFromBuffer(null, new Uint8Array(fileData)); } else { // otherwise it's a bitmap - let dataURI = fileData; - if (fileData instanceof ArrayBuffer) { - dataURI = bitmapAdapter.convertBinaryToDataURI(fileData, fileType); - } - // @todo show an error message to user on failure? - bitmapAdapter.importBitmap(dataURI).then(value => addCostumeFromBuffer(value)); + bitmapAdapter.importBitmap(fileData, fileType).then(value => addCostumeFromBuffer(value)); } }; From f77fb85f3f44439eb8e4b5d46797e0723e416c48 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 12 Jul 2018 15:30:13 -0400 Subject: [PATCH 073/159] Fix linting --- src/containers/connection-modal.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index 5cb3c242a34..3b1a68b3adc 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -59,7 +59,6 @@ class ConnectionModal extends React.Component { this.props.onStatusButtonUpdate(); // Assume errors that come in during scanning phase are the result of not // having scratch-link installed. - console.log('error', this.state.phase); if (this.state.phase === PHASES.scanning || this.state.phase === PHASES.unavailable) { this.setState({ phase: PHASES.unavailable From a2449b7a87e3ccfd6144e5954e2647410b0a8e1f Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum Date: Thu, 12 Jul 2018 15:31:01 -0400 Subject: [PATCH 074/159] Fix micro:bit extension name and description --- src/lib/libraries/extensions/index.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 62da95ea5b0..dfe1416464f 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -115,13 +115,13 @@ export default [ disabled: true }, { - name: 'Micro:bit', + name: 'micro:bit', extensionId: 'microbit', iconURL: microbitImage, description: ( ), From e30e66260c39d7aa30acc347f4f7a999feaeea9a Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 12 Jul 2018 19:43:46 +0000 Subject: [PATCH 075/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1531424474 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 136a6bc41fd..d5237498b25 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531409796", + "scratch-blocks": "0.1.0-prerelease.1531424474", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", From 2848fa4e0898c77b820d91be5f42e427153e5d0c Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 12 Jul 2018 19:55:53 +0000 Subject: [PATCH 076/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180712195436 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 136a6bc41fd..2a50d587be7 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531409796", "scratch-l10n": "3.0.20180703181510", - "scratch-paint": "0.2.0-prerelease.20180712144339", + "scratch-paint": "0.2.0-prerelease.20180712195436", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", From 955f328d1bf4f9bdf03a6646537cc03459d85dbf Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 15:57:23 -0400 Subject: [PATCH 077/159] Split safely --- src/containers/costume-library.jsx | 3 ++- src/containers/costume-tab.jsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/containers/costume-library.jsx b/src/containers/costume-library.jsx index c4884c169a4..070c9f4b942 100644 --- a/src/containers/costume-library.jsx +++ b/src/containers/costume-library.jsx @@ -26,7 +26,8 @@ class CostumeLibrary extends React.PureComponent { ]); } handleItemSelected (item) { - const type = item.md5.split('.')[1]; + const split = item.md5.split('.'); + const type = split.length > 1 ? split[1] : null; const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; const vmCostume = { diff --git a/src/containers/costume-tab.jsx b/src/containers/costume-tab.jsx index 34b64a2ffbf..454c5ffcef7 100644 --- a/src/containers/costume-tab.jsx +++ b/src/containers/costume-tab.jsx @@ -161,7 +161,8 @@ class CostumeTab extends React.Component { } handleSurpriseCostume () { const item = costumeLibraryContent[Math.floor(Math.random() * costumeLibraryContent.length)]; - const type = item.md5.split('.')[1]; + const split = item.md5.split('.'); + const type = split.length > 1 ? split[1] : null; const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; const vmCostume = { From 845f068df2ed6d79a16b404a68737cce665c9558 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 12 Jul 2018 20:08:29 +0000 Subject: [PATCH 078/159] chore(package): update scratch-l10n to version 3.0.20180712200642 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 136a6bc41fd..bddcd6f5a3a 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531409796", - "scratch-l10n": "3.0.20180703181510", + "scratch-l10n": "3.0.20180712200642", "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", From 34e764c96cf042f96aa3c08a6cc88eb07bc0bddb Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 16:46:04 -0400 Subject: [PATCH 079/159] Don't try to convert to binary twice --- src/lib/file-uploader.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js index 785b85d43f0..a5805c1c851 100644 --- a/src/lib/file-uploader.js +++ b/src/lib/file-uploader.js @@ -113,13 +113,13 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle } const bitmapAdapter = new BitmapAdapter(); - const addCostumeFromBuffer = function (dataURI) { + const addCostumeFromBuffer = function (dataBuffer) { const vmCostume = cacheAsset( storage, costumeName, assetType, costumeFormat, - bitmapAdapter.convertDataURIToBinary(dataURI) + dataBuffer ); handleCostume(vmCostume); }; @@ -132,7 +132,7 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle addCostumeFromBuffer(null, new Uint8Array(fileData)); } else { // otherwise it's a bitmap - bitmapAdapter.importBitmap(fileData, fileType).then(value => addCostumeFromBuffer(value)); + bitmapAdapter.importBitmap(fileData, fileType).then(addCostumeFromBuffer); } }; From 397828243581599c0412ecf18e0d0a4d69e523a6 Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 16:48:07 -0400 Subject: [PATCH 080/159] Correct call to addCostumeFromBuffer for svgs --- src/lib/file-uploader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js index a5805c1c851..a0690f2b0bc 100644 --- a/src/lib/file-uploader.js +++ b/src/lib/file-uploader.js @@ -129,7 +129,7 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle // passing in an array buffer causes the sprite/costume // thumbnails to not display because the data URI for the costume // is invalid - addCostumeFromBuffer(null, new Uint8Array(fileData)); + addCostumeFromBuffer(new Uint8Array(fileData)); } else { // otherwise it's a bitmap bitmapAdapter.importBitmap(fileData, fileType).then(addCostumeFromBuffer); From ce070fe0fba8b930affca7d13c54f12d640f3307 Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 17:17:50 -0400 Subject: [PATCH 081/159] Catch errors in load costume --- src/lib/file-uploader.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/file-uploader.js b/src/lib/file-uploader.js index a0690f2b0bc..53d0ab8f651 100644 --- a/src/lib/file-uploader.js +++ b/src/lib/file-uploader.js @@ -132,7 +132,10 @@ const costumeUpload = function (fileData, fileType, costumeName, storage, handle addCostumeFromBuffer(new Uint8Array(fileData)); } else { // otherwise it's a bitmap - bitmapAdapter.importBitmap(fileData, fileType).then(addCostumeFromBuffer); + bitmapAdapter.importBitmap(fileData, fileType).then(addCostumeFromBuffer) + .catch(e => { + log.error(e); + }); } }; From f59d0283623e8377c6b21eb258e214183f32be69 Mon Sep 17 00:00:00 2001 From: DD Liu Date: Thu, 12 Jul 2018 19:00:56 -0400 Subject: [PATCH 082/159] add dependencies --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 136a6bc41fd..b95d1147923 100644 --- a/package.json +++ b/package.json @@ -101,8 +101,8 @@ "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", - "scratch-svg-renderer": "0.2.0-prerelease.20180618172917", - "scratch-vm": "0.1.0-prerelease.1531340421", + "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", + "scratch-vm": "0.1.0-prerelease.1531436232", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From f3a2d533326a84142f0ab3fb2994b09f9db2e822 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Thu, 12 Jul 2018 19:14:09 -0400 Subject: [PATCH 083/159] Fix rename variable bug by always passing additionalVars to the scratch-blocks prompt callback. Let scratch-blocks decide whether or not to use the additional vars based on whether the variable is local or global. --- src/containers/blocks.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index c81c5d21ad6..1de665e3342 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -366,9 +366,10 @@ class Blocks extends React.Component { this.ScratchBlocks.refreshStatusButtons(this.workspace); } handlePromptCallback (input, optionSelection) { - this.state.prompt.callback(input, optionSelection, - (optionSelection === 'local') ? [] : - this.props.vm.runtime.getAllVarNamesOfType(this.state.prompt.varType)); + this.state.prompt.callback( + input, + this.props.vm.runtime.getAllVarNamesOfType(this.state.prompt.varType), + optionSelection); this.handlePromptClose(); } handlePromptClose () { From 4b43e25dced19a83c9fb3a1c65a63fdfbfe344c5 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 13 Jul 2018 00:02:38 +0000 Subject: [PATCH 084/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1531439997 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c9fece77f42..261fb22fd39 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531424474", + "scratch-blocks": "0.1.0-prerelease.1531439997", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", From 58587ed2e98d33027a1bb7ba007512ce399d2298 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 13 Jul 2018 11:58:38 +0000 Subject: [PATCH 085/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1531482946 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 261fb22fd39..382a27dd0b4 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531439997", + "scratch-blocks": "0.1.0-prerelease.1531482946", "scratch-l10n": "3.0.20180703181510", "scratch-paint": "0.2.0-prerelease.20180712144339", "scratch-render": "0.1.0-prerelease.20180618173030", From 61ec093388fa6ebd02974a9c39b3a462cc859c2d Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Fri, 13 Jul 2018 08:58:38 -0400 Subject: [PATCH 086/159] Update scratch vm to include promise reporter fixes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 042f14655bd..1b589d22840 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.1.0-prerelease.1531436232", + "scratch-vm": "0.1.0-prerelease.1531486395", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 685b208a0a8b3023fbeb72630bf9f427d74be3a8 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Fri, 13 Jul 2018 09:17:28 -0400 Subject: [PATCH 087/159] Do not skip safari 9 browser test because it works now --- test/smoke/browser.test.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/smoke/browser.test.js b/test/smoke/browser.test.js index b822cd1b165..aa894a05578 100644 --- a/test/smoke/browser.test.js +++ b/test/smoke/browser.test.js @@ -38,8 +38,7 @@ describe('Smoke tests on older browsers', () => { return expect(isDisplayed).toEqual(true); }); - // Safari 9 has always been blank screened due to lack of Intl polyfill - test.skip('Safari 9 should not be unsupported', async () => { + test('Safari 9 should be supported', async () => { const driverConfig = { browserName: 'safari', platform: 'OS X 10.11', @@ -55,7 +54,7 @@ describe('Smoke tests on older browsers', () => { return expect(isDisplayed).toEqual(true); }); - test('Safari 10 should not be unsupported', async () => { + test('Safari 10 should be supported', async () => { const driverConfig = { browserName: 'safari', platform: 'OS X 10.11', From 88480813daa177f2316000bce11f24c13ad3ea1c Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 10:43:07 -0400 Subject: [PATCH 088/159] Fixed bat sprite / costumes --- src/lib/libraries/costumes.json | 24 +++++++++++------------ src/lib/libraries/sprites.json | 34 ++++++++++++++++----------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index 88cd587e7ae..ea26066ea76 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -659,7 +659,7 @@ }, { "name": "Bat-a", - "md5": "a68f7a0b2af7514c729bb083d04dbbde.svg", + "md5": "3b6274510488d5b26447c1c266475801.svg", "type": "costume", "tags": [ "fantasy", @@ -670,14 +670,14 @@ "alex eben meyer" ], "info": [ - 51, - 47, + 65, + 61, 1 ] }, { "name": "Bat-b", - "md5": "4ea5bb61370e189d2eba763312680201.svg", + "md5": "8b20987d450379a445cbfc41ff2a3874.svg", "type": "costume", "tags": [ "fantasy", @@ -688,14 +688,14 @@ "alex eben meyer" ], "info": [ - 51, - 47, + 65, + 61, 1 ] }, { "name": "Bat-c", - "md5": "9ed4deead22db511202f38abadf508c4.svg", + "md5": "c6d6a6892638e489902fbba803050de1.svg", "type": "costume", "tags": [ "fantasy", @@ -706,14 +706,14 @@ "alex eben meyer" ], "info": [ - 51, - 47, + 65, + 61, 1 ] }, { "name": "Bat-d", - "md5": "293a7b03badd2f3b49e50acfb9c242ec.svg", + "md5": "e3da64838b2c74b6dd9a080b030e327e.svg", "type": "costume", "tags": [ "fantasy", @@ -724,8 +724,8 @@ "alex eben meyer" ], "info": [ - 51, - 47, + 65, + 61, 1 ] }, diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index 904d2ae9387..d7cc0ce8819 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -822,7 +822,7 @@ }, { "name": "Bat", - "md5": "a68f7a0b2af7514c729bb083d04dbbde.svg", + "md5": "3b6274510488d5b26447c1c266475801.svg", "type": "sprite", "tags": [ "fantasy", @@ -853,39 +853,39 @@ { "costumeName": "bat-a", "baseLayerID": -1, - "baseLayerMD5": "a68f7a0b2af7514c729bb083d04dbbde.svg", + "baseLayerMD5": "3b6274510488d5b26447c1c266475801.svg", "bitmapResolution": 1, - "rotationCenterX": 51, - "rotationCenterY": 47 + "rotationCenterX": 65, + "rotationCenterY": 61 }, { "costumeName": "bat-b", "baseLayerID": -1, - "baseLayerMD5": "4ea5bb61370e189d2eba763312680201.svg", + "baseLayerMD5": "8b20987d450379a445cbfc41ff2a3874.svg", "bitmapResolution": 1, - "rotationCenterX": 51, - "rotationCenterY": 47 + "rotationCenterX": 65, + "rotationCenterY": 61 }, { "costumeName": "bat-c", "baseLayerID": -1, - "baseLayerMD5": "9ed4deead22db511202f38abadf508c4.svg", + "baseLayerMD5": "c6d6a6892638e489902fbba803050de1.svg", "bitmapResolution": 1, - "rotationCenterX": 51, - "rotationCenterY": 47 + "rotationCenterX": 65, + "rotationCenterY": 61 }, { "costumeName": "bat-d", "baseLayerID": -1, - "baseLayerMD5": "293a7b03badd2f3b49e50acfb9c242ec.svg", + "baseLayerMD5": "e3da64838b2c74b6dd9a080b030e327e.svg", "bitmapResolution": 1, - "rotationCenterX": 51, - "rotationCenterY": 47 + "rotationCenterX": 65, + "rotationCenterY": 61 } ], "currentCostumeIndex": 0, - "scratchX": -39, - "scratchY": 121, + "scratchX": -48, + "scratchY": 109, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -5457,8 +5457,8 @@ } ], "currentCostumeIndex": 0, - "scratchX": -110, - "scratchY": -24, + "scratchX": -115, + "scratchY": -46, "scale": 1, "direction": 90, "rotationStyle": "normal", From e87d77d0c92c429b53617ce7dbeb440f8f39fa99 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 10:54:55 -0400 Subject: [PATCH 089/159] Rename "Jamie" sprite to "Jamal" and clean-up cats --- src/lib/libraries/costumes.json | 24 ++++++++++++++++++++---- src/lib/libraries/sprites.json | 24 ++++++++++++------------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index ea26066ea76..bb076a0944e 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -1697,6 +1697,22 @@ 2 ] }, + { + "name": "Cat 2", + "md5": "01ae57fd339529445cb890978ef8a054.svg", + "type": "costume", + "tags": [ + "kitty", + "kitten", + "animals", + "mammal" + ], + "info": [ + 87, + 39, + 1 + ] + }, { "name": "Cat1", "md5": "09dc888b0b7df19f70d81588ae73420e.svg", @@ -5254,7 +5270,7 @@ ] }, { - "name": "Jamie-a", + "name": "Jamal-a", "md5": "90f9166fe6500d0c0caad8b1964d6b74.svg", "type": "costume", "tags": [ @@ -5270,7 +5286,7 @@ ] }, { - "name": "Jamie-b", + "name": "Jamal-b", "md5": "c3d96ef7e99440c2fa76effce1235d3f.svg", "type": "costume", "tags": [ @@ -5286,7 +5302,7 @@ ] }, { - "name": "Jamie-c", + "name": "Jamal-c", "md5": "1fb8b9ca79f2c0a327913bd647b53fe5.svg", "type": "costume", "tags": [ @@ -5302,7 +5318,7 @@ ] }, { - "name": "Jamie-d", + "name": "Jamal-d", "md5": "4adb87e6123161fcaf02f7ac022a5757.svg", "type": "costume", "tags": [ diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index d7cc0ce8819..d96368cc46a 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -810,8 +810,8 @@ } ], "currentCostumeIndex": 0, - "scratchX": 77, - "scratchY": -115, + "scratchX": 202, + "scratchY": -108, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -2090,7 +2090,7 @@ "costumes": [ { "costumeName": "cake-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "e1e8e8a765b8778d6181035c5c66984d.svg", "bitmapResolution": 1, "rotationCenterX": 64, @@ -2098,7 +2098,7 @@ }, { "costumeName": "cake-b", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "460268a804e7682c9fabf37e4b70071c.svg", "bitmapResolution": 1, "rotationCenterX": 64, @@ -2456,7 +2456,7 @@ ], "costumes": [ { - "costumeName": "cat2", + "costumeName": "cat 2", "baseLayerID": -1, "baseLayerMD5": "01ae57fd339529445cb890978ef8a054.svg", "bitmapResolution": 1, @@ -7239,7 +7239,7 @@ "costumes": [ { "costumeName": "headband", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "237f77cb3e41c70f714c6d2aa4d38ea1.svg", "bitmapResolution": 1, "rotationCenterX": 53, @@ -7846,7 +7846,7 @@ } }, { - "name": "Jamie", + "name": "Jamal", "md5": "90f9166fe6500d0c0caad8b1964d6b74.svg", "type": "sprite", "tags": [ @@ -7861,7 +7861,7 @@ 1 ], "json": { - "objName": "Jamie", + "objName": "Jamal", "sounds": [ { "soundName": "pop", @@ -7874,7 +7874,7 @@ ], "costumes": [ { - "costumeName": "jamie-a", + "costumeName": "jamal-a", "baseLayerID": -1, "baseLayerMD5": "90f9166fe6500d0c0caad8b1964d6b74.svg", "bitmapResolution": 1, @@ -7882,7 +7882,7 @@ "rotationCenterY": 105 }, { - "costumeName": "jamie-b", + "costumeName": "jamal-b", "baseLayerID": -1, "baseLayerMD5": "c3d96ef7e99440c2fa76effce1235d3f.svg", "bitmapResolution": 1, @@ -7890,7 +7890,7 @@ "rotationCenterY": 105 }, { - "costumeName": "jamie-c", + "costumeName": "jamal-c", "baseLayerID": -1, "baseLayerMD5": "1fb8b9ca79f2c0a327913bd647b53fe5.svg", "bitmapResolution": 1, @@ -7898,7 +7898,7 @@ "rotationCenterY": 105 }, { - "costumeName": "jamie-d", + "costumeName": "jamal-d", "baseLayerID": -1, "baseLayerMD5": "4adb87e6123161fcaf02f7ac022a5757.svg", "bitmapResolution": 1, From 19c9c069afbfb2864f0a60f1f2697396b1fb409f Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 10:55:03 -0400 Subject: [PATCH 090/159] Sync sound library --- src/lib/libraries/sounds.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/libraries/sounds.json b/src/lib/libraries/sounds.json index f62f90b0291..15934e35743 100644 --- a/src/lib/libraries/sounds.json +++ b/src/lib/libraries/sounds.json @@ -1118,6 +1118,14 @@ "electronic" ] }, + { + "name": "Dance Celebrate2", + "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav", + "sampleCount": 176401, + "rate": 22050, + "format": "adpcm", + "tags": [] + }, { "name": "Dance Chill Out", "md5": "b235da45581b1f212c9e9cce70d2a2dc.wav", From e2afe75cb7b7138468353e17c8f50529f23a94c7 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 10:55:53 -0400 Subject: [PATCH 091/159] Clean-up cat assets --- src/lib/libraries/costumes.json | 38 +++++++-------- src/lib/libraries/sprites.json | 82 ++++++++++++++++----------------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index bb076a0944e..630e8b05c20 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -1714,59 +1714,59 @@ ] }, { - "name": "Cat1", - "md5": "09dc888b0b7df19f70d81588ae73420e.svg", + "name": "Cat Flying-a", + "md5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", "type": "costume", "tags": [ "animals", "cat", - "kitten", "kitty", - "mammal", - "orange", - "scratch cat" + "kitten" ], "info": [ - 47, - 55, + 67, + 48, 1 ] }, { - "name": "Cat1 Flying-a", - "md5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", + "name": "Cat Flying-b", + "md5": "0d192725870ef0eda50d91cab0e3c9c5.svg", "type": "costume", "tags": [ "animals", + "flying", "cat", "kitty", "kitten" ], "info": [ - 67, - 48, + 42, + 44, 1 ] }, { - "name": "Cat1 Flying-b", - "md5": "0d192725870ef0eda50d91cab0e3c9c5.svg", + "name": "Cat-a", + "md5": "09dc888b0b7df19f70d81588ae73420e.svg", "type": "costume", "tags": [ "animals", - "flying", "cat", + "kitten", "kitty", - "kitten" + "mammal", + "orange", + "scratch cat" ], "info": [ - 42, - 44, + 47, + 55, 1 ] }, { - "name": "Cat2", + "name": "Cat-b", "md5": "3696356a03a8d938318876a593572843.svg", "type": "costume", "tags": [ diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index d96368cc46a..a8fceb54ccd 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -2343,7 +2343,7 @@ ], "costumes": [ { - "costumeName": "cat1", + "costumeName": "cat-a", "baseLayerID": -1, "baseLayerMD5": "09dc888b0b7df19f70d81588ae73420e.svg", "bitmapResolution": 1, @@ -2351,7 +2351,7 @@ "rotationCenterY": 55 }, { - "costumeName": "cat2", + "costumeName": "cat-b", "baseLayerID": -1, "baseLayerMD5": "3696356a03a8d938318876a593572843.svg", "bitmapResolution": 1, @@ -2371,53 +2371,46 @@ } }, { - "name": "Cat1 Flying", - "md5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", + "name": "Cat 2", + "md5": "01ae57fd339529445cb890978ef8a054.svg", "type": "sprite", "tags": [ - "animals", "cat", "kitty", - "kitten" + "kitten", + "animal", + "mammal" ], "info": [ 0, - 2, + 1, 1 ], "json": { - "objName": "Cat1 Flying", + "objName": "Cat 2", "sounds": [ { - "soundName": "pop", + "soundName": "meow2", "soundID": -1, - "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", - "sampleCount": 258, + "md5": "cf51a0c4088942d95bcc20af13202710.wav", + "sampleCount": 6512, "rate": 11025, "format": "" } ], "costumes": [ { - "costumeName": "cat1 flying-a", - "baseLayerID": -1, - "baseLayerMD5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", - "bitmapResolution": 1, - "rotationCenterX": 67, - "rotationCenterY": 48 - }, - { - "costumeName": "cat1 flying-b", + "costumeName": "cat 2", "baseLayerID": -1, - "baseLayerMD5": "0d192725870ef0eda50d91cab0e3c9c5.svg", + "baseLayerMD5": "01ae57fd339529445cb890978ef8a054.svg", "bitmapResolution": 1, - "rotationCenterX": 42, - "rotationCenterY": 44 + "rotationCenterX": 87, + "rotationCenterY": 39 } ], "currentCostumeIndex": 0, - "scratchX": -53, - "scratchY": -14, + "scratchX": -71, + "scratchY": 1, "scale": 1, "direction": 90, "rotationStyle": "normal", @@ -2427,46 +2420,53 @@ } }, { - "name": "Cat2", - "md5": "01ae57fd339529445cb890978ef8a054.svg", + "name": "Cat Flying", + "md5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", "type": "sprite", "tags": [ + "animals", "cat", "kitty", - "kitten", - "animal", - "mammal" + "kitten" ], "info": [ 0, - 1, + 2, 1 ], "json": { - "objName": "Cat2", + "objName": "Cat Flying", "sounds": [ { - "soundName": "meow2", + "soundName": "pop", "soundID": -1, - "md5": "cf51a0c4088942d95bcc20af13202710.wav", - "sampleCount": 6512, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, "rate": 11025, "format": "" } ], "costumes": [ { - "costumeName": "cat 2", + "costumeName": "cat flying-a", "baseLayerID": -1, - "baseLayerMD5": "01ae57fd339529445cb890978ef8a054.svg", + "baseLayerMD5": "1e81725d2d2c7de4a2dd4a145198a43c.svg", "bitmapResolution": 1, - "rotationCenterX": 87, - "rotationCenterY": 39 + "rotationCenterX": 67, + "rotationCenterY": 48 + }, + { + "costumeName": "cat flying-b", + "baseLayerID": -1, + "baseLayerMD5": "0d192725870ef0eda50d91cab0e3c9c5.svg", + "bitmapResolution": 1, + "rotationCenterX": 42, + "rotationCenterY": 44 } ], "currentCostumeIndex": 0, - "scratchX": -71, - "scratchY": 1, + "scratchX": -53, + "scratchY": -14, "scale": 1, "direction": 90, "rotationStyle": "normal", From 803f1b808adb3ee29ff5727403de47465fe6bdd6 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 13 Jul 2018 15:02:39 +0000 Subject: [PATCH 092/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180713150122 Closes #2616 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b589d22840..8edaa72a48b 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531482946", "scratch-l10n": "3.0.20180712200642", - "scratch-paint": "0.2.0-prerelease.20180712195436", + "scratch-paint": "0.2.0-prerelease.20180713150122", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", From a08d0cb2435b0753b13046570d49b663b6612322 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 11:34:04 -0400 Subject: [PATCH 093/159] Fix issue with first costume of D-Money --- src/lib/libraries/costumes.json | 12 +++---- src/lib/libraries/sprites.json | 58 ++++++++++++++++----------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index 630e8b05c20..9412630c21b 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -2855,16 +2855,16 @@ }, { "name": "Dm Stance", - "md5": "b30a60d31aebead577b73affd22bf30f.svg", + "md5": "09dc9d82f097edfc6b2b6e4b5009c5f6.png", "type": "costume", "tags": [ "people", "dance" ], "info": [ - 55, - 119, - 1 + 212, + 476, + 2 ] }, { @@ -2883,7 +2883,7 @@ }, { "name": "Dm Top R Leg", - "md5": "6cea0c29c460e571226cc4cff5b97c28.png", + "md5": "12db59633a1709a2c39534d35263791f.png", "type": "costume", "tags": [ "people", @@ -2908,7 +2908,7 @@ }, { "name": "Dm Top Stand", - "md5": "051c36758b9fd1136b511efc5dd6234a.png", + "md5": "a22da98e5e63de7b2883355afd0184f0.png", "type": "costume", "tags": [ "people", diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index a8fceb54ccd..7ceb29b3c1e 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -3144,7 +3144,7 @@ }, { "name": "D-Money Dance", - "md5": "b30a60d31aebead577b73affd22bf30f.svg", + "md5": "09dc9d82f097edfc6b2b6e4b5009c5f6.png", "type": "sprite", "tags": [ "people", @@ -3171,23 +3171,23 @@ { "costumeName": "dm stance", "baseLayerID": -1, - "baseLayerMD5": "b30a60d31aebead577b73affd22bf30f.svg", - "bitmapResolution": 1, - "rotationCenterX": 55, - "rotationCenterY": 119 + "baseLayerMD5": "09dc9d82f097edfc6b2b6e4b5009c5f6.png", + "bitmapResolution": 2, + "rotationCenterX": 106, + "rotationCenterY": 238 }, { "costumeName": "dm top stand", - "baseLayerID": -1, - "baseLayerMD5": "051c36758b9fd1136b511efc5dd6234a.png", + "baseLayerID": 0, + "baseLayerMD5": "a22da98e5e63de7b2883355afd0184f0.png", "bitmapResolution": 2, "rotationCenterX": 82, "rotationCenterY": 244 }, { "costumeName": "dm top R leg", - "baseLayerID": -1, - "baseLayerMD5": "6cea0c29c460e571226cc4cff5b97c28.png", + "baseLayerID": 1, + "baseLayerMD5": "12db59633a1709a2c39534d35263791f.png", "bitmapResolution": 2, "rotationCenterX": 218, "rotationCenterY": 232 @@ -7458,7 +7458,7 @@ "costumes": [ { "costumeName": "hedgehog-a", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "32416e6b2ef8e45fb5fd10778c1b9a9f.svg", "bitmapResolution": 1, "rotationCenterX": 71, @@ -7466,7 +7466,7 @@ }, { "costumeName": "hedgehog-b", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "4d3ccc06660e07b55bd38246e1f82f7f.svg", "bitmapResolution": 1, "rotationCenterX": 71, @@ -7474,7 +7474,7 @@ }, { "costumeName": "hedgehog-c", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "2446f79c0f553594cfbcdbe6b1e459a5.svg", "bitmapResolution": 1, "rotationCenterX": 71, @@ -7482,7 +7482,7 @@ }, { "costumeName": "hedgehog-d", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "bdb7c8e86125092da0c4848d1ffd901c.svg", "bitmapResolution": 1, "rotationCenterX": 71, @@ -7490,7 +7490,7 @@ }, { "costumeName": "hedgehog-e", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "78a0e3789f6d778e20f9bf3d308a0b19.svg", "bitmapResolution": 1, "rotationCenterX": 61, @@ -8224,7 +8224,7 @@ }, { "costumeName": "jo top L leg", - "baseLayerID": 0, + "baseLayerID": -1, "baseLayerMD5": "a12f40b18067bb31746f9cf461de88aa.png", "bitmapResolution": 2, "rotationCenterX": 208, @@ -8232,7 +8232,7 @@ }, { "costumeName": "jo top R cross", - "baseLayerID": 1, + "baseLayerID": -1, "baseLayerMD5": "c2d5519e8a0f2214ff757117038c28dc.png", "bitmapResolution": 2, "rotationCenterX": 144, @@ -8240,7 +8240,7 @@ }, { "costumeName": "jo top L cross", - "baseLayerID": 2, + "baseLayerID": -1, "baseLayerMD5": "2e2a6534d33883fdd2f8471a1adbebb7.png", "bitmapResolution": 2, "rotationCenterX": 84, @@ -8248,7 +8248,7 @@ }, { "costumeName": "jo pop front", - "baseLayerID": 3, + "baseLayerID": -1, "baseLayerMD5": "3d3ea804243800981acabc7caba10939.png", "bitmapResolution": 2, "rotationCenterX": 70, @@ -8256,7 +8256,7 @@ }, { "costumeName": "jo pop down", - "baseLayerID": 4, + "baseLayerID": -1, "baseLayerMD5": "a55fbb529c10f70bcb374aef8a63571b.png", "bitmapResolution": 2, "rotationCenterX": 68, @@ -8264,7 +8264,7 @@ }, { "costumeName": "jo pop left", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "ea812b4c2b2405aa2b73158023298f71.png", "bitmapResolution": 2, "rotationCenterX": 196, @@ -8272,7 +8272,7 @@ }, { "costumeName": "jo pop right", - "baseLayerID": 6, + "baseLayerID": -1, "baseLayerMD5": "01dd2f553c7262329ebaba2516e3a2b1.png", "bitmapResolution": 2, "rotationCenterX": 66, @@ -8280,7 +8280,7 @@ }, { "costumeName": "jo pop L arm", - "baseLayerID": 7, + "baseLayerID": -1, "baseLayerMD5": "a9fbc01a4124d555da12630312e46197.png", "bitmapResolution": 2, "rotationCenterX": 108, @@ -8288,7 +8288,7 @@ }, { "costumeName": "jo pop stand", - "baseLayerID": 8, + "baseLayerID": -1, "baseLayerMD5": "75ee2383fd83992b401c8a0730521d94.png", "bitmapResolution": 2, "rotationCenterX": 78, @@ -8296,7 +8296,7 @@ }, { "costumeName": "jo pop R arm", - "baseLayerID": 9, + "baseLayerID": -1, "baseLayerMD5": "a35a3bbc4e21ce2f5de940adb7017fa6.png", "bitmapResolution": 2, "rotationCenterX": 108, @@ -11333,7 +11333,7 @@ "costumes": [ { "costumeName": "rabbit-a", - "baseLayerID": 5, + "baseLayerID": -1, "baseLayerMD5": "2f42891c3f3d63c0e591aeabc5946533.svg", "bitmapResolution": 1, "rotationCenterX": 84, @@ -11341,7 +11341,7 @@ }, { "costumeName": "rabbit-b", - "baseLayerID": 6, + "baseLayerID": -1, "baseLayerMD5": "80e05ff501040cdc9f52fa6782e06fd2.svg", "bitmapResolution": 1, "rotationCenterX": 84, @@ -11349,7 +11349,7 @@ }, { "costumeName": "rabbit-c", - "baseLayerID": 7, + "baseLayerID": -1, "baseLayerMD5": "88ed8b7925baa025b6c7fc628a64b9b1.svg", "bitmapResolution": 1, "rotationCenterX": 84, @@ -11357,7 +11357,7 @@ }, { "costumeName": "rabbit-d", - "baseLayerID": 8, + "baseLayerID": -1, "baseLayerMD5": "5f3b8df4d6ab8a72e887f89f554db0be.svg", "bitmapResolution": 1, "rotationCenterX": 84, @@ -11365,7 +11365,7 @@ }, { "costumeName": "rabbit-e", - "baseLayerID": 9, + "baseLayerID": -1, "baseLayerMD5": "3003f1135f4aa3b6c361734243621260.svg", "bitmapResolution": 1, "rotationCenterX": 84, From 07a679d19e50a21f5c78f139fe8ecdddf3529788 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Fri, 13 Jul 2018 12:51:32 -0400 Subject: [PATCH 094/159] Provide a from target id when sharing blocks to another target so that variable conflicts can be resolved. --- src/containers/target-pane.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx index 5f9fef8db72..a116b3c0788 100644 --- a/src/containers/target-pane.jsx +++ b/src/containers/target-pane.jsx @@ -126,7 +126,7 @@ class TargetPane extends React.Component { } handleBlockDragEnd (blocks) { if (this.props.hoveredTarget.sprite && this.props.hoveredTarget.sprite !== this.props.editingTarget) { - this.props.vm.shareBlocksToTarget(blocks, this.props.hoveredTarget.sprite); + this.props.vm.shareBlocksToTarget(blocks, this.props.hoveredTarget.sprite, this.props.editingTarget); this.props.onReceivedBlocks(true); } } From 4c0443a3d02c383794bc93ff9b7f803e84914387 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Fri, 13 Jul 2018 13:34:10 -0400 Subject: [PATCH 095/159] Update vm again, bringing in variable updates --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b589d22840..23701739cda 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.1.0-prerelease.1531486395", + "scratch-vm": "0.1.0-prerelease.1531502959", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From f9aa86ddfe07b1c7637a4282806fe95fbedb7721 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 13:34:37 -0400 Subject: [PATCH 096/159] Fix spelling on dinosaur backdrop --- src/lib/libraries/backdrops.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/libraries/backdrops.json b/src/lib/libraries/backdrops.json index 14f82655b64..91e9b1cf489 100644 --- a/src/lib/libraries/backdrops.json +++ b/src/lib/libraries/backdrops.json @@ -442,7 +442,7 @@ ] }, { - "name": "Jurrasic", + "name": "Jurassic", "md5": "64025bdca5db4938f65597e3682fddcf.svg", "type": "backdrop", "tags": [ From 9ea3d19482558de2ed4e5f66ddd3bfe294840e32 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 13 Jul 2018 13:34:49 -0400 Subject: [PATCH 097/159] Add "Andie" to the basketball theme --- src/lib/libraries/costumes.json | 76 +++++++++++++++++++++++++++++++ src/lib/libraries/sprites.json | 79 ++++++++++++++++++++++++++++++++- 2 files changed, 153 insertions(+), 2 deletions(-) diff --git a/src/lib/libraries/costumes.json b/src/lib/libraries/costumes.json index 9412630c21b..ef9ccee86d5 100644 --- a/src/lib/libraries/costumes.json +++ b/src/lib/libraries/costumes.json @@ -73,6 +73,82 @@ 2 ] }, + { + "name": "Andie-a", + "md5": "936abdaaac3a3f7d27e5f30b3da00e5f.svg", + "type": "costume", + "tags": [ + "sports", + "basketball", + "people", + "wheelchair", + "handicap", + "handicapable", + "alex eben meyer" + ], + "info": [ + 86, + 77, + 1 + ] + }, + { + "name": "Andie-b", + "md5": "cc2953492b40e231fdee3d8c9994a646.svg", + "type": "costume", + "tags": [ + "sports", + "basketball", + "people", + "wheelchair", + "handicap", + "handicapable", + "alex eben meyer" + ], + "info": [ + 46, + 77, + 1 + ] + }, + { + "name": "Andie-c", + "md5": "76e26ccb79a94d3e89f67e64b4cb9731.svg", + "type": "costume", + "tags": [ + "sports", + "basketball", + "people", + "wheelchair", + "handicap", + "handicapable", + "alex eben meyer" + ], + "info": [ + 52, + 36, + 1 + ] + }, + { + "name": "Andie-d", + "md5": "9687d895da423e717ae568c483d1c870.svg", + "type": "costume", + "tags": [ + "sports", + "basketball", + "people", + "wheelchair", + "handicap", + "handicapable", + "alex eben meyer" + ], + "info": [ + 86, + 43, + 1 + ] + }, { "name": "Anina Pop Down", "md5": "e3698b76cb0864df2fbaba80e6bd8067.png", diff --git a/src/lib/libraries/sprites.json b/src/lib/libraries/sprites.json index 7ceb29b3c1e..4ed2bb80028 100644 --- a/src/lib/libraries/sprites.json +++ b/src/lib/libraries/sprites.json @@ -116,6 +116,81 @@ "spriteInfo": {} } }, + { + "name": "Andie", + "md5": "936abdaaac3a3f7d27e5f30b3da00e5f.svg", + "type": "sprite", + "tags": [ + "sports", + "basketball", + "people", + "wheelchair", + "handicap", + "handicapable", + "alex eben meyer" + ], + "info": [ + 0, + 4, + 1 + ], + "json": { + "objName": "Andie", + "sounds": [ + { + "soundName": "pop", + "soundID": -1, + "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav", + "sampleCount": 258, + "rate": 11025, + "format": "" + } + ], + "costumes": [ + { + "costumeName": "andie-a", + "baseLayerID": -1, + "baseLayerMD5": "936abdaaac3a3f7d27e5f30b3da00e5f.svg", + "bitmapResolution": 1, + "rotationCenterX": 86, + "rotationCenterY": 77 + }, + { + "costumeName": "andie-b", + "baseLayerID": -1, + "baseLayerMD5": "cc2953492b40e231fdee3d8c9994a646.svg", + "bitmapResolution": 1, + "rotationCenterX": 46, + "rotationCenterY": 77 + }, + { + "costumeName": "andie-c", + "baseLayerID": -1, + "baseLayerMD5": "76e26ccb79a94d3e89f67e64b4cb9731.svg", + "bitmapResolution": 1, + "rotationCenterX": 52, + "rotationCenterY": 36 + }, + { + "costumeName": "andie-d", + "baseLayerID": -1, + "baseLayerMD5": "9687d895da423e717ae568c483d1c870.svg", + "bitmapResolution": 1, + "rotationCenterX": 86, + "rotationCenterY": 43 + } + ], + "currentCostumeIndex": 0, + "scratchX": -129, + "scratchY": -73, + "scale": 1, + "direction": 90, + "rotationStyle": "normal", + "isDraggable": false, + "visible": true, + "spriteInfo": {} + } + }, { "name": "Anina Dance", "md5": "9374e067ca4b66427fc64a0822f6e468.png", @@ -4177,8 +4252,8 @@ } ], "currentCostumeIndex": 0, - "scratchX": -108, - "scratchY": -61, + "scratchX": -24, + "scratchY": -57, "scale": 1, "direction": 90, "rotationStyle": "normal", From af8429f901dbe3558895776ba66c6ea0d71ec5a8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sun, 15 Jul 2018 20:30:04 +0000 Subject: [PATCH 098/159] chore(package): update react-responsive to version 5.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 23701739cda..33bbe08a4e4 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "react-modal": "3.4.4", "react-popover": "0.5.7", "react-redux": "5.0.7", - "react-responsive": "4.1.0", + "react-responsive": "5.0.0", "react-style-proptype": "3.2.1", "react-tabs": "2.2.2", "react-test-renderer": "16.2.0", From aba4b4b1011f5dc6ed5d01f41f14aba5183f3159 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Mon, 16 Jul 2018 08:57:04 -0400 Subject: [PATCH 099/159] Widen add-extension button to match category. Goes along with https://github.com/LLK/scratch-blocks/pull/1646 --- src/components/gui/gui.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/gui/gui.css b/src/components/gui/gui.css index b53f17b55eb..e40b0257351 100644 --- a/src/components/gui/gui.css +++ b/src/components/gui/gui.css @@ -201,7 +201,7 @@ } .extension-button-container { - width: 3.25rem; + width: 3.75rem; height: 3.25rem; position: absolute; bottom: 0; From a7b07cd45074b89f588006c2c0b08ab94aeb5688 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Tue, 17 Jul 2018 08:50:04 -0400 Subject: [PATCH 100/159] Localize custom procedure modal title MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added localization for ‘Make a Block’ * ‘block name’ default text is in scratch-blocks The changes in `error-step.jsx` were needed because the same id was defined in there and `unavailable_step.jsx`. The scripts to generate the json file for Transifex give an error if the same id is defined in two places. In error step it simply uses the id without redefining default value etc. The alternative would be to add a new messages.jsx file that has the definitions for shared text and include that in both places that use them. --- src/components/connection-modal/error-step.jsx | 4 ---- .../custom-procedures/custom-procedures.jsx | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/components/connection-modal/error-step.jsx b/src/components/connection-modal/error-step.jsx index 681d74b72a2..9f491aab988 100644 --- a/src/components/connection-modal/error-step.jsx +++ b/src/components/connection-modal/error-step.jsx @@ -43,8 +43,6 @@ const ErrorStep = props => ( src={backIcon} /> @@ -57,8 +55,6 @@ const ErrorStep = props => ( src={helpIcon} /> diff --git a/src/components/custom-procedures/custom-procedures.jsx b/src/components/custom-procedures/custom-procedures.jsx index 08131ea5b1d..81756e762ee 100644 --- a/src/components/custom-procedures/custom-procedures.jsx +++ b/src/components/custom-procedures/custom-procedures.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import Modal from '../modal/modal.jsx'; import Box from '../box/box.jsx'; -import {FormattedMessage} from 'react-intl'; +import {defineMessages, injectIntl, intlShape, FormattedMessage} from 'react-intl'; import booleanInputIcon from './icon--boolean-input.svg'; import textInputIcon from './icon--text-input.svg'; @@ -10,10 +10,18 @@ import labelIcon from './icon--label.svg'; import styles from './custom-procedures.css'; +const messages = defineMessages({ + myblockModalTitle: { + defaultMessage: 'Make a Block', + description: 'Title for the modal where you create a custom block.', + id: 'gui.customProcedures.myblockModalTitle' + } +}); + const CustomProcedures = props => ( ( CustomProcedures.propTypes = { componentRef: PropTypes.func.isRequired, + intl: intlShape, onAddBoolean: PropTypes.func.isRequired, onAddLabel: PropTypes.func.isRequired, onAddTextNumber: PropTypes.func.isRequired, @@ -142,4 +151,4 @@ CustomProcedures.propTypes = { warp: PropTypes.bool.isRequired }; -export default CustomProcedures; +export default injectIntl(CustomProcedures); From fe5d72d83a155d77cebffff929fe077da73ea4ec Mon Sep 17 00:00:00 2001 From: Evelyn Eastmond Date: Tue, 17 Jul 2018 09:51:11 -0400 Subject: [PATCH 101/159] Scanning flag correctly shared from scanning-step container to component. --- src/containers/scanning-step.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/scanning-step.jsx b/src/containers/scanning-step.jsx index ecc19318913..035af7400ce 100644 --- a/src/containers/scanning-step.jsx +++ b/src/containers/scanning-step.jsx @@ -32,7 +32,10 @@ class ScanningStep extends React.Component { 'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } handlePeripheralScanTimeout () { - this.setState({scanning: false}); + this.setState({ + scanning: false, + deviceList: [] + }); } handlePeripheralListUpdate (newList) { // TODO: sort peripherals by signal strength? so they don't jump around @@ -58,6 +61,7 @@ class ScanningStep extends React.Component { onConnected={this.props.onConnected} onConnecting={this.props.onConnecting} onRefresh={this.handleRefresh} + scanning={this.state.scanning} /> ); } From 4f11e856c60f47f15ace6672c46662899c2f78c3 Mon Sep 17 00:00:00 2001 From: Evelyn Eastmond Date: Tue, 17 Jul 2018 10:20:56 -0400 Subject: [PATCH 102/159] Fixing a linting error. --- src/containers/scanning-step.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/scanning-step.jsx b/src/containers/scanning-step.jsx index 035af7400ce..07595d5266d 100644 --- a/src/containers/scanning-step.jsx +++ b/src/containers/scanning-step.jsx @@ -56,12 +56,12 @@ class ScanningStep extends React.Component { ); } From 610d0ded27308fb318c07f9a31f041ace1ac6c67 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 17 Jul 2018 18:26:09 +0000 Subject: [PATCH 103/159] chore(package): update scratch-paint to version 0.2.0-prerelease.20180717182448 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 79f217213b8..6f3f5d81a6b 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531482946", "scratch-l10n": "3.0.20180712200642", - "scratch-paint": "0.2.0-prerelease.20180713150122", + "scratch-paint": "0.2.0-prerelease.20180717182448", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", From ba404a772dc000c96b9bf3b61e099cf697f905fb Mon Sep 17 00:00:00 2001 From: DD Liu Date: Tue, 17 Jul 2018 17:37:57 -0400 Subject: [PATCH 104/159] Update scratch paint, adds gradient fills --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f3f5d81a6b..294c6858e98 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1531482946", "scratch-l10n": "3.0.20180712200642", - "scratch-paint": "0.2.0-prerelease.20180717182448", + "scratch-paint": "0.2.0-prerelease.20180717212631", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", From 167dffb48f93199de8a3ffffa6da946364ecb7b5 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Tue, 17 Jul 2018 18:43:30 -0400 Subject: [PATCH 105/159] Enable the language menu --- src/components/menu-bar/menu-bar.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index b843e05b45a..95a9803a3d4 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -159,8 +159,9 @@ class MenuBar extends React.Component { })} onMouseUp={this.handleLanguageMouseUp} > + {/* @TODO: remove coming soon tooltip wrapper */} From bb5d5a1f8d5000f8622faf8e92fafdca8d169190 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 17 Jul 2018 23:03:50 +0000 Subject: [PATCH 106/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1531868456 Closes #2646 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 294c6858e98..7f52f94f8bf 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531482946", + "scratch-blocks": "0.1.0-prerelease.1531868456", "scratch-l10n": "3.0.20180712200642", "scratch-paint": "0.2.0-prerelease.20180717212631", "scratch-render": "0.1.0-prerelease.20180618173030", From 73ce8152b4d5e0c798b6ff0d9de03b645421257a Mon Sep 17 00:00:00 2001 From: kyleplo <31634240+kyleplo@users.noreply.github.com> Date: Wed, 18 Jul 2018 06:43:32 -0400 Subject: [PATCH 107/159] Fix cursor in fullscreen --- src/components/monitor/list-monitor.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/monitor/list-monitor.jsx b/src/components/monitor/list-monitor.jsx index 7ebeb0b5a1e..daa9f33eb47 100644 --- a/src/components/monitor/list-monitor.jsx +++ b/src/components/monitor/list-monitor.jsx @@ -26,7 +26,7 @@ const ListMonitor = ({draggable, label, width, height, value, onResizeMouseDown,
{'+' /* TODO waiting on asset */} @@ -35,7 +35,7 @@ const ListMonitor = ({draggable, label, width, height, value, onResizeMouseDown, {`length ${value.length}`}
{'=' /* TODO waiting on asset */} From d8547c4b72cdd880f4645f460834a28f67da2bd4 Mon Sep 17 00:00:00 2001 From: kyleplo <31634240+kyleplo@users.noreply.github.com> Date: Wed, 18 Jul 2018 09:50:38 -0400 Subject: [PATCH 108/159] Fix shadow placeholder color --- src/components/sprite-selector/sprite-selector.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/sprite-selector/sprite-selector.css b/src/components/sprite-selector/sprite-selector.css index ef19439855a..70895211757 100644 --- a/src/components/sprite-selector/sprite-selector.css +++ b/src/components/sprite-selector/sprite-selector.css @@ -110,5 +110,5 @@ .placeholder > .sprite { background: black; - filter: opacity(15%) brightness(20%); + filter: opacity(15%) brightness(0%); } From 1039a3b135fa5a66b397bac618818e825bcfcbf5 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Wed, 18 Jul 2018 10:04:04 -0400 Subject: [PATCH 109/159] Change 'video motion' to 'video sensing' and minor clean-up to extension library. Resolves GH-2621 --- src/lib/libraries/extensions/index.jsx | 85 ++++++++------------------ 1 file changed, 24 insertions(+), 61 deletions(-) diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index dfe1416464f..649364c6c44 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -4,18 +4,15 @@ import {FormattedMessage} from 'react-intl'; import musicImage from './music.png'; import penImage from './pen.png'; import videoImage from './video-sensing.png'; -import speechImage from './speech.png'; +import translateImage from './translate.png'; import microbitImage from './microbit.png'; -import wedoImage from './wedo.png'; import ev3Image from './ev3.png'; -import boostImage from './boost.png'; -import translateImage from './translate.png'; - -import ev3DeviceImage from './device-connection/ev3/ev3-hub-illustration.svg'; -import ev3MenuImage from './device-connection/ev3/ev3-small.svg'; +import wedoImage from './wedo.png'; import microbitDeviceImage from './device-connection/microbit/microbit-illustration.svg'; import microbitMenuImage from './device-connection/microbit/microbit-small.svg'; +import ev3DeviceImage from './device-connection/ev3/ev3-hub-illustration.svg'; +import ev3MenuImage from './device-connection/ev3/ev3-small.svg'; export default [ { @@ -59,37 +56,18 @@ export default [ { name: ( - ), - extensionId: 'translate', - iconURL: translateImage, - description: ( - - ), - featured: true - }, - { - name: ( - ), extensionId: 'videoSensing', iconURL: videoImage, description: ( ), featured: true @@ -97,22 +75,21 @@ export default [ { name: ( ), - extensionId: 'speech', - iconURL: speechImage, + extensionId: 'translate', + iconURL: translateImage, description: ( ), - featured: true, - disabled: true + featured: true }, { name: 'micro:bit', @@ -131,20 +108,6 @@ export default [ deviceImage: microbitDeviceImage, smallDeviceImage: microbitMenuImage }, - { - name: 'LEGO WeDo 2.0', - extensionId: 'wedo2', - iconURL: wedoImage, - description: ( - - ), - featured: true, - disabled: true - }, { name: 'LEGO MINDSTORMS EV3', extensionId: 'ev3', @@ -163,14 +126,14 @@ export default [ smallDeviceImage: ev3MenuImage }, { - name: 'LEGO Boost', - extensionId: 'boost', - iconURL: boostImage, + name: 'LEGO WeDo 2.0', + extensionId: 'wedo2', + iconURL: wedoImage, description: ( ), featured: true, From 118cd456107a4770af1781cf9d7c5908060ddc18 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Tue, 17 Jul 2018 18:37:19 -0400 Subject: [PATCH 110/159] Only update blocks locale when blocks are visible In `blocks.jsx` only call setLocale if visible. Depends on `getLocale` being added to VM to know when global locale changed while not visible making the VM out of sync. --- src/containers/blocks.jsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 1de665e3342..6ac3c7d31a4 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -94,7 +94,9 @@ class Blocks extends React.Component { addFunctionListener(this.workspace, 'zoom', this.onWorkspaceMetricsChange); this.attachVM(); - this.setLocale(); + if (this.props.isVisible) { + this.setLocale(); + } analytics.pageview('/editors/blocks'); } @@ -117,9 +119,9 @@ class Blocks extends React.Component { this.ScratchBlocks.hideChaff(); } - if (prevProps.locale !== this.props.locale) { - this.setLocale(); - } + // if (prevProps.locale !== this.props.locale) { + // this.setLocale(); + // } if (prevProps.toolboxXML !== this.props.toolboxXML) { // rather than update the toolbox "sync" -- update it in the next frame @@ -138,10 +140,17 @@ class Blocks extends React.Component { // @todo hack to resize blockly manually in case resize happened while hidden // @todo hack to reload the workspace due to gui bug #413 if (this.props.isVisible) { // Scripts tab + this.workspace.setVisible(true); - this.props.vm.refreshWorkspace(); + if (prevProps.locale !== this.props.locale || this.props.locale !== this.props.vm.getLocale()) { + this.setLocale(); + } else { + this.props.vm.refreshWorkspace(); + } + // Re-enable toolbox refreshes without causing one. See #updateToolbox for more info. this.workspace.toolboxRefreshEnabled_ = true; + // this.workspace.setToolboxRefreshEnabled(true); window.dispatchEvent(new Event('resize')); } else { this.workspace.setVisible(false); From b108c7ed2382f223236f1d4ca962542188dd4f0a Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 18 Jul 2018 10:20:43 -0400 Subject: [PATCH 111/159] Add per-extension connecting message for ev3 pin specific instructions --- .../connection-modal/connecting-step.jsx | 7 ++----- .../connection-modal/connection-modal.jsx | 1 + src/containers/blocks.jsx | 4 +++- src/containers/connection-modal.jsx | 2 ++ src/lib/libraries/extensions/index.jsx | 18 ++++++++++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/components/connection-modal/connecting-step.jsx b/src/components/connection-modal/connecting-step.jsx index 063e67a826c..be378b3fdd5 100644 --- a/src/components/connection-modal/connecting-step.jsx +++ b/src/components/connection-modal/connecting-step.jsx @@ -28,11 +28,7 @@ const ConnectingStep = props => ( - + {props.connectingMessage} ( ); ConnectingStep.propTypes = { + connectingMessage: PropTypes.node.isRequired, deviceImage: PropTypes.string.isRequired, onDisconnect: PropTypes.func }; diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 9a77e92f56e..8d3a0d047df 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -40,6 +40,7 @@ const ConnectionModalComponent = props => ( ); ConnectionModalComponent.propTypes = { + connectingMessage: PropTypes.node, name: PropTypes.node, onCancel: PropTypes.func.isRequired, phase: PropTypes.oneOf(Object.keys(PHASES)).isRequired, diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 1de665e3342..243dc1ea49f 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -355,7 +355,8 @@ class Blocks extends React.Component { extensionId: extensionId, deviceImage: extension.deviceImage, smallDeviceImage: extension.smallDeviceImage, - name: extension.name + name: extension.name, + connectingMessage: extension.connectingMessage }}); } } @@ -419,6 +420,7 @@ class Blocks extends React.Component { ) : null} {this.state.connectionModal ? ( + ) }, { name: 'LEGO WeDo 2.0', @@ -160,7 +167,14 @@ export default [ disabled: true, launchDeviceConnectionFlow: true, deviceImage: ev3DeviceImage, - smallDeviceImage: ev3MenuImage + smallDeviceImage: ev3MenuImage, + connectingMessage: ( + + ) }, { name: 'LEGO Boost', From 0ec55786c3c58c08edfd56a88fb1767234fa77a0 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 18 Jul 2018 10:21:20 -0400 Subject: [PATCH 112/159] Scope the translatable error messages per component --- src/components/connection-modal/error-step.jsx | 10 +++++++--- src/components/connection-modal/unavailable-step.jsx | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/components/connection-modal/error-step.jsx b/src/components/connection-modal/error-step.jsx index 9f491aab988..194e95678fe 100644 --- a/src/components/connection-modal/error-step.jsx +++ b/src/components/connection-modal/error-step.jsx @@ -26,7 +26,7 @@ const ErrorStep = props => (
( src={backIcon} /> diff --git a/src/components/connection-modal/unavailable-step.jsx b/src/components/connection-modal/unavailable-step.jsx index 2f789cbdb0e..84a184af714 100644 --- a/src/components/connection-modal/unavailable-step.jsx +++ b/src/components/connection-modal/unavailable-step.jsx @@ -27,7 +27,7 @@ const UnavailableStep = props => (
( From e2a7e4792cb6992aed679d2036181f3cb6abab4f Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Wed, 18 Jul 2018 10:36:04 -0400 Subject: [PATCH 113/159] Clean-up / correct translator notes --- src/lib/libraries/extensions/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 649364c6c44..1ef3bd706d3 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -76,7 +76,7 @@ export default [ name: ( ), @@ -85,7 +85,7 @@ export default [ description: ( ), From 05ae9b46dded61ec29673ab7893ff568b55f0716 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 18 Jul 2018 10:37:06 -0400 Subject: [PATCH 114/159] Add per-extension help link and wire up help button --- src/containers/blocks.jsx | 4 +++- src/containers/connection-modal.jsx | 6 ++++-- src/lib/libraries/extensions/index.jsx | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 243dc1ea49f..56f2fa5d5fc 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -356,7 +356,8 @@ class Blocks extends React.Component { deviceImage: extension.deviceImage, smallDeviceImage: extension.smallDeviceImage, name: extension.name, - connectingMessage: extension.connectingMessage + connectingMessage: extension.connectingMessage, + helpLink: extension.helpLink }}); } } @@ -423,6 +424,7 @@ class Blocks extends React.Component { connectingMessage={this.state.connectionModal.connectingMessage} deviceImage={this.state.connectionModal.deviceImage} extensionId={this.state.connectionModal.extensionId} + helpLink={this.state.connectionModal.helpLink} name={this.state.connectionModal.name} smallDeviceImage={this.state.connectionModal.smallDeviceImage} vm={vm} diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx index 4a285b1dbe6..50862fbd2b3 100644 --- a/src/containers/connection-modal.jsx +++ b/src/containers/connection-modal.jsx @@ -12,7 +12,8 @@ class ConnectionModal extends React.Component { 'handleConnected', 'handleConnecting', 'handleDisconnect', - 'handleError' + 'handleError', + 'handleHelp' ]); this.state = { phase: PHASES.scanning @@ -76,7 +77,7 @@ class ConnectionModal extends React.Component { }); } handleHelp () { - // @todo: implement the help button + window.open(this.props.helpLink, '_blank'); } render () { return ( @@ -104,6 +105,7 @@ ConnectionModal.propTypes = { connectingMessage: PropTypes.node.isRequired, deviceImage: PropTypes.string.isRequired, extensionId: PropTypes.string.isRequired, + helpLink: PropTypes.string.isRequired, name: PropTypes.node.isRequired, onCancel: PropTypes.func.isRequired, onStatusButtonUpdate: PropTypes.func.isRequired, diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index f81f9e46f9e..a45f35dcdfc 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -136,7 +136,8 @@ export default [ description="Message to help people connect to their micro:bit." id="gui.extension.microbit.connectingMessage" /> - ) + ), + helpLink: 'https://scratch.mit.edu/microbit' }, { name: 'LEGO WeDo 2.0', @@ -174,7 +175,8 @@ export default [ description="Message to help people connect to their EV3. Must note the PIN should be 1234." id="gui.extension.ev3.connectingMessage" /> - ) + ), + helpLink: 'https://scratch.mit.edu/ev3' }, { name: 'LEGO Boost', From 31a09b6a1323077f5eab29ad121bc6d5b964ecbc Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 18 Jul 2018 10:38:32 -0400 Subject: [PATCH 115/159] =?UTF-8?q?Don=E2=80=99t=20let=20Google=20try=20to?= =?UTF-8?q?=20auto=20translate=20the=20GUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a meta tag to make sure google doesn’t try to autotranslate: https://support.google.com/webmasters/answer/79812?hl=en --- src/playground/index.ejs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/playground/index.ejs b/src/playground/index.ejs index 3d2394d662f..7a8bb16135e 100644 --- a/src/playground/index.ejs +++ b/src/playground/index.ejs @@ -3,6 +3,7 @@ + <%= htmlWebpackPlugin.options.title %> <% if (htmlWebpackPlugin.options.sentryConfig) { %> From 02f4265b29eb1c147de7e3a630547bbe6c6b66d7 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 18 Jul 2018 10:29:38 -0400 Subject: [PATCH 116/159] Re-enable localization test HT @paulkaplan --- src/components/menu-bar/menu-bar.jsx | 2 +- test/integration/localization.test.js | 25 ++++++++++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 95a9803a3d4..08bd6b55614 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -159,7 +159,7 @@ class MenuBar extends React.Component { })} onMouseUp={this.handleLanguageMouseUp} > - {/* @TODO: remove coming soon tooltip wrapper */} + {/* @TODO: remove coming soon tooltip wrapper https://github.com/LLK/scratch-gui/issues/2664 */} { await driver.quit(); }); - // Skipped temporarily while the language selector is marked as - // "Coming Soon" - test.skip('Localization', async () => { + test('Localization', async () => { await loadUri(uri); await clickXpath('//button[@title="tryit"]'); - await clickText('Code'); - await clickXpath('//button[@title="Add Extension"]'); - await clickText('Pen', scope.modal); // Modal closes - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation + await clickXpath('//*[@aria-label="language selector"]'); await clickText('English'); await clickText('Deutsch'); await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks refresh - await clickText('Pen'); // will need to be updated when 'Pen' is translated - // Make sure "Add Sprite" has changed to "Figur hinzufügen" - await findByText('Figur hinzufügen'); - // Find the stamp block in German - await findByText('Abdruck'); + // Make sure the blocks are translating + await clickText('Fühlen'); // Sensing category in German + await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks to scroll + await clickText('Antwort'); // Find the "answer" block in German + + // Change to the costumes tab to confirm other parts of the GUI are translating + await clickText('Kostüme'); const logs = await getLogs(); await expect(logs).toEqual([]); From 59299176165e96a1efad8d7495faa07dca3c8729 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 18 Jul 2018 11:26:03 -0400 Subject: [PATCH 117/159] Refactor the scratch link is not available screen --- .../connection-modal/connection-modal.css | 39 ++++++++++++- .../connection-modal/icons/bluetooth.svg | 31 ++++++++++ .../connection-modal/icons/scratch-link.png | Bin 73188 -> 0 bytes .../connection-modal/icons/scratchlink.svg | 34 +++++++++++ .../connection-modal/unavailable-step.jsx | 54 +++++++++++++----- 5 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 src/components/connection-modal/icons/bluetooth.svg delete mode 100644 src/components/connection-modal/icons/scratch-link.png create mode 100644 src/components/connection-modal/icons/scratchlink.svg diff --git a/src/components/connection-modal/connection-modal.css b/src/components/connection-modal/connection-modal.css index b636b4af9cd..b8ca0634b32 100644 --- a/src/components/connection-modal/connection-modal.css +++ b/src/components/connection-modal/connection-modal.css @@ -183,8 +183,41 @@ align-items: center; } +.scratch-link-help { + display: flex; + flex-direction: column; + justify-content: space-around; + height: 100%; + padding: 1rem 0; +} + +.scratch-link-help-step { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + margin-left: 3rem; +} + .scratch-link-icon { - max-width: 150px; + max-width: 50px; +} + +.help-step-image { + margin-right: 0.5rem; +} + +.help-step-number { + background: $pen-primary; + border-radius: 100%; + display: flex; + justify-content: center; + align-items: center; + color: $ui-white; + font-weight: bold; + margin-right: 0.5rem; + min-width: 2rem; + height: 2rem; } .button-row { @@ -262,7 +295,7 @@ .instructions { text-align: center; - padding: 1rem; + margin-top: 1rem; } .dots-row { @@ -270,7 +303,7 @@ flex-direction: row; justify-content: center; align-items: center; - padding-bottom: 1rem; + margin: 1rem; } .dots-holder { diff --git a/src/components/connection-modal/icons/bluetooth.svg b/src/components/connection-modal/icons/bluetooth.svg new file mode 100644 index 00000000000..ebec155b439 --- /dev/null +++ b/src/components/connection-modal/icons/bluetooth.svg @@ -0,0 +1,31 @@ + + + + Bluetooth + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/icons/scratch-link.png b/src/components/connection-modal/icons/scratch-link.png deleted file mode 100644 index af7ceed4baac35730f1b803bc9477aa1b4f208a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73188 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 q5C4ew|9$vBz4-r82iyx + + + scratchlink + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/connection-modal/unavailable-step.jsx b/src/components/connection-modal/unavailable-step.jsx index 84a184af714..975a66debe7 100644 --- a/src/components/connection-modal/unavailable-step.jsx +++ b/src/components/connection-modal/unavailable-step.jsx @@ -6,30 +6,54 @@ import Box from '../box/box.jsx'; import Dots from './dots.jsx'; import helpIcon from './icons/help.svg'; import backIcon from './icons/back.svg'; -import scratchLinkIcon from './icons/scratch-link.png'; +import bluetoothIcon from './icons/bluetooth.svg'; +import scratchLinkIcon from './icons/scratchlink.svg'; import styles from './connection-modal.css'; const UnavailableStep = props => ( - -
- {deckIds.map(id => ( + {deckIds.slice(0, 2).map(id => (
Date: Wed, 25 Jul 2018 12:12:07 -0400 Subject: [PATCH 158/159] Use img instead of CostumeCanvas --- .../costume-canvas/costume-canvas.jsx | 134 ------------------ .../sprite-selector-item.css | 2 + .../sprite-selector-item.jsx | 7 +- .../stage-selector/stage-selector.css | 2 + .../stage-selector/stage-selector.jsx | 7 +- .../sprite-selector-item.test.jsx.snap | 22 +-- .../components/sprite-selector-item.test.jsx | 12 -- 7 files changed, 12 insertions(+), 174 deletions(-) delete mode 100644 src/components/costume-canvas/costume-canvas.jsx diff --git a/src/components/costume-canvas/costume-canvas.jsx b/src/components/costume-canvas/costume-canvas.jsx deleted file mode 100644 index 4375572c1e2..00000000000 --- a/src/components/costume-canvas/costume-canvas.jsx +++ /dev/null @@ -1,134 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import svgToImage from 'svg-to-image'; -import xhr from 'xhr'; - -/** - * @fileoverview - * A component for rendering Scratch costume URLs to canvases. - * Use for sprite library, costume library, sprite selector, etc. - * Props include width, height, and direction (direction in Scratch value). - */ - -class CostumeCanvas extends React.Component { - componentDidMount () { - this.load(); - } - componentDidUpdate (prevProps) { - if (prevProps.url !== this.props.url) { - this.load(); - } else if ( - prevProps.width !== this.props.width || - prevProps.height !== this.props.height || - prevProps.direction !== this.props.direction - ) { - this.draw(); - } - } - draw () { - if (!this.canvas) { - return; - } - - // Draw the costume to the rendered canvas. - const img = this.img; - const context = this.canvas.getContext('2d'); - - // Scale to fit. - let scale; - - // Choose the larger dimension to scale by. - if (img.width > img.height) { - scale = this.canvas.width / img.width; - } else { - scale = this.canvas.height / img.height; - } - - // Rotate by the Scratch-value direction. - const angle = (-90 + this.props.direction) * Math.PI / 180; - - // Rotation origin point will be center of the canvas. - const contextTranslateX = this.canvas.width / 2; - const contextTranslateY = this.canvas.height / 2; - - // First, clear the canvas. - context.clearRect(0, 0, - this.canvas.width, this.canvas.height); - - // Translate the context to the center of the canvas, - // then rotate canvas drawing by `angle`. - context.translate(contextTranslateX, contextTranslateY); - context.rotate(angle); - context.drawImage(img, - 0, 0, img.width, img.height, - -(scale * img.width / 2), -(scale * img.height / 2), - scale * img.width, - scale * img.height); - - // Reset the canvas rotation and translation to 0, (0, 0). - context.rotate(-angle); - context.translate(-contextTranslateX, -contextTranslateY); - } - load () { - // Draw the icon on our canvas. - const url = this.props.url; - if (url.indexOf('.svg') > -1) { - // Vector graphics: need to download with XDR and rasterize. - // Queue request asynchronously. - setTimeout(() => { - xhr.get({ - useXDR: true, - url: url - }, (err, response, body) => { - if (!err) { - svgToImage(body, (svgErr, img) => { - if (!svgErr) { - this.img = img; - this.draw(); - } - }); - } - }); - }, 0); - - } else { - // Raster graphics: create Image and draw it. - const img = new Image(); - img.src = url; - img.onload = () => { - this.img = img; - this.draw(); - }; - } - } - render () { - return ( - (this.canvas = c)} // eslint-disable-line react/jsx-sort-props - /> - ); - } -} - -CostumeCanvas.defaultProps = { - width: 100, - height: 100, - direction: 90 -}; - -CostumeCanvas.propTypes = { - className: PropTypes.string, - direction: PropTypes.number, - height: PropTypes.number, - url: PropTypes.string.isRequired, - width: PropTypes.number -}; - -export default CostumeCanvas; diff --git a/src/components/sprite-selector-item/sprite-selector-item.css b/src/components/sprite-selector-item/sprite-selector-item.css index 32a5339a75c..24bf17395a7 100644 --- a/src/components/sprite-selector-item/sprite-selector-item.css +++ b/src/components/sprite-selector-item/sprite-selector-item.css @@ -42,6 +42,8 @@ .sprite-image { margin: auto; user-select: none; + max-width: 32px; + max-height: 32px; } .sprite-info { diff --git a/src/components/sprite-selector-item/sprite-selector-item.jsx b/src/components/sprite-selector-item/sprite-selector-item.jsx index cb04c034ad6..50554f94060 100644 --- a/src/components/sprite-selector-item/sprite-selector-item.jsx +++ b/src/components/sprite-selector-item/sprite-selector-item.jsx @@ -2,7 +2,6 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; -import CostumeCanvas from '../costume-canvas/costume-canvas.jsx'; import CloseButton from '../close-button/close-button.jsx'; import styles from './sprite-selector-item.css'; import {ContextMenuTrigger} from 'react-contextmenu'; @@ -38,11 +37,9 @@ const SpriteSelectorItem = props => (
{props.number}
)} {props.costumeURL ? ( - ) : null}
diff --git a/src/components/stage-selector/stage-selector.css b/src/components/stage-selector/stage-selector.css index 4e35dd4b68f..a1687599011 100644 --- a/src/components/stage-selector/stage-selector.css +++ b/src/components/stage-selector/stage-selector.css @@ -89,6 +89,8 @@ $header-height: calc($stage-menu-height - 2px); border: 1px solid $ui-black-transparent; border-radius: .25rem; box-shadow: inset 0 0 4px $ui-black-transparent; + max-width: 64px; + max-height: 48px; } .add-button { diff --git a/src/components/stage-selector/stage-selector.jsx b/src/components/stage-selector/stage-selector.jsx index 50161bf8cbb..f5de8b7a89b 100644 --- a/src/components/stage-selector/stage-selector.jsx +++ b/src/components/stage-selector/stage-selector.jsx @@ -5,7 +5,6 @@ import {defineMessages, intlShape, injectIntl, FormattedMessage} from 'react-int import Box from '../box/box.jsx'; import ActionMenu from '../action-menu/action-menu.jsx'; -import CostumeCanvas from '../costume-canvas/costume-canvas.jsx'; import styles from './stage-selector.css'; import backdropIcon from '../action-menu/icon--backdrop.svg'; @@ -78,11 +77,9 @@ const StageSelector = props => {
{url ? ( - ) : null}
diff --git a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap b/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap index 2c276ff6566..237e3dc2948 100644 --- a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap +++ b/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap @@ -30,16 +30,9 @@ exports[`SpriteSelectorItemComponent matches snapshot when given a number and de > 5
-
-
{ @@ -73,17 +72,6 @@ describe('SpriteSelectorItemComponent', () => { expect(onDeleteButtonClick).toHaveBeenCalled(); }); - test('creates a CostumeCanvas when a costume url is defined', () => { - const wrapper = shallowWithIntl(getComponent()); - expect(wrapper.find(CostumeCanvas).exists()).toBe(true); - }); - - test('does not create a CostumeCanvas when a costume url is null', () => { - costumeURL = null; - const wrapper = shallowWithIntl(getComponent()); - expect(wrapper.find(CostumeCanvas).exists()).toBe(false); - }); - test('it has a context menu with delete menu item and callback', () => { const wrapper = mountWithIntl(getComponent()); const contextMenu = wrapper.find('ContextMenu'); From a338692f423a3402882e05d24b7d495b0d1fb117 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 25 Jul 2018 15:52:12 -0400 Subject: [PATCH 159/159] Pad bottom of costume/sound list to allow you to reach the bottom tile --- src/components/asset-panel/selector.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/asset-panel/selector.css b/src/components/asset-panel/selector.css index 3dc4e803d9e..61e6e9d2ad6 100644 --- a/src/components/asset-panel/selector.css +++ b/src/components/asset-panel/selector.css @@ -49,6 +49,8 @@ $fade-out-distance: 100px; overflow-y: scroll; display: flex; flex-direction: column; + /* Make sure there is room to scroll beyond the last tile */ + padding-bottom: 70px; } .list-item {
- +
+
+
+ {'1'} +
+
+ +
+
+ +
- +
+
+ {'2'} +
+
+ +
+
+ +
+
+
-
- -
Date: Wed, 18 Jul 2018 11:42:11 -0400 Subject: [PATCH 118/159] Add "help" to the modal for device connection flow --- .../connection-modal/connection-modal.jsx | 2 ++ src/components/modal/modal.css | 11 ++++++++++ src/components/modal/modal.jsx | 22 +++++++++++++++++++ src/lib/assets/icon--help.svg | 10 +++++++++ 4 files changed, 45 insertions(+) create mode 100644 src/lib/assets/icon--help.svg diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx index 8d3a0d047df..c6566e954db 100644 --- a/src/components/connection-modal/connection-modal.jsx +++ b/src/components/connection-modal/connection-modal.jsx @@ -27,6 +27,7 @@ const ConnectionModalComponent = props => ( contentLabel={props.name} headerClassName={styles.header} headerImage={props.smallDeviceImage} + onHelp={props.onHelp} onRequestClose={props.onCancel} > @@ -43,6 +44,7 @@ ConnectionModalComponent.propTypes = { connectingMessage: PropTypes.node, name: PropTypes.node, onCancel: PropTypes.func.isRequired, + onHelp: PropTypes.func.isRequired, phase: PropTypes.oneOf(Object.keys(PHASES)).isRequired, smallDeviceImage: PropTypes.string, title: PropTypes.string.isRequired diff --git a/src/components/modal/modal.css b/src/components/modal/modal.css index 9a5a035a7de..8bf2b6cb8fa 100644 --- a/src/components/modal/modal.css +++ b/src/components/modal/modal.css @@ -122,3 +122,14 @@ $sides: 20rem; font-weight: normal; padding-left: 0; } + +.header-item-help { + padding: 0; + margin-right: -4.75rem; +} + +.help-button { + font-weight: normal; + padding-right: 0; + font-size: 0.75rem; +} diff --git a/src/components/modal/modal.jsx b/src/components/modal/modal.jsx index 940af75586f..acce21993d8 100644 --- a/src/components/modal/modal.jsx +++ b/src/components/modal/modal.jsx @@ -9,6 +9,7 @@ import Button from '../button/button.jsx'; import CloseButton from '../close-button/close-button.jsx'; import backIcon from '../../lib/assets/icon--back.svg'; +import helpIcon from '../../lib/assets/icon--help.svg'; import styles from './modal.css'; @@ -27,6 +28,26 @@ const ModalComponent = props => ( grow={1} >
+ {props.onHelp ? ( +
+ +
+ ) : null}
+ + + help + Created with Sketch. + + + + + \ No newline at end of file From 446acfbe3198cfeaa30274205e6a2f00cfbb583e Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Wed, 18 Jul 2018 11:46:00 -0400 Subject: [PATCH 119/159] Update VM use VM that includes `getLocale()` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f3f5d81a6b..515cfd285a4 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.1.0-prerelease.1531502959", + "scratch-vm": "0.1.0-prerelease.1531927323", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 511e166de79ed2ad145df187271ff3d19bfd4046 Mon Sep 17 00:00:00 2001 From: Kristin Osiecki Date: Wed, 18 Jul 2018 11:52:00 -0400 Subject: [PATCH 120/159] Updates to Tutorials Library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit •All of the thumbnail images have been updated •All of the videos have been updated •New steps were added to Make a Game --- .../decks/animate/lib_animate-a-name.jpg | Bin 137770 -> 137687 bytes .../decks/chase-game/lib-chasegame.jpg | Bin 138357 -> 122639 bytes src/lib/libraries/decks/game/lib-pop.jpg | Bin 95444 -> 93116 bytes src/lib/libraries/decks/index.jsx | 87 +++++++++++++----- .../decks/intro/lib-getting-started.jpg | Bin 134282 -> 114622 bytes .../decks/make-music/lib-make-music.jpg | Bin 125293 -> 127472 bytes src/lib/libraries/decks/spin/change-color.gif | Bin 496294 -> 0 bytes .../libraries/decks/spin/click-control.gif | Bin 280547 -> 0 bytes .../libraries/decks/spin/click-forever.gif | Bin 193215 -> 0 bytes src/lib/libraries/decks/spin/click-turn.gif | Bin 81600 -> 0 bytes src/lib/libraries/decks/spin/drag-forever.gif | Bin 271498 -> 0 bytes src/lib/libraries/decks/spin/drag-turn.gif | Bin 59753 -> 0 bytes src/lib/libraries/decks/spin/library-spin.gif | Bin 50305 -> 0 bytes src/lib/libraries/decks/spin/thumb-spin.gif | Bin 41035 -> 0 bytes .../decks/sprite/cover-add-sprite.jpg | Bin 71319 -> 134420 bytes .../libraries/decks/videos/add-backdrop.jpg | Bin 103997 -> 111679 bytes .../libraries/decks/videos/add-effects.jpg | Bin 162630 -> 134788 bytes .../libraries/decks/videos/animate-sprite.jpg | Bin 110898 -> 130462 bytes .../libraries/decks/videos/change-size.jpg | Bin 171339 -> 119536 bytes .../libraries/decks/videos/glide-around.jpg | Bin 165784 -> 104026 bytes .../libraries/decks/videos/hide-and-show.jpg | Bin 111170 -> 99990 bytes .../decks/videos/move-arrow-keys.jpg | Bin 101530 -> 109240 bytes .../libraries/decks/videos/record-a-sound.jpg | Bin 139377 -> 134821 bytes src/lib/libraries/decks/videos/spin.jpg | Bin 117006 -> 124434 bytes 24 files changed, 64 insertions(+), 23 deletions(-) delete mode 100644 src/lib/libraries/decks/spin/change-color.gif delete mode 100644 src/lib/libraries/decks/spin/click-control.gif delete mode 100644 src/lib/libraries/decks/spin/click-forever.gif delete mode 100644 src/lib/libraries/decks/spin/click-turn.gif delete mode 100644 src/lib/libraries/decks/spin/drag-forever.gif delete mode 100644 src/lib/libraries/decks/spin/drag-turn.gif delete mode 100644 src/lib/libraries/decks/spin/library-spin.gif delete mode 100644 src/lib/libraries/decks/spin/thumb-spin.gif diff --git a/src/lib/libraries/decks/animate/lib_animate-a-name.jpg b/src/lib/libraries/decks/animate/lib_animate-a-name.jpg index 139f3f98662f6404daa77d45c162779e2f6a5fad..391eb8971e84e8bb6bf9ff4386d644d59c9fe62b 100644 GIT binary patch delta 86785 zcmeFZcT|&Iw=Wu`S`ZKrq=hO{B81ReK$N1=dl3ks2neAn5b;s50umu8RX~y6dj}B( z1d-mmfOL>vLX!LNzTbP#{`R-OGxq-Hj(f&=GZ+w_tTpFabIr1TYtEJIQo6wsIvVm2 zd79~QB+UnUIYqcEFC4CjkXJ+~M3&tS9PP`B|d<*@TNOz6-p&-G?Am+S0VR>FFsMeU+u91<16Zm6P+y0 z1G`l3#aQf}Y{&ach6z6;RqbjM6s}N)`Y_=Fc^JQioxfQ;_4TA<%-SdKc9I*L%8z** zHLC|vLIH?B#6Dc>VVK^2{SKytL7^L>dyt}x?GZr74+LrU2|ng+XV}4*aSL(34Z8h0 zgWk82F4FKfq3>Da7b=2-y{Jm(SaJ_0&S;{OF`>^Tlq1VFLHXQJCsmzUAn{vJ_{I%W zv0j(Q7@Z`PwnE0^Q+~Nw?1{zb}_fMjI9=+sOdn`x&*ehBPB_G?0xp3S1 zB;SC9fG@{hMG^gFXrz3Bpv6cCbP2g&X5~nRnC731chBs;BDLaw#{oU~;0F6Ig8yY4 zqykt>+pQ}z8TOv?;uT-vdDFL4^>(OP=7UB;t!D`F)~c1vu#*|>zzv=WGUU_aLXtrI z1;po!HHQ~$tF1S-8!VfM57=_akg$C{RclyN2t274{p7b-%P1K_8TLx%9a6UF;s>oT z)MQ9-TTNPqd!y@5E&)>39ly2rcdz}(o|*(wtI|>;&M3twebo}n4!Ua{aY(rvdv29Z zz-w&0-nC>d(D;Q@gzFWm-#8zx2Sta-9Df>{T1}c0S5I#zLG}0bF10kf3YvV<7rt#! zLV2ojEiL){tBiH$e(c#p_{6PX+f06nuDAP5w+QVn;ZUR|I<9e=TfyAFHNf#;vi38>#eX^3qkYr5FG<`KKk7!FHjlB zzngja+Wg>gVE4T-7NNn^0Nr~23=vL-0PBepz_fC@t=&Z%$z31xxtNUZ3tmBKC(#F7 zERoz{9+IQl_@-wmX^T+C@`!l0C^&DoW_rtO`;CKhGRW4<*INANy55t!qrB3W8vKqz zap@bwHzEv~!#`f;SBsqD(V&_+Gc*tXO7}x58rv+jBkNUES1T42L{d0n&c> zkv#5DCtq{-n|Ra{g!g2xsu)_bXNzyTQ1xkLcc^0>Q!&0~!86_ZxLOq-8>H3W;!j_U zY4d#7f%=|4-q5z4)!;DL5oOdY{G6{gDjXh)V_>t3R|Zmr3!iDvKKvG8W0>3qY`Y{B zMR3M$FrfH4e*5YT${kIW23=&m00bJ}9=~;S=QP7vDUMI;v#G((O`b?2!Zk_nt%PNG z)2or7Q6NvehE$#Dx0Z5rrf#}sm~r>}xfb7w16^M;;On$PPG2V_kZEPfu{ zW46wCZRL3TS5-r8e*xAStBahb)EGWs;|qK9%qCEv>5|J=J2=V51sBT21)nZf3E@=+JX|RccO2JwqP8 ztfEBKRS~Sg&zBLZqRFg!2%zeS3_-rXs}Rd{X+iz0v&_WPo$=v}aiVc58M2Tw?)(BP zW!*%??Z2{^3k!*s+W4AI*_7DMF+mxRCPSodG3W&c2G~CBm|WDbVW490cY9!cA-1DU zzgH@tXma6K%NFp8P1BNJQ`Ldv(<@-OqoCI-q14$C>yD`|^y6?}0%}P6IrGjnmxnn_ zI)8y?3*6gGeA!nLq0wQQ+$FiBH7|dUlnTIo-}&Zo@$K3eaVOZvDVC=v|HeVzp&LF8 zk|8!^NVw5XWSh@K=H#+4=`MPEj+9N8r2X?rRrvg~=N}&|5QoSRTfMB2E?aww_Hc-* zknBZ7Q2RSuSq*D_Q$fWRnix;TLl4)ta?Zc<0g715o0p}ph2sor#<*rwS0{Bw8{Sq& zM0$N%3{gVs<<89R`b zdnMzxN)KUPNWJ!Dr3RgvgE}%~YT)HT;mp@_G^zrJL$l$2xHG^SFpeLbOVZ2V8R+lQ*3*MDCQ#v-S3Y--}UG#<@toW8ddwoc67cVEpP z3G?A`YHUb0&h>4;dW5^-3>I%OXUOqq{8C+MxHnw1bm9W(X&h94f%IUne}&{(`kd~q zp53LH83A7Q8HwJ5dcal!^Xx&xy9;m)K_MLP&+rQ9x@>)cYDw=a4=)MynC-;s__oX8 zsM)UZ_^r~q2Ay1+JjwZTq)6)xmd zdAPR*mn2#>wpFtLb*QJxb~7h)b`HKKb4%BR3p=`<<9%0;6kL$s(U6`t(GIMZeRJ}& z&3N87`7%-EX4s9q3tY0(s>|^++jj}~`bo5;(OagsOzT8}qxtxbDl^j?-bM8OY6DW6XicqzEGni9GwRZJ#;2QyEDQl{A%R~t@f|815GXRJLeVUm@mpOalmSu zt5{_E<_zXls>}7BkUSIWaXV%)RvjImw%wY= z^J8QwQ+?;^%4sKUb0c?tnui2=pe?VFYPd2zP*n5VrOh+|ZZ0BH>#KgZbWnS1Ct2DrtOu%5g?BF|qQ?*#tInZ%J7_ zC9r1bi}bsX4{B+Yu>K=7BzBMKhSiePg&NN&cM#a-s zN@9Ly6d9gIA<@P0S<1twfusG&mo|R?j}c>rSjF}FkVCoZI>(28$xF#@C3fcDU3y3D zw-_Jn0<&xsx9W`9Zr-Vh?M}70RR^R5n%~Rp_bkZ0WgE$6uBQ!6RL`2+=UE~{e#_Xc zaji-G@)_d1s@+5acgAL`=>187n1j|><^hc`l3%dC`5V{v+L7IdHzC~x(48A^TbKMx za%ZcvzedxSMvb4u3ilUfY}Ku8lOfBuE$u9V(siA)W53H*Y9xKObA)bV?g9gYM301i z8yl}ryc*Uir#kuCoWDj{Zb1jGZ`VsCSYEeLeH-(&UgY`3OVgh`c|%0Z*N%#C%msuS zCnt3aTuH{lqzs<~#P7u2qPN)Ol(&@(k9;4xn+3QkpVVK#w?bvI){<%Id};SIx=}lv zUY7RhAx2feC=9e(G;=r>$sU7I~{dXBOxi_?mnHRb%;jxAZndSU2plw(SVzD8z9}ko%%^1d}#Gbp)*{SC5R0y;-CLm zWff5Qe(<80ZHY%ZiYcsa>RjJ`IrTWUOP}{r7Q^b%>wZ!8j(6zU7b7F`&>-Bwk}$ze znm%*HaWr1(2_>mG%1T5ovy%nHeWY2zsP2=&W(R3YB^@UPOO46HZfgiFNOjVVts z+T$N`o~L5G3Slo%qhS0S(f*BS|3Xc`rR5QDxD0}yH^9S7S6A^Wp5g|dpp=ZG zJW58+5r&YHQ-H~#rKMpGlCqL8XOy#yvpfPVi;zT>yq3aI;02}i1f>yZgp?Bs4MWRG zgY@O3Wnc<&3QjOtCy=kC917tqEr)-k#v%r?xa{casQBOLP|`0QP9Z4o1ecU^ke7u? zp%6|mX&D3>CJ&dBh9R6BWD#h2XDK*b0beA;a^^3=98VfQFDHoqCOh)q8yDF7pM_Ym zAZJb?_}`J)G3S5oiwFDSM-`g6jlFza{hWCJJXqj$@qA_$5osxT zn3SWm9Lxdj42PkdB;^qbvJO&?jt+nDRd9eKB&86NFh^MjX_&O5GYW=ska32AS|P81 zaCVe*f;%1a{ohU%0rHd(kUwT9=?s&WcaVa~J4vHK<_e%T!e!)TWMtryvQCbFutXzd zrBU+oPB3S*qyr3mD+jW40F_n7NfK=A2uDk!L6$KzMkr55j7Q07gXDpM^qpTjdFLggF7SSrSOj|4e%Xmxc^yej(??n=
) : ( - +
{props.deviceList.map(device => ( ( onConnecting={props.onConnecting} />) )} - +
) ) : ( From cabae6c0a4f726b8c47ab22f63c340e0e7c8154b Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 19 Jul 2018 13:26:20 +0000 Subject: [PATCH 129/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1532006613 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef6d5add60f..b96a0e7222c 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1531933918", + "scratch-blocks": "0.1.0-prerelease.1532006613", "scratch-l10n": "3.0.20180712200642", "scratch-paint": "0.2.0-prerelease.20180718183615", "scratch-render": "0.1.0-prerelease.20180618173030", From 8fe925f1ad034dd55a200c2070062cc970b97c62 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 19 Jul 2018 09:28:50 -0400 Subject: [PATCH 130/159] Enable ev3 and micro:bit extensions --- src/lib/libraries/extensions/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/libraries/extensions/index.jsx b/src/lib/libraries/extensions/index.jsx index 79de349873a..316980efe16 100644 --- a/src/lib/libraries/extensions/index.jsx +++ b/src/lib/libraries/extensions/index.jsx @@ -103,7 +103,7 @@ export default [ /> ), featured: true, - disabled: true, + disabled: false, launchDeviceConnectionFlow: true, deviceImage: microbitDeviceImage, smallDeviceImage: microbitMenuImage, @@ -128,7 +128,7 @@ export default [ /> ), featured: true, - disabled: true, + disabled: false, launchDeviceConnectionFlow: true, deviceImage: ev3DeviceImage, smallDeviceImage: ev3MenuImage, From d75fd170e3b6205098bd35b86aefd9937abf410d Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 19 Jul 2018 15:01:19 +0000 Subject: [PATCH 131/159] chore(package): update scratch-l10n to version 3.0.20180719145856 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b96a0e7222c..07d53905b66 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", "scratch-blocks": "0.1.0-prerelease.1532006613", - "scratch-l10n": "3.0.20180712200642", + "scratch-l10n": "3.0.20180719145856", "scratch-paint": "0.2.0-prerelease.20180718183615", "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", From 2a0f69c182ab0a0af3f00708a15880ef9d2179f3 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 19 Jul 2018 11:29:02 -0400 Subject: [PATCH 132/159] Record next step events for tutorials to help understand progress --- src/reducers/cards.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/reducers/cards.js b/src/reducers/cards.js index 6f4add89d20..ba1c50d8e28 100644 --- a/src/reducers/cards.js +++ b/src/reducers/cards.js @@ -1,3 +1,5 @@ +import analytics from '../lib/analytics'; + import decks from '../lib/libraries/decks/index.jsx'; const CLOSE_CARDS = 'scratch-gui/cards/CLOSE_CARDS'; @@ -38,6 +40,11 @@ const reducer = function (state, action) { }); case NEXT_STEP: if (state.activeDeckId !== null) { + analytics.event({ + category: 'how-to', + action: 'next step', + label: `${state.activeDeckId} - ${state.step}` + }); return Object.assign({}, state, { step: state.step + 1 }); From c6e67044dd13df4898179cf790a117c762fb90ff Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Thu, 19 Jul 2018 11:29:44 -0400 Subject: [PATCH 133/159] Add library analytics for searches --- src/components/library/library.jsx | 14 ++++++++++++-- src/containers/tips-library.jsx | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/components/library/library.jsx b/src/components/library/library.jsx index c58d3608c94..2da09f2720d 100644 --- a/src/components/library/library.jsx +++ b/src/components/library/library.jsx @@ -9,6 +9,7 @@ import Modal from '../../containers/modal.jsx'; import Divider from '../divider/divider.jsx'; import Filter from '../filter/filter.jsx'; import TagButton from '../../containers/tag-button.jsx'; +import analytics from '../../lib/analytics'; import styles from './library.css'; @@ -28,6 +29,7 @@ class LibraryComponent extends React.Component { super(props); bindAll(this, [ 'handleBlur', + 'handleClose', 'handleFilterChange', 'handleFilterClear', 'handleFocus', @@ -56,9 +58,17 @@ class LibraryComponent extends React.Component { this.handleMouseEnter(id); } handleSelect (id) { - this.props.onRequestClose(); + this.handleClose(); this.props.onItemSelected(this.getFilteredData()[id]); } + handleClose () { + analytics.event({ + category: 'library', + action: `${this.props.id}: close with search`, + label: this.state.filterQuery || '(empty)' + }); + this.props.onRequestClose(); + } handleTagClick (tag) { this.setState({ filterQuery: '', @@ -111,7 +121,7 @@ class LibraryComponent extends React.Component { fullScreen contentLabel={this.props.title} id={this.props.id} - onRequestClose={this.props.onRequestClose} + onRequestClose={this.handleClose} > {(this.props.filterable || this.props.tags) && (
diff --git a/src/containers/tips-library.jsx b/src/containers/tips-library.jsx index ebbee3f3022..009c8c2fae9 100644 --- a/src/containers/tips-library.jsx +++ b/src/containers/tips-library.jsx @@ -54,6 +54,7 @@ class TipsLibrary extends React.PureComponent { Date: Thu, 19 Jul 2018 18:20:54 +0000 Subject: [PATCH 134/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1532024291 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07d53905b66..213e65c5edc 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1532006613", + "scratch-blocks": "0.1.0-prerelease.1532024291", "scratch-l10n": "3.0.20180719145856", "scratch-paint": "0.2.0-prerelease.20180718183615", "scratch-render": "0.1.0-prerelease.20180618173030", From 5d6a48a24b85d088afcdd1b4dfff04eea0037fc1 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Thu, 19 Jul 2018 15:17:27 -0400 Subject: [PATCH 135/159] Call updateToolbox whenever the blocks container updates and is visible so that changes to dynamic menus (e.g. costume renaming) are picked up. Update setLocale to call updateToolbox so that the toolboxRefresh gets re-enabled. This is needed for getting translated toolbox strings like 'Hello' and 'Hmmm...' to stay in sync with language changes. --- src/containers/blocks.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index 2ea34d2203c..cd3d4ff5383 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -145,10 +145,9 @@ class Blocks extends React.Component { this.setLocale(); } else { this.props.vm.refreshWorkspace(); + this.updateToolbox(); } - // Re-enable toolbox refreshes without causing one. See #updateToolbox for more info. - this.workspace.toolboxRefreshEnabled_ = true; window.dispatchEvent(new Event('resize')); } else { this.workspace.setVisible(false); @@ -165,8 +164,8 @@ class Blocks extends React.Component { this.ScratchBlocks.ScratchMsgs.setLocale(this.props.locale); this.props.vm.setLocale(this.props.locale, this.props.messages) .then(() => { - this.workspace.updateToolbox(this.props.toolboxXML); this.props.vm.refreshWorkspace(); + this.updateToolbox(); this.workspace.getFlyout().setRecyclingEnabled(true); }); } From c155f30bc2700569fd61615b6cd21814ae16c303 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Thu, 19 Jul 2018 20:54:14 +0000 Subject: [PATCH 136/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180719205147 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 213e65c5edc..c21c2225843 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180718204133", + "scratch-vm": "0.2.0-prerelease.20180719205147", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 52c3a29dc8f5b72ad491e3c8345211cbf992e5d2 Mon Sep 17 00:00:00 2001 From: apple502j <33279053+apple502j@users.noreply.github.com> Date: Fri, 20 Jul 2018 16:52:19 +0900 Subject: [PATCH 137/159] Change Remove to Close --- src/components/cards/cards.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/cards/cards.jsx b/src/components/cards/cards.jsx index dc081ae0b64..f12baa3de8c 100644 --- a/src/components/cards/cards.jsx +++ b/src/components/cards/cards.jsx @@ -43,7 +43,7 @@ const CardHeader = ({onCloseCards, onShowAll, totalSteps, step}) => ( onClick={onCloseCards} > From fb91d57053b2e0881a13bcde53b3f7953f841b82 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Fri, 20 Jul 2018 09:31:13 -0400 Subject: [PATCH 138/159] Safari does not support the use of .finally --- src/containers/project-loader.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/containers/project-loader.jsx b/src/containers/project-loader.jsx index 1055f70cb68..507b7165237 100644 --- a/src/containers/project-loader.jsx +++ b/src/containers/project-loader.jsx @@ -59,12 +59,14 @@ class ProjectLoader extends React.Component { action: 'Import Project File', nonInteraction: true }); + this.props.closeLoadingState(); + // Reset the file input after project is loaded + // This is necessary in case the user wants to reload a project + thisFileInput.value = null; }) .catch(error => { log.warn(error); alert(this.props.intl.formatMessage(messages.loadError)); // eslint-disable-line no-alert - }) - .finally(() => { this.props.closeLoadingState(); // Reset the file input after project is loaded // This is necessary in case the user wants to reload a project From 32603dd955e8853785afc5e2034a387940b1ab30 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sat, 21 Jul 2018 19:01:11 +0000 Subject: [PATCH 139/159] chore(package): update autoprefixer to version 9.0.1 Closes #2649 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c21c2225843..251d75b1233 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "devDependencies": { "arraybuffer-loader": "^1.0.3", - "autoprefixer": "^8.1.0", + "autoprefixer": "^9.0.1", "babel-core": "^6.23.1", "babel-eslint": "^8.0.1", "babel-loader": "^7.1.0", From 0dde507eddabadeee07a2ba8496c7a9ae69b9d27 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Mon, 23 Jul 2018 10:00:44 -0400 Subject: [PATCH 140/159] Add username setting to vm listener HOC --- src/lib/vm-listener-hoc.jsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/vm-listener-hoc.jsx b/src/lib/vm-listener-hoc.jsx index 3fd9e2096f1..28f578b371b 100644 --- a/src/lib/vm-listener-hoc.jsx +++ b/src/lib/vm-listener-hoc.jsx @@ -37,6 +37,12 @@ const vmListenerHOC = function (WrappedComponent) { document.addEventListener('keydown', this.handleKeyDown); document.addEventListener('keyup', this.handleKeyUp); } + this.props.vm.postIOData('userData', {username: this.props.username}); + } + componentWillReceiveProps (newProps) { + if (newProps.username !== this.props.username) { + this.props.vm.postIOData('userData', {username: newProps.username}); + } } componentWillUnmount () { if (this.props.attachKeyboardEvents) { @@ -72,6 +78,7 @@ const vmListenerHOC = function (WrappedComponent) { const { /* eslint-disable no-unused-vars */ attachKeyboardEvents, + username, onBlockDragUpdate, onKeyDown, onKeyUp, @@ -90,13 +97,16 @@ const vmListenerHOC = function (WrappedComponent) { onKeyUp: PropTypes.func, onMonitorsUpdate: PropTypes.func.isRequired, onTargetsUpdate: PropTypes.func.isRequired, + username: PropTypes.string, vm: PropTypes.instanceOf(VM).isRequired }; VMListener.defaultProps = { attachKeyboardEvents: true }; const mapStateToProps = state => ({ - vm: state.scratchGui.vm + vm: state.scratchGui.vm, + username: state.session && state.session.session ? + state.session.session.username : '' }); const mapDispatchToProps = dispatch => ({ onTargetsUpdate: data => { From 8cf659f4bd7c97173993fb65079846ced2bc73b6 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Jul 2018 14:18:47 +0000 Subject: [PATCH 141/159] chore(package): update arraybuffer-loader to version 1.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c21c2225843..3615b32ae4a 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "react-dom": "^16.0.0" }, "devDependencies": { - "arraybuffer-loader": "^1.0.3", + "arraybuffer-loader": "^1.0.6", "autoprefixer": "^8.1.0", "babel-core": "^6.23.1", "babel-eslint": "^8.0.1", From 70c1663cd2be0fe9f1aec096a80c3eaab9d126d1 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Jul 2018 14:55:56 +0000 Subject: [PATCH 142/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180723145316 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c21c2225843..0e754f6a2be 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180719205147", + "scratch-vm": "0.2.0-prerelease.20180723145316", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From ee8ec95aaa9da43cf9e2559de65289635f120e0b Mon Sep 17 00:00:00 2001 From: Connor Hudson Date: Mon, 23 Jul 2018 11:04:13 -0400 Subject: [PATCH 143/159] Set a z-index on the help item in the extension modal header --- src/components/modal/modal.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/modal/modal.css b/src/components/modal/modal.css index 8bf2b6cb8fa..3b318f40ddd 100644 --- a/src/components/modal/modal.css +++ b/src/components/modal/modal.css @@ -126,6 +126,7 @@ $sides: 20rem; .header-item-help { padding: 0; margin-right: -4.75rem; + z-index: 1; } .help-button { From 608ff599c8b65e90a5592a8e91c483f15e3b3cb6 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Mon, 23 Jul 2018 11:22:00 -0400 Subject: [PATCH 144/159] Use pageview with query param for tracking search usage This replaces the event-based search analytics because that method does not allow us to get the advantages of more search-specific analytics. --- src/components/library/library.jsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/library/library.jsx b/src/components/library/library.jsx index 2da09f2720d..9d63fc3bfad 100644 --- a/src/components/library/library.jsx +++ b/src/components/library/library.jsx @@ -62,12 +62,8 @@ class LibraryComponent extends React.Component { this.props.onItemSelected(this.getFilteredData()[id]); } handleClose () { - analytics.event({ - category: 'library', - action: `${this.props.id}: close with search`, - label: this.state.filterQuery || '(empty)' - }); this.props.onRequestClose(); + analytics.pageview(`/${this.props.id}/search?q=${this.state.filterQuery}`); } handleTagClick (tag) { this.setState({ From 76fc30912eda840f9b7ab073cd47eb77337921e0 Mon Sep 17 00:00:00 2001 From: Ken Date: Mon, 23 Jul 2018 17:25:06 +0200 Subject: [PATCH 145/159] Update message --- src/components/sprite-selector/sprite-selector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/sprite-selector/sprite-selector.jsx b/src/components/sprite-selector/sprite-selector.jsx index da09bf9ca00..e6948c5b7d8 100644 --- a/src/components/sprite-selector/sprite-selector.jsx +++ b/src/components/sprite-selector/sprite-selector.jsx @@ -36,7 +36,7 @@ const messages = defineMessages({ addSpriteFromFile: { id: 'gui.spriteSelector.addSpriteFromFile', description: 'Button to add a sprite in the target pane from file', - defaultMessage: 'Upload' + defaultMessage: 'Upload Sprite' } }); From e12530a719ea13b709e0ea9c9c73e387ab3adf9e Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Jul 2018 18:57:34 +0000 Subject: [PATCH 146/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1532372094 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e754f6a2be..78408ad24e0 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1532024291", + "scratch-blocks": "0.1.0-prerelease.1532372094", "scratch-l10n": "3.0.20180719145856", "scratch-paint": "0.2.0-prerelease.20180718183615", "scratch-render": "0.1.0-prerelease.20180618173030", From fd64c9004f5171d65d977d24168cd608ea1fae27 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Mon, 23 Jul 2018 16:48:13 -0400 Subject: [PATCH 147/159] Temporarily exclude RTL languages from the menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently that’s just hebrew. It’s still available with the `?locale=he` for people to check translations. It’s being temporarily excluded from the menu until we have RTL support for the interface. --- .../language-selector/language-selector.jsx | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/components/language-selector/language-selector.jsx b/src/components/language-selector/language-selector.jsx index ad7a9aa90f9..a6707bbced2 100644 --- a/src/components/language-selector/language-selector.jsx +++ b/src/components/language-selector/language-selector.jsx @@ -5,6 +5,9 @@ import Box from '../box/box.jsx'; import locales from 'scratch-l10n'; import styles from './language-selector.css'; +// supported languages to exclude from the menu, but allow as a URL option +const ignore = ['he']; + class LanguageSelector extends React.Component { render () { const { @@ -26,14 +29,18 @@ class LanguageSelector extends React.Component { value={currentLocale} onChange={onChange} > - {Object.keys(locales).map(locale => ( - - ))} + { + Object.keys(locales) + .filter(l => !ignore.includes(l)) + .map(locale => ( + + )) + }
From 6ce6a096efda9f3d7f8142adcc9949c5e538bc6e Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Jul 2018 21:42:59 +0000 Subject: [PATCH 148/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180723212614 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e754f6a2be..18c2ab57e20 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180723145316", + "scratch-vm": "0.2.0-prerelease.20180723212614", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 97ff462184585d724bfcb2a40eded50900499df6 Mon Sep 17 00:00:00 2001 From: kyleplo <31634240+kyleplo@users.noreply.github.com> Date: Tue, 24 Jul 2018 08:57:17 -0400 Subject: [PATCH 149/159] Add fix for costumes and sounds --- src/components/asset-panel/selector.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/asset-panel/selector.css b/src/components/asset-panel/selector.css index 3dc4e803d9e..df47d41de1e 100644 --- a/src/components/asset-panel/selector.css +++ b/src/components/asset-panel/selector.css @@ -70,5 +70,5 @@ $fade-out-distance: 100px; .list-item.placeholder { background: black; - filter: opacity(15%) brightness(20%); + filter: opacity(15%) brightness(0%); } From e2fbf273ec9408b5a829c57902620cbfce44f972 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 24 Jul 2018 15:19:53 +0000 Subject: [PATCH 150/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180724151553 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa24616f3b3..db593f9d287 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180618173030", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180723212614", + "scratch-vm": "0.2.0-prerelease.20180724151553", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 7e09e04d722343682c20d3ddb2004472db50c5d8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 24 Jul 2018 15:27:53 +0000 Subject: [PATCH 151/159] chore(package): update scratch-render to version 0.1.0-prerelease.20180724152606 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa24616f3b3..47f74677455 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "scratch-blocks": "0.1.0-prerelease.1532372094", "scratch-l10n": "3.0.20180719145856", "scratch-paint": "0.2.0-prerelease.20180718183615", - "scratch-render": "0.1.0-prerelease.20180618173030", + "scratch-render": "0.1.0-prerelease.20180724152606", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", "scratch-vm": "0.2.0-prerelease.20180723212614", From 19dc033eae01a05aa77fe0ef06ea119d7c79c2b1 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Tue, 24 Jul 2018 11:30:17 -0400 Subject: [PATCH 152/159] Bring sprites to front when they are being dragged. This solves the issue where in both player and editor mode, draggable sprites would not get popped to the front of the draw list. --- src/containers/stage.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/containers/stage.jsx b/src/containers/stage.jsx index 0ff48ef0216..1ab84412eed 100644 --- a/src/containers/stage.jsx +++ b/src/containers/stage.jsx @@ -309,11 +309,13 @@ class Stage extends React.Component { const targetId = this.props.vm.getTargetIdForDrawableId(drawableId); if (targetId === null) return; - // Only start drags on non-draggable targets in editor drag mode - if (!this.props.useEditorDragStyle) { - const target = this.props.vm.runtime.getTargetById(targetId); - if (!target.draggable) return; - } + const target = this.props.vm.runtime.getTargetById(targetId); + + // Do not start drag unless in editor drag mode or target is draggable + if (!(this.props.useEditorDragStyle || target.draggable)) return; + + // Dragging always brings the target to the front + target.goToFront(); this.props.vm.startDrag(targetId); this.setState({ From e69296685532220f11fe30cf2c38aa9ebadcaea8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 24 Jul 2018 15:34:05 +0000 Subject: [PATCH 153/159] chore(package): update scratch-blocks to version 0.1.0-prerelease.1532446271 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aa24616f3b3..b0c1f43da64 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "redux-throttle": "0.1.1", "rimraf": "^2.6.1", "scratch-audio": "0.1.0-prerelease.20180625202813", - "scratch-blocks": "0.1.0-prerelease.1532372094", + "scratch-blocks": "0.1.0-prerelease.1532446271", "scratch-l10n": "3.0.20180719145856", "scratch-paint": "0.2.0-prerelease.20180718183615", "scratch-render": "0.1.0-prerelease.20180618173030", From c7ed9e3695217eb9d059888221d8b1c3427ee630 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 24 Jul 2018 18:36:03 +0000 Subject: [PATCH 154/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180724180310 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7dd15dad336..646d302ba24 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180724152606", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180724151553", + "scratch-vm": "0.2.0-prerelease.20180724180310", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From a5abdfeae53dc620da9b284169b1bc868ea99252 Mon Sep 17 00:00:00 2001 From: Karishma Chadha Date: Tue, 24 Jul 2018 15:01:03 -0400 Subject: [PATCH 155/159] Clear the workspace undo when the workspace updates. --- src/containers/blocks.jsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx index cd3d4ff5383..3862fa653fb 100644 --- a/src/containers/blocks.jsx +++ b/src/containers/blocks.jsx @@ -310,6 +310,11 @@ class Blocks extends React.Component { this.workspace.scale = scale; this.workspace.resize(); } + + // Clear the undo state of the workspace since this is a + // fresh workspace and we don't want any changes made to another sprites + // workspace to be 'undone' here. + this.workspace.clearUndo(); } handleExtensionAdded (blocksInfo) { // select JSON from each block info object then reject the pseudo-blocks which don't have JSON, like separators From fb254eb04a4709647c540e60cf2e78bd059228b8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Tue, 24 Jul 2018 19:27:41 +0000 Subject: [PATCH 156/159] chore(package): update scratch-vm to version 0.2.0-prerelease.20180724192502 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 646d302ba24..2754f58c61d 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "scratch-render": "0.1.0-prerelease.20180724152606", "scratch-storage": "0.5.1", "scratch-svg-renderer": "0.2.0-prerelease.20180712223402", - "scratch-vm": "0.2.0-prerelease.20180724180310", + "scratch-vm": "0.2.0-prerelease.20180724192502", "selenium-webdriver": "3.6.0", "startaudiocontext": "1.2.1", "style-loader": "^0.21.0", From 7f37a52f46182314c036d82d50327ef4164e492d Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Wed, 25 Jul 2018 13:22:56 -0400 Subject: [PATCH 157/159] Show only 2 other tutorials in last step of each tutorial. Enforce this by using `slice` so that no more are ever shown, which would mess up the layout. Also fixes the issue where the card text could push out when translated into other languages --- src/components/cards/card.css | 5 ++-- src/components/cards/cards.jsx | 2 +- src/lib/libraries/decks/index.jsx | 43 ++++++++++--------------------- 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/components/cards/card.css b/src/components/cards/card.css index 9e14a1fb2a6..c16d9b26ec3 100644 --- a/src/components/cards/card.css +++ b/src/components/cards/card.css @@ -153,7 +153,7 @@ display: flex; flex-direction: row; justify-content: space-around; - padding: 0 0.5rem 0.5rem; + padding: 0 1rem 0.5rem; } .deck { @@ -167,7 +167,7 @@ } .deck-image { - width: 130px; + width: 200px; height: 100px; object-fit: cover; } @@ -180,6 +180,7 @@ text-align: center; font-weight: bold; text-align: center; + max-width: 200px; } .help-icon, .close-icon { diff --git a/src/components/cards/cards.jsx b/src/components/cards/cards.jsx index f12baa3de8c..8e2c40ac364 100644 --- a/src/components/cards/cards.jsx +++ b/src/components/cards/cards.jsx @@ -152,7 +152,7 @@ const PreviewsStep = ({deckIds, content, onActivateDeckFactory, onShowAll}) => ( />