diff --git a/aseprite/hats.aseprite b/aseprite/hats.aseprite index e2cfa0b..2668d21 100644 Binary files a/aseprite/hats.aseprite and b/aseprite/hats.aseprite differ diff --git a/dist/extension.zip b/dist/extension.zip index 157c870..c3abb6d 100644 Binary files a/dist/extension.zip and b/dist/extension.zip differ diff --git a/dist/extension/birb.js b/dist/extension/birb.js index f46576c..72de274 100644 --- a/dist/extension/birb.js +++ b/dist/extension/birb.js @@ -607,9 +607,12 @@ } } + const HAT_WIDTH = 12; + const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -621,13 +624,15 @@ base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -636,18 +641,19 @@ /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ - function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { + function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding @@ -1872,7 +1878,7 @@ }`; const SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAgCAYAAABjE6FEAAAAAXNSR0IArs4c6QAABD9JREFUeJztnT9rFEEYh3+TWATE7hDcsxW7CBbmA0Qs0uSuSiloYSBgIRhCPkCQFIKCYNBKK6szjZWpbEyTziLY5k6RAwsjpDGvRXbWubmd3btzd2c293vgyGRvb9/Z25ln39l/BxBCCCGEkOlC+a4ACR8REdd7Sim2IVJb2HhrgE8B6djtZhMA0Ol2B8pV1IEQMqVITCuKpBVFQ+UsORYVvxVF8nl+XmRtbahcdnxCymTGdwVIPu1mExuNBjrt9lC5SvY/fcJGo5GUCak7FGCN8CWgTreLJ/3+wLQn/X4yBCaEkFIwh8Cf5+eTV1VD4LQ6VBmbEBIAkkLVsX0KyKwD5UfIlCEiZwf/jb9Vx/ctIB/yJ6RMLviuQN3Yv3HDS1yllBIR8XnpCS93IWRK0ZmPzv6YBRFSf7hHHwNTesyGqsfe6XAbkP+FDYjUAi0/7TwRqVyAFPCUknYGlENA4gHZ6bYEgLcTQHHsoNs/++no5F4Ibe55zRdy7lEtEgqYAMBOt6WLXk4AKaWSOoSW/dn9wkc/rSOZZ4HNL9NofNDTRMScp5QGYQ99jOkQEQmtIZLyeNB873Vb+xTwKJhdYWW7l0yj/9w4BWiK53DlPvAI2L79Onl/p9seOB5ThoxCEDAhGt8CzkCUUon0zjtXZpV8+yOFbAvnQkREZi5GA9PuPevhw+oMll6eAgCOf34DALxbjwb2MkXIaEjAGBTwraU2HjTf63kLi0tIzRCX+L4e/cLB8+teThiVxZVZJUsvT/FhdQZFSDBTgIgFdP9VegqtBYhYgjBklBpsjI3gW8AkbFa2e/JuPZr27Zwrv1CH66HgHALrOw9c75vyg3XMIY1Jhsmnv3tDAtbys2Pbw3HXOo0am4TDye6izC3vKV0GgLllv/LzLeCV7Z7XA3uu+HEiVJt+llnRWFg42V3E2o+PAIAXl28DAO4evh0pwNejXwAwUSqu46dloLaANToTTVkWQAnWln/i26t8+6ULuPp6mLgEZPa3kkXkzD7rJMGRBWgzt7yHmw8Pce3qpdTPWhtiIgH5FjAhmlDEpznZXRSzD9j9rQIBiav/T4UAYUgwDVt8mCD78i1gQkKmv7Ugaxc6wODIp6r27RQgaiTBXAEiPq5nS+j4yzEAoLG57/rsvyATSse3gAkJnf7WQtLA73x/A5y1fe8SNE9MhtzvciuWJiEtvzQam/uFrbhvARNCchGdhNgi1BIMuf+N9DzAeCXQ31rInK9I+SHjTLQpYLtORdeBEJKJOnh+/azDOUQYMrkC1BLKk2CZ4tGxkSK8qupACHGicDb0HhDhucJ8Gkbn6ePkqRi6XOYDCqwbvVPjl10HQkg+9hNzQu+PY/0splIKnaePk//NMkrMuvRys+Iz8yMkDOKbEYAa9MexfhPEHIra5SrIix/6l03IeadufXDs6/KcC6pgxX3HJ4ScL/4CWsLSrzMo7i0AAAAASUVORK5CYII="; const FEATHER_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlbENwjAQRf8hSiZIRQ+9WQNRUFIAKzACBSsAA1Ag1mAABqCCBomG3hQQ9OMEx4ZDNH5SikSJ3/fZ5wCJRCKRSPwZ0RzMWmtLAhGvQyUAi9mXP/aFaGjJRQQiguHihMvcFMJUVUYlAMuHixPGy4en1WmVQqgHYHkuZjiEj6a2/LjtYzTY0eiZbgC37Mxh1UN3sn/dr6cCz/LHB/DJj9s+2oMdbtdz6TtfFwQHcMvOInfmQNjsgchNWLXmdfK6gyioAu/6uKrsm1kWLAciKuCuey5nYuXAh234bdmZ6INIUw4E/Ix49xtjCmXfzLL8nY/ktdgnAKwxxgIoXIyqmAOwvIqfiN0ALNd21HYBO9XXGMAdnZTYyHWzWjQAAAAASUVORK5CYII="; - const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAC5JREFUKJFjYBgFgwEwYhH7j08NE6k2sKALnJCVReFbPH6M0zp0p6ADRgYGBgYAqu4FCZWdtIcAAAAASUVORK5CYII="; + const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAAAAXNSR0IArs4c6QAAAI5JREFUOI1jYBgFo2BIgv9oGJ86gnJM5Dri8NlLyAYhOwZFjgVd5wlZWRS+xePHBC1rqWtnYGBgYKhpqsTwFSOyQgIGoaidvXY7AwMDA8PLixcYGBgYGN59esPAwMDAoGnrwsDAwMCQGuzJwMDAwMiEZgA+jGJZarAnw8ObV1EMZ2BgYHh48yrccAYGBgYAg40ttqzdeHIAAAAASUVORK5CYII="; // Element IDs const FIELD_GUIDE_ID = "birb-field-guide"; @@ -2030,7 +2036,7 @@ let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 1b2f17b..88fe6e3 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -612,9 +612,12 @@ module.exports = class PocketBird extends Plugin { } } + const HAT_WIDTH = 12; + const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -626,13 +629,15 @@ module.exports = class PocketBird extends Plugin { base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -641,18 +646,19 @@ module.exports = class PocketBird extends Plugin { /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ - function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { + function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding @@ -1915,7 +1921,7 @@ module.exports = class PocketBird extends Plugin { }`; const SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAgCAYAAABjE6FEAAAAAXNSR0IArs4c6QAABD9JREFUeJztnT9rFEEYh3+TWATE7hDcsxW7CBbmA0Qs0uSuSiloYSBgIRhCPkCQFIKCYNBKK6szjZWpbEyTziLY5k6RAwsjpDGvRXbWubmd3btzd2c293vgyGRvb9/Z25ln39l/BxBCCCGEkOlC+a4ACR8REdd7Sim2IVJb2HhrgE8B6djtZhMA0Ol2B8pV1IEQMqVITCuKpBVFQ+UsORYVvxVF8nl+XmRtbahcdnxCymTGdwVIPu1mExuNBjrt9lC5SvY/fcJGo5GUCak7FGCN8CWgTreLJ/3+wLQn/X4yBCaEkFIwh8Cf5+eTV1VD4LQ6VBmbEBIAkkLVsX0KyKwD5UfIlCEiZwf/jb9Vx/ctIB/yJ6RMLviuQN3Yv3HDS1yllBIR8XnpCS93IWRK0ZmPzv6YBRFSf7hHHwNTesyGqsfe6XAbkP+FDYjUAi0/7TwRqVyAFPCUknYGlENA4gHZ6bYEgLcTQHHsoNs/++no5F4Ibe55zRdy7lEtEgqYAMBOt6WLXk4AKaWSOoSW/dn9wkc/rSOZZ4HNL9NofNDTRMScp5QGYQ99jOkQEQmtIZLyeNB873Vb+xTwKJhdYWW7l0yj/9w4BWiK53DlPvAI2L79Onl/p9seOB5ThoxCEDAhGt8CzkCUUon0zjtXZpV8+yOFbAvnQkREZi5GA9PuPevhw+oMll6eAgCOf34DALxbjwb2MkXIaEjAGBTwraU2HjTf63kLi0tIzRCX+L4e/cLB8+teThiVxZVZJUsvT/FhdQZFSDBTgIgFdP9VegqtBYhYgjBklBpsjI3gW8AkbFa2e/JuPZr27Zwrv1CH66HgHALrOw9c75vyg3XMIY1Jhsmnv3tDAtbys2Pbw3HXOo0am4TDye6izC3vKV0GgLllv/LzLeCV7Z7XA3uu+HEiVJt+llnRWFg42V3E2o+PAIAXl28DAO4evh0pwNejXwAwUSqu46dloLaANToTTVkWQAnWln/i26t8+6ULuPp6mLgEZPa3kkXkzD7rJMGRBWgzt7yHmw8Pce3qpdTPWhtiIgH5FjAhmlDEpznZXRSzD9j9rQIBiav/T4UAYUgwDVt8mCD78i1gQkKmv7Ugaxc6wODIp6r27RQgaiTBXAEiPq5nS+j4yzEAoLG57/rsvyATSse3gAkJnf7WQtLA73x/A5y1fe8SNE9MhtzvciuWJiEtvzQam/uFrbhvARNCchGdhNgi1BIMuf+N9DzAeCXQ31rInK9I+SHjTLQpYLtORdeBEJKJOnh+/azDOUQYMrkC1BLKk2CZ4tGxkSK8qupACHGicDb0HhDhucJ8Gkbn6ePkqRi6XOYDCqwbvVPjl10HQkg+9hNzQu+PY/0splIKnaePk//NMkrMuvRys+Iz8yMkDOKbEYAa9MexfhPEHIra5SrIix/6l03IeadufXDs6/KcC6pgxX3HJ4ScL/4CWsLSrzMo7i0AAAAASUVORK5CYII="; const FEATHER_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlbENwjAQRf8hSiZIRQ+9WQNRUFIAKzACBSsAA1Ag1mAABqCCBomG3hQQ9OMEx4ZDNH5SikSJ3/fZ5wCJRCKRSPwZ0RzMWmtLAhGvQyUAi9mXP/aFaGjJRQQiguHihMvcFMJUVUYlAMuHixPGy4en1WmVQqgHYHkuZjiEj6a2/LjtYzTY0eiZbgC37Mxh1UN3sn/dr6cCz/LHB/DJj9s+2oMdbtdz6TtfFwQHcMvOInfmQNjsgchNWLXmdfK6gyioAu/6uKrsm1kWLAciKuCuey5nYuXAh234bdmZ6INIUw4E/Ix49xtjCmXfzLL8nY/ktdgnAKwxxgIoXIyqmAOwvIqfiN0ALNd21HYBO9XXGMAdnZTYyHWzWjQAAAAASUVORK5CYII="; - const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAC5JREFUKJFjYBgFgwEwYhH7j08NE6k2sKALnJCVReFbPH6M0zp0p6ADRgYGBgYAqu4FCZWdtIcAAAAASUVORK5CYII="; + const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAAAAXNSR0IArs4c6QAAAI5JREFUOI1jYBgFo2BIgv9oGJ86gnJM5Dri8NlLyAYhOwZFjgVd5wlZWRS+xePHBC1rqWtnYGBgYKhpqsTwFSOyQgIGoaidvXY7AwMDA8PLixcYGBgYGN59esPAwMDAoGnrwsDAwMCQGuzJwMDAwMiEZgA+jGJZarAnw8ObV1EMZ2BgYHh48yrccAYGBgYAg40ttqzdeHIAAAAASUVORK5CYII="; // Element IDs const FIELD_GUIDE_ID = "birb-field-guide"; @@ -2073,7 +2079,7 @@ module.exports = class PocketBird extends Plugin { let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index a181574..c0c2b99 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -621,9 +621,12 @@ } } + const HAT_WIDTH = 12; + const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -635,13 +638,15 @@ base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -650,18 +655,19 @@ /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ - function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { + function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding @@ -1877,7 +1883,7 @@ }`; const SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAgCAYAAABjE6FEAAAAAXNSR0IArs4c6QAABD9JREFUeJztnT9rFEEYh3+TWATE7hDcsxW7CBbmA0Qs0uSuSiloYSBgIRhCPkCQFIKCYNBKK6szjZWpbEyTziLY5k6RAwsjpDGvRXbWubmd3btzd2c293vgyGRvb9/Z25ln39l/BxBCCCGEkOlC+a4ACR8REdd7Sim2IVJb2HhrgE8B6djtZhMA0Ol2B8pV1IEQMqVITCuKpBVFQ+UsORYVvxVF8nl+XmRtbahcdnxCymTGdwVIPu1mExuNBjrt9lC5SvY/fcJGo5GUCak7FGCN8CWgTreLJ/3+wLQn/X4yBCaEkFIwh8Cf5+eTV1VD4LQ6VBmbEBIAkkLVsX0KyKwD5UfIlCEiZwf/jb9Vx/ctIB/yJ6RMLviuQN3Yv3HDS1yllBIR8XnpCS93IWRK0ZmPzv6YBRFSf7hHHwNTesyGqsfe6XAbkP+FDYjUAi0/7TwRqVyAFPCUknYGlENA4gHZ6bYEgLcTQHHsoNs/++no5F4Ibe55zRdy7lEtEgqYAMBOt6WLXk4AKaWSOoSW/dn9wkc/rSOZZ4HNL9NofNDTRMScp5QGYQ99jOkQEQmtIZLyeNB873Vb+xTwKJhdYWW7l0yj/9w4BWiK53DlPvAI2L79Onl/p9seOB5ThoxCEDAhGt8CzkCUUon0zjtXZpV8+yOFbAvnQkREZi5GA9PuPevhw+oMll6eAgCOf34DALxbjwb2MkXIaEjAGBTwraU2HjTf63kLi0tIzRCX+L4e/cLB8+teThiVxZVZJUsvT/FhdQZFSDBTgIgFdP9VegqtBYhYgjBklBpsjI3gW8AkbFa2e/JuPZr27Zwrv1CH66HgHALrOw9c75vyg3XMIY1Jhsmnv3tDAtbys2Pbw3HXOo0am4TDye6izC3vKV0GgLllv/LzLeCV7Z7XA3uu+HEiVJt+llnRWFg42V3E2o+PAIAXl28DAO4evh0pwNejXwAwUSqu46dloLaANToTTVkWQAnWln/i26t8+6ULuPp6mLgEZPa3kkXkzD7rJMGRBWgzt7yHmw8Pce3qpdTPWhtiIgH5FjAhmlDEpznZXRSzD9j9rQIBiav/T4UAYUgwDVt8mCD78i1gQkKmv7Ugaxc6wODIp6r27RQgaiTBXAEiPq5nS+j4yzEAoLG57/rsvyATSse3gAkJnf7WQtLA73x/A5y1fe8SNE9MhtzvciuWJiEtvzQam/uFrbhvARNCchGdhNgi1BIMuf+N9DzAeCXQ31rInK9I+SHjTLQpYLtORdeBEJKJOnh+/azDOUQYMrkC1BLKk2CZ4tGxkSK8qupACHGicDb0HhDhucJ8Gkbn6ePkqRi6XOYDCqwbvVPjl10HQkg+9hNzQu+PY/0splIKnaePk//NMkrMuvRys+Iz8yMkDOKbEYAa9MexfhPEHIra5SrIix/6l03IeadufXDs6/KcC6pgxX3HJ4ScL/4CWsLSrzMo7i0AAAAASUVORK5CYII="; const FEATHER_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlbENwjAQRf8hSiZIRQ+9WQNRUFIAKzACBSsAA1Ag1mAABqCCBomG3hQQ9OMEx4ZDNH5SikSJ3/fZ5wCJRCKRSPwZ0RzMWmtLAhGvQyUAi9mXP/aFaGjJRQQiguHihMvcFMJUVUYlAMuHixPGy4en1WmVQqgHYHkuZjiEj6a2/LjtYzTY0eiZbgC37Mxh1UN3sn/dr6cCz/LHB/DJj9s+2oMdbtdz6TtfFwQHcMvOInfmQNjsgchNWLXmdfK6gyioAu/6uKrsm1kWLAciKuCuey5nYuXAh234bdmZ6INIUw4E/Ix49xtjCmXfzLL8nY/ktdgnAKwxxgIoXIyqmAOwvIqfiN0ALNd21HYBO9XXGMAdnZTYyHWzWjQAAAAASUVORK5CYII="; - const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAC5JREFUKJFjYBgFgwEwYhH7j08NE6k2sKALnJCVReFbPH6M0zp0p6ADRgYGBgYAqu4FCZWdtIcAAAAASUVORK5CYII="; + const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAAAAXNSR0IArs4c6QAAAI5JREFUOI1jYBgFo2BIgv9oGJ86gnJM5Dri8NlLyAYhOwZFjgVd5wlZWRS+xePHBC1rqWtnYGBgYKhpqsTwFSOyQgIGoaidvXY7AwMDA8PLixcYGBgYGN59esPAwMDAoGnrwsDAwMCQGuzJwMDAwMiEZgA+jGJZarAnw8ObV1EMZ2BgYHh48yrccAYGBgYAg40ttqzdeHIAAAAASUVORK5CYII="; // Element IDs const FIELD_GUIDE_ID = "birb-field-guide"; @@ -2035,7 +2041,7 @@ let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index b34324f..3edea81 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -607,9 +607,12 @@ } } + const HAT_WIDTH = 12; + const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -621,13 +624,15 @@ base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -636,18 +641,19 @@ /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ - function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { + function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding @@ -1857,7 +1863,7 @@ }`; const SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAgCAYAAABjE6FEAAAAAXNSR0IArs4c6QAABD9JREFUeJztnT9rFEEYh3+TWATE7hDcsxW7CBbmA0Qs0uSuSiloYSBgIRhCPkCQFIKCYNBKK6szjZWpbEyTziLY5k6RAwsjpDGvRXbWubmd3btzd2c293vgyGRvb9/Z25ln39l/BxBCCCGEkOlC+a4ACR8REdd7Sim2IVJb2HhrgE8B6djtZhMA0Ol2B8pV1IEQMqVITCuKpBVFQ+UsORYVvxVF8nl+XmRtbahcdnxCymTGdwVIPu1mExuNBjrt9lC5SvY/fcJGo5GUCak7FGCN8CWgTreLJ/3+wLQn/X4yBCaEkFIwh8Cf5+eTV1VD4LQ6VBmbEBIAkkLVsX0KyKwD5UfIlCEiZwf/jb9Vx/ctIB/yJ6RMLviuQN3Yv3HDS1yllBIR8XnpCS93IWRK0ZmPzv6YBRFSf7hHHwNTesyGqsfe6XAbkP+FDYjUAi0/7TwRqVyAFPCUknYGlENA4gHZ6bYEgLcTQHHsoNs/++no5F4Ibe55zRdy7lEtEgqYAMBOt6WLXk4AKaWSOoSW/dn9wkc/rSOZZ4HNL9NofNDTRMScp5QGYQ99jOkQEQmtIZLyeNB873Vb+xTwKJhdYWW7l0yj/9w4BWiK53DlPvAI2L79Onl/p9seOB5ThoxCEDAhGt8CzkCUUon0zjtXZpV8+yOFbAvnQkREZi5GA9PuPevhw+oMll6eAgCOf34DALxbjwb2MkXIaEjAGBTwraU2HjTf63kLi0tIzRCX+L4e/cLB8+teThiVxZVZJUsvT/FhdQZFSDBTgIgFdP9VegqtBYhYgjBklBpsjI3gW8AkbFa2e/JuPZr27Zwrv1CH66HgHALrOw9c75vyg3XMIY1Jhsmnv3tDAtbys2Pbw3HXOo0am4TDye6izC3vKV0GgLllv/LzLeCV7Z7XA3uu+HEiVJt+llnRWFg42V3E2o+PAIAXl28DAO4evh0pwNejXwAwUSqu46dloLaANToTTVkWQAnWln/i26t8+6ULuPp6mLgEZPa3kkXkzD7rJMGRBWgzt7yHmw8Pce3qpdTPWhtiIgH5FjAhmlDEpznZXRSzD9j9rQIBiav/T4UAYUgwDVt8mCD78i1gQkKmv7Ugaxc6wODIp6r27RQgaiTBXAEiPq5nS+j4yzEAoLG57/rsvyATSse3gAkJnf7WQtLA73x/A5y1fe8SNE9MhtzvciuWJiEtvzQam/uFrbhvARNCchGdhNgi1BIMuf+N9DzAeCXQ31rInK9I+SHjTLQpYLtORdeBEJKJOnh+/azDOUQYMrkC1BLKk2CZ4tGxkSK8qupACHGicDb0HhDhucJ8Gkbn6ePkqRi6XOYDCqwbvVPjl10HQkg+9hNzQu+PY/0splIKnaePk//NMkrMuvRys+Iz8yMkDOKbEYAa9MexfhPEHIra5SrIix/6l03IeadufXDs6/KcC6pgxX3HJ4ScL/4CWsLSrzMo7i0AAAAASUVORK5CYII="; const FEATHER_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlbENwjAQRf8hSiZIRQ+9WQNRUFIAKzACBSsAA1Ag1mAABqCCBomG3hQQ9OMEx4ZDNH5SikSJ3/fZ5wCJRCKRSPwZ0RzMWmtLAhGvQyUAi9mXP/aFaGjJRQQiguHihMvcFMJUVUYlAMuHixPGy4en1WmVQqgHYHkuZjiEj6a2/LjtYzTY0eiZbgC37Mxh1UN3sn/dr6cCz/LHB/DJj9s+2oMdbtdz6TtfFwQHcMvOInfmQNjsgchNWLXmdfK6gyioAu/6uKrsm1kWLAciKuCuey5nYuXAh234bdmZ6INIUw4E/Ix49xtjCmXfzLL8nY/ktdgnAKwxxgIoXIyqmAOwvIqfiN0ALNd21HYBO9XXGMAdnZTYyHWzWjQAAAAASUVORK5CYII="; - const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAC5JREFUKJFjYBgFgwEwYhH7j08NE6k2sKALnJCVReFbPH6M0zp0p6ADRgYGBgYAqu4FCZWdtIcAAAAASUVORK5CYII="; + const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAAAAXNSR0IArs4c6QAAAI5JREFUOI1jYBgFo2BIgv9oGJ86gnJM5Dri8NlLyAYhOwZFjgVd5wlZWRS+xePHBC1rqWtnYGBgYKhpqsTwFSOyQgIGoaidvXY7AwMDA8PLixcYGBgYGN59esPAwMDAoGnrwsDAwMCQGuzJwMDAwMiEZgA+jGJZarAnw8ObV1EMZ2BgYHh48yrccAYGBgYAg40ttqzdeHIAAAAASUVORK5CYII="; // Element IDs const FIELD_GUIDE_ID = "birb-field-guide"; @@ -2015,7 +2021,7 @@ let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/dist/web/birb.js b/dist/web/birb.js index b34324f..3edea81 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -607,9 +607,12 @@ } } + const HAT_WIDTH = 12; + const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -621,13 +624,15 @@ base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -636,18 +641,19 @@ /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ - function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { + function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding @@ -1857,7 +1863,7 @@ }`; const SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAgCAYAAABjE6FEAAAAAXNSR0IArs4c6QAABD9JREFUeJztnT9rFEEYh3+TWATE7hDcsxW7CBbmA0Qs0uSuSiloYSBgIRhCPkCQFIKCYNBKK6szjZWpbEyTziLY5k6RAwsjpDGvRXbWubmd3btzd2c293vgyGRvb9/Z25ln39l/BxBCCCGEkOlC+a4ACR8REdd7Sim2IVJb2HhrgE8B6djtZhMA0Ol2B8pV1IEQMqVITCuKpBVFQ+UsORYVvxVF8nl+XmRtbahcdnxCymTGdwVIPu1mExuNBjrt9lC5SvY/fcJGo5GUCak7FGCN8CWgTreLJ/3+wLQn/X4yBCaEkFIwh8Cf5+eTV1VD4LQ6VBmbEBIAkkLVsX0KyKwD5UfIlCEiZwf/jb9Vx/ctIB/yJ6RMLviuQN3Yv3HDS1yllBIR8XnpCS93IWRK0ZmPzv6YBRFSf7hHHwNTesyGqsfe6XAbkP+FDYjUAi0/7TwRqVyAFPCUknYGlENA4gHZ6bYEgLcTQHHsoNs/++no5F4Ibe55zRdy7lEtEgqYAMBOt6WLXk4AKaWSOoSW/dn9wkc/rSOZZ4HNL9NofNDTRMScp5QGYQ99jOkQEQmtIZLyeNB873Vb+xTwKJhdYWW7l0yj/9w4BWiK53DlPvAI2L79Onl/p9seOB5ThoxCEDAhGt8CzkCUUon0zjtXZpV8+yOFbAvnQkREZi5GA9PuPevhw+oMll6eAgCOf34DALxbjwb2MkXIaEjAGBTwraU2HjTf63kLi0tIzRCX+L4e/cLB8+teThiVxZVZJUsvT/FhdQZFSDBTgIgFdP9VegqtBYhYgjBklBpsjI3gW8AkbFa2e/JuPZr27Zwrv1CH66HgHALrOw9c75vyg3XMIY1Jhsmnv3tDAtbys2Pbw3HXOo0am4TDye6izC3vKV0GgLllv/LzLeCV7Z7XA3uu+HEiVJt+llnRWFg42V3E2o+PAIAXl28DAO4evh0pwNejXwAwUSqu46dloLaANToTTVkWQAnWln/i26t8+6ULuPp6mLgEZPa3kkXkzD7rJMGRBWgzt7yHmw8Pce3qpdTPWhtiIgH5FjAhmlDEpznZXRSzD9j9rQIBiav/T4UAYUgwDVt8mCD78i1gQkKmv7Ugaxc6wODIp6r27RQgaiTBXAEiPq5nS+j4yzEAoLG57/rsvyATSse3gAkJnf7WQtLA73x/A5y1fe8SNE9MhtzvciuWJiEtvzQam/uFrbhvARNCchGdhNgi1BIMuf+N9DzAeCXQ31rInK9I+SHjTLQpYLtORdeBEJKJOnh+/azDOUQYMrkC1BLKk2CZ4tGxkSK8qupACHGicDb0HhDhucJ8Gkbn6ePkqRi6XOYDCqwbvVPjl10HQkg+9hNzQu+PY/0splIKnaePk//NMkrMuvRys+Iz8yMkDOKbEYAa9MexfhPEHIra5SrIix/6l03IeadufXDs6/KcC6pgxX3HJ4ScL/4CWsLSrzMo7i0AAAAASUVORK5CYII="; const FEATHER_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWIXtlbENwjAQRf8hSiZIRQ+9WQNRUFIAKzACBSsAA1Ag1mAABqCCBomG3hQQ9OMEx4ZDNH5SikSJ3/fZ5wCJRCKRSPwZ0RzMWmtLAhGvQyUAi9mXP/aFaGjJRQQiguHihMvcFMJUVUYlAMuHixPGy4en1WmVQqgHYHkuZjiEj6a2/LjtYzTY0eiZbgC37Mxh1UN3sn/dr6cCz/LHB/DJj9s+2oMdbtdz6TtfFwQHcMvOInfmQNjsgchNWLXmdfK6gyioAu/6uKrsm1kWLAciKuCuey5nYuXAh234bdmZ6INIUw4E/Ix49xtjCmXfzLL8nY/ktdgnAKwxxgIoXIyqmAOwvIqfiN0ALNd21HYBO9XXGMAdnZTYyHWzWjQAAAAASUVORK5CYII="; - const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAC5JREFUKJFjYBgFgwEwYhH7j08NE6k2sKALnJCVReFbPH6M0zp0p6ADRgYGBgYAqu4FCZWdtIcAAAAASUVORK5CYII="; + const HATS_SPRITE_SHEET = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAAAAXNSR0IArs4c6QAAAI5JREFUOI1jYBgFo2BIgv9oGJ86gnJM5Dri8NlLyAYhOwZFjgVd5wlZWRS+xePHBC1rqWtnYGBgYKhpqsTwFSOyQgIGoaidvXY7AwMDA8PLixcYGBgYGN59esPAwMDAoGnrwsDAwMCQGuzJwMDAwMiEZgA+jGJZarAnw8ObV1EMZ2BgYHh48yrccAYGBgYAg40ttqzdeHIAAAAASUVORK5CYII="; // Element IDs const FIELD_GUIDE_ID = "birb-field-guide"; @@ -2015,7 +2021,7 @@ let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/sprites/hats.png b/sprites/hats.png index 1840ac9..25500dd 100644 Binary files a/sprites/hats.png and b/sprites/hats.png differ diff --git a/src/application.js b/src/application.js index 5b4ad56..28e9095 100644 --- a/src/application.js +++ b/src/application.js @@ -237,7 +237,7 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { let petStack = []; let currentSpecies = DEFAULT_BIRD; let unlockedSpecies = [DEFAULT_BIRD]; - let currentHat = HAT.TOP_HAT; + let currentHat = HAT.VIKING_HELMET; // let visible = true; let lastPetTimestamp = 0; /** @type {StickyNote[]} */ diff --git a/src/hats.js b/src/hats.js index b71a083..a295e19 100644 --- a/src/hats.js +++ b/src/hats.js @@ -2,9 +2,12 @@ import Layer from "./animation/layer.js"; import { PALETTE } from "./animation/sprites.js"; import { getLayerPixels } from "./shared.js"; +const HAT_WIDTH = 12; + export const HAT = { - NONE: 'none', - TOP_HAT: 'top-hat' + NONE: "none", + TOP_HAT: "top-hat", + VIKING_HELMET: "viking-helmet", }; /** @@ -16,13 +19,15 @@ export function createHatLayers(spriteSheet) { base: [], down: [] }; - for (const hatName in HAT) { + for (let i = 0; i < Object.keys(HAT).length; i++) { + const hatName = Object.keys(HAT)[i]; if (hatName === 'NONE') { continue; } + const index = i - 1; const hatKey = HAT[hatName]; - const hatLayer = buildHatLayer(spriteSheet, hatKey, false); - const downHatLayer = buildHatLayer(spriteSheet, hatKey, false, 1); + const hatLayer = buildHatLayer(spriteSheet, hatKey, index, false); + const downHatLayer = buildHatLayer(spriteSheet, hatKey, index, false, 1); hatLayers.base.push(hatLayer); hatLayers.down.push(downHatLayer); } @@ -31,18 +36,19 @@ export function createHatLayers(spriteSheet) { /** * @param {string[][]} spriteSheet - * @param {string} hatName + * @param {string} hatName + * @param {number} hatIndex * @param {boolean} [outlineBottom=false] * @param {number} [yOffset=0] * @returns {Layer} */ -function buildHatLayer(spriteSheet, hatName, outlineBottom = false, yOffset = 0) { +function buildHatLayer(spriteSheet, hatName, hatIndex, outlineBottom = false, yOffset = 0) { const LEFT_PADDING = 6; const RIGHT_PADDING = 14; - const TOP_PADDING = 4 + yOffset; - const BOTTOM_PADDING = Math.max(0, 16 - yOffset); + const TOP_PADDING = 5 + yOffset; + const BOTTOM_PADDING = Math.max(0, 15 - yOffset); - const hatPixels = getLayerPixels(spriteSheet, 0, 12); + const hatPixels = getLayerPixels(spriteSheet, hatIndex, HAT_WIDTH); const paddedHatPixels = []; // Top padding